您可以从实例元数据访问实例的标签。通过从实例元数据访问标签,您无需再使用 DescribeInstances
或 DescribeTags
API 调用来检索标签信息,这可以减少每秒的 API 事务量,并允许您的标签检索随您控制的实例数量扩展。此外,在实例上运行的本地进程可以直接从实例元数据中查看实例的标签信息。
默认情况下,实例元数据中不提供标签;您必须明确允许访问。您可以在实例启动时或启动后在正在运行或停止的实例上允许访问。您还可以通过在启动模板中指定标签来允许访问标签。使用模板启动的实例允许访问实例元数据中的标签。
如果您添加或移除实例标签,则实例元数据将在实例运行期间更新,无需停止后再启动实例。
默认情况下,无法访问实例元数据中的实例标签。对于每个实例,您必须显式启用访问权限。
如果您允许访问实例元数据中的标签,则实例标签键存在特定的限制。不合规将导致新实例启动失败或现有实例出错。这些限制包括:
有关更多信息,请参阅 标签限制。
- Console
-
在实例启动期间启用对实例元数据中标签的访问权限
-
按照程序启动实例。
-
展开高级详细信息,对于允许元数据中的标签,选择启用。
-
在 Summary(摘要)面板中查看实例配置,然后选择 Launch instance(启动实例)。有关更多信息,请参阅 使用控制台中的启动实例向导来启动 EC2 实例。
- AWS CLI
-
在实例启动期间启用对实例元数据中标签的访问权限
使用 run-instances 命令并添加以下 --metadata-options
选项。
--metadata-options "InstanceMetadataTags=enabled"
在实例启动后启用对实例元数据中标签的访问权限
使用以下 modify-instance-metadata-options 命令。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0
\
--instance-metadata-tags enabled
验证对实例元数据中标签的访问权限已启用
使用 describe-instances 命令并检查 InstanceMetadataTags
的值。
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0
\
--query "Reservations[*].Instances[].MetadataOptions[].InstanceMetadataTags"
下面是示例输出。该值为 enabled
或 disabled
。
[
"enabled"
]
- PowerShell
-
在实例启动期间启用对实例元数据中标签的访问权限
使用 New-EC2Instance cmdlet 并添加以下 -MetadataOptions_InstanceMetadataTags
参数。
-MetadataOptions_InstanceMetadataTags enabled
在实例启动后启用对实例元数据中标签的访问权限
使用 Edit-EC2InstanceMetadataOption cmdlet。
Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0
`
-InstanceMetadataTags enabled
验证对实例元数据中标签的访问权限已启用
使用 Get-EC2Instance cmdlet 并检查 InstanceMetadataTags
的值。
(Get-EC2Instance `
-InstanceId i-1234567890abcdef0
).Instances.MetadataOptions.InstanceMetadataTags.Value
下面是示例输出。该值为 enabled
或 disabled
。
enabled
在允许访问实例元数据中的实例标签后,您可以从实例元数据访问 tags/instance
类别。有关更多信息,请参阅 访问 EC2 实例的实例元数据。
- IMDSv2
-
Linux
在 Linux 实例中运行以下命令,列出该实例的所有标签键。
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" http://169.254.169.254/latest/meta-data/tags/instance
此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/tag-key
Windows
在 Windows 实例中运行以下 cmdlet,列出该实例的所有标签键。
$token = Invoke-RestMethod `
-Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
-Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod `
-Headers @{"X-aws-ec2-metadata-token" = $token} `
-Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance
此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。
Invoke-RestMethod `
-Headers @{"X-aws-ec2-metadata-token" = $token} `
-Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
- IMDSv1
-
Linux
在 Linux 实例中运行以下命令,列出该实例的所有标签键。
curl http://169.254.169.254/latest/meta-data/tags/instance
此示例会获取上一示例中获取的键的值。
curl http://169.254.169.254/latest/meta-data/tags/instance/tag-key
Windows
在 Windows 实例中运行以下 cmdlet,列出该实例的所有标签键。
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance
此示例会获取上一示例中获取的键的值。
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
您可以禁用对实例元数据中实例标签的访问权限。您无需在启动时禁用对实例元数据中实例标签的访问权限,因此在默认情况下已禁用此权限。
- Console
-
禁用对实例元数据中标签的访问权限
-
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/。
-
在导航窗格中,选择 Instances (实例)。
-
选择实例,然后依次选择 Actions(操作)、Instance settings(实例设置)、Allow tags in instance metadata(允许实例元数据中的标签)。
-
要关闭对实例元数据中的标签的访问,请清除允许复选框。
-
选择保存。
- AWS CLI
-
禁用对实例元数据中标签的访问权限
使用以下 modify-instance-metadata-options 命令。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0
\
--instance-metadata-tags disabled
- PowerShell
-
禁用对实例元数据中标签的访问权限
使用 Edit-EC2InstanceMetadataOption cmdlet。
Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0
`
-InstanceMetadataTag disabled