【初心者向け】Amazon ECSでApacheを起動したい~新コンソール版~

2022.10.30

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

こんにちは、つくぼし(tsukuboshi0755)です!

最近コンテナについて詳しくなりたいと思い、ちょこちょこECSを触っています。

今回は新ECSコンソールを使用してECSを作成し、Apacheコンテナの最小環境を構築してみます!

またDocker Hubの代わりに、Amazon ECR Publicを利用してコンテナイメージを取得してみます。

なお旧ECSコンソール版でのApacheコンテナ最小環境の構築方法については、以下の記事をご参照ください。

構成図

旧ECSコンソール版の記事と同じ、ApacheのFargateコンテナ構成を構築します。
ただしコンテナイメージのみ、Docker HubではなくAmazon ECR Publicを用いて取得します。

なぜDocker HubではなくECR Publicを使用するのか?

ここで、パブリックコンテナレジストリとしてDocker Hubを利用しない理由ですが、Docker Hubの無料プランでは以下の通り、特定時間あたりのイメージPull回数制限に制限が生じるためです。

  • 匿名ユーザー:100 Pull / 6 時間当たり
  • 無料(Personal)ユーザー:200 Pull / 6時間当たり
  • Pro, Team, Business:50,000 Pull / 24時間当たり

今回のようにApacheコンテナ最小構成を作るだけであれば、引っかかる事はないと思います。

しかし例えばECSとCodeBuildを連携しようとすると、以下の記事のようなToo Many Requestsエラーが発生する事があります。
(ECS本として有名なAWSコンテナ設計・構築[本格]入門のハンズオンでも、同様の事象が解説されています)

上記の問題は、Docker Hubの代わりに、以下のアップデート記事にもあるAmazon ECR PublicのDockerオフィシャルイメージを使用する事で、解決できるようになっています!

Docker HubのPull回数制限に悩んでいるという方は、Amazon ECR Publicを利用を検討してみるのも良さそうです。

今回はAmazon ECR Publicのオフィシャルイメージでも、ECS上のApacheが問題なく動作するかも合わせて検証してみます!

ECSでの動作検証

以下、新コンソールでのApacheコンテナ最小環境を構築してみます。

VPC/SG作成

初めに、ECSクラスターで使用するVPCを事前に作成しておきます。
なお今回は、パブリックサブネット1つのみの最小構成のため、VPC作成ウィザードで以下の通り設定します。

また、ECSサービスで使用するセキュリティグループも事前に作成しておきます。
今回はApacheコンテナに接続するため、インバウンドルールとしてソース0.0.0.0/0、ポート80番を追加しておきます。

ECR Publicでのイメージ検索

次に、以下のECR Public GalleryでApacheコンテナイメージを検索し、イメージURLを確認しておきします。

検索欄でhttpdと入力すると現れる、ApacheのDockerオフィシャルイメージをクリックします。

Image Tagsタブにて、最新(Latest)のImage URLをメモしておきます。

タスク定義作成

次に、新ECSコンソールを使用してタスク定義を作成します。

ナビゲーションペインのタスク定義より、新しいタスク定義の作成をクリックします。

タスク定義ファミリー、及びコンテナ名に任意の名前を入力します。
イメージURLには、先ほどECR Publicでのイメージ検索でメモしたImage URLを入力します。
さらにポートマッピングのポート番号が80である事を確認します。

CPU及びメモリは、今回は最小としたいため、それぞれ.25vCPU.5GBを指定します。
他の設定は、今回は変更の必要はありません。

確認画面にて設定を確認し、問題なければ作成ボタンをクリックします。

以下の通り、新しいタスク定義が作成されている事を確認します。

クラスター作成

次に、新ECSコンソールを使用してクラスターをを作成します。

ナビゲーションペインのクラスターのより、クラスターの作成をクリックします。

クラスター名に任意の名前を入力します。
VPC及びサブネットでは、事前に作成したVPC及びサブネットを選択します。

インフラストラクチャでは、AWS Fargate以外は何も選択されていない事を確認します。
設定内容に問題がなければ、作成ボタンをクリックします。

サービス作成

次に、新ECSコンソールを使用してサービスを作成します。

ナビゲーションペインのクラスターより、先ほど作成した新しいクラスターをクリックします。

サービスタブにて、デプロイボタンをクリックします。

コンピューティングオプションは、今回は起動タイプを選択します。
起動タイプがFARGATE、プラットフォームのバージョンがLATEST(現時点の最新バージョンは1.4.0)である事を確認します。

アプリケーションタイプは、今回はサービスを選択します。
ファミリーに先ほど作成したタスク定義を選択し、リビジョンを最新で指定します。
サービス名に任意の名前を入力します。
必要なタスクは、今回は1とします。

VPC、サブネット及びセキュリティグループには、先ほど作成したリソースを選択します。
今回はALBを介さずコンテナに直接アクセスするため、パブリックIPがオンになっている事を確認します。
設定内容に問題がなければ、デプロイボタンをクリックします。

Apacheアクセス確認

最後に、Apacheコンテナへの接続を確認します。

タスクタブにて、先ほど作成した新しいサービスをクリックします。

設定タブにて、パブリックIPを確認します。

ブラウザで先ほど確認したパブリックIPにアクセスし、It works!という表示が出れば、正常にApacheコンテナに接続できています!

最後に

今回は新ECSコンソールを使用して、Aoacheコンテナ最小構成を作成してみました!
旧ECSコンソールと比較すると、ところどころ設定の仕方が変わっている所があるなあと感じました。
もしまだ触った事がない方がいらっしゃれば、ぜひ新ECSコンソールを触ってみてはいかがでしょうか。

以上、つくぼし(tsukuboshi0755)でした!