EC2のインスタンスIDとリージョンをAWS SDK for Goで取得する

2017.06.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

AWS SDK for Goには他のSDKにない機能が豊富です。 今日は、 EC2のインスタンスIDとリージョンを取得する方法 を紹介します。

インスタンスメタデータ

EC2インスタンスのインスタンスIDはメタデータから取得できることが知られています(【小ネタ】EC2のインスタンスメタデータからリージョンを取得する)。

実際、スクリプトやアプリケーションで、インスタンスIDなどを取得するケースは多いでしょう。 その時は、169.254.169.254へHTTPアクセスをするコードを書くのですが、ラクしたいですよね・・・。

AWS SDK for Goの場合、ec2metadataが用意されています!

ec2metadataを利用してインスタンスIDとリージョンを取得する

サービス ec2metadataを利用してEC2のリージョン情報とインスタンスIDを取得してみます。

package main

import (
  "github.com/aws/aws-sdk-go/aws/session"
  "github.com/aws/aws-sdk-go/aws/ec2metadata"
  "fmt"
)

func main() {
  sess := session.Must(session.NewSession())
  svc := ec2metadata.New(sess)
  doc, _ := svc.GetInstanceIdentityDocument()
  instanceId := doc.InstanceID
  region := doc.Region
  fmt.Println(region)
  fmt.Println(instanceId)
}

他のサービスと同様にSessionを作成し、ec2metadataサービスを作成します。 後は、GetInstanceIdentityDocument関数InstanceIdentityDocumentを取得するだけです。

なお、リージョン情報だけであれば、Region関数を利用してもOKです。

  region := svc.Region()

まとめ

AWS SDK for Goならec2metadataを利用してEC2のリージョン情報とインスタンスIDを取得できます。 Windowsインスタンスなど、サクッとスクリプトを流すのも面倒なケースで便利ですね。