堆栈 [aws-sam-cli-management-default] 已存在,无法使用变更集 [InitialCreation] 再次创建

问题描述 投票:0回答:2

问题

我在使用 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 名称。

我的 samconfig.toml 文件

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"
amazon-web-services amazon-s3 aws-cloudformation aws-cli aws-sam
2个回答
1
投票

我遇到了同样的问题:我没有正确传递堆栈名称。因此,它创建了一个默认值 “aws-sam-cli-management-default” ...并且正如消息所述,该值已经存在。

所以有两个选择:

  • 如果您不想为堆栈使用特定名称,请删除以前的同名堆栈
  • 您检查您的堆栈名称是否正确传递

您可以在 sam 命令中使用标志:“--stack-name YOUR_STACK_NAME”

或者使用 samconfig.toml 文件并检查该文件是否位于项目的根目录下,您可以在其中运行“sam deploy”命令。


0
投票

当我尝试使用 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/
© www.soinside.com 2019 - 2024. All rights reserved.