雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

AWS SDK for GOを使ってRoute53のレコードを取得する

タイトル通り、サンプル作ってみました

環境

% go version
go version go1.4.2 darwin/amd64

準備

  • パッケージの取得
% go get -u github.com/aws/aws-sdk-go/
% go get -u github.com/vaughan0/go-ini

go-iniはaws-sdk-goのcredentialsで使ってるらしく、いれていないと以下のエラーがでる

../../../../.golocal/src/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go:8:2: cannot find package "github.com/vaughan0/go-ini" in any of:
        /usr/local/Cellar/go/1.4.2/libexec/src/github.com/vaughan0/go-ini (from $GOROOT)
        /Users/ogawa-masaki/.golocal/src/github.com/vaughan0/go-ini (from $GOPATH)
  • クレデンシャルの設定
% cat ~/.aws/credentials
[default]
aws_access_key_id = xxxxxxxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

サンプル

登録しているレコード情報を表示するだけです。

package main

import(
    "fmt"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/awsutil"
    "github.com/aws/aws-sdk-go/service/route53"
)

func main() {
    domain := "example.internal."

    client := route53.New(&aws.Config{})

    // domainからHostedZoneIDの取得
    hzresp, err := client.ListHostedZonesByName(&route53.ListHostedZonesByNameInput{DNSName: aws.String(domain),})
    if err != nil {
        panic(err)
    }
    HostedZoneID := hzresp.HostedZones[0].ID

    // ResourceRecordSetsを取得
    rrsresp, err := client.ListResourceRecordSets(&route53.ListResourceRecordSetsInput{HostedZoneID: HostedZoneID})
    if err != nil {
        panic(err)
    }

    // 出力
    for i := range rrsresp.ResourceRecordSets {
        fmt.Println(awsutil.StringValue(*rrsresp.ResourceRecordSets[i]))
    }
}

AWS SDK for GOもついにPreview版となりましたし、どんどん活用していきたいですね。