我正在尝试使用 EC2 用户数据设置环境变量,但我所做的一切似乎都不起作用
这是我试过的用户数据脚本
#!/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
最佳答案
为 EC2 实例定义环境变量的一种更可配置的方法是使用 Systems Manager Parameter Store .这种方法将使管理大量 EC2 实例的不同参数变得更加容易,它们都使用 AWS KMS 加密。以及纯文本。它还将允许在 EC2 实例级别上以最小的变化更改参数值。步骤如下。
- 在 EC2 Systems Manager 中定义字符串参数(使用 KMS 加密或未加密)参数存储。
- 在 EC2 承担的 IAM 角色中,授予访问参数存储所需的权限。
- 使用适用于 EC2 系统管理器的 AWS CLI 命令,读取参数并使用 Get-Parameter 导出到用户数据部分中的环境变量或 Get-Parameters AWS CLI 命令和 controlling command output根据需要。
例如使用 Get-Parameter命令检索 db_connection_string 参数(未加密)。
export DB_CONNECTION=$(aws --region=us-east-2 ssm get-parameter --name 'db_connection' --query 'Value')
注意:有关设置 AWS KMS key 、定义加密字符串、管理 IAM 策略等的更多详细信息,请参阅以下文章。
关于linux - 如何通过用户数据在 EC2 实例上设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205532/