2012年1月16日月曜日

2012年1月3日火曜日

Amazon Linuxで使われてるcloud-initをCentOS6で使ってみる

新年あけましておめでとうございます。
年明け最初の更新をこんなに早くするとは自分でも驚きですが、今年もブログをゆるく継続していきたいと思います。

さて、AWSを使用している方はAmazon Linuxに興味を持った事があると思います。
Redhat系のディストリビューションを使用していた方は操作感も近くてスイッチしやすいのではないでしょうか?
私も何度かAmazon Linuxを使用しましたが、その中でcloud-initってとても便利だなと思いました。
cloud-initはもともとUbuntuに搭載されたクラウド環境でのセットアップツールみたいですが、Amazon Linuxではこの機能が標準で移植されております。
個人的にはChefとかよりもチャラく使えるようなイメージでしょうか。。。
AWSで提供されているUbuntuやAmazon Linuxはcloud-initを使って、指定したSSH公開鍵の設置や、セキュリティアップデートなどが行われているようです。
自前でCentOSなどのAMIを作成した経験がある方はSSHの公開鍵を設置するスクリプトを使った事があると思いますが、Amazon Linuxではcloud-init経由でec2-userに公開鍵を設置しているのですね。

『なるほどー、これはCentOSでも使ってみたいですよねー』というネタです。

■AmazonLinuxで使用されているcloud-initのsrpmを取得する

Amazon Linuxで以下のようにコマンドを実行すると/usr/src/srpm/debug/以下にsrpmが保存されるので、これをCentOSでビルドします。
■CentOSでcloud-initのrpmを作成する

ビルドに必要なライブラリをインストールします。
epelをyumのリポジトリに追加している方はPyYAMLとlibyamlもyumでインストールが出来ると思います。
次に事前に転送しておいたcloud-initのsrpmをビルドします。
一部specファイルを以下のように編集しています。
■インストール

作成されたcloud-initのrpmをインストールします。
specファイルを見ると分かりますが、インストールするとec2-userやsudoの設定が追加されます。
■動作確認

インストールしたインスタンスからAMIを作成し、以下のようなUserDataを指定して起動してみました。
無事にec2-userへの公開鍵登録と 指定したパッケージがインストールされていましたよ:)
こんな事するならAmazon Linux使った方が(ryという突っ込みはご勘弁下さい:D

2011年12月25日日曜日

Vyattaを使ってElastic Network Interfaceの動作確認をしてみる

先日、AWSから新しいサービスElastic Network Interfaceがリリースされました。
簡単に言うとAmazon VPC内のインスタンスにNICの二枚差しが可能になるサービスなようです。
今までAWSのインスタンスはeth0しか使えなかったので、これは便利になりそうです。
VPC内のネットワーク構成の幅が大きく広がるようなサービスなので、少しだけ触ってみました。

二枚差しって事はVPC内のルーティングテーブルを使わずにVyattaとかでルーティングしたりNATしたり出来るので、それを試します。
※ちなみにこちらにあるように、今までもNAT Addressingを使ってNATをする事は出来ました。
今回テストをした構成は以下のようなイメージとなります。

Vyattaは@j3tm0t0さんが作成されたAMIを使用させて頂きました。
※ENIはManagement Consoleからも作成可能で、インスタンス起動時/起動後どちらでも追加する事が出来ます。
※インスタンス起動後にChange Source/Dest CheckをDisableにする事をお忘れなく。

■割り当てたローカルIPと同じ設定をVyatta側に設定します
■Vyattaで行うNATの設定を行います
■確認用インスタンスAの起動直後のルーティングテーブルは以下のようになっています
■確認用インスタンスAに以下のようなルーティングを追加してみます
■設定後のルーティングテーブルは以下のようになります
■インスタンスBへの疎通テストを行ってみます
■インスタンスBへの経路を確認するとVyattaを経由している事がわかります
■インスタンスAからインスタスBにアクセスしてNATが動作しているかApacheのアクセスログを見て確認してみました
今回はインスタスAからインスタンスBでNATされていますが、NATせずルーティングのみさせた場合はNetwork ACLsも動作します。
まだ触り始めたばかりですが、ENIはVPCで色々なネットワークを構成出来るのでインフラエンジニア的にはとてもワクワクしますね!

2011年11月30日水曜日

RDSの自動停止、自動起動スクリプト(right_aws)を作る











前回から一ヶ月以上経過していて相変わらずブログの更新が滞り気味ですが、引っ越しなどをしていた訳です。
ちなみに、引越で一番大事にしたポイントはPC作業を行うための机と椅子これに限ります!

3月11日から数日は自宅でお仕事をしていたのですが、ちゃぶ台にPCとか腰が爆発しちゃいます(汗)
家で仕事したいわけじゃないですが、ブログ書いたり勉強したりする時には重宝しますよねー。
こうしてブログを書いている今も机と椅子のありがたさを実感しております。
そんな訳でこれからはブログの更新頻度がアップしないとかしないとか(汗)

今回もAWSネタなのですがRDSを使っているとどうしても一時停止が出来ない事に不便さを感じますよね。
RDSを使ってる方は既に同様の事をしているかと思いますが、私もスナップショットとリストアを組み合わせた停止/起動スクリプトを作ってみました。
パッと思いつく自動化したいポイントは以下のとおりです
  • RDSのスナップショットを作成した上での停止
  • 最新のスナップショットからの起動
  • スナップショットからRDSをリストアした時にセキュリティグループを割り当て
  • スナップショットからRDSをリストアした時にパラーメタグループを割り当て

※cronとかに登録すれば起動中、停止中を判断して自動で起動したり停止したりします。
※AWSSDK for Rubyを使いたかったのですが、RDSに未対応なのでright_awsを使っています


指定するパラーメタグループはMySQLのバージョンと合わせないとエラーになってしまいます。
また、現状ではスナップショットを削除する処理が入っていません。
入れた方が便利かなと思いつつ、どんな条件で削除するか悩み中。
スナップショットが特定の数以上になったら余分な数を消すって感じが一番事故がなさそうか。。。

ただ作っておいてなんですが、
そのうちRDSで停止がサポートされてこんなスクリプト必要なくなるんだろうなー。

2011年10月10日月曜日

Vyattaを使ってAmazon VPC内に独自NAT環境を作る

このブログでクラウド関連の話題というと、ほとんどRackspace Cloudばかりなのですが…
今回のエントリは珍しくAWSをテーマにしてみたいと思います。
Twitterを見ているとVyattaが最近アツく、個人的にも書籍を購入したのでAmazon VPCと連携させたいです。
AWSではVPCネットワークから外部へ接続するためのNATアドレッシングインスタンスが提供されておりますが、こちらをVyattaに置き換えて使ってみるという事です。
今回はNATを構成するだけですが、Vyattaは機能が豊富で様々な可能性をVPCに付け加える事が出来そうです。
ちなみに先日Vyatta社からアナウンスされた6.3のAMIはSubscription Editionということなので、今回はVyatta Core6.1のAMIを使用しています。



[ネットワーク構成]

[VPCの設定]
VPC内にはVyattaを起動する公開サブネットと、Webサーバを起動する非公開サブネットの2つを用意します。

[Vyattaインスタンスを起動]
今回はこちらのAMIを使用し、インスタンス起動後にはSouce/Dest. CheckをDisableとします。
この設定はVyattaインスタンスを起動後にインスタンスを選択して、右クリックのメニューから変更が出来ます。
VPC内でElastic IPを取得してVyattaインスタンスに割り当てる事も忘れずに!
このIPを使用してWebサーバは通信をします。

[ルートテーブル]
Management Console(VPC)のRoute Tableメニューで公開用/非公開用のルートテーブルを設定します。
公開用サブネットはデフォルトルートがインターネットゲートウェイとなり、非公開用はVyattaインスタンスのinstance-idを指定します。

[セキュリティグループ]
Vyattaに割り当てるセキュリティグループは、Webサーバからの必要な通信をブロックしなければ自由に設定可能です。
また、VPCで設定可能なネットワークACLも同じように自由に使えました。

[Vyattaインスタンスの設定]
起動したVyattaインスタンスにSSH接続し以下のような設定を行います。
[Webサーバインスタンスの起動]
それでは動作確認用に適当なインスタンスを非公開用セグメントで起動します。
インスタンス起動後は外部接続の動作確認を行い、Apacheをインストールしました。
[ブラウザから動作確認]
Vyattaに割り当てたElastic IPにポート8080番を指定してアクセスすると以下のようにWebサーバに転送されました。

※おまけ
実はこの構成でVPCのDHCP Options Setを無効にしてDHCPサーバも動かそうとしたのですが、VPCもブロードキャストの通信がサポートされてないという事なので断念しました(汗)

[投入を予定していたDHCP関連の設定]

AWSが提供しているNATアドレッシングインスタンスも便利ですが、Vyattaユーザやルータの設定経験がある方はこのような構成にした方が理解しやすい部分もありそうですね。

[参考資料]