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