使用boto3创建CloudFormation栈时Waiter触发参数验证错误
解决boto3 CloudFormation Waiter参数验证错误
嘿,我之前也踩过这个坑!这个错误的原因很明确:你把WaiterConfig当成了wait()方法的参数传进去,但CloudFormation的stack_create_complete waiter的wait()方法根本不接受这个参数——它只认StackName和可选的NextToken。
正确的处理方式
Waiter的配置(比如超时时间、轮询间隔)应该通过修改waiter实例的config属性来设置,而不是传给wait()方法。给你一个修正后的代码示例:
import os import boto3 # 初始化CloudFormation客户端 client = boto3.client( 'cloudformation', aws_access_key_id=os.environ["AWS_ID"], aws_secret_access_key=os.environ["AWS_KEY"] ) # 获取栈创建完成的waiter waiter = client.get_waiter('stack_create_complete') # 自定义等待配置(可选,按需设置) # max_attempts:最多轮询次数,默认是20 # delay:每次轮询的间隔秒数,默认是30 waiter.config.max_attempts = 60 waiter.config.delay = 10 # 调用wait方法,只传允许的参数 waiter.wait( StackName=os.environ["SYSTEM_NAME"], # 如果有需要的话再传NextToken,否则可以去掉这一行 # NextToken=os.environ.get("NEXT_TOKEN") )
为什么之前的代码会报错?
boto3不同服务的waiter参数规则不一样,有些服务的wait()方法允许传入WaiterConfig,但CloudFormation的这个waiter并不支持。它的wait()方法签名里只有StackName和NextToken两个参数,所以传其他参数就会触发参数验证错误。
如果不需要自定义等待逻辑,甚至可以直接简化成:
waiter.wait(StackName=os.environ["SYSTEM_NAME"])
内容的提问来源于stack exchange,提问作者NonCreature0714
相关产品推荐
相关产品推荐

