cfn-init 指定自定义 json
cfn-init specify custom json
有没有办法告诉 cfn-init 使用从磁盘加载的自定义 JSON 文件?这样我就可以快速解决问题,否则更改 AWS::CloudFormation::Init
部分的唯一方法是删除堆栈并重新创建它。
我宁愿只更改我的 template.json
,然后告诉 cfn-init -f C:\template.json ...
这样它使用 C:\template.json
而不是从 169.254.169.254
获取模板,或者它明白了。
事实证明 cfn-init 确实接受一个文件,但该文件需要将 "Metadata"
键作为根键。
所以如果我们将其保存到 template.json
:
{
"AWS::CloudFormation::Init": {
"config": {
"files": {
"C:\Users\Administrator\Desktop\test-file": {
"source": "https://s3.us-east-2.amazonaws.com/example-bucket/example-file"
}
}
}
},
"AWS::CloudFormation::Authentication": {
"S3AccessCreds": {
"type": "S3",
"buckets": ["example-bucket"],
"roleName": "s3access"
}
}
}
然后我们可以执行cfn-init -v --region us-east-2 template.json
.
注意:不包括堆栈或资源,如果您使用cfn-init -v -s my_stack -r my_instance --region us-east-2 template.json
,您将得到:
Error: You cannot specify more than one input source for metadata
如果您将整个模板文件而不是 "Metadata" 作为根目录,您将得到:
Could not find 'AWS::CloudFormation::Init' key in template.json
有没有办法告诉 cfn-init 使用从磁盘加载的自定义 JSON 文件?这样我就可以快速解决问题,否则更改 AWS::CloudFormation::Init
部分的唯一方法是删除堆栈并重新创建它。
我宁愿只更改我的 template.json
,然后告诉 cfn-init -f C:\template.json ...
这样它使用 C:\template.json
而不是从 169.254.169.254
获取模板,或者它明白了。
事实证明 cfn-init 确实接受一个文件,但该文件需要将 "Metadata"
键作为根键。
所以如果我们将其保存到 template.json
:
{
"AWS::CloudFormation::Init": {
"config": {
"files": {
"C:\Users\Administrator\Desktop\test-file": {
"source": "https://s3.us-east-2.amazonaws.com/example-bucket/example-file"
}
}
}
},
"AWS::CloudFormation::Authentication": {
"S3AccessCreds": {
"type": "S3",
"buckets": ["example-bucket"],
"roleName": "s3access"
}
}
}
然后我们可以执行cfn-init -v --region us-east-2 template.json
.
注意:不包括堆栈或资源,如果您使用cfn-init -v -s my_stack -r my_instance --region us-east-2 template.json
,您将得到:
Error: You cannot specify more than one input source for metadata
如果您将整个模板文件而不是 "Metadata" 作为根目录,您将得到:
Could not find 'AWS::CloudFormation::Init' key in template.json