AWS SDK for Goが開発者向けプレビュー版として公開されました

はじめに

2015年1月に近日提供開始と伝えられていたAWS SDK for Goが、ついに開発者向けプレビュー版(Developer Preview)として公開されました!

これまでは開発中としてlabsの配下という扱いだったのですが、開発者向けプレビュー版公開に伴いawsのオフィシャルリポジトリ移動され、さらにAWSの公式Webサイトに専用ページが出来ました。

AWS_SDK_for_Go

 

本ブログではLabsでの公開時点から、AWS SDK for Goについての記事を執筆しております。ぜひご覧ください。

ということで、開発者向けプレビュー版となった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言語の特性を活かした使い道はたくさんありそうです。正式リリースが楽しみですね!