ImageMagick-lastをAmazonLinuxにインストールする
AmazonLinuxでインストールできるImageMagickは若干バージョンが古いです。 最新版をパッケージでインストールするにはremiから入れればいいのですが、普通にやると依存関係でエラーがでます。
エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libHalf.so.6()(64bit) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libIlmImf.so.6()(64bit) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libgdk_pixbuf-2.0.so.0()(64bit) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libIex.so.6()(64bit) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: librsvg-2.so.2()(64bit) エラー: パッケージ: ImageMagick-last-devel-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: OpenEXR-devel(x86-64) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libImath.so.6()(64bit) エラー: パッケージ: ImageMagick-last-libs-6.9.1.2-1.el6.remi.x86_64 (remi) 要求: libIlmThread.so.6()(64bit)
手取り早く解決するためにCentOSのBaseレポジトリを利用すればよいです。
レポジトリの追加
CentOS-Base
[base] name=CentOS-6 - Base mirrorlist=http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
remi
ImageMagick-lastを入れるために利用
# yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
インストール
これでImageMagick-lastをインストールすればよいと思いきや、今度はlibwebpで依存関係がでます。 AmazonLinuxだとlibwebpのバージョンが0.3だから? なので、epelからwebpをインストールするようにすればOKです。
先にlibwebpだけをインストール。
# yum install libwebp-devel --enablerepo=epel --disablerepo=amzn-main
で、ImageMagickをインストール
# yum install ImageMagick-last ImageMagick-last-devel --enablerepo=epel,base,remi
参考
- http://qiita.com/mesiobass/items/eb230185169d572d1174
- 基本的に上記を参考にさせていただき、webp周りを追加した形になります
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コンソールからやったほうが早いです。
そもそも
みんなタグってどうやって管理しているんだろ。というかそもそも使ってないのか?ちょっと聞いてみたい。