CloudFormation 模板接受来自外部文件的参数

CloudFormation Template to accept parameter from external file

除了 Parameter Store,我正在尝试实现相同的目标。我的方案是,开发人员将提供一个带有 key/value 的 .json 文件。 CloudFormation 模板应使用该文件根据作为 json 文件创建的条目创建 Parameter Store 资源。

主模板-

    {
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
    "SSMParameterStore": {
        "Description": "SSM Parameter Store",
        "Type": "String"
    }
},
"Resources": {
        "InputParameters": {
            "Type": "AWS::SSM::Parameter",
            "Properties": {
                "Name": {"Ref": "ParameterKey"},
                "Type": "String",
                "Value": {"Ref": "ParameterValue"}
            }
        }
    }
}

输入模板-

[{
"ParameterKey": "KeyPairName",
"ParameterValue": "MyKey"
},
{
"ParameterKey": "InstanceType",
"ParameterValue": "m1.micro"
}
]

命令:

aws cloudformation create-stack --stack-name test --template-body file:///home/user/Documents/Work/training/test/templt.json --parameters file:///home/user/Documents/Work/training/test/test.json --region us-east-1

输出:

An error occurred (ValidationError) when calling the CreateStack operation: Parameters: [SSMParameterStore] must have values

不确定这里缺少什么。

您的模板有一个参数 SSMParameterStore,但您传入的是 KeyPairNameInstanceType

回答我自己的 post 有点进步。

下面是工作模板。

主模板 -

    {
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
    "KeyPairName": {
        "Description": "ssm key",
        "Type": "String"
    },
    "KeyPairValue": {
        "Description": "Value",
        "Type": "String"
    },
    "KeyPairName1": {"Description": "ssm key", "Type": "String"},
    "KeyPairValue1": {"Description": "ssm key", "Type": "String"}
},

"Resources": {
        "InputParameters": {
            "Type": "AWS::SSM::Parameter",
            "Properties": {
                "Name": {"Ref": "KeyPairName"},
                "Type": "String",
                "Value": {"Ref": "KeyPairValue"}
            }
    },
        "InputParamters": {
        "Type": "AWS::SSM::Parameter",
        "Properties": {
            "Name": {"Ref": "KeyPairName1"},
            "Type": "String",
            "Value": {"Ref": "KeyPairValue1"}
        }
    }

}
}

参数模板-

    [
    {
        "ParameterKey": "KeyPairName",
        "ParameterValue": "/config/dev/ms/FIRST_NAME"
        },
        {
        "ParameterKey": "KeyPairValue",
        "ParameterValue": "MY_F_NAME"
        },
        {
        "ParameterKey": "KeyPairName1",
        "ParameterValue": "/config/dev/ms/LAST_NAME"
        },
        {
        "ParameterKey": "KeyPairValue1",
        "ParameterValue": "MY_L_NAME"
        }

]

但问题是每次参数模板文件中有新的key/value时,我都必须手动更新主模板。 我仍然找不到动态执行此操作的方法,无论参数文件中的条目数量如何,我的模板都应采用参数存储中的所有 key/value 和 create/update 资源。似乎写一个 Python 或 Bash 包装器可能会做到这一点。