ちょっと話題の記事

オバマ大統領選でも使われたAWS管理コンソールのNetflix Asgardとは?

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Netflix

netflix-001

Netflixはアメリカのオンライン映画配信サービス会社です。オンデマンドで映像を配信する仕組みを持っていて、現在約2700万人の顧客がいます。アメリカのダウンロードトラフィックの30%近くがNetflixではないかと言われるぐらいに大規模なサービスです。そして、AWSを使っています。昨年のAWSカンファレンス(re:Invent)でCEOが登壇していましたね。直前に発表されたAmazon S3の値引きをとても喜んでいたのが印象的でした。で、このNetflixは、世界最大のAWS事例ではないかと思うのですが、彼らが社内で作った運用・テストツールをオープンソースで公開しています。今回はこのNetflix OSSをご紹介しようと思います。

Netflix OSS

netflix-000

Netflix OSSには、彼らが実際に運用・テストで使っているツールをオープンソースで公開したものです。AWSの管理ツール、障害発生ツール、負荷分散、Cassandraの管理ツール、JMeterのプラグインなどです。

netflix-013

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

netflix-014

  • 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-004

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が使われているようです。

netflix-002

そして使えるようになりました!メニューを眺めますと見慣れない名前があります。アプリケーション(App)とクラスター(Cluster)です。ここら辺がAsgardの肝になりそうですね。

netflix-003

アプリケーションとは?

Asgardにおけるアプリケーションの概念を説明します。通常、AWS上で何かWebアプリケーションを作るときはELBとEC2を使うことが多いと思います。また、負荷に応じてインスタンスを増減させたい場合、CloudWatchとAuto Scalingを連携して使うこともよくあります。そこで、これらの標準的なセットを1つの単位としてアプリケーションと言っています。以下は、Netflixの方が公開しているSlideshareのスライドの一部です。

netflix-007

このアプリケーションを1機能単位として、複数のアプリケーションのオーケストレーション(協調動作)することで、1つのサービスが出来上がるんですね。こういったアーキテクチャーの基本は抑えておきましょう。

netflix-008

個別で管理するのはとても大変なのでアプリケーション単位で管理するとこんな感じ。見た目がすっきりしましたね。

netflix-009

クラスターとは?

クラスターは、あるアプリケーションのスタックを表したもので、複数のAuto Scalingグループを管理します。ここでいうスタックとは、例えば、開発環境・ステージング環境・本番環境といったものです。使い方の例としては、"api"というアプリケーションがあったときに、"usprod"というスタック名を付けたとします。このスタックには、Auto Scalingグループである(v000、v001等)が登録されており、バージョン管理されていて切り替えることができます。

netflix-011

ここで嬉しいのは、あるスタックのあるバージョンのデプロイ時に問題が発生したら即時に前のバージョンに戻せることです。

netflix-010

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に期待しています!

netflix-006

参考情報

netflix.github.io

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

「Obama For America」の開発チームが作り上げた大規模な選挙キャンペーンシステムの舞台裏(前編)

AWS 導入事例:「Obama for America」