AWS ECSでapacheコンテナを管理してみよう!

eyecatch-ecs-apache
目次

概要

ECS

AWS ECS(Amazon Elastic Container Service)は、AWSが提供する完全マネージド型のコンテナオーケストレーションサービスです。Dockerコンテナを使用したアプリケーションのデプロイ、管理、スケーリングを簡単に行えるプラットフォームとして広く利用されています。

ECSはクラスター、サービス、タスクという基本概念を組み合わせることで、柔軟で効率的なコンテナ管理を実現します。そして、Fargateの活用によってインフラ管理の負担を軽減し、コンテナ化されたアプリケーションの実行をさらに簡素化することが可能です。

クラスター、サービス、タスクの違い

ECSを利用する上で重要なのがクラスター、サービス、タスクの概念です。スコープとしてはクラスター>サービス>タスクになります。クラスタ-+サービス+タスクの構成が基本ですが、クラスター+タスクの構成を取ることも可能です。

クラスターは、コンテナを実行するインフラをグループ化する役割を果たします。クラスターにはEC2インスタンスを使用する形態と、Fargateというサーバーレスの実行基盤を用いる形態の2種類があります。

サービスは、アプリケーションの状態を管理するための仕組みです。たとえば、WebアプリケーションやAPIのように常に動作している必要があるアプリケーションを管理する際に使用されます。サービスは、実行するタスクの数を一定に保つ役割を持っており、もしタスクが停止した場合でも、自動的に再起動させることで高可用性を実現します。

タスクは、コンテナ化されたアプリケーションを実行する単位です。タスクはタスク定義に基づいて実行されその中に1つ以上のコンテナの設定が含まれています。例えばnginxとdjangoの各コンテナを1つのタスクで管理することが可能です。

Fargate

Fargateは、インフラの管理を必要とせずにコンテナを実行できるサーバーレスの基盤を提供します。Fargateを利用することでAWSが必要なCPUやメモリのリソースをAWSが自動的に管理してくれるため、特に短期プロジェクトやインフラ管理リソースの削減を目的としたシナリオで有効です。

ECSによるapacheの実行

前提

ECSを配置するパブリックサブネットを準備
ECSにアタッチするセキュリティグループは80ポートを開放済み
ECRにapacheイメージがプッシュ済み

下記の記事ではapacheのコンテナイメージ作成とECRへのプッシュを説明しています。今回の記事の前提となりますのでよかったらご参考ください。

ECS環境構築

クラスター

ECSの左メニューからクラスター>クラスター作成を押下します。設定画面では下記を選択します。説明をしていない部分はデフォルトのままで大丈夫です。

  • クラスター名
    • 任意の名前
  • インフラストラクチャ
    • AWS Fargate

タスク定義

ECSの左メニューからタスク定義>新しいタスク定義の作成を押下します。設定画面では下記を選択します。説明をしていない部分はデフォルトのままで大丈夫です。

  • タスク定義ファミリー
    • 任意の名前
  • インフラストラクチャの要件
    • 起動タイプ:AWS Fargate
    • オペレーティングシステム:Linux/X86_64
    • タスクサイズ:CPUは1 vCPU、メモリは3GB
    • 条件付きのタスクロール:タスクロールはなし、タスク実行ロールはecsTaskExecutionRole
    • ※ECSがパブリックサブネットにある場合はタスクロールはなしで大丈夫です
  • コンテナ1
    • コンテナ詳細:名前にapache、イメージURIにECRリポジトリのURI
    • ポートマッピング:コンテナポートは80

サービス

ECSの左メニューからクラスタを選択し、上記で作成したクラスターを選択します。画面を下にスクロールするとサービスタブがあるので、そこからサービスの作成を行います。設定で重要な部分は下記になりますが、説明をしていない部分はデフォルトのままで大丈夫です。

  • 環境
    • コンピューティング設定:キャパシティプロバイダー戦略
    • キャパシティプロバイダー:FARGATE_SPOT
    • ※FARGATE_SPOTは開発用のfargateとして利用することができ、通常料金の70%引きで利用できます
  • デプロイ設定
    • アプリケーションのタイプ:サービス
    • ファミリー:上記で作成したタスク定義
    • サービス名:任意の名前
  • ネットワーキング
    • VPC:配置したいVPCを選択
    • サブネット:今回はパブリックサブネットを選択
    • セキュリティグループ:既存のセキュリティグループで80番ポートを開放したものを選択
    • パブリックIP:今回は動作確認のためオン

作成を完了すると自動的にサービスの設定を元にECSが構築されます。

ECSの動作確認

ECSの左メニューからクラスタを選択し、上記で作成したクラスターを選択します。画面を下にスクロールするとサービスタブがあるので、そこに表示されている作成したサービスを押下しサービス概要を表示します。

サービス概要画面では、タスクタブからタスクのリンクを押下すると、タスクの概要を確認することができます。ここにパブリックIPが表示されているので、コピーしブラウザからアクセスしてみてください。apacheの画面が表示されればOKです!筆者は別記事でindex.htmlを作成しそれをapacheが見に行く設定をしたので下図が表示されます。

run-apache

ECSの停止

ECSは起動中は課金されてしまいますので適宜停止する必要がありますが、慣れないうちはECSを停止する際に停止ボタンがなくて困ってしまうかもしれません。そこでECSの停止方法を説明します。

ECSの左メニューからクラスタを選択し、上記で作成したクラスターを選択します。画面を下にスクロールするとサービスタブがあるので、そこに表示されている作成したサービスを押下しサービス概要を表示します。

右上にあるサービス更新を押下し、必要なタスクを0にして更新ボタンを押下します。こうすることで起動中のタスクが停止するので料金の発生を抑えることができます。

まとめ

本記事ではECSのクラスター、タスク定義、サービス作成を通じてECSの起動と停止をする方法を学びました。一度覚えてしまえば簡単に設定することができるようになりますし、terraformやCloudFormationなどのIaCツールを使うことで管理も容易になります。ぜひECSの設定方法に慣れてアプリのデプロイの基礎を身に着けてくださいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次