我正在使用 cfn-init 通过 CloudFormation Metadata 引导 EC2 Windows 2016 实例。
我的目标是在实例上创建一个 .properties 文件,其中每个属性行必须单独一行。我已经尝试了以下两种方法。但每次都没有创建多行,而是将所有的行连在一起。
我正在尝试创建的示例文件。
INSTALLER_UI=SILENT(沉默)
CONTROLLER_PORT="8080"
LISTEN_PORT="7070"
但每次都会创建的文件。
INSTALLER_UI=SILENTCONTROLLER_PORT="8130 "LISTEN_PORT="7913"
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\"
Cloudformation模板代码使用 !Join
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的。
非常感谢!
您可以使用 文体 其表示为 |
下面是我们一个模板的例子。
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==--