使用实例元数据来查看 EC2 实例的标签 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用实例元数据来查看 EC2 实例的标签

您可以从实例元数据访问实例的标签。通过从实例元数据访问标签,您无需再使用 DescribeInstancesDescribeTags API 调用来检索标签信息,这可以减少每秒的 API 事务量,并允许您的标签检索随您控制的实例数量扩展。此外,在实例上运行的本地进程可以直接从实例元数据中查看实例的标签信息。

默认情况下,实例元数据中不提供标签;您必须明确允许访问。您可以在实例启动时或启动后在正在运行或停止的实例上允许访问。您还可以通过在启动模板中指定标签来允许访问标签。使用模板启动的实例允许访问实例元数据中的标签。

如果您添加或移除实例标签,则实例元数据将在实例运行期间更新,无需停止后再启动实例。

允许访问实例元数据中的标签

默认情况下,无法访问实例元数据中的实例标签。对于每个实例,您必须使用以下方法之一明确允许访问。

注意

如果您允许访问实例元数据中的标签,则实例标签存在特定的限制。不合规将导致新实例启动失败或现有实例出错。这些限制包括:

  • 只能包含字母(a-zA-Z)、数字 (0-9) 和以下字符:+ - = . , _ : @

  • 不能包含空格或 /

  • 不能只包含 .(一个句点)、..(两个句点)或 _index

有关更多信息,请参阅 标签限制

Console
要允许在实例启动期间访问实例元数据中的标签
  1. 按照程序启动实例

  2. 展开高级详细信息,对于允许元数据中的标签,选择启用

  3. Summary(摘要)面板中查看实例配置,然后选择 Launch instance(启动实例)。有关更多信息,请参阅 使用控制台中的启动实例向导来启动 EC2 实例

Amazon CLI
要允许在实例启动期间访问实例元数据中的标签

使用 run-instances 命令并将 InstanceMetadataTags 设置为 enabled

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c3.large \ ... --metadata-options "InstanceMetadataTags=enabled"
Console
要允许访问正在运行或已停止的实例上的实例元数据中的标签
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择实例,然后依次选择操作实例设置允许实例元数据中的标签

  4. 要允许访问实例元数据中的标签,请选择允许复选框。

  5. 选择保存

Amazon CLI
要允许访问正在运行或已停止的实例上的实例元数据中的标签

请使用 modify-instance-metadata-options 命令,并将 --instance-metadata-tags 设置为 enabled

aws ec2 modify-instance-metadata-options \ --instance-id i-123456789example \ --instance-metadata-tags enabled

从实例元数据中检索标签

在允许访问实例元数据中的实例标签后,您可以从实例元数据访问 tags/instance 类别。有关更多信息,请参阅 访问 EC2 实例的实例元数据

实例元数据服务版本 2

在您的 Amazon EC2 实例上运行以下示例,以检索 IMDSv2 的实例元数据。

cURL

此示例获取实例的所有标签键。

[ec2-user ~]$ 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 Name Environment

此示例获取在先前示例中获取的 Name 密钥的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/Name MyInstance
PowerShell

此示例获取实例的所有标签键。

PS C:\> $token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance Name Environment

此示例获取在先前示例中获取的 Name 密钥的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance/Name MyInstance
实例元数据服务版本 1

在您的 Amazon EC2 实例上运行以下示例,以检索 IMDSv1 的实例元数据。

cURL

此示例获取实例的所有标签键。

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/tags/instance Name Environment

此示例获取在先前示例中获取的 Name 密钥的值。

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/tags/instance/Name MyInstance
PowerShell

此示例获取实例的所有标签键。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/tags/instance Name Environment

此示例获取在先前示例中获取的 Name 密钥的值。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/tags/instance/Name MyInstance

关闭对实例元数据中的标签的访问

要关闭对实例元数据中的实例标签的访问,请使用以下方法之一。您无需在启动时关闭对实例元数据上的实例标签的访问,因它处于关闭状态。

要使用控制台关闭对实例元数据中的标签的访问
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择实例,然后依次选择 Actions(操作)、Instance settings(实例设置)、Allow tags in instance metadata(允许实例元数据中的标签)。

  4. 要关闭对实例元数据中的标签的访问,请清除允许复选框。

  5. 选择保存

要使用 Amazon CLI 关闭对实例元数据中的标签的访问

请使用 modify-instance-metadata-options 命令,并将 --instance-metadata-tags 设置为 disabled

aws ec2 modify-instance-metadata-options \ --instance-id i-123456789example \ --instance-metadata-tags disabled
查看是否允许使用 Amazon CLI 访问实例元数据中的标签

使用 describe-instances 命令并指定实例 ID。使用 --query 参数在结果中仅显示实例元数据选项。

aws ec2 describe-instances \ --instance-ids i-1234567890abcdef0 \ --query "Reservations[*].Instances[*].MetadataOptions"

下面是示例输出。InstanceMetadataTags 的值表明是否允许访问实例元数据中的标签。如果值为 enabled,表示允许。如果值为 disabled,表示不允许。

[ [ { "State": "applied", "HttpTokens": "required", "HttpPutResponseHopLimit": 2, "HttpEndpoint": "enabled", "HttpProtocolIpv6": "disabled", "InstanceMetadataTags": "enabled" } ] ]