You can use the AWS SDK for Go to access the
Amazon EC2
Instance Metadata Service. The feature/ec2/imdsClient
and associated operations can be used
similar to the other AWS service clients provided by the SDK. To
learn more information on how to configure the SDK, and use service
clients see Configure the SDK
and Use the AWS SDK for Go v2 with AWS services.
The client can help you easily retrieve information about instances
on which your applications run, such as its AWS Region or local IP
address. Typically, you must create and submit HTTP requests to
retrieve instance metadata. Instead, create an
imds.Client
to access the Amazon EC2 Instance
Metadata Service using a programmatic client like other AWS
Services.
For example to construct a client:
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)
Then use the service client to retrieve information from a metadata
category such as local-ipv4
(the private IP
address of the instance).
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))
For a list of all metadata categories, see Instance metadata categories in the Amazon EC2 User Guide.