AWS SDK for Go ファーストインプレッション

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

これは素晴らしいニュースです!

もともとStripe社が開発していたaws-goプロジェクトがAWSに移管され、公式のSDKとしてリリースされるとのことです。Githubリポジトリ(https://github.com/awslabs/aws-sdk-go)で開発されているので、ソースを読むことも、試してみることもできます。

これは試さずにはいくまい。ということでやってみました!

やってみた

試した環境は以下の通りです。

$ go version
go version go1.4.1 darwin/amd64

インストールはgo getでサクッと。今回はec2だけ入れてます。この時go1.3以下だと蹴られますので、事前に最新版をインストールしておきましょう。

$ go get github.com/awslabs/aws-sdk-go/gen/ec2

以下のようなソースを書きました。

$ cat ec2.go
package main

import (
  "fmt"
  "os"

  "github.com/awslabs/aws-sdk-go/aws"
  "github.com/awslabs/aws-sdk-go/gen/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)
  }

  creds := aws.Creds(accessKey, secretKey, "")
  cli := ec2.New(creds, defaultRegion, nil)
  resp, err := cli.DescribeInstances(nil)
  if err != nil {
    panic(err)
  }

  if len(resp.Reservations) < 1 {
    return
  }

  for i := range resp.Reservations {
    fmt.Print(i)
    fmt.Print(" , ")
    fmt.Print(*resp.Reservations[i].Instances[0].VPCID)
    fmt.Print(" , ")
    fmt.Print(*resp.Reservations[i].Instances[0].SubnetID)
    fmt.Print(" , ")
    fmt.Print(*resp.Reservations[i].Instances[0].InstanceID)
    fmt.Print(" , ")
    fmt.Print(*resp.Reservations[i].Instances[0].InstanceType)
    fmt.Print(" , ")
    fmt.Println(*resp.Reservations[i].Instances[0].ImageID)
  }
}

必要な環境変数(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION)を設定し、go buildしたバイナリを実行すると、以下のように出力されます!

$ ./ec2
0 , vpc-8c929xxx , subnet-75386xxx , i-23faexxx , t2.micro , ami-18869819
1 , vpc-8c929xxx , subnet-c2634xxx , i-228faxxx , t2.micro , ami-29dc9228

まとめ

AWS SDK for Goによって、単純なタスクをこなすようなツールなどはGo言語でバイナリファイルをちょろっと作って配置するだけで良くなります。多数のサーバに配置するときにも環境依存を極小にすることが出来ます。正式な提供開始が楽しみですね!