【问题标题】:CloudFormation Template to accept parameter from external fileCloudFormation 模板接受来自外部文件的参数
【发布时间】:2020-06-02 13:08:47
【问题描述】:

我正在尝试实现相同的目标,但对于 Parameter Store。我的场景是,开发人员将提供一个带有键/值的 .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

不确定这里缺少什么。

【问题讨论】:

    标签: amazon-cloudformation aws-parameter-store


    【解决方案1】:

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

    【讨论】:

    • 感谢@Jason Wadsworth 的回复。你是说我应该有两个参数,一个是键,一个是值,然后在资源部分中引用它们?如-`{“AWSTemplateFormatVersion”:“2010-09-09”,“Parameters”:{“SSMParameterStore”:{“Description”:“SSM Parameter Store”,“Type”:“String”},“SSMParameterValue”:{ “描述”:“ssm 值”,“类型”:“字符串”} } 并将 SSMParameterStore/Value 引用到名称和值位置?或者它是错误的引用。
    • 这里的目标到底是什么?看起来您想传入几个值并将这些值存储在参数存储中。对吗?
    • 是的,但是列表很长而且是动态的。
    • 您希望做一些 CloudFormation 不适合做的事情。对于您想做的事情,您可以考虑使用 CDK,或者可能使用一些 CloudFormation 转换。
    • 谢谢,让我看看 CloudFormation 转换。顺便说一句,什么是 CDK?
    【解决方案2】:

    用一点进步来回答我自己的帖子。

    下面是工作模板。

    主模板 -

        {
    "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"
            }
    
    ]
    

    但问题是每次参数模板文件中有新的键/值时,我都必须手动更新主模板。 我仍然找不到动态执行此操作的方法,无论参数文件中有多少条目,我的模板都应该采用所有键/值并在 Parameter Store 中创建/更新资源。似乎编写 Python 或 Bash 包装器可以做到这一点。

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 2013-06-08
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多