Chaos ConoHa


この記事は、「ConoHa Advent Calendar 2016」の15日目です。

Chaos Monkey

クラウド時代の耐障害性という話題の中で、必ず話題に上がる非常に有名なNetflix製のOSS、Chaos Monkeyというものがあります。いまは、いろいろなツールを詰めあわせてSimian Armyという名前になっているらしいですが、非常に有名でユニークなプロジェクトです。

Chaos Monkey でググるとだいたいどのようなものかはおわかりいただけると思いますが、かいつまんで説明すると、AWS上に構成されているプロダクション環境のEC2インスタンスを、定期的にランダムに落とすというものです。混沌の猿が、AWSのデータセンターの電源でも抜いてるイメージなのでしょう。とにかく、日常的に意図的にマジな障害を発生させることで、普段から耐障害性のあるサービスやインフラストラクチャを構築でき、いざ実際に大規模な障害が発生した時に、何も焦ること無くサービスを復旧させることが出来るという、とても素晴らしい考え方に基づいたものです。

ConoHaのデータセンターでは、おそらく混沌の猿は飼っていないと思いますが(ConoHaのサービスがOpenStackで出来ており、かつSimian ArmyもOpenStackに対応しているので、もしかしたら本当に飼っているかもしれませんが、それは知りません)、ConoHaのデータセンターには座敷わらしが住んでいることで有名です。

はい、そうです。我らがこのはちゃんです。

実に悪いことしそうな顔清楚かわいい感じですね。

このはちゃんは座敷わらしだそうです。最近知ったのですが、設定によると我々には見えないらしいので、データセンターで何やってても不思議じゃないですね。うっかり足を引っ掛けてサーバーの電源を引っこ抜いたり、余計なおせっかいを働かせて新しいサーバーを追加してくれたり、使ってないと勘違いし気を利かせてサーバーを削除してくれたり。

なんか、しそうじゃないですか?

Chaos ConoHa

まあ、なんかもう大体想像ついてると思いますが、ConoHaのAPIを使ってなんか悪い事するbotを書きます。

一応言っておきますが、これは去年のACで作ったConoHa APIのGemを全くメンテしてないなぁという気持ちから、とりあえずなんか作ってみるかという感じで作っただけで、一切役に立つ機能はありません。マジでプロダクション用のConoHaアカウントで軽々しく実行したりしないでください。ConoHaちゃんのAPIトークンには権限とかないゆるふわ仕様なので、座敷わらしが一回トークンを知ったら最後、何でもやりたい放題です。

こちらが完成したものになります。

https://github.com/kinoppyd/chaos-conoha

こいつを起動するスクリプトを書いて、後はcronにでも登録すれば、一定周期でChaos ConoHaがなんかします。

した結果をSlackにも通知してくれるようにしたので、なんか悪いことしたら喜んで報告に来てくれるでしょう。

今のところ作っておいた悪いことリストは

  • ランダムで勝手にVMを追加する
  • ランダムで勝手にVMを強制停止する
  • ランダムで勝手にVMを削除する
  • ランダムで勝手にVMを再起動する

なんかこれ以上は怖いのでやめました。

VMの追加に関しては、OSのイメージ名とVMのタイプを指定するのですが、両方一覧からランダムに選びます。

っていうか、VM削除する機能はマジでちょっとどうかとと思います。

はい、それでは実行してみます。

Gemの中に実行形式のファイルがあるので、bundlerを使えばそのまま実行できます

はい、これで上の4つのアクションの内、どれか一つをランダムで実行します。マジでランダムで、本気で停止とか削除しに来るので、本当に気をつけてください。

で、なんどか実行してみました。

screenshot-from-2016-12-15-020405

あああああああああああああああああああああああああああああああああちょ

(フィクションです)

(フィクションですが、消えたサーバーの上で動いているサービスはすべてDokkuで動いているので、いつ消えても大丈夫なImmutableな状態です。なので、新しくVPNを追加して、Dokkuをセットアップすれば、20分くらいで復旧出来ましたよ)


この記事はプログラミング, ポエムに投稿されました. このパーマリンクをブックマークする。 コメントを投稿するか、トラックバックをどうぞ: トラックバック URL.

コメントする

あなたのメールは 絶対に 公開されたり共有されたりしません。 * が付いている欄は必須項目です

次の HTML タグと属性が使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*
*