【初心者向け】Amazon ECSでApacheを起動したい~AWS Fargate利用~

AWSマネージメントコンソールでECS Fargateを構築して、Apache httpdコンテナを起動してみました。
2021.08.31

こんにちは!コンサル部のinomaso(@inomasosan)です。

Amazon ECSを案件で使用することになったので、絶賛キャッチアップ中です。
今回はApacheのコンテナを題材に、ローカル環境での起動方法やAWSマネージメントコンソールで検証用に、Apacheコンテナを起動する最小環境を構築して理解を深めていきます。

この記事で学べること

  • ローカル環境でApache httpdイメージからDockerコンテナ起動
  • Amazon ECSでAWS Fargateを利用し、Apache httpイメージからDockerコンテナ起動

環境

  • macOS Big Sur 11.4
  • Docker Desktop 3.6.0

構成図

構成を簡素化するために今回はALBを利用せず、タスクのパブリックIPからアクセス確認します。

ローカル環境でhttpdイメージからコンテナ起動

Dockerコンテナ起動

まずは挙動を確認したいので、ローカル環境にてhttpdイメージをもとにコンテナを起動してみます。
今回は1回限り(フォアグラウンド)の実行のため-dというコンテナ実行をバックグラウンドで行うオプションは利用しません。
また--rmオプションにより、ターミナルでCtrl+Cでコンテナの終了時に自動的にコンテナをクリーンアップし、ファイルシステムを削除するようにします。

% docker run --rm -p 8080:80 httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Thu Aug 26 08:53:49.809953 2021] [mpm_event:notice] [pid 1:tid 140370581845120] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations
[Thu Aug 26 08:53:49.814228 2021] [core:notice] [pid 1:tid 140370581845120] AH00094: Command line: 'httpd -D FOREGROUND'

Apacheアクセス確認

コンテナを起動できたら、Chrome等のWebブラウザにてhttp://localhost:8080/へアクセスし、It works!と表示されることを確認できました。

Amazon ECSでhttpdイメージからコンテナ起動

以下手順は旧ECSコンソールで実施したものとなります。

タスク定義・コンテナ定義作成

AWSマネージメントコンソールのECSコンソールから、タスク定義新しいタスク定義の作成をクリックします。

起動タイプの互換性にFARGATEを選択し、次のステップをクリックします。

タスク定義名に任意の名前を入力します。

タスクメモリとタスクCPUはそれぞれ最小の値を選択します。

コンテナ定義を追加するためコンテナの追加をクリックします。

コンテナ名に任意の名前を入力します。
イメージはApache httpdイメージを使用するのでhttpdを指定します。
ポートマッピングはawsvpcネットワークモードを使用するので、containerPortのみを指定します。

上記以外の項目はデフォルトのまま、一番下の 作成をクリックします。

クラスター作成

AWSマネージメントコンソールのクラスタークラスターの作成をクリックします。

ネットワーキングのみを選択し、次のステップをクリックします。

クラスター名に任意の名前を入力します。
VPCの作成にチェックを入れ、新規VPCを作成します。

上記以外の項目はデフォルトのまま、一番下の 作成をクリックします。

サービス作成

AWSマネージメントコンソールから、先ほど作成したクラスターを選択し、サービス作成をクリックします。

起動タイプにFARGATEを選択します。
タスク定義のファミリーに先ほど作成したタスクを選択し、リビジョンがlatestであることを確認します。
 ※検証のためにタスク定義は何回か作成し直したため、画像は5(latest)となっています。
サービス名に任意の名前を入力します。
タスクの数は最小の1を指定します。

上記以外の項目はデフォルトのまま、一番下の次のステップをクリックします。

サブネットにクラスタ作成時に新規作成したものを2つ指定します。

上記以外の項目はデフォルトのまま、一番下の次のステップをクリックします。

Auto Scalingは特に設定せず、次のステップをクリックします。

最後に確認ステップが表示されるので、一番下のサービスの作成をクリックします。

最後にクラスターのサービスで、作成したタスクのステータスがRunningであることを確認します。

Apacheアクセス確認

今回はALBを作成していないため、タスクのパブリックIPからアクセス確認します。

Chrome等のWebブラウザにて、パブリックIPでアクセスし、It works!と表示されることを確認できました。

後片付け

先ほど作成したクラスターの画面でクラスターの削除をクリックします。

ただ、2021年8月26日時点だと削除中にエラーが出てしまいます。
エラー原因は、サービス定義で作成されたセキュリティグループによるものです。
クラスターは裏でCloudFormationにて作成されている一方、サービス定義はCloudFormarionによる作成ではないので、VPC削除時にセキュリティグループが残っているためエラーとなります。

そのため手動にてサービス定義のセキュリティグループを削除してから、もう一度クラスターの削除を実行する必要があります。

参考ブログ

まとめ

ECSはハンズオン等で何度か構築したことはありましたが、改めてAWSマネージメントコンソールで実施したところ、意外と苦戦しましたものの理解が深まったかと思います。

この記事が、どなたかのお役に立てば幸いです。それでは!