AWS SDK for Goが開発者向けプレビュー版として公開されました
はじめに
2015年1月に近日提供開始と伝えられていたAWS SDK for Goが、ついに開発者向けプレビュー版(Developer Preview)として公開されました!
これまでは開発中としてlabsの配下という扱いだったのですが、開発者向けプレビュー版公開に伴いawsのオフィシャルリポジトリに移動され、さらにAWSの公式Webサイトに専用ページが出来ました。
本ブログではLabsでの公開時点から、AWS SDK for Goについての記事を執筆しております。ぜひご覧ください。
- AWS SDK for Go ファーストインプレッション
- AWS SDK for GoとIAMRoleを活用してLinux/Windows両対応のスクリプトを作成する
- AWS SDK for Go でビルドしたバイナリをCentOS5で試してみた
- AWS SDK for Goとgobotを使ってAmazon Kinesisにデータ投入する
- AWS SDK for Goでディスク使用率をCloudWatchカスタムメトリクス化する
- GoのソースをMacでクロスコンパイルし、CentOS5でCloudWatchのカスタムメトリクスを取得する
ということで、開発者向けプレビュー版となったAWS SDK for Goを使ってみました!
使ってみた
Goの導入
ではここで改めて、Mac OS Xで一からAWS SDK for Goを使う手順をおさらいしましょう!
Golangのインストールはbrewコマンドで一発です。
$ brew install go $ go version go version go1.4.2 darwin/amd64
~.bashrcを編集し、必要な環境変数を設定します。"GOPATH=$HOME"の理由はHOME, GOPATH and me by Yoji Shidaraをご覧ください。
if [ -x "`which go`" ]; then export GOPATH=$HOME fi
AWS SDK for Goの導入
AWS SDK for Goはgo getで一発です。
$ go get -u github.com/aws/aws-sdk-go/
すると、$GOPATH/src/github.com/aws/aws-sdk-go/にAWS SDK for Goが全部入ります。
$ ls src/github.com/aws/aws-sdk-go/ LICENSE.txt NOTICE.txt apis internal service Makefile README.md aws sdk.go
AWS SDK for Goが対応しているサービスは以下の通り。Amazon MLなど最近のサービスも対応されてます。素敵。
$ ls src/github.com/aws/aws-sdk-go/service/ autoscaling configservice emr route53 cloudformation datapipeline generate.go route53domains cloudfront directconnect glacier s3 cloudhsm directoryservice iam ses cloudsearch dynamodb kinesis sns cloudsearchdomain ec2 kms sqs cloudtrail ecs lambda ssm cloudwatch efs machinelearning storagegateway cloudwatchlogs elasticache mobileanalytics sts codedeploy elasticbeanstalk opsworks support cognitoidentity elastictranscoder rds swf cognitosync elb redshift workspaces
AWS SDK for Goを使ったプログラムを書いてみる
以下のようなソースを書きました。
package main import ( "fmt" "os" "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" "github.com/aws/aws-sdk-go/service/ec2" ) func main() { accessKey := os.Getenv("AWS_ACCESS_KEY_ID") secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY") defaultRegion := os.Getenv("AWS_DEFAULT_REGION") if accessKey == "" || secretKey == "" || defaultRegion == "" { fmt.Println("Error: Undefined AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY or AWS_DEFAULT_REGION") os.Exit(9) } iamcli := iam.New(&aws.Config{Region: defaultRegion}) iamresp, err := iamcli.GetUser(nil) if err != nil { panic(err) } arn := strings.Split(*iamresp.User.ARN, ":") accountId := arn[4] ec2cli := ec2.New(&aws.Config{Region: defaultRegion}) params := &ec2.DescribeSnapshotsInput{OwnerIDs: []*string{&accountId}} ec2resp, err := ec2cli.DescribeSnapshots(params) if err != nil { panic(err) } if len(ec2resp.Snapshots) < 1 { fmt.Println("Info: No Snaphost.") } for i := range ec2resp.Snapshots { fmt.Print(*ec2resp.Snapshots[i].SnapshotID) fmt.Print(": ") fmt.Print(*ec2resp.Snapshots[i].VolumeID) fmt.Print(": ") fmt.Println(*ec2resp.Snapshots[i].StartTime) } }
必要な環境変数(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION)を設定し、go buildしたバイナリを実行すると、以下のように自分がオーナーとなっているスナップショットの一覧が出力されます!
$ ./describeSnapshot snap-4e4cebXX: vol-12345678: 2015-06-05 09:50:41 +0000 UTC snap-7e4d2cXX: vol-12345678: 2015-06-05 09:43:41 +0000 UTC
さいごに
今後発表される新機能にもどんどん追従してくれそうですね。Go言語の特性を活かした使い道はたくさんありそうです。正式リリースが楽しみですね!