オバマ大統領選でも使われたAWS管理コンソールのNetflix Asgardとは?
Netflix
Netflixはアメリカのオンライン映画配信サービス会社です。オンデマンドで映像を配信する仕組みを持っていて、現在約2700万人の顧客がいます。アメリカのダウンロードトラフィックの30%近くがNetflixではないかと言われるぐらいに大規模なサービスです。そして、AWSを使っています。昨年のAWSカンファレンス(re:Invent)でCEOが登壇していましたね。直前に発表されたAmazon S3の値引きをとても喜んでいたのが印象的でした。で、このNetflixは、世界最大のAWS事例ではないかと思うのですが、彼らが社内で作った運用・テストツールをオープンソースで公開しています。今回はこのNetflix OSSをご紹介しようと思います。
Netflix OSS
Netflix OSSには、彼らが実際に運用・テストで使っているツールをオープンソースで公開したものです。AWSの管理ツール、障害発生ツール、負荷分散、Cassandraの管理ツール、JMeterのプラグインなどです。
AWSに関連しそうなものを紹介しますね。
- Aminator : CentOSとRHELからEBSベースのAMIを作成するツール
- Asgard : AWSのアプリケーションデプロイと管理をするWebコンソール
- Edda : AWSへのリソースアクセスに関して変更履歴を取るツール
- Eureka : RESTベースでミドル層のロードバランシングとフェイルオーバーを行うツール
- Frigga : Asgardで管理しているAWSオブジェクト名をパース・生成するツール
- SimianArmy : 名前の意味はサル軍団。AWSを正常な状態に保つためのツール群を提供する。
ちなみに、Chaos Monkeyを聞いたことがある人はAWS通だと思うんですが、最近のNetflix Tech Blogを見ると以下のようなものも出てくるようですw
- Chaos Monkey : インスタンス障害をシミュレートするツールのようです。
- Chaos Gorilla : AZ障害をシミュレートするツールのようです。
- Chaos Kong : リージョン障害をシミュレートするツールのようです。
- Janitor Monkey : リソースの削除をしてクリーンな状態にするツールのようです。
- Security Monkey : EC2のセキュリティグループやIAM Role、S3アクセスコントロールなどの変更履歴を監視するツールのようです。
- Howler Monkey : SSLの有効期限切れを監視するツールのようです。
- Latency Monkey : 遅延とエラーを発生させるツールのようです。
- Circus Monkey : テストの実施自体を不可分散させるツールのようです。
オバマ大統領選
私がNetflix OSSに注目したのは、オバマ大統領選でオバマ陣営(Obama for America)がAWSを使い勝利に貢献したと言われていたためです。その際に使われたAWSの構成図があるのですが、Webサーバのデプロイ管理にNetflix Asgardが使われていました。これは使ってみなければということでご紹介しようと思います。
Netflix Asgard
AWSは、全ての機能に対する操作インタフェースとしてAPIを提供しています。コマンドラインから全ての機能を使うことができますが、Webコンソールでは使用頻度の高い一部の機能だけが提供されています。Asgardは、AWS標準の管理コンソールでは提供していない様々な機能をWebコンソールとして提供しています。また、RESTベースで呼び出すこともできますので、運用管理ツールのコンポーネントとしても利用することができます。ここでは、セットアップと基本的な使い方をご紹介します。
Asgardのセットアップ
Asgardは、Tomcatで動きます。Amazon Linuxでセットアップしましょう。インスタンスはt1.microだとちょっと厳しいかもしれません。m1.smallで立ち上げます。セキュリティグループで8080ポートを開けておいてください。tomcat込みasgardのjarファイルを一旦S3に上げてからダウンロードしています。
$ wget http://file.akari7.net/asgard-standalone.jar $ java -Xmx1024M -XX:MaxPermSize=128m -jar asgard-standalone.jar &
これでインストールは完了です。早速ブラウザで確認してみましょう。まずはAWSにアクセスするためにカギを設定します。自分の情報を入力し終えたら初期処理が始まりましたね。お、Asgard内部ではGrails(Groovy)とSpringが使われているようです。
そして使えるようになりました!メニューを眺めますと見慣れない名前があります。アプリケーション(App)とクラスター(Cluster)です。ここら辺がAsgardの肝になりそうですね。
アプリケーションとは?
Asgardにおけるアプリケーションの概念を説明します。通常、AWS上で何かWebアプリケーションを作るときはELBとEC2を使うことが多いと思います。また、負荷に応じてインスタンスを増減させたい場合、CloudWatchとAuto Scalingを連携して使うこともよくあります。そこで、これらの標準的なセットを1つの単位としてアプリケーションと言っています。以下は、Netflixの方が公開しているSlideshareのスライドの一部です。
このアプリケーションを1機能単位として、複数のアプリケーションのオーケストレーション(協調動作)することで、1つのサービスが出来上がるんですね。こういったアーキテクチャーの基本は抑えておきましょう。
個別で管理するのはとても大変なのでアプリケーション単位で管理するとこんな感じ。見た目がすっきりしましたね。
クラスターとは?
クラスターは、あるアプリケーションのスタックを表したもので、複数のAuto Scalingグループを管理します。ここでいうスタックとは、例えば、開発環境・ステージング環境・本番環境といったものです。使い方の例としては、"api"というアプリケーションがあったときに、"usprod"というスタック名を付けたとします。このスタックには、Auto Scalingグループである(v000、v001等)が登録されており、バージョン管理されていて切り替えることができます。
ここで嬉しいのは、あるスタックのあるバージョンのデプロイ時に問題が発生したら即時に前のバージョンに戻せることです。
REST API
AsgardにはRESTを使って各種リソースにアクセスできるAPIが用意されています。使い方カンタンです。ここらへんは、AsgardがGrailsで作られているため実現できる機能ですね。Asgard以外のものと連携して動くときには大変ありがたい機能です。Obama for Americaの図ではPuppetが書いてありましたので、おそらく連携しているのでしょう。
$ wget -o http://54.249.41.41:8080/ap-northeast-1/instance/list.json $ cat list.json [ { "amiId": "ami-173fbf16", "appInstance": null, "appName": null, "autoScalingGroupName": "helloapp-e-v001", "class": "com.netflix.asgard.MergedInstance", "ec2Instance": { "amiLaunchIndex": 0, "architecture": "x86_64", "blockDeviceMappings": [ { "class": "com.amazonaws.services.ec2.model.InstanceBlockDeviceMapping", "deviceName": "/dev/sda1", "ebs": { "attachTime": "2013-04-14T07:15:55Z", "class": "com.amazonaws.services.ec2.model.EbsInstanceBlockDevice", "deleteOnTermination": true, "status": "attached", "volumeId": "vol-1d58073f" } } ・・・
まとめ
まずはNetflix OSSってのがあるよってことで名前だけ覚えてもらえればと思います。次回以降、実際に使いながらどんなことができるのか確認したいと思います!そういえば、Asgardの仕組みってどこかで見たことありません?ピンときた方はAWS通です。そう、AWS Elastic Beanstalk(EB)と似ているんです。Asgardでは、アプリケーションとクラスターとAutoScaling グループのバージョンを管理しますが、 EBでは、アプリケーションと環境( Environments)とバージョンの組み合わせで管理しています。どっちかが真似たというよりも開発チームが裏で繋がっているのではと見ていますw。だって、AWSにとってNetflixは最大の顧客のひとつなのですから。天空王国に伸びる豆の木って感じしませんか?
おまけ
以下は、筆者がObama for AmericaのメンバーであるMiles WardさんとJAWS DAYSで撮った一枚です。世界を動かす人たちと会って話すのはワクワクしますね!あ、そうそう、Netflixでアンパンマンは観れないのでしょうか。今後のNetflixに期待しています!
参考情報
The Netflix Tech Blog : Python at Netflix
The Netflix Tech Blog : First NetflixOSS Meetup
Asgard, the Grails App that Deploys Netflix to the Cloud
Netflix Asgard : Quick Start Guide
The Netflix Tech Blog : REST API
Obama for America on AWS - Infrastructure Architecture