使用cfn-init中的命令模块在cloudformation中设置环境变量

时间:2016-09-22 11:02:06

标签: amazon-cloudformation

我试图通过cfn-init中的命令模块设置环境变量。

"commands": {
              "set-env": {
                "env": {
                  "HOSTNAME": "fb-iaas.elevatebilling.com"
                },
                "cwd": "~",
                "command": "echo \"$HOSTNAME\" > test.txt"
              }
            },

这是我在cfn-init.log

中看到的输出
2016-09-22 10:26:53,638 DEBUG Running command set-env
2016-09-22 10:26:53,639 DEBUG No test for command set-env
2016-09-22 10:26:53,655 INFO Command set-env succeeded
2016-09-22 10:26:53,655 DEBUG Command set-env output: 

但是环境变量HOSTNAME没有更新。有人可以解释一下我做错了什么吗?

由于

2 个答案:

答案 0 :(得分:1)

当你说变量没有更新时,你是怎么发现的?你打开了" test.txt"并阅读通过管道传输的内容,或者您​​将ssh插入实例并运行" echo $ HOSTNAME"?我之所以要问的原因是因为使用cfn-init(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html)运行命令的AWS文档为" env"选项:

  

env -   可选的。设置命令的环境变量。这个性质   覆盖现有环境,而不是附加现有环境。

根据我对此的解释和我的经验,使用" env"设置环境变量。仅存在于其所在的命令。如果你读了" test.txt"将变量设置为您想要的文件而不是当您运行" echo $ HOSTNAME"它是因为变量仅存在于命令中。我建议如果你想让环境变量保持不变,你可以使用" export"在Cloudformation模板的UserData部分中。

答案 1 :(得分:0)

AWS文档提供了Linux的语法。由于您的脚本以echo开头,因此我想您正在运行Windows。在这种情况下,环境变量语法应为%HOSTNAME%,而不是$HOSTNAME