我试图在 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
函数内部这样使用参数 sources
和 files
节?
我认为你不能这样做。
然而, 变通办法 将会是使用 命令 节。
我可以 示意 在使用 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
提供的工作肯定。