使用local env替换cloudformation模板中的变量

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

我有一些变量,我想在cloudformation模板的userdata中替换,我不想把这些变量作为参数放在cloudformation中。我怎样才能做到这一点?似乎cloudformation希望总是包含任何需要作为参数替换的变量,但我觉得这不够灵活。所以不确定是否有其他人想出办法来做到这一点。

某些变量并不需要与基础架构绑定,但需要动态替换这些变量。

例如,我有这个用户数据

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

我想在运行cloudformation命令的机器上设置env变量值

export TAG=1.9.9
export SERVER_ID=12
export AWS_REGION=us-east-1

如何在userdata中替换这些本地env值而不将这些变量作为参数。我已经尝试过所有我能想到的东西而且我无法做到这一点。

如果有人想到某种方式或黑客,那么想要利用互联网的力量。

谢谢

amazon-ec2 amazon-cloudformation user-data
1个回答
0
投票

这是通过脚本执行此操作的一种方法,可能存在此脚本会出现问题的情况,但您必须进行测试和查看。

我不希望在准备我的cloudformation脚本之外可以使用环境变量 - 所以我在一个脚本文件中完成了所有操作;加载环境变量和替换。

注意:您需要在计算机上安装envsubst。

我有3个文件开始:文件一是我的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.是

#!/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或参数中作为默认值。无关紧要。您还需要注意,这不会检查您的cloudformation文件中的每个变量是否都有匹配的环境变量。如果它不在您的变量文件中,则替换值将为空。

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