はじめに
みなさん、こんばんは。某 Sier でクラウドアーキテクトをやってます、しいくまと申します。
コンテナーを勉強中ですので、コンテナー関連のブログを書き溜めていこうと思います。
普段仕事では Azure をメインで触っていますので、今回は AWS の方のコンテナーサービスである Fargate を使ってみたいと思います。
コンテナーとは
サービスの説明の前に、コンテナーってなんぞやという方!
コンテナーとは、ざっくり言うと仮想化の技術のひとつです。
従来の VMware などの仮想化は、ハードウェアを仮想化し、仮想ハードウェアレイヤー以上を個別に仮想化していました。
このやり方ですと、1 台の物理サーバー上に複数の仮想サーバーを立てることができるといったメリットがありました。
仮想化ソフトウェアといえば、VMware がとても流行ったのが記憶にあるかと思います。
わたしも VMware ユーザーでした。
なのですが、仮想サーバーが増えるということは OS も増えるということです。
OS が増えるということはその分管理するタスクも増えます。(特に Windows のパッチ適用はどの企業も課題かと思います...)
また、仮想サーバー上のアプリケーションから物理ハードウェアにリーチするまでのオーバーヘッドが多少なりかかってしまいます。
そこで登場するのがコンテナーです。
コンテナーとは簡単に申し上げますと、アプリケーション実行環境以上を仮想化する技術です。
ひとつの OS 上に論理的に独立させたアプリケーション実行環境を作り、アプリケーションが動作します。
そのため、管理する OS は 1 つで済むのです。
あの Docker がコンテナー管理ソフトウェアにあたります。
緑色に囲っている部分がコンテナーになります。
コンテナーの中身は、アプリケーション実行環境とアプリケーションになります。
わたしは下記書籍で勉強しています。
手を動かしながら学べるので、なんとなく知った気以上にはなれます。
みなさまもぜひポチってみてください。 (決して回し者ではございません)
AWS Fargate とは
AWS 公式な情報ですと下記ブログが参考になるかと思います。
AWS Fargate is an easy way to deploy your containers on AWS.
直訳しますと、
AWS Fargateは、コンテナをAWSにデプロイする簡単な方法です。
だそうです。
コンテナー管理ソフトウェアレイヤー以下はクラウドベンダーがやるぜ。
コンテナー以上をよろしくどうぞ。っていう感じで、とっても優しいです。
上記図の赤い部分が、AWS Fargate になります。
ちなみに、Azure でいうと、Azure Container Instance (ACI) というのがそれにあたります。
実際に試してみた
では、どれだけ簡単なのか試してみようということで、
簡単ですが Web サーバー (Nginx) を立てて、確認してみたいと思います。
手順は以下のとおりです。
1.クラスターの作成
2.タスク定義の作成
3.タスクの実行
4.稼働確認
5.タスクの停止
Fargate ですと、タスクと呼ばれているものがコンテナーにあたります。
イメージとしては下記のような形です。
一番下にクラスターという入れ物があって、
その上でタスク (コンテナー) が稼働します。
Fargate はタスクが実行されている間、課金をされます。
ですので、使わないときは停止させておきましょう。
タスクの定義を消す必要はありません。
1.クラスターの作成
クラスターを作成します。
マネジメント コンソールより、サービスの検索にて、「fargate」と入力します。
ECS (Elastic Container Service) を選択してください。
ECS は AWS のマネージド コンテナーオーケストラーサービスになります。
別途ご紹介したいと思います。
[クラスターの作成] を選択します。
[AWS Fargate を使用] を選択し、右下の [次のステップ] を選択します。
任意のクラスター名を入力し、[作成] を選択します。
下記画面が表示されればクラスターの作成が完了です。
2.タスク定義の作成
タスク定義を作成します。
右ペインより [タスク定義] を選択し、[新しいタスク定義の作成] を選択します。
起動タイプは [FARGATE] を選択し、右下の [次のステップ] を選択します。
任意のタスク定義名を入力します。
[タスクメモリ] および [タスク CPU] を選択します。
今回は検証ですので、最低限のスペックとしています。
[コンテナの追加] を選択します。
任意のコンテナ名を入力し、イメージは [nginx] と入力します。
[Command] に下記を入力します。
CMD-SHELL,curl -f http://localhost/ || exit 1
このコマンドはヘルスチェックに使いたいコマンドとなります。
今回の Web サーバを想定しているので、
自身で curl を投げて、80 番ポートが生きているかの確認になります。
下記のパラメータを入力します。
(Interval) 30 秒おきに上記 Command を実行し、
(Timeout) 5 秒感応答がない場合は失敗とみなし、
(Retires) 3 回失敗するまでリトライする。
とういう設定になります。
ですので、障害検知までに、
30 秒 + 5 秒
30 秒 + 5 秒
30 秒 + 5 秒
30 秒 + 5 秒
= 140 秒 (約 2分半) かかるということですね。
(Start period) は起動時間を失敗とみなさないための猶予期間となります。
環境はそのまま
ネットワーク設定もそのまま
ストレージとログもそのまま
リソースの制限および DOCKER ラベルもそのままにし、[追加] を選択します。
[作成] を選択します。
下記画面が表示されればコンテナー定義の作成は完了です。
3.タスクの実行
作ったタスク定義を実行します。
右ペインより [タスク定義] を選択し、[アクション] - [タスクの実行] を選択します。
起動タイプは Fargate を選択します。
任意の VPC およびサブネットを選択し、[タスクの実行] を選択します。
下記画面が表示されればタスクの実行は完了です。
4.コンテナーの稼働確認
実際にアクセスしてみます。
クラスター管理画面より、対象のタスクを選択します。
Public IP が割り振られている IP アドレスになります。
この情報をコピーして、
ブラウザからアクセスすると、、、
応答がちゃんと返ってきました!
無事稼働しているようですね。
5.タスクの停止
タスクを停止させます。
停止対象のタスクにチェックをして、[停止] を選択します。
停止確認をされますので、[停止] を選択します。
下記画面が表示されればタスクの停止は完了です。
さいごに
だいぶざっくり手順で申し訳いないです...
ただ、Azure の ACI と比較すると少し手順が多めかなという印象でしたが、
それでもポチポチですぐにデプロイすることが可能でした。
また、使った分だけ課金、Pay as you go ですので、ぜひ利用してみてください。