この記事は公開されてから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インスタンスなど、サクッとスクリプトを流すのも面倒なケースで便利ですね。