Cloudformation 启动配置用户数据文件

Cloudformation launch config userdata file

在使用云形成模板编写启动配置脚本时是否要使用文件?我的启动配置对于 4096 个字符的限制来说太大了。 cli允许这个,terraformer允许这个,创建启动配置的界面也允许这个。

我还没有找到像在其他产品中那样指定用户数据文件的方法。但是,我的解决方法是将用户数据文件上传到 s3,然后下载模板中的用户数据并 运行 它。 这是我的模板中适用的 UserData 部分。 这是一个 powershell 示例。

    "UserData": {
    "Fn::Base64": {
        "Fn::Join": [
            "\n",
            [
                "<powershell>",
                "Read-S3Object -BucketName deployment -Key userdata/user-data.ps1 -File 'c:/temp/userdata.ps1'  -Region us-west-2",
                "Invoke-Expression 'c:/temp/userdata.ps1'",
                "Remove-Item -Recurse -Force C:/temp",
                "</powershell>"
            ]
        ]
    }
}

假设您可以在 linux/mac 系统上预处理 bootstrap 用户数据文件并通过 cli 调用 cloudformation,您可以执行以下操作。

首先,在您的 cloudformation 模板中创建多个参数以接受输入。我将这些参数称为 UserData、UserData2、UserData3 和 UserData4。

删除当前目录中任何先前存在的 'split' 文件:

rm -f ./xa?

base64 编码您的 bootstrap 脚本文件:

BOOTSTRAP_BASE64_ENC=$(base64 -w0 ${GENERATED_USERDATA_FILE_PATH})

将base64编码后的文件内容拆分成4096字节的部分:

echo $BOOTSTRAP_BASE64_ENC | split -b 4096

调用'aws cloudformation create-stack'时将拆分文件传递给上述参数:

ParameterKey=UserData,ParameterValue=$(cat xaa) ParameterKey=UserData2,ParameterValue=$(cat xab) ParameterKey=UserData3,ParameterValue=$(cat xac) ParameterKey=UserData4,ParameterValue=$(cat xad)

在 Launchconfig 的 'Properties' 部分,您可以从传入的参数中重新组合用户数据文件,如下所示:

"UserData" : { "Fn::Join" : [ "", [ { "Ref" : "UserData" }, { "Ref" : "UserData2" }, { "Ref" : "UserData3" }, { "Ref" : "UserData4" }]]},