[初心者向け]コンテナのメリットをおさらいしながら、Amazon ECSでお手軽サービス作成してみた

ECSのチュートリアル&ウィザードで、コンテナを使ったサンプルアプリケーションを作成してみました。 「docker?コンテナ?なんだか難しそう……」と今まで触れることを避けていましたが、超簡単にWebページのデプロイ&表示を行うことができました!
2020.08.19

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

こんにちは。オペレーション部のもっさんです。
Amazon Elastic Container Service (Amazon ECS) は、AWS上で手軽にDockerコンテナを利用できるフルマネージド型サービスです。
今回はAWS公式のチュートリアルで、サンプルアプリケーションを作成していきます。

「docker?コンテナ?なんだか難しそう……」と今まで触れることを避けていましたが、AWSの起動ウィザードを利用して簡単にWebページのデプロイ&表示を行うことができました!

そもそも「コンテナ」とは?

ここでの「コンテナ」とは、「コンテナ型仮想化」のことを指します。
コンテナ以外の「ホスト型仮想化」や「ハイパーバイザ型仮想化」では、サーバマシンに上にホストOSや仮想化ソフトウェア・ハイパーバイザなどを起動させています。
これらが分割し割り当てたリソースの中で各ゲストOSを起動させ、さらにその上でアプリケーションが起動しています。このゲストOS〜アプリケーションのひとかたまりを、「仮想マシン(VM)」とも呼びます。

コンテナ型仮想化はサーバマシンにインストールされているコンテナエンジンがリソースを分割し、その中でアプリケーションやライブラリを動作させます。
このアプリケーションやライブラリをまとめたものを「コンテナ」と呼びます。

各仮想マシン内ではそれぞれゲストOSが動作している必要がありますが、各コンテナ単位ではゲストOSを起動させる必要はありません。各コンテナは、サーバマシンにインストールされているものと同一のOS上で動作します。

そのため、仮想化ソフトウェアやゲストOSの起動のためのリソースや時間が不要となり、コンテナではより軽く、高速にアプリケーションを起動することができます。

文章のみだと少しややこしいので、図にしてみました。

使用するチュートリアル

ドキュメント、およびECSの初回起動ウィザードの手順通りに進めていきます。
ドキュメント


ECS 初回起動ウィザード
AWSマネジメントコンソールにログインした状態で、下記リンク先にジャンプしてください。
ECSの初回起動ウィザードが開始します。
https://ap-northeast-1.console.aws.amazon.com/ecs/home#/firstRun

やってみる

ウィザードに従って、4ステップの作業を実施します。

  • 使用するコンテナイメージを定義する
  • タスク定義作成時のパラメータを指定する
  • サービスを定義する
  • クラスターの設定を行う

使用するコンテナイメージを定義する

使用するコンテナイメージを定義します。
コンテナイメージでは、たとえば「どのWebアプリケーションサーバーを利用するのか」を選択できます。
今回は、コンテナイメージはApacheを選択します。


タスク定義作成時のパラメータを指定する

タスク定義では、タスク実行時に使用するロールや、1つのコンテナ毎に利用するメモリ・vCPUの数を定義します。
設定見出し名の右側の[編集]からカスタム値を指定することも可能ですが、今回は前述の[コンテナイメージの定義]で自動選択されたデフォルト値を利用します。


サービスを定義する

タスクの同時実行数や、ロードバランサ利用の有無を選択できます。
今回は[必要なタスクの数]はデフォルトの 1 、ロードバランサーの利用は[なし]を選択します。


[必要なタスクの数]と聞くとECS特有の難しい設定のように感じますが、EC2でのAuto Scalingの同時実行数と同様のものと考えましょう。

クラスターの設定を行う

クラスターを配置するVPCやサブネットを指定できます。今回はデフォルトの[自動的に新規作成]から変更しません。
クラスター名は任意のものを指定してください。


[次]をクリックすると確認画面が表示されます。[作成]をクリックして先へ進むと、サービス作成の進捗状況が表示されます。
すべての作成タスクが完了するまで、3〜5分ほどかかります。
[サービスの準備中:9/9 完了]と表示されるまで、少し待ちましょう。

作成完了後、右上の[サービスの表示]ボタンをクリックすると、サービスの詳細情報が確認できます。
ただ、これでは本当にサービスが作成されたのか、実感がわきにくいですね。


確認してみる

そこで、実際にサンプルアプリケーションが動作していることを、Webページを表示して確認してみましょう。
サービスの詳細情報の下部の[タスク]タブをクリックし、表示されているタスク名をクリックします。
タスクの詳細が表示されます。[詳細]タブの[ネットワーク]に表示されてるパブリックIPへ、Webブラウザからアクセスします。


サンプルアプリケーションが動作していることが確認できました!

ちなみに、サービスの作成はCloudFormationを用いて行われるため、CloudFormationのスタックも同時に作成されます。

リソースの削除

今回のチュートリアルで作成したリソースを削除するには、ECSコンソールから[クラスターの削除]を行うか、CloudFormationのスタックを削除します。

さいごに

所感ですが、ホスト型仮想化やハイパーバイザ型仮想化では「イメージ」というとOSから含むため、その中のアプリケーションから選択して設定していくのは新鮮な体験でした。
理屈を学んでいても、実際に設定してみるとさらに「面白い!」と感じることはありませんか?私はこの設定の時に感じました。
「コンテナ、Docker、Fargate……なんだか難しそう」と思っている方、まずはチュートリアルと初回起動ウィザードで、簡単にコンテナサービスの作成を体験してみませんか?