

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EC2 实例元数据服务
<a name="sdk-utilities-ec2-imds"></a>

 您可以使用适用于 Go 的 AWS SDK 来访问 [Amazon EC2 实例元数据服务](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)。[feature/ec2/imds](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/feature/ec2/imds) Go 程序包提供了一种可用于访问 Amazon EC2 实例元数据服务的 [Client](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/feature/ec2/imds#Client) 类型。`Client` 和相关操作的使用方式与 SDK 提供的其他 AWS 服务客户端类似。要了解有关如何配置 SDK 和使用服务客户端的更多信息，请参阅[配置 SDK](configure-gosdk.md) 和[将适用于 Go 的 AWS SDK v2 与 AWS 服务结合使用](use-services.md)。

 该客户端可以帮助您轻松检索有关应用程序运行所在实例的信息，例如其 AWS 区域或本地 IP 地址。通常，您必须创建并提交 HTTP 请求来检索实例元数据。不过，现在您可以创建一个 `imds.Client`，以便像其他 AWS 服务一样使用编程客户端来访问 Amazon EC2 实例元数据服务。

 例如，构造客户端：

```
import "context"
import "github.com/aws/aws-sdk-go-v2/config"
import "github.com/aws/aws-sdk-go-v2/feature/ec2/imds"

// ...

cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
    log.Printf("error: %v", err)
    return
}

client := imds.NewFromConfig(cfg)
```

 然后使用服务客户端从诸如 `local-ipv4`（实例的私有 IP 地址）之类的元数据类别中检索信息。

```
localIp, err := client.GetMetadata(context.TODO(), &imds.GetMetadataInput{
    Path: "local-ipv4",
})
if err != nil {
    log.Printf("Unable to retrieve the private IP address from the EC2 instance: %s\n", err)
    return
}
content, _ := io.ReadAll(localIp.Content)
fmt.Printf("local-ip: %v\n", string(content))
```

 有关所有元数据类别的列表，请参阅《Amazon EC2 用户指南》中的[实例元数据类别](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories)。