aws-sdk-goでELB配下のインスタンスを取得する

AWS
Published: 2015-04-11

 諸事情によりAWS製ツールをインストールできないWindows端末でAWSのAPIを叩く必要があり、手法を検討しました。あーだこーだと悩んだ結果、別の端末で作成したバイナリファイルを実行することを閃きました。こんな時のためのaws-sdk-goです。

package main

import (
    "fmt"
    "github.com/awslabs/aws-sdk-go/aws"
    "github.com/awslabs/aws-sdk-go/service/elb"
    "sort"
    "strings"
)

func main() {
    accessKey := "YOUR_ACCESS_KEY"
    secretKey := "YOUR_AECRET_KEY"
    region := "ap-northeast-1"
    elbName := "YOUR_ELB_NAME"
    var inserviceInstances []string

    cred := aws.DetectCreds(accessKey, secretKey, "")
    elbSvc := elb.New(&aws.Config{Credentials: cred, Region: region})

    param := &elb.DescribeInstanceHealthInput{
        LoadBalancerName: aws.String(elbName),
    }

    res, err := elbSvc.DescribeInstanceHealth(param)

    if err != nil {
        panic(err)
    }

    for i := range res.InstanceStates {
        result := *res.InstanceStates[i].InstanceID + ":" + *res.InstanceStates[i].State
        inserviceInstances = append(inserviceInstances, result)
    }

    sort.Strings(inserviceInstances)
    fmt.Print(strings.Join(inserviceInstances, ","))
}

 このスクリプトを実行すると、対象ELB配下のインスタンスとその状態が表示されます。

>go run main.go
i-xxxxxxxx:OutOfService,i-xxxxxxxx:OutOfService

 コンパイルしたバイナリファイルを実行しても同じ結果になります。このバイナリを問題のWindows端末で実行すれば問題は解決です。

>go build main.go

>main.exe
i-xxxxxxxx:OutOfService,i-xxxxxxxx:OutOfService