使用 AWS SSM 运行 命令的环境变量
Environment variables with AWS SSM Run Command
我正在将 AWS SSM 运行 命令与 AWS-运行ShellScript 文档一起用于 运行 AWS Linux 1 实例上的脚本。脚本的一部分包括使用环境变量。当我自己 运行 脚本时,一切都很好。但是当我 运行 使用 SSM 的脚本时,它看不到环境变量。
此变量需要传递给 Python 脚本。我本来一直在尝试 os.environ['VARIABLE'] 但没有效果。
我知道 AWS SSM 使用 root 权限,所以我在 root ~/.bashrc 文件中放了一行导出变量,但它仍然看不到变量。我自己运行的时候root用户就可以看到了。
是 AWS SSM 无法使用环境变量,还是我没有正确导出它?如果不可能,我将尝试使用 AWS KMS 来存储我的变量。
~/.bashrc
export VARIABLE="VALUE"
script.sh
"$VARIABLE"
安全很重要,因此我不想只将变量存储在脚本中。
SSM 不会打开实际的 SSH 会话,因此传递环境变量将不起作用。盒子上的守护程序 运行 是必不可少的,它可以接收您的请求并处理它们。这是一个非常基本的产品:它不支持 SSH 附带的任何标准功能,例如 SCP、端口转发、隧道、环境变量传递等。将您需要的值传递给脚本的另一种方法是将其存储在 AWS Systems Manager Parameter Store 中,并让您的脚本从存储中提取变量。
您需要更新您的实例角色权限才能访问您 运行 访问存储值的脚本的 ssm:GetParameters
。
我是我的 SSM 命令文档中的 运行 bash 脚本,所以我只是获取 profile/script 以准备好环境变量以供后续命令使用。例如,
"runCommand": [
"#!/bin/bash",
". /tmp/setEnv.sh",
"echo \"myVar: $myVar, myVar2: $myVar2\""
]
可以参考Can a shell script set environment variables of the calling shell? for sourcing your env variables. For python, you will have to parse your source profile/script, see Emulating Bash 'source' in Python
我对这个问题的解决方案:
set -o allexport; source /etc/environment; set +o allexport
-o allexport
允许导出 /etc/environment 中的所有变量。 +o allexport
禁用此功能。
有关详细信息,请参阅 Set builtin documentation
我已经使用 AWS CLI 命令测试了这个解决方案 aws ssm send-command
:
"commands": [
"set -o allexport; source /etc/environment; set +o allexport",
"echo $TEST_VAR > /home/ec2-user/app.log"
]
我正在将 AWS SSM 运行 命令与 AWS-运行ShellScript 文档一起用于 运行 AWS Linux 1 实例上的脚本。脚本的一部分包括使用环境变量。当我自己 运行 脚本时,一切都很好。但是当我 运行 使用 SSM 的脚本时,它看不到环境变量。 此变量需要传递给 Python 脚本。我本来一直在尝试 os.environ['VARIABLE'] 但没有效果。
我知道 AWS SSM 使用 root 权限,所以我在 root ~/.bashrc 文件中放了一行导出变量,但它仍然看不到变量。我自己运行的时候root用户就可以看到了。 是 AWS SSM 无法使用环境变量,还是我没有正确导出它?如果不可能,我将尝试使用 AWS KMS 来存储我的变量。
~/.bashrc
export VARIABLE="VALUE"
script.sh
"$VARIABLE"
安全很重要,因此我不想只将变量存储在脚本中。
SSM 不会打开实际的 SSH 会话,因此传递环境变量将不起作用。盒子上的守护程序 运行 是必不可少的,它可以接收您的请求并处理它们。这是一个非常基本的产品:它不支持 SSH 附带的任何标准功能,例如 SCP、端口转发、隧道、环境变量传递等。将您需要的值传递给脚本的另一种方法是将其存储在 AWS Systems Manager Parameter Store 中,并让您的脚本从存储中提取变量。
您需要更新您的实例角色权限才能访问您 运行 访问存储值的脚本的 ssm:GetParameters
。
我是我的 SSM 命令文档中的 运行 bash 脚本,所以我只是获取 profile/script 以准备好环境变量以供后续命令使用。例如,
"runCommand": [
"#!/bin/bash",
". /tmp/setEnv.sh",
"echo \"myVar: $myVar, myVar2: $myVar2\""
]
可以参考Can a shell script set environment variables of the calling shell? for sourcing your env variables. For python, you will have to parse your source profile/script, see Emulating Bash 'source' in Python
我对这个问题的解决方案:
set -o allexport; source /etc/environment; set +o allexport
-o allexport
允许导出 /etc/environment 中的所有变量。 +o allexport
禁用此功能。
有关详细信息,请参阅 Set builtin documentation
我已经使用 AWS CLI 命令测试了这个解决方案 aws ssm send-command
:
"commands": [
"set -o allexport; source /etc/environment; set +o allexport",
"echo $TEST_VAR > /home/ec2-user/app.log"
]