【问题标题】:Environment variables with AWS SSM Run Command使用 AWS SSM 运行命令的环境变量
【发布时间】:2022-05-14 18:31:33
【问题描述】:

我正在使用 AWS SSM Run Command 和 AWS-RunShellScript 文档在 AWS Linux 1 实例上运行脚本。部分脚本包括使用环境变量。当我自己运行脚本时,一切都很好。但是当我用 SSM 运行脚本时,它看不到环境变量。 此变量需要传递给 Python 脚本。我最初一直在尝试 os.environ['VARIABLE'] 没有效果。

我知道 AWS SSM 使用 root 权限,所以我在根 ~/.bashrc 文件中放了一行导出变量,但它仍然看不到变量。当我自己运行它时,root用户可以看到它。 AWS SSM 无法使用环境变量,还是我没有正确导出它?如果不可能,我将尝试使用 AWS KMS 来存储我的变量。

~/.bashrc

export VARIABLE="VALUE"

脚本.sh

"$VARIABLE"

安全性很重要,因此我不想只将变量存储在脚本中。

【问题讨论】:

    标签: amazon-web-services environment-variables aws-ssm


    【解决方案1】:

    SSM 不会打开实际的 SSH 会话,因此无法传递环境变量。在盒子上运行一个守护进程来接收您的请求并处理它们是必不可少的。这是一个非常基本的产品:它不支持 SSH 附带的任何标准功能,例如 SCP、端口转发、隧道、传递环境变量等。将所需的值传递给脚本的另一种方法是将其存储在 AWS Systems Manager Parameter Store 中,并让您的脚本从存储中提取变量。
    您需要更新您的实例角色权限才能访问ssm:GetParameters,以便您运行的脚本访问存储的值。

    【讨论】:

    • 感谢您的解释。由于无法处理生产实例,我将研究是否可以使用 Parameter Store 或 KMS。
    【解决方案2】:

    我在我的 SSM 命令文档中运行 bash 脚本,所以我只是获取配置文件/脚本以使 env 变量准备好供后续命令使用。例如,

    "runCommand": [
          "#!/bin/bash",
          ". /tmp/setEnv.sh",
          "echo \"myVar: $myVar, myVar2: $myVar2\""
    ]
    

    您可以参考Can a shell script set environment variables of the calling shell? 获取您的环境变量。对于 python,您必须解析您的源配置文件/脚本,请参阅Emulating Bash 'source' in Python

    【讨论】:

      【解决方案3】:

      我对这个问题的解决方案:

      设置-o allexport;源 /etc/环境; 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"
      ]
      

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 2020-04-26
        • 1970-01-01
        • 2021-07-01
        • 2013-02-20
        • 1970-01-01
        • 2020-02-25
        • 2020-06-20
        • 2016-11-04
        相关资源
        最近更新 更多