goamzを使ってGo言語でAWSを操作する

はじめに

goamzはGo言語でAWSを操作するためのパッケージです。元々のパッケージはgo-amz/amzなのですが、そこから様々な形にForkされています。今回は大きく拡張されているcrowdmob/goamzを使って、Go言語からAWSを操作してみたいと思います。

やってみた

GOPATHやGOROOTなどのGo開発環境については既に整っていることを前提とします。

goamzパッケージをインストールする

goamzはリソースごとに分かれています。今回はawsec2go getを使ってインストールしました。

$ go get github.com/crowdmob/goamz/aws
$ go get github.com/crowdmob/goamz/ec2

Goプログラムを書く

以下が作成したプログラム。 EC2をRunしています。

$ vi EC2RunInstance.go
package main

import (
  "github.com/crowdmob/goamz/aws"
  "github.com/crowdmob/goamz/ec2"
)

func main() {
  // Before export env AWS_ACCESS_KEY and AWS_SECRET_ACCESS_KEY
  auth, err := aws.EnvAuth()
  if err != nil {
    panic(err.Error())
  }
  e := ec2.New(auth, aws.APNortheast)

  options := ec2.RunInstancesOptions{
    ImageId:        "ami-4985b048",
    InstanceType:   "t2.micro",
    KeyName:        "YUOR_KEYPAIR",
    SubnetId:       "subnet-123456789",
  }

  resp, err := e.RunInstances(&options)
  if err != nil {
    panic(err.Error())
  }

  for _, instance := range resp.Instances {
    println("Running: ", instance.InstanceId)
  }
}

Goプログラムをビルドする

上記のプログラムをgo buildします。

$ go build EC2RunInstance.go

ビルドが完了するとバイナリファイル(今回の場合EC2RunInstance)が出来上がります。

$ ls -alF
total 28376
drwxr-xr-x  6 smokeymonkey  smokeymonkey      204  1  9 16:39 ./
drwxr-xr-x  5 smokeymonkey  smokeymonkey      170  1  9 13:59 ../
-rwxr-xr-x  1 smokeymonkey  smokeymonkey  7222300  1  9 15:22 EC2RunInstance*

Goプログラムを実行する

実行前にAWS_ACCESS_KEYAWS_SECRET_ACCESS_KEYを環境変数としてセットします。

$ export AWS_ACCESS_KEY=1234567890
$ export AWS_SECRET_ACCESS_KEY=1234567890

そして実行します!

$ ./EC2RunInstance
Running:  i-1234567890

EC2がRunしました!

さいごに

DynamoDBやElastiCache、CloudFrontなど、様々なリソースに対応していますので、コマンド一発でシステムを立ち上げちゃうような仕組みも作れそうです。僕自身がまだGo言語に不慣れなためうまく使いこなせていませんが、今後も活用を考えてみたいと思います。