“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?的主要内容,如果未能解决你的问题,请参考以下文章