python - Boto3 Cloudformation 错误:模板格式错误:不支持的结构
问题描述
我无法将参数加载到 python boto3 Cloudformation 客户端。
下面是我的参数文件:
[
{"ParameterKey": "pVpcId", "ParameterValue": "vpc-XXXXXX"},
{"ParameterKey": "pContact", "ParameterValue": "XDXDXX"},
{"ParameterKey": "pCC", "ParameterValue": "XXXXX" },
{"ParameterKey": "pFormat", "ParameterValue": "True"}
]
我通过以下方式将其加载到程序中:
with open(parameter_file, 'r') as infile:
parameters=ast.literal_eval(infile.read())
client = boto3.client('cloudformation',aws_access_key_id=access_key,aws_secret_access_key=secret_key,aws_session_token=session_token,region_name=region)
response = client.create_stack(
StackName=stack_name,
TemplateURL=stack_url,
Parameters=parameters
)
当我使用 Cloudformation 建立一个 boto3 客户端并调用它时,我收到下面描述的错误。调用没有参数,所以它肯定与参数文件有关。
Traceback (most recent call last):
File "cf_create_stack", line 85, in <module>
Parameters=parameters
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationError) when calling the CreateStack operation: Template format error: unsupported structure.
解决方案
因此 TemplateBody 参数需要 CloudFormation 模板文件的内容/字符串,而不仅仅是文件名。
以下应该可以令人满意地工作。
cf_template = open('batch-job-cft.yml').read()
cf_client.create_stack(StackName='Batch Job', TemplateBody=cf_template)
# OR
# Optimal usage would be as below
with open('batch-job-cft.yml', 'r') as cf_file:
cft_template = cf_file.read()
cf_client.create_stack(StackName='Batch Job', TemplateBody=cft_template)
推荐阅读
- php - PHP中是否有一种简短的方法来表达 $item->foo() 进行回调?
- javascript - casperjs 无法识别存储在 then 语句之间的全局变量
- javascript - 表单元素和相关标签
- apache-kafka - 无法将消息插入 Kafka
- typescript - 在打字稿中导出实用功能?
- angular - 如何将 ngFor 索引变量与哈希符号连接起来?
- python - AttributeError:“cStringIO.StringO”对象没有属性“getValue”
- jekyll - 在单个子目录中生成所有帖子
- c++ - 生成随机字符/数字
- flutter - Flutter Upgrade 破坏了按钮转换,使一些按钮不可见。