如何在 Amazon EC2 中设置环境变量
How to set an environment variable in Amazon EC2
我在 AWS 控制台上为我的一个 EC2 实例创建了一个标签。
但是,当我查看服务器时,没有设置这样的环境变量。
同样的事情也适用于弹性豆茎。 env
显示我在控制台上创建的标签。
$ env
[...]
DB_PORT=5432
如何在 Amazon EC2 中设置环境变量?
您可以从元数据中检索此信息,然后 运行 您自己的设置环境命令。
您可以从元数据中获取实例 ID(详情请参见此处:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-retrieval)
curl http://169.254.169.254/latest/meta-data/instance-id
然后您可以使用预先安装的 AWS CLI(或将其安装在您的 AMI 上)调用 describe-tags
aws ec2 describe-tags --filters "Name=resource-id,Values=i-5f4e3d2a" "Name=Value,Values=DB_PORT"
然后就可以使用OS设置环境变量命令
export DB_PORT=/what/you/got/from/the/previous/call
您可以 运行 您的用户数据脚本中的所有内容。详情请看这里:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
按照Guy的指示,我写了一个小的shell脚本。此脚本使用 AWS CLI 和 jq
。它允许您将 AWS 实例和 AMI 标签导入为 shell 环境变量。
希望能帮到一些人。
我结合使用了以下工具:
- 安装jq库(sudo apt-get install -y jq)
- 安装 EC2 实例元数据查询工具
下面是代码的要点,以防我将来更新它:https://gist.github.com/marcellodesales/a890b8ca240403187269
######
# Author: Marcello de Sales (marcello.desales@gmail.com)
# Description: Create Create Environment Variables in EC2 Hosts from EC2 Host Tags
#
### Requirements:
# * Install jq library (sudo apt-get install -y jq)
# * Install the EC2 Instance Metadata Query Tool (http://aws.amazon.com/code/1825)
#
### Installation:
# * Add the Policy EC2:DescribeTags to a User
# * aws configure
# * Souce it to the user's ~/.profile that has permissions
####
# REboot and verify the result of $(env).
# Loads the Tags from the current instance
getInstanceTags () {
# http://aws.amazon.com/code/1825 EC2 Instance Metadata Query Tool
INSTANCE_ID=$(./ec2-metadata | grep instance-id | awk '{print }')
# Describe the tags of this instance
aws ec2 describe-tags --region sa-east-1 --filters "Name=resource-id,Values=$INSTANCE_ID"
}
# Convert the tags to environment variables.
# Based on https://github.com/berpj/ec2-tags-env/pull/1
tags_to_env () {
tags=
for key in $(echo $tags | /usr/bin/jq -r ".[][].Key"); do
value=$(echo $tags | /usr/bin/jq -r ".[][] | select(.Key==\"$key\") | .Value")
key=$(echo $key | /usr/bin/tr '-' '_' | /usr/bin/tr '[:lower:]' '[:upper:]')
echo "Exporting $key=$value"
export $key="$value"
done
}
# Execute the commands
instanceTags=$(getInstanceTags)
tags_to_env "$instanceTags"
最近,AWS Parameter Store 似乎是一个更好的解决方案。
现在甚至还有一个秘密管理器,它可以自动管理敏感配置,如数据库密钥等..
根据 Guy and PJ Bergeron 之前的解决方案,使用 SSM Parameter Store 查看此脚本。
如果您正在为您的 ec2 实例使用 linux 或 mac os,那么,
转到你的根目录并写入命令:
vim .bash_profile
您可以看到您的 bash_profile 文件,现在按 'i' 插入一行,然后添加
export DB_PORT="5432"
添加此行后您需要保存文件,因此按 'Esc' 按钮然后按 ':' 并在冒号写入 'w' 后将保存文件而不退出。
要退出,请在写入 'quit' 后再次按“:”,现在您将从文件中退出。要检查您的环境变量是否已设置或未设置,请编写以下命令:
python
>>>import os
>>>os.environ.get('DB_PORT')
>>>5432
我在 AWS 控制台上为我的一个 EC2 实例创建了一个标签。
但是,当我查看服务器时,没有设置这样的环境变量。
同样的事情也适用于弹性豆茎。 env
显示我在控制台上创建的标签。
$ env
[...]
DB_PORT=5432
如何在 Amazon EC2 中设置环境变量?
您可以从元数据中检索此信息,然后 运行 您自己的设置环境命令。
您可以从元数据中获取实例 ID(详情请参见此处:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-retrieval)
curl http://169.254.169.254/latest/meta-data/instance-id
然后您可以使用预先安装的 AWS CLI(或将其安装在您的 AMI 上)调用 describe-tags
aws ec2 describe-tags --filters "Name=resource-id,Values=i-5f4e3d2a" "Name=Value,Values=DB_PORT"
然后就可以使用OS设置环境变量命令
export DB_PORT=/what/you/got/from/the/previous/call
您可以 运行 您的用户数据脚本中的所有内容。详情请看这里:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
按照Guy的指示,我写了一个小的shell脚本。此脚本使用 AWS CLI 和 jq
。它允许您将 AWS 实例和 AMI 标签导入为 shell 环境变量。
希望能帮到一些人。
我结合使用了以下工具:
- 安装jq库(sudo apt-get install -y jq)
- 安装 EC2 实例元数据查询工具
下面是代码的要点,以防我将来更新它:https://gist.github.com/marcellodesales/a890b8ca240403187269
######
# Author: Marcello de Sales (marcello.desales@gmail.com)
# Description: Create Create Environment Variables in EC2 Hosts from EC2 Host Tags
#
### Requirements:
# * Install jq library (sudo apt-get install -y jq)
# * Install the EC2 Instance Metadata Query Tool (http://aws.amazon.com/code/1825)
#
### Installation:
# * Add the Policy EC2:DescribeTags to a User
# * aws configure
# * Souce it to the user's ~/.profile that has permissions
####
# REboot and verify the result of $(env).
# Loads the Tags from the current instance
getInstanceTags () {
# http://aws.amazon.com/code/1825 EC2 Instance Metadata Query Tool
INSTANCE_ID=$(./ec2-metadata | grep instance-id | awk '{print }')
# Describe the tags of this instance
aws ec2 describe-tags --region sa-east-1 --filters "Name=resource-id,Values=$INSTANCE_ID"
}
# Convert the tags to environment variables.
# Based on https://github.com/berpj/ec2-tags-env/pull/1
tags_to_env () {
tags=
for key in $(echo $tags | /usr/bin/jq -r ".[][].Key"); do
value=$(echo $tags | /usr/bin/jq -r ".[][] | select(.Key==\"$key\") | .Value")
key=$(echo $key | /usr/bin/tr '-' '_' | /usr/bin/tr '[:lower:]' '[:upper:]')
echo "Exporting $key=$value"
export $key="$value"
done
}
# Execute the commands
instanceTags=$(getInstanceTags)
tags_to_env "$instanceTags"
最近,AWS Parameter Store 似乎是一个更好的解决方案。
现在甚至还有一个秘密管理器,它可以自动管理敏感配置,如数据库密钥等..
根据 Guy and PJ Bergeron 之前的解决方案,使用 SSM Parameter Store 查看此脚本。
如果您正在为您的 ec2 实例使用 linux 或 mac os,那么,
转到你的根目录并写入命令:
vim .bash_profile
您可以看到您的 bash_profile 文件,现在按 'i' 插入一行,然后添加
export DB_PORT="5432"
添加此行后您需要保存文件,因此按 'Esc' 按钮然后按 ':' 并在冒号写入 'w' 后将保存文件而不退出。
要退出,请在写入 'quit' 后再次按“:”,现在您将从文件中退出。要检查您的环境变量是否已设置或未设置,请编写以下命令:
python
>>>import os
>>>os.environ.get('DB_PORT')
>>>5432