“aws cloudformation delete-stack”不能使用 SAM CLI 使用的 StackName?

Posted

技术标签:

【中文标题】“aws cloudformation delete-stack”不能使用 SAM CLI 使用的 StackName?【英文标题】:StackName used by SAM CLI can't be used by "aws cloudformation delete-stack"? 【发布时间】:2021-10-31 04:17:32 【问题描述】:

如果我使用 SAM 部署堆栈,后来决定删除与该堆栈关联的所有资源,我将如何做到这一点? 因为使用 SAM,

sam deploy --stack-name my_lambda_stack --image-repository $MY_AWS_ACCOUNT.dkr.ecr.us-west-2.amazonaws.com/mystack_images

一个普通的用户提供的字符串作为命令行参数提供。

但稍后,为了使用“aws cloudformation”CLI 删除包含所有相关资源的堆栈,

aws cloudformation delete-stack --stack-name my_lambda_stack

将无法正常工作,因为它需要一个唯一的 StackId,尽管手册页显示堆栈名称时令人困惑。

我的问题来自用户提供的堆栈名称,如何使用“aws cloudformation list-stacks”或“aws cloudformation describe-stacks”检索相应的堆栈 ID?

我是否必须编写一个脚本来一次解析输出一条记录?

我了解“aws”CLI 具有 --query 功能,但我不知道如何执行通配符匹配并使用“aws cloudformation list-stacks --query ...”将匹配的堆栈 ID 返回给我命令。

任何提示都会有所帮助。

谢谢,

杨 cloudformation新手

【问题讨论】:

【参考方案1】:

我正在回答我自己的问题,这应该可行:

aws cloudformation list-stacks --query 'StackSummaries[?StackName==`my_lambda_stack`]'.StackId --output text > stackId.txt

但是我还没有想出一种方法来使用--stack-status-filter 对那些DELETE_COMPLETE 的堆栈进行负过滤,所以我不会重复删除它们。

【讨论】:

【参考方案2】:

sam deploy 和您提供的aws cloudformation delete-stack 命令应该可以毫无问题地协同工作。删除堆栈支持堆栈名称或唯一 ID 作为输入。两者都应该工作。

请注意,堆栈名称的命名受到限制,并且不允许使用下划线。这让我想知道堆栈是否一开始就被部署了。

来自 AWS 文档:

堆栈名称只能包含字母数字字符(区分大小写)和连字符。它必须以字母字符开头,并且不能超过 128 个字符。

关于查询语法的问题:

aws cloudformation describe-stacks --stack-name myteststack --query 'Stacks[*].StackId'

返回堆栈 ID。可以选择添加 --output text 以将输出作为简单字符串。

【讨论】:

以上是关于“aws cloudformation delete-stack”不能使用 SAM CLI 使用的 StackName?的主要内容,如果未能解决你的问题,请参考以下文章