我在使用 aws cli 工具部署 aws SAM 应用程序时遇到以下错误。有谁知道为什么会发生以及如何解决它?
Error: Failed to create managed resources: An error occurred (ValidationError) when calling the CreateChangeSet operation: Stack [aws-sam-cli-managed-default] already exists and cannot be created again with the changeSet [InitialCreation].
我没有使用
aws-sam-cli-managed-default
作为 CloudFormation 堆栈名称/SAM 应用程序名称/S3_prefix/S3_bucket 名称。
version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
stack_name = "iot"
s3_bucket = "iot"
s3_prefix = "iot"
region = "us-east-2"
profile = "default"
confirm_changeset = true
capabilities = "CAPABILITY_NAMED_IAM"
我遇到了同样的问题:我没有正确传递堆栈名称。因此,它创建了一个默认值 “aws-sam-cli-management-default” ...并且正如消息所述,该值已经存在。
所以有两个选择:
您可以在 sam 命令中使用标志:“--stack-name YOUR_STACK_NAME”
或者使用 samconfig.toml 文件并检查该文件是否位于项目的根目录下,您可以在其中运行“sam deploy”命令。
当我尝试使用 aws codebuild 服务部署我的代码时,我面临同样的问题, 发生此错误是因为 samconfig.toml 文件的权限设置为只有 root 用户或具有 root 权限的用户,当您尝试
sam deploy
时,它无法读取 samconfig.toml,因此您需要执行您的带有 sudo
关键字的命令,然后它会引用 samconfig.toml 文件。
这是我的 buildSpec.yml 脚本,用于使用 sam 框架进行 aws CodeBuild 部署。
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
commands:
- echo 'setup AWS credentials..'
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set default_region $AWS_REGION
- aws configure set output json
- echo 'installing npm packages...'
- npm ci
pre_build:
commands:
- echo 'Building Sam folder...'
- sam build
build:
commands:
- echo 'Building Nest js...'
- npm run build
post_build:
commands:
- echo 'Deploying...'
- sudo sam deploy --parameter-overrides AWSSecretAccessKey=$AWS_SECRET_ACCESS_KEY AWSAccessKeyId=$AWS_ACCESS_KEY_ID AWSRegion=$AWS_REGION --no-confirm-changeset --no-fail-on-empty-changeset
artifacts:
files:
- template.yml
cache:
paths:
- node_modules/