我在AWS控制台上为我的一个EC2实例创建了一个标记。
但是,当我查看服务器时,没有设置这样的环境变量。
同样适用于弹性豆茎。 env
显示我在控制台上创建的标签。
$ env
[...]
DB_PORT=5432
如何在Amazon EC2中设置环境变量?
答案 0 :(得分:25)
您可以从元数据中检索此信息,然后运行您自己的设置环境命令。
您可以从元数据中获取实例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调用describe-tags(或将其安装在您的AMI上)
aws ec2 describe-tags --filters "Name=resource-id,Values=i-5f4e3d2a" "Name=Value,Values=DB_PORT"
然后您可以使用OS set环境变量命令
export DB_PORT=/what/you/got/from/the/previous/call
您可以在用户数据脚本中运行所有这些操作。有关详细信息,请参阅此处:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
答案 1 :(得分:5)
我使用了以下工具的组合:
以下代码的要点如果我以后更新它: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 $2}')
# 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=$1
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"
答案 2 :(得分:2)
按照Guy给出的说明,我写了一个小的shell脚本。此脚本使用AWS CLI和jq
。它允许您将AWS实例和AMI标记导入为shell环境变量。
我希望它可以帮助一些人。
答案 3 :(得分:2)
答案 4 :(得分:0)
我通常通过运行UserData脚本在启动时将标记加载为环境变量。我根据实例将--query
和--filter
参数更改为describe-instances
调用,但脚本保持不变。 注意:以下示例排除了标记Name
和包含:
的标记 - 更改此行为以满足您的需求。
#!/bin/bash -v
apt-get update
apt-get -y install awscli
# add boot script which loads environment variables
cat > /etc/profile.d/export_instance_tags.sh << 'EndOfMessage'
# fetch instance info
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
INSTANCE_AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
INSTANCE_REGION="`echo \"$INSTANCE_AZ\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
# export instance tags
export_statement=$(aws ec2 describe-tags --region "$INSTANCE_REGION" --filters "Name=resource-id,Values=$INSTANCE_ID" --query 'Tags[?!contains(Key, `Name`) && !contains(Key, `:`)].[Key,Value]' --output text | sed -E 's/^([^\s\t]+)[\s\t]+([^\n]+)$/export \1="\2"/g')
eval $export_statement
# export instance info
export INSTANCE_ID
export INSTANCE_AZ
export INSTANCE_REGION
EndOfMessage
运行describe-tags
列出所有标签,将输出重新格式化为sed
的导出语句序列,然后使用eval
运行结果
答案 5 :(得分:-1)
如果您将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