Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

实例元数据和用户数据

实例元数据 是有关您的实例的数据,可以用来配置或管理正在运行的实例。实例元数据可划分成不同类别。有关更多信息,请参阅 实例元数据类别

重要

虽然您只能从实例自身内部访问实例元数据和用户数据,但数据并未进行加密保护。可访问实例的人员均可查看其元数据。因此,您应当采取适当的预防措施来保护敏感数据 (例如永久加密密钥)。不应将敏感数据 (例如密码) 存储为用户数据。

您也可以使用实例元数据访问您启动实例时指定的用户数据。例如,您可指定参数以便配置实例,也可连接简单的脚本。您也可以使用这些数据来构建更多可通过启动时提供的配置文件来修改的通用 AMI。例如,如果您为各种小型企业运行 Web 服务器,则这些企业都可以使用相同的 AMI,并在启动时从您在用户数据中指定的 Amazon S3 存储桶中检索其各自的内容。要随时添加一个新客户,您只需为该客户创建一个存储桶,将客户的内容添加进去,然后启动您的 AMI 即可。如果您同时启动多个实例,则用户数据可供该预留中的所有实例使用。

EC2 实例还可包括动态数据,例如启动实例时生成的实例身份文档。有关更多信息,请参阅 动态数据类别

检索实例元数据

由于您的正在运行的实例存在实例元数据,因此您无需使用 Amazon EC2 控制台或 AWS CLI。这在您编写脚本以实现从实例运行时非常有用。例如,您可从实例元数据访问您的实例的本地 IP 地址来以管理与外部应用程序的连接。

要从运行实例内部查看所有类别的实例元数据,请使用以下 URI:

http://169.254.169.254/latest/meta-data/

请注意,您无需为用于检索实例元数据和用户数据的 HTTP 请求付费。

您可以使用 PowerShell cmdlet 检索 URI。例如,如果您在运行 3.0 版本或更高版本的 PowerShell,请使用以下 cmdlet:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/

如果您不想使用 PowerShell,则可以安装第三方工具,例如 GNU Wget 或 cURL。

重要

如果您在 Windows 实例上安装第三方工具,请确保您仔细阅读随附的文档,因为调用 HTTP 的方法以及输出格式可能与此处记录的内容不同。

所有实例元数据以文本形式返回 (内容类型 text/plain)。对特定元数据资源的请求会返回一个相应的值,如果该资源不可用,则会返回 HTTP 错误代码 404 - Not Found

对通用元数据资源的请求 (以 / 结尾的 URI) 会返回一个可用资源列表,如果此类资源不存在,则会返回 HTTP 错误代码 404 - Not Found。列表中的各个项目位于被换行符 (ASCII 10) 终止的不同的行上。

检索实例元数据的示例

此示例可以获取实例元数据的可用版本。这些版本不一定与 Amazon EC2 API 版本相关联。如果您有依赖于以前版本中所存在的结构和信息的脚本,则您可使用早期版本。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 2016-06-30 2016-09-02 latest

此示例获得顶级元数据项目。一些项目只可用于 VPC 中的实例。有关这些项目中每一项的更多信息,请参阅 实例元数据类别

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/

这些示例获得前面示例中的一些元数据项目的值。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id ami-12345678
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id r-fea54097
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

此示例显示可用于 EC2-Classic 平台中 NAT 实例上特定网络接口 (由 MAC 地址表示) 的信息。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/ device-number local-hostname local-ipv4s mac owner-id public-hostname public-ipv4s

此示例获得启动至 VPC 的实例的子网 ID。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

限制

我们基于每个实例来限制对实例元数据服务的查询,并且,我们对从实例到实例元数据服务的同时连接数进行限制。

如果您在使用实例元数据服务检索 AWS 安全凭证,请避免在每个事务期间查询凭证或从大量线程或进程中并发查询,因为这可能导致限制。相反,我们建议您缓存凭证,直到凭证开始接近其到期时间。

如果您在访问实例元数据服务时受限,请用指数回退策略重试查询。

使用用户数据配置实例

指定用户数据时,请注意以下几点:

  • 用户数据会被视为非透明数据;您提供什么数据您就会得到什么数据。由实例对其进行解释。

  • 用户数据被限制在 16 KB 以内。这种限制适用于原始形式的数据,而不是 Base64 编码形式的数据。

  • 用户数据必须采用 base64 编码。Amazon EC2 控制台可以为您执行 base64 编码或接受 base64 编码的输入。

  • 在检索用户数据时,必须对其进行解码。数据将在您使用实例元数据和控制台对其进行检索时解码。

  • 用户数据仅在启动时执行。如果停止实例,修改用户数据,然后启动实例,则新的用户数据不会自动执行。

在启动时指定用户数据

您可在启动实例时指定用户数据。有关更多信息,请参阅 启动时在 Windows 实例上运行命令

为正在运行的实例修改用户数据

如果根卷是 EBS 卷,则可以修改现有实例的用户数据。如果实例正在运行,必须首先停止实例。您重新启动实例后,新的用户数据将在实例上可见;但不会执行。

警告

当您停止某个实例时,任何实例存储卷上的数据都将被擦除。因此,如果实例存储卷上有任何您要保留的数据,请确保将其备份到持久性存储。

使用控制台修改实例的用户数据

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances,然后选择实例。

  3. 依次选择 ActionsInstance StateStop

  4. 在确认对话框中,单击 Yes, Stop 。停止实例可能需要几分钟时间。

  5. 在实例仍处于选中状态的情况下,选择 Actions,选择 Instance Settings,然后选择 View/Change User Data。请注意,如果实例正在运行,您不能更改用户数据,但是可以查看。

  6. View/Change User Data 对话框中,更新用户数据,然后选择 Save

使用命令行修改实例的用户数据

您可以使用 AWS CLI 和 Windows PowerShell 工具 修改用户数据。有关更多信息,请参阅用户数据和 AWS CLI用户数据和 Windows PowerShell 工具

检索用户数据

要在正在运行的实例内部检索用户数据,请使用以下 URI:

http://169.254.169.254/latest/user-data

请求用户数据时,按原样返回数据 (内容类型 application/octet-stream)。

本示例返回以逗号分隔的文本形式提供的用户数据:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

本示例返回以行分隔的文本形式提供的用户数据:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/user-data [general] instances: 4 [instance-0] s3-bucket: <user_name> [instance-1] reboot-on-error: yes

检索动态数据

要在运行实例内部检索动态数据,请使用以下 URI:

http://169.254.169.254/latest/dynamic/

此示例介绍如何检索高级实例标识类别:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/dynamic/instance-identity/ document rsa2048 pkcs7 signature

有关动态数据的详细信息和如何对其进行检索的示例,请参阅 实例标识文档

实例元数据类别

下表列举了实例元数据的类别。

重要

使用红色文本格式的类别名称是您实例中唯一的数据的占位符;例如 mac 表示网络接口的 MAC 地址。您必须使用实际值替换占位符。

Data 说明 引入的版本
ami-id 用于启动实例的 AMI ID。 1.0
ami-launch-index 如果您同时启动了多个实例,此值表示实例启动的顺序。第一个启动的实例的值是 0。 1.0
ami-manifest-path 指向 Amazon S3 中的 AMI 清单文件的路径。如果您使用 Amazon EBS 支持的 AMI 来启动实例,则返回的结果为 unknown 1.0
ancestor-ami-ids 为创建此 AMI 而重新绑定的任何实例的 AMI ID。仅当 AMI 清单文件包含一个 ancestor-amis 密钥时,此值才存在。 2007-10-10
block-device-mapping/ami 包含根/启动文件系统的虚拟设备。 2007-12-15
block-device-mapping/ebs 与 Amazon EBS 卷相关联的虚拟设备 (如果存在)。如果 Amazon EBS 卷在启动时存在或者在上一次启动该实例时存在,那么这些卷仅在元数据中可用。N 表示 Amazon EBS 卷的索引 (例如 ebs1ebs2)。 2007-12-15
block-device-mapping/ephemeral 与短暂设备相关联的虚拟设备,如果存在的话。N 表示临时卷的索引。 2007-12-15
block-device-mapping/root 与根设备相关联的虚拟设备或分区,或虚拟设备上的分区 (在根 (/ 或 C:) 文件系统与给定实例相关联的情况下)。 2007-12-15
block-device-mapping/swap swap 相关联的虚拟设备。并不总是存在。 2007-12-15
elastic-gpus/associations/elastic-gpu-id 如果有 Elastic GPU 挂载到实例,在有关 Elastic GPU 的信息中包含 JSON 字符串,包括其 ID 和连接信息。 2016-11-30
hostname 实例的私有 IPv4 DNS 主机名。在存在多个网络接口的情况下,其指的是 eth0 设备 (设备号为 0 的设备)。 1.0
iam/info 如果存在与实例关联的 IAM 角色,则包含有关实例配置文件上次更新时间的信息 (包括实例的 LastUpdated 日期、InstanceProfileArn 和 InstanceProfileId)。如果没有,则不显示。 2012-01-12
iam/security-credentials/role-name 如果存在与实例关联的 IAM 角色,则 role-name 为角色的名称,并且 role-name 包含与角色关联的临时安全凭证 (有关更多信息,请参阅 通过实例元数据检索安全凭证)。如果没有,则不显示。 2012-01-12
instance-action 通知实例在准备打包时重新启动。有效值:none | shutdown | bundle-pending 2008-09-01
instance-id 此实例的 ID。 1.0
instance-type 实例的类型。有关更多信息,请参阅 实例类型 2007-08-29
kernel-id 此实例启动的内核的 ID,如果适用的话。 2008-02-01
local-hostname 实例的私有 IPv4 DNS 主机名。在存在多个网络接口的情况下,其指的是 eth0 设备 (设备号为 0 的设备)。 2007-01-19
local-ipv4 实例的私有 IPv4 地址。在存在多个网络接口的情况下,其指的是 eth0 设备 (设备号为 0 的设备)。 1.0
mac 实例的媒体访问控制 (MAC) 地址。在存在多个网络接口的情况下,其指的是 eth0 设备 (设备号为 0 的设备)。 2011 年 1 月 1 日
network/interfaces/macs/mac/device-number 与该接口相关联的唯一设备号。设备号与设备名称对应;例如,device-number 为 2 对应于 eth2 设备。此类别对应的是 Amazon EC2 API 和 AWS CLI 的 EC2 命令使用的 DeviceIndexdevice-index字段。 2011 年 1 月 1 日
network/interfaces/macs/mac/ipv4-associations/public-ip 与每个 public-ip 地址相关联并被分配给该接口的私有 IPv4 地址。 2011 年 1 月 1 日
network/interfaces/macs/mac/ipv6s 与接口相关联的 IPv6 地址。仅对启动至 VPC 的实例返回。 2016-06-30
network/interfaces/macs/mac/local-hostname 实例的本地主机名称。 2011 年 1 月 1 日
network/interfaces/macs/mac/local-ipv4s 与接口相关联的私有 IPv4 地址。 2011 年 1 月 1 日
network/interfaces/macs/mac/mac 该实例的 MAC 地址。 2011 年 1 月 1 日
network/interfaces/macs/mac/owner-id 网络接口拥有者的 ID。在多个接口的环境中,接口可由第三方连接,如 Elastic Load Balancing。接口拥有者需为接口上的流量付费。 2011 年 1 月 1 日
network/interfaces/macs/mac/public-hostname 接口的公有 DNS (IPv4)。如果实例在 VPC 中,则仅当 enableDnsHostnames 属性设置为 true 时返回此类别。有关更多信息,请参阅在您的 VPC 中使用 DNS 2011 年 1 月 1 日
network/interfaces/macs/mac/public-ipv4s 与接口相关联的弹性 IP 地址。一个实例上可能有多个 IPv4 地址。 2011 年 1 月 1 日
network/interfaces/macs/mac/security-groups 网络接口所属的安全组。仅对启动至 VPC 的实例返回。 2011 年 1 月 1 日
network/interfaces/macs/mac/security-group-ids 网络接口所属的安全组的 ID。仅对启动至 VPC 的实例返回。有关 EC2-VPC 平台中安全组的更多信息,请参阅您的 VPC 的安全组 2011 年 1 月 1 日
network/interfaces/macs/mac/subnet-id 接口所驻留的子网的 ID。仅对启动至 VPC 的实例返回。 2011 年 1 月 1 日
network/interfaces/macs/mac/subnet-ipv4-cidr-block 接口所在子网的 IPv4 CIDR 块。仅对启动至 VPC 的实例返回。 2011 年 1 月 1 日
network/interfaces/macs/mac/subnet-ipv6-cidr-blocks 接口所在子网的 IPv6 CIDR 块。仅对启动至 VPC 的实例返回。 2016-06-30
network/interfaces/macs/mac/vpc-id 接口所驻留的 VPC 的 ID。仅对启动至 VPC 的实例返回。 2011 年 1 月 1 日
network/interfaces/macs/mac/vpc-ipv4-cidr-block VPC 的主 IPv4 CIDR 块。仅对启动至 VPC 的实例返回。 2011 年 1 月 1 日
network/interfaces/macs/mac/vpc-ipv4-cidr-blocks VPC 的 IPv4 CIDR 块。仅对启动至 VPC 的实例返回。 2016-06-30
network/interfaces/macs/mac/vpc-ipv6-cidr-blocks 接口所在 VPC 的 IPv6 CIDR 块。仅对启动至 VPC 的实例返回。 2016-06-30
placement/availability-zone 实例启动的可用区。 2008-02-01
product-codes 与实例相关联的产品代码,如果有的话。 2007-03-01
public-hostname 实例的公有 DNS。如果实例在 VPC 中,则仅当 enableDnsHostnames 属性设置为 true 时返回此类别。有关更多信息,请参阅在您的 VPC 中使用 DNS 2007-01-19
public-ipv4 公有 IPv4 地址。如果弹性 IP 地址与实例相关联,返回的值是弹性 IP 地址。 2007-01-19
public-keys/0/openssh-key 公用密钥。仅在实例启动时提供了公用密钥的情况下可用。 1.0
ramdisk-id 启动时指定的 RAM 磁盘 的 ID,如果适用的话。 2007-10-10
reservation-id 预留的 ID。 1.0
security-groups

应用到实例的安全组的名称。

启动之后,您只能更改正在 VPC 中运行的实例的安全组。这些更改将体现在此处和 network/interfaces/macs/mac/security-groups 中。

1.0
services/domain

用于区域的 AWS 资源的域;例如用于 us-east-1 的 amazonaws.com

2014-02-25
services/partition

资源所处的分区。对于标准 AWS 区域,分区是 aws。如果资源位于其他分区,则分区是 aws-partitionname。例如,位于中国 (北京) 区域的资源的分区为 aws-cn

2015-10-20
spot/instance-action

当竞价服务停止或终止竞价型实例时的操作 (停止或终止) 和近似时间 (以 UTC 表示)。有关更多信息,请参阅 instance-action

2016-11-15
spot/termination-time

竞价型实例操作系统将收到关闭信号的大致时间 (UTC)。仅当竞价型实例已由 Amazon EC2 标记为终止时,此项目才会出现并包含时间值 (例如,2015-01-05T18:02:00Z)。如果您自己终止了竞价型实例,那么终止时间项目不会设置时间。有关更多信息,请参阅 termination-time

2014-11-05

动态数据类别

下表列举了动态数据的类别。

Data 说明 引入的版本
fws/instance-monitoring 显示客户是否在 CloudWatch 中启用了详细的一分钟监控的值。有效值:enabled | disabled 2009-04-04
instance-identity/document 包含实例属性 (如实例 ID、私有 IP 地址等) 的 JSON。请参阅实例标识文档 2009-04-04
instance-identity/pkcs7 用于验证签名的文档的真实性和内容。请参阅实例标识文档 2009-04-04
instance-identity/signature 可被其他各方用于验证来源和真实性的数据。请参阅实例标识文档 2009-04-04