我试图通过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没有更新。有人可以解释一下我做错了什么吗?
由于
答案 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
。