大瀧隆太(423)15この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。先週開催されたAWSの年次イベントre:Inventで発表された、OSSのコンテナスケジューラであるBloxを試してみた様子をレポートします。BloxとはBlox公式ページの説明を引用します。ECS向けのコンテナ管理&オーケストレーションツール群"という訳語が適当でしょうか。ECSには元々、クラスタ管理や簡易なコンテナスケジューラが組み込まれていますが、コンテナ配置についてはおおまかな設定ができる"Service"と、詳細に指定する"Task"の2種類で、その中間の位置づけとなるようないわゆるコンテナスケジューラはユーザーで用意してね、というスタンスでした。Bloxはこの領域をカバーするOSSとして公開され、現在はAWSが主体となって開発が進められています。現時点で用意されている、Bloxの実行方法は以下の2通りです。今回は比較的手軽に試すことができる、ローカルのDocker環境で試してみました。ローカルのDocker環境で実行する場合のアーキテクチャを以下に示します。ローカルとは言いつつ、AWSアカウントといくつかの最低限のサービスが構成として必要です。詳細は手順で後述します。Docker側は3つのコンテナが動作し、Bloxとしては以下2つのコンポーネントになります。ECSクラスタの作成Bloxの管理対象となるECSクラスタを作成します。クラスタの制約は特にないので、既存のクラスタがあればそれを利用しても問題ありません。試しに新規で作成するのであれば、ECSのウィザードで作成するのが良いでしょう。Eventsとそのイベントの保存先としてのSQSを、CloudFormationで作成します。cloneしCloudFormation実行時にテンプレートファイルを指定します。file://./deploy/docker/conf/cloudformation_template.jsonしばらく待つと、CloudFormationスタック(今回はスタック名BloxLocal)の作成が完了します。CloudFormationの管理画面から作成されたリソース一覧が確認できます。AWS側の準備はこれでOKです。Composeでまとめて管理します。Composeの構成ファイルであるdocker-compose.ymlはdeploy/docker/conf/ディレクトリにあり一部設定しなければならない項目があるので、あらかじめ確認しておきましょう。AWS_PROFILE)あり、実行する環境にあわせて変更する必要があります。今回は東京リージョンと、あらかじめ作成したIAMユーザー名bloxを設定しました。その他はそのままでOKです。"~/blox-state:/var/lib/etcd"schedulerとcssのvolumesを見るとわかりますが、コンテナからはMac側のAWSクレデンシャルファイルをマウントして上記のプロファイル名に対応するAPIキーを取得する形になります。AWSのAPI認証でエラーになる場合はこのあたりを見直しましょう。Composerを実行しコンテナを起動します。<コンテナ名>などでトラブルシュートしましょう。私の環境ではcssが起動しないトラブルに遭ったので、以下の記事にまとめておきました。参考になれば幸いです。Developers.IOこれで準備OKです。Schedulerそれぞれの動作を確認してみます。APIをサービスします。API一覧はGitHubのswagger.jsonで確認できます。試しにECSクラスタのインスタンス一覧をコールしてみましょう。1.11.2"}}]}$取得できる情報自体はECSのAPIと同等ですので、CSSはあくまでBloxスケジューラからECSを参照するためのAPIラッパーと考えるのが良さそうです。Schedulerです。Schedulerは見本のスケジューラとして提示されるもので、独自のスケジューラを実装するためのひな形として利用できそうです。今後新たなスケジューラを追加する予定とのことです(GitHubのREADMEの記述を引用します)。Schedulerは1インスタンス毎に1つのタスクを実行するシンプルなスケジューラです。ECSクラスタのインスタンス追加・削除に追随するようになっています。API一覧はGitHubのswagger.jsonで参照できます。/v1/pingで200レスポンスが返ってくるか、動作を確認しましょう。Schuedulerの動作を簡単に確認できるデモスクリプトがリポジトリのdeploy/demo-cli/にあるので、今回はこちらを利用します。Schedulerでは、タスクと実行するクラスタの組み合わせEnvironmentとして定義します。今回はディレクトリにあるサンプルファイルtask-definition.jsonからタスク定義を作成し、Environment作成時に指定してみます。}}$オプションで指定したEnvironment名(TestEnvironment)とレスポンスに含まれるデプロイメントトークンをデプロイ時に指定するので、覚えておきましょう。スケジュール設定をデプロイ(有効化)します。SchedulerはEnvironmentの定義に従い、インスタンス毎のタスク実行を管理するようになりました。ECSの実行タスク一覧を確認すると、定義したsleep300タスクが実行状態であることが確認できました!では、クラスタにインスタンスを追加してタスクの様子を見てみましょう。ScalingグループEC2ContainerService-default-EcsInstanceAsg-<ランダム文字列>のインスタンス数を1→2に変更します。Schedulerが捕捉、タスクが実行されるはずです。ECSタスク一覧を更新すると。タスクが増えていますね。スケジューラが動作していることがわかります。ちなみにこのsleep300タスクは名前の通り300秒(5分)sleepコマンドを実行して終了するタスクなので、デプロイから5分経つとタスクは一旦終了します。Schedulerはインスタンス毎にタスク実行を維持する機能があるため、終了を検知すると新たなタスクを実行するようにもなっています。停止タスク一覧でその様子が確認できます。まとめBloxの基本的な機能と動作を一通り解説してみました。現時点では特別なにかができると言ったものはないですが、ユーザーが独自にスケジューラを開発して組み込める点、今後コミュニティドリブンで新たなスケジューラが追加される点に期待していいのではないでしょうか。スケジューラが停止するとタスク管理も維持できませんので、高可用性を備えたAWS環境での構成も試してみたいところですね。4,230,037ゲストブロガーです。株式会社ソラコムでソリューションアーキテクトやってます。クラウドの自動化やIoT周りについての記事を書きます。〜ログ収集、監視、分析を触って体感しよう!〜」を開催しますお申し込み受付は終了しました。ありがとうございました。今後セミナーのお知らせを受け取りたい方は、こちらからご登録をお願いします。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。平野重利123Pythonで、標準入力を変換して標準出力に出すCLIプログラムのテンプレートをご紹介します。菊池修治47こんにちは、菊池です。勉強会#1に登壇しました。サーバのみならずネットワーク機器の仮想化も年々進んでいます。スペックに縛られないこととか、展開のしやすさとか初期考慮点が少なくなるのは嬉しいです。武田隆志1098このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。悠紀235ShifterはWordPress環境をサーバーレスで立ち上げ、静的なサイトを生成することができるサービスです。FAQサイトをサクッと作ってみました。Takumi227こんにちは。DA事業本部の春田です。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。