首页 > 解决方案 > CloudFormation 初始化 -> 基于内容创建“文件” -> 无法创建具有多行内容的文件

问题描述

我正在使用 cfn-init 通过 CloudFormation 元数据引导 EC2 Windows 2016 实例。

我的目标是在实例上创建一个 .properties 文件,其中每个属性行必须位于单独的行上。我已经尝试过以下两种方法。但是每次都不是创建多行,而是将所有行连接起来。

我正在尝试创建的示例文件:

INSTALLER_UI=静音

CONTROLLER_PORT=\"8080\"

LISTEN_PORT=\"7070\"

但是每次创建的文件:

INSTALLER_UI=SILENTCONTROLLER_PORT="8130"LISTEN_PORT=\"7913\"

使用 !Sub 的 Cloudformation 模板代码

Metadata:
  AWS::CloudFormation::Init:
    config
      - 01InstallMyAgent
    01_InstallMyAgent:
      files:
        "D:\\installers\\Agent\\agent.properties":
           content: !Sub |+
             INSTALLER_UI=SILENT
             CONTROLLER_PORT="8130"
             LISTEN_PORT=\"7913\"

使用 !Join 的 Cloudformation 模板代码

Metadata:
  AWS::CloudFormation::Init:
    config
      - 01InstallMyAgent
    01_InstallMyAgent:
      files:
        "D:\\installers\\Agent\\agent.properties":
          content: !Join ["\n",
            [
              "INSTALLER_UI=SILENT",
              'CONTROLLER_PORT=\"8130\"',
              'LISTEN_PORT=\"7913\"',
            ],
          ]

我也试过用“”作为分隔符加入,并在每行的末尾附加“\n”,但绝对没有运气。

问题2:也请。建议一种以某种方式在本地测试上述代码的方法。现在我只需要执行堆栈,RDP 进入 EC2 实例并检查文件内容,只是看到我的小改动失败了。无需实际创建实例即可对此进行测试的任何方法。谢谢...

问题 3:是否有任何 Windows cloudformation 示例存储库。因为那很难找到。我找到的几乎所有示例都是针对 linux 的。

非常感谢 !!

标签: windowsamazon-web-servicesamazon-cloudformationbootstrapping

解决方案


您可以使用指标所表示的文字样式|。这是我们模板之一的示例:

        UserData:
          Fn::Base64: !Sub |
            Content-Type: multipart/mixed; boundary="==BOUNDARY==" 
            MIME-Version: 1.0 

            --==BOUNDARY== 
            MIME-Version: 1.0 
            Content-Type: text/x-shellscript; charset="us-ascii"

            #!/bin/bash
            yum install -y aws-cli
            AUTH_DATA=$(aws secretsmanager get-secret-value --secret-id stk-docker-repository-stage --region ${AWS::Region} --query SecretString --output text)
            cat <<EOT >> /etc/ecs/ecs.config
            ECS_DISABLE_IMAGE_CLEANUP=false
            ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=2m
            ECS_IMAGE_CLEANUP_INTERVAL=10m
            ECS_IMAGE_MINIMUM_CLEANUP_AGE=10m
            ECS_NUM_IMAGES_DELETE_PER_CYCLE=5
            ECS_RESERVED_MEMORY=32
            ECS_ENGINE_AUTH_TYPE=docker
            ECS_ENGINE_AUTH_DATA={"stk40-docker-stage-dev-local.bahnhub.tech.rz.db.de":$AUTH_DATA}
            EOT

            --==BOUNDARY==
            Content-Type: text/x-shellscript; charset="us-ascii"

            #!/bin/bash
            #upgrade der EC2
            yum upgrade -y
            yum install -y wget
            yum install -y git
            yum install -y aws-cli
            yum install -y jq

            <cut>            
            --==BOUNDARY==--

推荐阅读