EC2のインスタンスIDとリージョンをAWS SDK for Goで取得する
渡辺です。
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インスタンスなど、サクッとスクリプトを流すのも面倒なケースで便利ですね。