Amazon ec2 使用本地环境替换cloudformation模板中的变量
我想在cloudformation模板的userdata中替换一些变量,我不想将这些变量作为参数放入cloudformation中。 我该怎么做? 似乎cloudformation希望始终包含任何需要替换为参数的变量,但我觉得这不够灵活。所以,我不确定是否有其他人想出了这样做的方法 某些变量实际上不需要绑定到基础设施,但需要动态替换这些变量 例如,我有这个userdataAmazon ec2 使用本地环境替换cloudformation模板中的变量,amazon-ec2,amazon-cloudformation,user-data,Amazon Ec2,Amazon Cloudformation,User Data,我想在cloudformation模板的userdata中替换一些变量,我不想将这些变量作为参数放入cloudformation中。 我该怎么做? 似乎cloudformation希望始终包含任何需要替换为参数的变量,但我觉得这不够灵活。所以,我不确定是否有其他人想出了这样做的方法 某些变量实际上不需要绑定到基础设施,但需要动态替换这些变量 例如,我有这个userdata UserData: "Fn::Base64": !Sub | #
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash -xe
cat >> /tmp/docker_compose.yaml << EOF
version: '3.5'
services:
ngnix:
container_name: nginx
image: nginx:$TAG
restart: always
ports:
- 80:80
environment:
SERVER_ID: $SERVER_ID
AWS_REGION: $AWS_REGION
EOF
如何在不使用这些变量作为参数的情况下,在userdata中使用这些要替换的本地env值。我已经尝试了所有我能想到的,但我不能这样做
因此,如果有人想到了一种方法或黑客,他想利用互联网的力量
谢谢这里有一种通过脚本实现的方法,在某些情况下,此脚本可能会出现问题,但您必须进行测试和查看 我不希望环境变量在准备cloudformation脚本之外可用,所以我在一个脚本文件中完成了所有工作;加载环境变量并进行替换 注意:您需要在计算机上安装envsubt 我有3个文件要开始: 文件1是我的cloudformation脚本,其中我的每个参数都有一个默认值,表示为bash变量: cloudformation.yaml
Region
Default: $Region
InstanceType
Default: $InstanceType
Colour:
Default: $Colour
然后我有了我的变量文件:
variables.txt
InstanceType=t2.micro
Colour=Blue
Region=eu-west-1
然后,我有我的脚本来进行替换:
script.sh
#!/bin/bash
source variables.txt
export $(cut -d= -f1 variables.txt)
cat cloudformation.yaml | envsubst > subs_cloudformation.yaml
这是我的文件夹的内容:
cloudformation.yaml script.sh variables.txt
我确保我的script.sh具有正确的权限:
chmod +x script.sh
然后运行我的脚本:
./script.sh
“我的文件夹”的内容现在是:
cloudformation.yaml script.sh variables.txt subs_cloudformation.yaml
如果我查看subs_cloudformation.yaml文件的内容:
Region
Default: eu-west-1
InstanceType
Default: t2.micro
Colour:
Default: Blue
我现在可以运行cloudformation脚本,cloudformation将把这些默认值替换到我的模板中——因此,我们使用上面的脚本所做的就是为cloudformation提供默认值
当然,我刚刚给出了cloudformation模板的一个片段,您可以通过拥有一个dev.txt、qa.txt、production.txt变量文件并替换其中的任何一个来进一步改进它
编辑:不过,变量在文件中的位置并不重要,因此它可以默认在userdata或parameters中。。没关系。您还需要小心,这不会检查cloudformation文件中的每个变量是否都有匹配的环境变量。如果它不在变量文件中,则替换的值将为空。这就是像Ansible这样的部署工具的用武之地,您可以在cloudformation之外存储变量,并让Ansible替换变量。你愿意在bash中这样做吗?我知道ansible,但我现在更关注云信息。我非常了解ansible…bash在使用类似于
sed
?或者你在想什么?变量究竟来自哪个环境?它们是否在堆栈的“外部”,例如在从模板开始创建堆栈的机器上?或者其他地方?我不想安装任何东西或有一些特殊的先决条件..我可以很容易地使用sed
,但只想检查可能有一些我不知道的cloudformation功能..如果这不是本机可能的,那么就使用类似sed
Ok的东西-建议对您的问题进行编辑,因为您没有说明如果您不想安装任何应用程序或软件包,或者您知道如何使用sed
并且正在寻找替代方案,那么请检查您的系统上是否尚未安装envsubst。我知道它在一些linux系统上。
Region
Default: eu-west-1
InstanceType
Default: t2.micro
Colour:
Default: Blue