【ECS入門】Fargateを使ってコンテナをデプロイしてみよう!

記事タイトルとURLをコピーする

こんにちは!エデュケーショナルサービス課の佐藤です。
最近、AWSトレーニングのご相談の中で、コンテナやサーバーレスのご要望が増えています。
コンテナはアプリケーションの開発・運用を効率化する強力な仕組みですが、いざ始めようとすると「どこから手をつければいいのか分からない」という方も多いのではないでしょうか?

そこで、この記事ではAmazon ECS(Elastic Container Service)を使ってサンプルアプリケーションをデプロイするまでの手順をハンズオン形式でご紹介します。

リソースの作成から動作確認、リソースの削除まで含めても、30分ほどで実施できる内容となっていますので、是非とも試してみてください!
なお、使用するコンテナイメージとしては、AWSが提供するサンプルイメージ(amazon/amazon-ecs-sample)を使い、インフラストラクチャはFargateを使います。

Amazon ECSの主要コンポーネントについて理解する

Amazon ECS(Elastic Container Service)は、AWS上でコンテナ化されたアプリケーションの効率的なデプロイ、管理をすることができるフルマネージドなコンテナオーケストレーションサービスです。

AWSのコンテナオーケストレーションサービスにはAmazon EKS(Elastic Kubernetes Service)もありますが、Amazon ECSの方がAWSクラウドに最適化されており、学習コストも低いため、特殊な要件が無い場合にはAmazon ECSを利用することを推奨します。

まずはAmazon ECSの仕組みを理解する上で欠かせない4つの主要なコンポーネントを簡単にご紹介します。
この4つが連携して、ECS上でコンテナアプリケーションを動かす仕組みを構成しています。

  • クラスター
    • コンテナを実行する基盤(どこで動かすか)
    • EC2、Fargateを選択可能
    • Fargateはコンテナ用サーバーレスサービスであるため、運用管理が不要
  • タスク定義
    • コンテナを実行するための詳細な設計図(何をどう動かすか)
    • どのコンテナイメージを使うか、CPUやメモリをどれくらい割り当てるかなどを指定する
  • タスク
    • タスク定義に基づいて実際に実行されるコンテナのインスタンス(実際に動くもの)
    • ECSにおけるデプロイと実行の最小単位
    • タスク定義に記載された1つまたは複数のコンテナが協調して動作する
  • サービス
    • タスクを継続的に動かす仕組み(止まらないようにする)
    • タスクが停止した場合に自動で再起動したり、必要なタスク数を常に維持する設定を行う

それでは、実際の手順をご紹介していきます。

ECSでアプリケーションを動かす流れ

Step1:クラスターを作成する

まずはアプリケーションを動かすための基盤となるクラスターを作成します。

  1. AWSマネジメントコンソールにログインし、ECSのコンソールに移動します。
  2. 左側のナビゲーションペインから「クラスター」を選択し、「クラスターの作成」をクリックします。
  3. クラスター名に任意の名称入力します。(例:test-ecs-cluster)
  4. インフラストラクチャは、「AWS Fargate(サーバーレス)」にのみチェックを入れます。
    補足:EC2を選択する場合、AutoScalingグループ、Amazonマシンイメージ、インスタンスタイプ等の指定が必要となり、手動で設定、管理する必要があります。
  5. その他の設定はデフォルトのままで「作成」をクリックします。

これで、アプリケーションを動かす環境が準備できました。

Step2:タスク定義を作成する

次に、どのコンテナアプリケーションをどう動かすかを指定します。
タスク定義は、どのコンテナイメージを使ってどんなアプリケーションを動かすかを設計図として定義する重要なステップです。

  1. ECSコンソールの左側ナビゲーションペインから「タスク定義」を選択し、「新しいタスク定義の作成」をクリックします。
  2. タスク定義ファミリー名に任意の名称を入力します。(例:test-ecs-task)
  3. インフラストラクチャの要件セクションでは、「AWS Fargate」にのみチェックを入れます。
  4. タスクサイズのCPUおよびメモリは、それぞれ最小の「.5 vCPU」、「1GB」を選択します。
  5. タスク実行ロールはデフォルト(ecsTaskExecutionRole)のままで問題ありません。
    補足:タスク実行ロールの上にあるタスクロールはコンテナが他のAWSサービスと連携する際に利用します。今回は特に無いので指定無しで問題ありません。
  6. コンテナセクションで名前に任意の名称を入力します。(例:test-ecs-container)
  7. イメージURIに「amazon/amazon-ecs-sample」と入力します。
    補足:ここに、ご自身のアプリケーションのDockerイメージURIを指定することで、作成したアプリケーションをECSで動かすことができます。
  8. ログ収集はデフォルトで「ログ収集の使用」にチェックがついていますが、今回はチェックを外します。
    補足:ログを取得したい場合にはチェックをつけたままで問題ありません。デフォルトではCloudWatchにログを収集しますが、送信先をSplunkやOpenSearchに変更することも可能です。
  9. 他にもオプション項目が多く存在しますが、今回は特に変更せずにそのまま画面下部の「作成」をクリックしてタスク定義を作成します。

これで、「どんなアプリケーションをどう動かすか」が定義されました。

Step3:サービスを作成する

最後に、タスクを継続的に動かすためのサービスを作成します。

  1. ECSコンソールの左側のナビゲーションペインから「クラスター」を選択し、先ほど作成したクラスターを選択します。
  2. クラスター詳細画面の「サービス」タブから、「作成」をクリックします。
  3. サービスの作成画面になるため、サービスの詳細セクションのタスク定義ファミリーで先ほど作成したタスク定義を選択します。
  4. サービス名に任意の名称を入力します。(例:test-ecs-service)
  5. 環境セクションのコンピューティングオプションは「起動タイプ」にチェックを入れます。
  6. 起動タイプは「FARGATE」を選択します。(デフォルトでFARGATEになっています。)
  7. ネットワーキングセクションを展開し、任意のVPCを選択します。(デフォルトVPCで問題ありません。)
  8. サブネットはパブリックサブネットのみを選択します。
  9. 新しいセキュリティグループの作成にチェックを入れ、以下の設定をします。
    • セキュリティグループ名:任意の名称を入力(例:test-ecs-sg)
    • タイプ:HTTP
    • ソース:Anywhere
  10. パブリックIPをオンにします。(デフォルトでオンになっています。)
  11. 他にもオプション項目が多く存在しますが、今回は特に変更せずにそのまま画面下部の「作成」をクリックしてサービスを作成します。

デプロイが完了すると、タスク定義で定義した設定通りにタスクが起動し、コンテナが実行され始めます。

Step4:コンテナアプリケーションの動作を確認する

クラスター、タスク定義、サービスの作成が完了したため、コンテナが実行されている状態になりました。
それでは、コンテナアプリケーションの動作確認をしていきましょう。

  1. クラスター詳細画面の「タスク」タブで実行されているタスクを選択します。
  2. タスクの詳細画面の「ネットワーキング」タブを選択します。
  3. パブリックIPに記載されているIPをコピーし、ブラウザに貼り付けます。

以下画像のように、AWSが提供するサンプルのウェブページがが表示されることが確認できました!
これでECSを使ったコンテナアプリケーションのデプロイが完了しました。

Step5:後片付け

サンプルアプリケーションの動作確認が終わりましたので、最後に作成したリソースの削除を行います。
タスク定義の削除は他のリソースと少々異なり、登録解除をしてから削除をするという手順になっています。

  1. サービスの削除
    • クラスター詳細画面の「サービス」タブからサービスにチェックを入れて選択します。
    • 「サービスを削除」ボタンをクリックします。
    • 「サービスを削除しますか?」というポップアップが出てくるため、強制削除にチェックを入れ、テキスト入力フィールドに「削除」と入力して削除ボタンをクリックします。
  2. クラスターの削除
    • クラスター詳細画面の「クラスターの削除」ボタンをクリックします。
    • ポップアップが出てくるため、表示されているフレーズをテキスト入力フィールドに入力して削除ボタンをクリックします。
  3. タスク定義の登録解除
    • タスク定義の一覧画面から、作成したタスク定義を選択します。
    • 登録解除するリビジョンにチェックを入れて選択します。(今回は別のリビジョンを作成していないため、1つだけです。)
    • 「アクション」のプルダウンから「登録解除」をクリックします。
    • 登録解除の確認ポップアップが出てくるため、そのまま登録解除ボタンをクリックします。
  4. タスク定義の削除
    • タスク定義の一覧画面にて、「ステータスをフィルタリング」プルダウンから「非アクティブ」を選択します。
    • 先ほど登録解除をしたタスク定義が表示されるため、選択します。
    • 削除するリビジョンにチェックを入れて選択します。(今回は別のリビジョンを作成していないため、1つだけです。)
    • 「アクション」のプルダウンから「削除」をクリックします。
    • タスク定義を削除する確認ポップアップが出てくるため、表示されているフレーズをテキスト入力フィールドに入力して削除ボタンをクリックします。
    • 削除をしてもタスク定義はしばらくコンソール画面に表示が残っていますが、時間が経つと消えていきます。

これで今回作成したリソースのお片付けも終了しました。
クラスター、タスク定義はリソースが残っていても料金は発生しませんが、サービスがタスクを実行していると料金がかかります。
そのため、試しにリソースを作成した場合、サービスの削除だけは忘れずに行うようにしましょう。

まとめ

今回は、Amazon ECSを使ってサンプルアプリケーションをデプロイしてみました。
ハンズオンの流れとして以下の3つのステップを行いました。

  1. クラスターの作成:コンテナを動かすための基盤を準備
  2. タスク定義の作成:アプリケーションの設計図を定義
  3. サービスの作成:アプリケーションを継続的に実行する仕組みを構築

Amazon ECSは、コンテナの運用を簡単にし、高い可用性やスケーラビリティを確保できる強力なサービスです。
今回ご紹介した内容をご覧いただき、コンテナアプリケーションを試してみようと思っていただければ嬉しく思います!

ECSにさらに興味をお持ちいただいた方や、コンテナ技術について体系的に学びたいとお考えの方は、是非とも下記リンクから弊社までトレーニングのご相談をお寄せください!
ご要望に合わせたオリジナルのトレーニングプランをご提案いたします。

https://www.serverworks.co.jp/contact/

佐藤 拓磨(執筆記事の一覧)

エデュケーショナルサービス課

バイク、キャンプ、音楽、麻雀、一人旅が好きです