You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中提取EC2实例的InstanceProfileArn并存储到变量

提取EC2实例的InstanceProfileArn并获取实例名

问题描述

需要在Shell脚本中获取EC2实例的实例名,已通过以下命令获取到IAM元数据的JSON输出:

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/info

返回的JSON格式如下:

{
  "Code":"Success",
  "LastUpdated":"date",
  "InstanceProfileArn" : "arn:aws:iam::123456789012:instance-profile/instance-name",
  "InstanceProfileId" : "AIPAJ2XQ7Yexample"
}

需要提取其中的InstanceProfileArn字段值,并进一步从中分离出实例名,存储到Shell变量中供后续使用。

解决方案

方法一:使用jq工具解析(推荐)

jq是专门处理JSON的工具,可读性和稳定性更强,需提前安装(如apt install jq或yum install jq):

# 1. 获取EC2元数据令牌
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# 2. 获取IAM信息并提取InstanceProfileArn
INSTANCE_PROFILE_ARN=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/info | jq -r '.InstanceProfileArn')

# 3. 从Arn中提取实例名(Arn最后一段为实例名,用/分割取最后一个元素)
INSTANCE_NAME=$(echo "$INSTANCE_PROFILE_ARN" | awk -F '/' '{print $NF}')

# 验证结果(可选)
echo "提取到的实例名: $INSTANCE_NAME"

方法二:纯文本工具解析(无需额外安装)

如果无法安装jq,可以用grep+sed组合处理:

# 1. 获取EC2元数据令牌
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# 2. 提取InstanceProfileArn
INSTANCE_PROFILE_ARN=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/info | grep -o '"InstanceProfileArn" : "[^"]*"' | sed -E 's/"InstanceProfileArn" : "([^"]*)"/\1/')

# 3. 提取实例名
INSTANCE_NAME=$(echo "$INSTANCE_PROFILE_ARN" | awk -F '/' '{print $NF}')

内容的提问来源于stack exchange,提问作者Tejaswini Reddy Puli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:40:45