您可以将此脚本添加到您的 cloud-init 用户数据中,以将 EC2 标签下载到本地文件:
#!/bin/sh
INSTANCE_ID=`wget -qO- http://instance-data/latest/meta-data/instance-id`
REGION=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone | sed 's/.$//'`
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/\1="\2"/' > /etc/ec2-tags
您需要在系统上安装 AWS CLI 工具:您可以在脚本之前的 cloud-config 文件中使用 packages 部分安装它们,使用已经包含它们的 AMI,或者添加 apt 或yum 脚本开头的命令。
为了访问 EC2 标签,您需要在实例的 IAM 角色中使用类似这样的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1409309287000",
"Effect": "Allow",
"Action": [
"ec2:DescribeTags"
],
"Resource": [
"*"
]
}
]
}
实例的 EC2 标签将以 /etc/ec2-tags 的格式提供:
FOO="Bar"
Name="EC2 tags with cloud-init"
您可以使用 . /etc/ec2-tags 将文件原样包含在 shell 脚本中,例如:
#!/bin/sh
. /etc/ec2-tags
echo $Name
标签是在实例初始化过程中下载的,所以它们不会反映后续的变化。
脚本和 IAM 政策基于 itaifrenkel 的回答。