Boto3 CloudFormation 状态

Posted

技术标签:

【中文标题】Boto3 CloudFormation 状态【英文标题】:Boto3 CloudFormation Status 【发布时间】:2017-11-25 20:59:17 【问题描述】:

是否可以获取 CloudFormation 堆栈的状态?如果有,怎么做?

我正在创建一个堆栈:

client = boto3.client('cloudformation',)
response = client.create_stack(
    StackName=stackname,
    ...
)

我可以在 CloudFormation Web UI 中看到堆栈成功创建。

我尝试通过以下方式获取状态:

print(client.describe_stacks(stack_name_or_id=hostname))

但这会引发异常:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "stack_name_or_id", must be one of: StackName, NextToken

所以我尝试等待堆栈部署并捕获异常:

while True:
    time.sleep(5)
    try:
        print(client.describe_stacks(stack_name_or_id=stackname))
    except botocore.exceptions.ParamValidationError:
        pass

但我一点反应都没有; print 语句永远不会被调用。

【问题讨论】:

【参考方案1】:

错误信息:

Unknown parameter in input: "stack_name_or_id", must be one of: StackName, NextToken

明确表示您传递的参数名称无效; stack_name_or_id.

在Boto3 describe_stacks中,预期的参数是:StackName

response = client.describe_stacks(
    StackName='string',
    NextToken='string'
)

对于正在运行的堆栈,您可以传递堆栈名称或堆栈 ID。但是对于已删除的堆栈,您必须传递堆栈 ID。

client.describe_stacks(StackName='mystack')

u'Stacks': [u'StackId': 'arn:aws:cloudformation:us-east-1:.......
  'content-type': 'text/xml', 
  'date': 'Thu, 22 Jun 2017 14:54:46 GMT'

【讨论】:

是的,我尝试使用堆栈 ID。同样的错误:输入中的未知参数:“stack_name_or_id”,必须是以下之一:StackName,NextToken 事情是;当我尝试获取状态时,它既没有运行也没有删除...... @KarimTabet,你没有抓住重点。你必须通过StackName,而不是stack_name_or_id。您关注的是参数值而不是参数名称。 是的。你是对的。完全没有抓住重点。对不起,我没有想清楚。

以上是关于Boto3 CloudFormation 状态的主要内容,如果未能解决你的问题,请参考以下文章

使用 boto3 列出 100 多个堆栈

使用 boto3 按状态过滤实例

创建没有资源的 CloudFormation 堆栈

boto3 EC2 脚本电子邮件:所有状态检查的一封电子邮件

无服务器框架:输出编译的 CloudFormation

有没有办法使用 boto3 中的集群名称检查 emr 集群状态?