諸事情により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