如何通过用户数据在 EC2 实例上设置环境变量

新手上路,请多包涵

我正在尝试使用 EC2s 用户数据设置环境变量,但我所做的一切似乎都不起作用

这是我尝试过的用户数据脚本

#!/bin/bash
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> /env.sh
source /env.sh

还有一个:

 #!/bin/bash
echo "#!/bin/bash" >> /env.sh
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-67323523.us-east-1.elb.amazonaws.com" >> /env.sh
chmod +x /env.sh
/env.sh

他们都没有做任何事情,如果我登录并发出命令 source /env.sh/env.sh 它可以工作。所以这一定是我想要做的禁止的事情。

这是 /var/log/cloud-init-output.log 使用 -e -x 的输出

+ echo 'export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com'
+ source /env.sh
++ export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com
++ HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com

尽管如此, echo $HOST_URL 是空的

根据要求,完整的 UserData 脚本

#!/bin/bash
set -e -x
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" >> /env.sh
source /env.sh
/startup.sh staging 2649

原文由 Gleeb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 688
1 个回答

为 EC2 实例定义环境变量的一种更可配置的方法是使用 Systems Manager Parameter Store 。这种方法将使管理大量 EC2 实例的不同参数变得更加容易,这些实例都使用 AWS KMS 以及纯文本加密。它还允许通过对 EC2 实例级别的最小更改来更改参数值。步骤如下。

  • EC2 Systems Manager Parameter Store 中定义字符串参数(使用 KMS 加密或未加密)。
  • 在 EC2 担任的 IAM 角色中,授予访问参数存储所需的权限。
  • 使用 EC2 System Manager 的 AWS CLI 命令,使用 Get-ParameterGet-Parameters AWS CLI 命令读取参数并导出到用户数据部分中的环境变量,并根据需要 控制命令输出

例如,使用 Get-Parameter 命令检索 db_connection_string 参数(未加密)。

 export DB_CONNECTION=$(aws --region=us-east-2 ssm get-parameter --name 'db_connection' --query 'Value')

注意:有关设置 AWS KMS 密钥、定义加密字符串、管理 IAM 策略等的更多详细信息,请参阅以下文章。

原文由 Ashan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题