ポンコツ.log

ひよっこエンジニアのちょっとしたメモ。主に備忘録。たまに雑記。

【gem】ec2sshが便利だったのでメモ

sshログインするとき、ssh_configにHostを設定して便利な使い方をしますが、EC2インスタンスのIPが変わる度に修正しないといけなかったりして、ちょいと手間が発生したりします。
ec2sshはその手間を解消してくれる便利Gemでした。

READMEの記述通りに作業して、さくっとインストール&初期化

$ gem install ec2ssh
$ rbenv rehash
$ ec2ssh init

何故か忘れやすいrehash
rbenvを使っていたのですが、rehashを忘れたままec2sshコマンドを叩いて怒られました。
rbenv-gem-rehashを使ってしまえば解消されるんですけどね…。
参考:Ruby - rbenv を使っているなら rbenv-gem-rehash を使おう - Qiita

initした段階で.ec2sshというファイルが作成されます。
この中でAWSのキーなどを指定しています。
デフォルトでは環境変数として指定されているので、環境変数に必要なものをexportします。
ここまで出来ればあとはコマンド1つ叩くだけ。

$ ec2ssh update

これで.sshディレクトリ配下のconfigファイルの中に、EC2上にあるインスタンスのHostを設定してくれます。
IPが変わった場合もec2ssh updateを叩くだけで更新してくれるので、書き換える手間もなし。便利。

GitHub - mirakui/ec2ssh: A ssh_config manager for AWS EC2

【イベント】Android祭に遊びに行きました

f:id:mr_96:20150622230827p:plain
昨日、祭 with Androidへ遊びに行ってきました。
ドロイド君かわいかったです。

初めてAndroidWearを身につけたのですが、予想以上に時計っぽくて驚きました。
遊び過ぎてフリーズさせてしまいましたが…。
AppleWatchはベルトも専用のベルト以外をつけると動かない仕様と聞きましたが、AndroidWearはそうでもなさそう。
スマホケースのようにデザイン性を持たせたサービスが出てきそうな気もします。
日本人的な感覚なのかもしれませんが、やっぱり時計に向かって話しかけるのは抵抗あるなあと思いました。
GoogleMapの利用シーンに入っていそうな駅付近だとそれなりに声も出さないと騒音に負けてしまうわけで。
うーん、慣れれば気にならなくなるのでしょうか。

密かに嬉しかったこととしては、太鼓のゲームでフルコンを叩き出したことでした。
太鼓の達人で爆笑される身としては思ってもいない出来事です。
f:id:mr_96:20150622231738j:plain

それにしても、こういったイベントの収支関係はどうなっているのだろう…。

【Ruby】EC2のインスタンスが取得できなくてはまったお話

AWS SDKを使ってAWSのEC2のインスタンス名を取得しようとしたものの、そもそもEC2のインスタンス一覧を取得すること自体できていなくてはまったお話。
下記ドキュメントを参考にコンソール上でお試し。
Class: AWS::EC2 — AWS SDK for Ruby - Amazon.com

S3の場合

> s3 = AWS::S3.new( : access_key_id => ACCESS_KEY_ID,
           : secret_access_key => SECRET_ACCESS_KEY)
=> <AWS::S3>
> s3.buckets.to_a
=> [#<AWS::S3::Bucket:BUCKET1>, #<AWS::S3::Bucket:BUCKET2>, …]

とするとS3上にあるバケット一覧が取得できる。(to_aメソッドで配列表示)
「いける…!」と思ったので、EC2でも同じようにしてインスタンス一覧を取得。
しようとしたものの、to_aメソッドを付けて見てみると、返ってくるのは空の配列でした。残念。

> ec2 = AWS::EC2.new( : access_key_id => ACCESS_KEY_ID,
             : secret_access_key => SECRET_ACCESS_KEY)
=> <AWS::EC2>
> ec2.instances.to_a
=> [ ]

ここではまりにはまって途方にくれていたところ、こんな記事を見つけました。
Rubyからaws-sdkを使ってEC2のインスタンスとEBSのボリューム一覧を取得する
よくよく見るとアクセスキーIDとシークレットキーID以外にリージョンも指定している…?
ということで、早速追加してみたところ、ちゃんとインスタンス一覧が取得できました。

> ec2 = AWS::EC2.new( : access_key_id => ACCESS_KEY_ID,
             : secret_access_key => SECRET_ACCESS_KEY,
                : region => REGION )
=> <AWS::EC2>
> ec2.instances.to_a
=> [ <AWS::EC2::Instance id:INSTANCE-ID1>, <AWS::EC2::Instance id:INSTANCE-ID2>,… ]