簡體   English   中英

針對 LocalStack 運行 CDK 引導程序失敗並出現憑據錯誤

[英]Running CDK bootstrap against LocalStack fails with credentials error

我在 docker 中運行 LocalStack 並嘗試將 CDK 資源部署到其中。

LocalStack 似乎運行正常:

docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED      STATUS      PORTS                                                                                                                                                                                                             NAMES
1cbda0d0c6c5   localstack/localstack:latest   "docker-entrypoint.sh"   2 days ago   Up 2 days   127.0.0.1:53->53/tcp, 127.0.0.1:443->443/tcp, 127.0.0.1:4510-4530->4510-4530/tcp, 127.0.0.1:4566->4566/tcp, 127.0.0.1:4571->4571/tcp, 127.0.0.1:53->53/udp, 5678/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   localstack_main

我可以使用 awslocal 成功地將資源部署到它:

infra> awslocal s3api create-bucket --bucket my-bucket
Location: /my-bucket

infra> awslocal s3api list-buckets
Buckets:
- CreationDate: '2021-11-15T10:28:03+00:00'
  Name: my-bucket
Owner:
  DisplayName: webfile
  ID: bcaf1ffd86f41161ca5fb16fd081034f

憑據存儲在命名配置文件中:

infra> echo $AWS_PROFILE
LS

infra> cat ~/.aws/config
[default]
region=eu-west-2
output=yaml

[profile LS]
region=eu-west-2
output=yaml

infra> cat ~/.aws/credentials
[default]
aws_access_key_id=test
aws_secret_access_key=test

[LS]
aws_access_key_id=test
aws_secret_access_key=test

但是,我面臨的問題是當我嘗試將 CDK 介紹給它時。 我的堆棧沒有使用環境。 我想讓它與環境無關。

const app = new cdk.App();
new InfrastructureStack(app, 'my-stack', {});

當我運行cdklocal bootstrapcdklocal bootstrap --profile LS它返回以下錯誤:

Unable to resolve AWS account to use. It must be either configured when you define your CDK Stack, or through the environment

從文檔中,我期待一個與環境無關的堆棧將引導程序資源部署到默認帳戶和區域中。

我也嘗試過明確使用帳戶 000000000000,因為我看到有人使用cdklocal bootstrap --profile LS aws://000000000000/eu-west-2導致此不同的錯誤:


 ⏳  Bootstrapping environment aws://000000000000/eu-west-2...
 ❌  Environment aws://000000000000/eu-west-2 failed bootstrapping: Error: Need to perform AWS calls for account 000000000000, but no credentials have been configured
    at SdkProvider.forEnvironment (/Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/lib/api/aws-auth/sdk-provider.ts:149:46)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at Function.lookup (/Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/lib/api/bootstrap/deploy-bootstrap.ts:30:17)
    at Bootstrapper.legacyBootstrap (/Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/lib/api/bootstrap/bootstrap-environment.ts:60:21)
    at /Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:463:24
    at async Promise.all (index 0)
    at CdkToolkit.bootstrap (/Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:460:5)
    at initCommandLine (/Users/willem/.nvm/versions/node/v14.16.1/lib/node_modules/aws-cdk/bin/cdk.ts:267:9)
Need to perform AWS calls for account 000000000000, but no credentials have been configured

編輯:值得注意的是,如果我完全繞過引導並只運行cdlocal deploy |,也會出現同樣的問題。 cdklocal deploy --profile LS 我還在 CDK 源代碼中指定了這樣的環境:

const {
  CDK_DEFAULT_ACCOUNT = '0000000000',
  CDK_DEFAULT_REGION = 'eu-west-2',
} = process.env;

new InfrastructureStack(app, 'my-stack', {
  env: { account: CDK_DEFAULT_ACCOUNT, region: CDK_DEFAULT_REGION },
});

語境:

  • Mac 操作系統大蘇爾
  • ZSH 5.8
  • AWS版本:aws-cli/2.2.40 Python/3.8.8 Darwin/20.6.0 exe/x86_64提示/關閉
  • CDK 版本 1.132.0

我剛剛花了幾個小時調試同樣的問題。 當我運行 cdk bootstrap --profile XXX -v(-v 標志顯示更多日志信息)時,我看到一個錯誤,它試圖從位於 .cdk/chache/account_partitions.json 的緩存文件中獲取默認 AWS 帳戶

該文件包含以下格式的其他配置文件列表:

"AccessKey": {
      "accountId": "awsAccountNumber",
      "partition": "aws"

  } 

當我在那里添加我的個人資料信息時,引導操作完成。

這個緩存文件是什么時候更新的,怎么更新的我還沒有搞清楚,不過至少解決了第一個問題。

我知道這是一個舊帖子,但它可能會對其他人有所幫助......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM