处理实例用户数据 - Amazon Elastic Compute Cloud

处理实例用户数据

您可以使用实例用户数据来自定义您的实例。启动实例时,您可以将参数或脚本存储为用户数据。用户数据中的所有脚本将在您启动实例时运行。您可以将用户数据作为实例属性进行查看。您还可以通过实例元数据服务(IMDS)查看来自实例的用户数据。

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

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

  • 用户数据在进行 base64 编码之前的原始格式的大小限制为 16 KB。长度为 n 的字符串在进行 base64 编码之后的大小为 ceil(n/3)*4。

  • 在检索用户数据时,必须对其进行 base64 解码。如果您使用实例元数据或控制台检索数据,则会自动对数据进行解码。

  • 如果您停止实例,修改用户数据,然后启动实例,则在启动实例时,不会自动运行更新后的用户数据。不过,您可以配置设置,这样更新后的用户数据脚本在您启动实例时运行一次,或者在每次重启或启动实例时运行。

  • 用户数据是一种实例属性。如果您从实例创建 AMI,则实例用户数据不包含在该 AMI 中。

启动时指定实例用户数据

您可在启动实例时指定用户数据。有关控制台说明,请参阅 启动时指定实例用户数据有关使用 Tools for Windows PowerShell 的示例,请参阅 用户数据和 Tools for Windows PowerShell

修改实例用户数据

您可以修改具有 EBS 根卷的实例的用户数据。该实例必须处于已停止状态。有关控制台说明,请参阅 查看和更新实例用户数据有关使用 Tools for Windows PowerShell 的示例,请参阅 用户数据和 Tools for Windows PowerShell

从实例检索实例用户数据

注意

本部分中的示例使用 IMDS 的 IPv4 地址:169.254.169.254。如果要通过 IPv6 地址检索 EC2 实例的实例元数据,请确保启用并改用 IPv6 地址:[fd00:ec2::254]。IMDS 的 IPv6 地址与 IMDSv2 命令兼容。IPv6 地址仅可在 基于 Nitro 系统构建的实例 上访问。

要从实例中检索用户数据,请使用以下 URI。

http://169.254.169.254/latest/user-data

请求用户数据时,按原样返回数据 (内容类型 application/octet-stream)。如果该实例没有任何用户数据,则请求将返回 404 - Not Found

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

IMDSv2
PS C:\> [string]$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/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
IMDSv1
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} ` -Method PUT -Uri http://169.254.169.254/latest/api/token} -Method GET -uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

该示例返回以脚本形式提供的用户数据。

IMDSv2
PS C:\> [string]$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/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>
IMDSv1
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

从您自己的计算机检索实例用户数据

您可以从您自己的计算机检索示实例的用户数据。有关控制台说明,请参阅 查看和更新实例用户数据。有关使用 Tools for Windows PowerShell 的示例,请参阅 用户数据和 Tools for Windows PowerShell