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

Amazon cloudformation 在cfn init中使用命令模块在cloudformation中设置环境变量,amazon-cloudformation,Amazon Cloudformation,我试图通过cfninit中的commands模块设置环境变量 "commands": { "set-env": { "env": { "HOSTNAME": "fb-iaas.elevatebilling.com" }, "cwd": "~", "command": "echo \"$HOSTNAME\"

我试图通过cfninit中的commands模块设置环境变量

"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不会得到更新。有人能解释一下我做错了什么吗


谢谢当你说变量没有更新时,你是怎么发现的?您是否打开了“test.txt”并读取了通过管道传输到它的内容,或者您是否使用ssh连接到实例并运行了“echo$HOSTNAME”?我之所以问这个问题,是因为AWS文档在使用cfn init()运行命令时对“env”选项这样说:

环境- 可选。设置命令的环境变量。此属性 覆盖而不是附加现有环境


根据我对此的解释和我的经验,使用“env”设置的环境变量只存在于它所在的命令中。如果在“test.txt”文件中读取到变量设置为所需的值,但在运行“echo$HOSTNAME”时没有设置,这是因为该变量仅用于命令。我建议,如果希望环境变量保持不变,可以使用Cloudformation模板的UserData部分中的“导出”来设置它们。

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