Cloudformation启动配置userdata文件

时间:2016-04-28 01:28:09

标签: amazon-web-services amazon-cloudformation

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

2 个答案:

答案 0 :(得分:0)

我还没有找到像其他产品一样指定userdata文件的方法。但是我的解决方法是将userdata文件上传到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>"
            ]
        ]
    }
}

答案 1 :(得分:0)

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

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

删除任何预先存在的&#39;拆分&#39;当前目录中的文件:

rm -f ./xa?

base64编码你的bootstrap脚本文件:

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

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

echo $BOOTSTRAP_BASE64_ENC | split -b 4096

调用&#39; aws cloudformation create-stack&#39;将拆分文件传递给上述参数:

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

在&#39;属性&#39;您可以从Launchconfig的部分重新组合传入的参数中的userdata文件,如下所示:

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