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])) } }
go langことはじめ
ちょっとgoさわってみたくなった
インストール
Macなのでhomebewで
% brew install go
ちょーかんたん
PATHの設定
zshなので.zprofileで
if [ -x "`which go`" ]; then export GOROOT=`go env GOROOT` export GOPATH=$HOME/.golocal export PATH=$PATH:$GOROOT/bin:$GOPATH/bin fi
事前にmkdir ~/.golocal
してます
はろーごーらんぐ
定番
- hello.go
package main import "fmt" func main() { fmt.Println("はろーごーらんぐ") }
というか普通に日本語つかえた。
build
% go build hello.go
実行
% ./hello はろーごーらんぐ
でけた。
ちなみに
なんでいきなりgoかというと、aws-goを使ってみたかったから。 AWS API使ったすごい簡単なものをpythonで作ったんだけど、ふとこれをgoで作ったらどんなんになるんだろと思って。
というわけでこれからaws-goで遊んでみます。
EC2のタグをCLIで管理するtapewriterというツールを作った
タイトル通りですが、EC2のタグをCLIで管理したくて(=コード化したくて)作ってみました。
route53をDSLで管理するroadworkerという素晴らしいツールがあるのですが、おもいっきりその影響を受けています。 (や、ほんと素晴らしいツールで結構な衝撃だったんです)
なにをするもの?
EC2のタグをjsonで管理できるようになるツールです。 jsonなのでバージョン管理もバックアップも取れます。
どんなところで使うの?
- タグのバックアップをとりたいとき
- タグをバージョン管理したいとき
- ブラウザでの作業が嫌だというとき
- タグを一気に変更したいとき
つかいかた
タグをエクスポートする
% tapewriter -r ap-northeast-1 -f dev-app.json --export --filter '{"Env":"dev", "Role":"app"}'
フィルターが使えます
タグを編集する
- 変更前
{ "instances": [ { "id": "i-11111111", "region": "ap-northeast-1", "tags": { "Env": "dev", "Role": "app", "Name": "hoge", "State": "standby" } }, { "id": "i-22222222", "region": "ap-northeast-1", "tags": { "Env": "dev", "Role": "app", "Name": "fuga", "State": "standby" } } ] }
- 変更後
{ "instances": [ { "id": "i-11111111", "region": "ap-northeast-1", "tags": { "Env": "dev", "Role": "app", "Name": "hoge", "State": "run" } }, { "id": "i-22222222", "region": "ap-northeast-1", "tags": { "Env": "dev", "Role": "app", "Name": "fuga", "State": "run" } } ] }
Stateタグを変更しています。
dry-run(テスト実行)
どんな変更がされるか確認
% tapewriter -r ap-northeast-1 -f dev-app.json --apply --dry-run
適用
タグを適用
% tapewriter -r ap-northeast-1 -f dev-app.json --apply
実際使ってみて
複数のインスタンスのタグを一気に変更したいときにあってよかったなーと思いました。
でも1つのインスタンスのタグを一つだけ変える、とかだったらAWSコンソールからやったほうが早いです。
そもそも
みんなタグってどうやって管理しているんだろ。というかそもそも使ってないのか?ちょっと聞いてみたい。
sensuについてちょっとだけ発表した
気がづいたらGrafanaの2.0(beta)がリリースされてた
ざっと見た感じ、結構変わってますね。
- グラフのスナップショットがとれるらしい -> 障害時にスナップしてチャットに送るとかできるのかな
- シングルパネルが表示できる -> 最新のロードアベレージとかパッと見てわかるようになる
- バックエンドをブラウザ上から複数保存 -> グラフにするときにどのバックエンドを利用するか選択可能
- グラフ毎に表示させる時間帯を変更可能に(これまでは1ページで同じ時間を表示させてた)
- Grafanaがデーモンとして起動するようになってる
- 各パッケージでインストールできるようになってる
- アカウント管理ができる -> ダッシュボード見るのにログインを挟むことができる(なしにもできそう)
それ以外にもUIがわりかし変わってました(でも大幅な変更でないので違和感はない)
上記だと1と2の機能がずっと欲しかったんで、早速いろいろ試したいと思います。