この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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言語の特性を活かした使い道はたくさんありそうです。正式リリースが楽しみですね!