阿里云ECS通过内网地址获取当前实例metadata数据

适用于阿里云内网 ECS,通过命令或 URL 获取当前实例的 ECS InstanceId。这是阿里云官方、稳定、免鉴权的做法,生产脚本里可以放心用。


1. 原理说明

阿里云在每台 ECS 内部都内置了 实例元数据服务(Metadata Service),通过一个仅内网可访问的保留 IP 提供实例自身信息:

100.100.100.200

这个地址只在 ECS 内部可访问,外部访问不到,也不需要 AK / Token(除非你启用了 IMDSv2 强制)。


2. 最常用方式(直接获取 ECS InstanceId)

2.1 curl

1
curl -s http://100.100.100.200/latest/meta-data/instance-id

输出示例:

1
i-bp1e3xxxxxxabcdef

这是你在 阿里云 控制台看到的 实例 ID,一模一样。


2.2 wget

1
wget -q -O - http://100.100.100.200/latest/meta-data/instance-id

3. 进阶:IMDSv2(更安全)

如果你的 ECS 开启了 IMDSv2(Metadata v2),直接 curl 会 401,需要先拿 Token。

1a7745391399b9c1336c0e5a181e9627.png

3.1 获取 Token

1
2
TOKEN=$(curl -s -X PUT "http://100.100.100.200/latest/api/token" \
-H "X-aliyun-ecs-metadata-token-ttl-seconds: 21600")

3.2 使用 Token 获取 InstanceId

1
2
curl -s -H "X-aliyun-ecs-metadata-token: $TOKEN" \
http://100.100.100.200/latest/meta-data/instance-id

建议:新脚本直接用 IMDSv2 写法,未来兼容性最好。


4. 常见相关元数据接口清册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 实例ID
/latest/meta-data/instance-id

# 实例名称
/latest/meta-data/instance-name

# 实例规格
/latest/meta-data/instance/instance-type

# 地域
/latest/meta-data/region-id

# 可用区
/latest/meta-data/zone-id

# VPC ID
/latest/meta-data/vpc-id

# 内网IP
/latest/meta-data/private-ipv4

# 公网IP(如有)
/latest/meta-data/eip-ipv4

示例:

1
curl -s http://100.100.100.200/latest/meta-data/region-id