cloudformation-如何在AWS::CloudFormation::Init部分的sources中使用Ref?

问题描述 投票:0回答:1

我试图在 AWS::CloudFormation::Init 取一个像下面这样的参数。

"Parameters" : {
    "Environment" : {
            "Description" : "The Environment",
            "Type" : "String",
            "AllowedValues" : [
                "DEV",
                "QA",
                "UAT",
                "PROD"
            ]
        }
}

下面是我的Metadata部分。

"LaunchTemplate": {
    "Type": "AWS::EC2::LaunchTemplate",
        "Metadata": {
            "Comment" : "Install application",
            "AWS::CloudFormation::Init" : {
                    "configSets" : {
                        "full_install" : [ "prepare", "app-deployment" ]
                    },
            "app-deployment" : {
                    "sources": {
                        "Fn::Join":["",["/app/",{"Ref": "Environment"},"/appname"]] : "https://xyz.s3.amazonaws.com/appname.tar"
                    },
                    "files": {
                        "Fn::Join":["",["/opt/",{"Ref": "Environment"},"/index.html"]] : {
                    "content" : "<html><title>HelloTitle</title><body><h1>header H1</h1></body></html>"
                }

这是不工作的。我可以用 Ref 函数内部这样使用参数 sourcesfiles 节?

json amazon-web-services amazon-cloudformation
1个回答
2
投票

我认为你不能这样做。

然而, 变通办法 将会是使用 命令 节。

我可以 示意 在使用 yaml (这是我个人使用的)包括 多行 文件。

commands: 

  04_setup_index_html:
    command: !Sub |
      mkdir -p /opt/${Environment}

      echo "<html><title>HelloTitle</title><body><h1>header H1</h1></body></html>" \
        > /opt/${Environment}/index.html

  05_setup_index2_html_multiline:
    command: !Sub |
      mkdir -p /opt/${Environment}

      cat >/opt/${Environment}/index2.html << EOL
      <html>
          <title>HelloTitle</title>
          <body>
            <h1>header H1</h1>
          </body>
      </html>
      EOL

这样你就可以根据模板动态地创建你的文件和文件夹。Parameters.

当然也可以在 json但我现在还没有一个测试过的工作实例。在 yaml 提供的工作肯定。

© www.soinside.com 2019 - 2024. All rights reserved.