Amazon ECS 入門ハンズオンをやってみて詰まったところをまとめてみた

この記事は[NTTコムウェア Advent Calendar 2022](https://qiita.com/advent-calendar/2022/nttcomware) 21日目の記事です。

# はじめに
NTTコムウェアの山根です。業務の中でAWS ECSに触れる機会があり、[Amazon ECS 入門ハンズオン](https://catalog.us-east-1.prod.workshops.aws/workshops/7ffc4ed9-d4b3-44dc-bade-676162b427cd/ja-JP)を用いて学習していました。
その中で、コンソール画面がハンズオンのものと異なっていたり、まっさらな環境でないために作成できる上限に引っかかってしまったりと困ってしまうシーンが何度かありました。
今回は、ハンズオンの各場面で私が詰まった点や気づいた点について補足していきたいと思います。これからECSのハンズオンを実施する人の一助になれば幸いです。

:::note warn
この記事では2022年12月時点での情報を参考にしています。
コンソール画面等変更されている可能性がありますのでご注意ください。
:::

# ハンズオンをはじめるにあたって
ハンズオンを始める前に気を付ける点について記載します。
## 料金について
ハンズオン資料内でも[言及](https://catalog.us-east-1.prod.workshops.aws/workshops/7ffc4ed9-d4b3-44dc-bade-676162b427cd/ja-JP/1-introduction/2-cost "ハンズオンで発生する料金")がありますが、ハンズオン内でリソースを作成するため料金がかかります。説明を読む限り2時間で100円程度の額と思われますが、日を跨いでハンズオンを実施するなどした場合はさらに料金がかかりますのでご注意ください。

## リージョンについて
ハンズオンでは東京リージョンで行うことが想定されています。以前に東京リージョンでリソースを作成して残っている場合、作成数制限に引っかかり、ハンズオンが行き詰ってしまう可能性があります。(私はVPCが5つまでしか作成できない事を知らぬまま作業を進め、ハンズオン内でVPCを作成する際に行き詰り、最初からやり直すこととなりました……)
以下のリソースがリージョン内に既にある場合は別のリージョンでハンズオンを進めることを検討してもよいかと思います。
* Amazon Elastic Container Registry
* VPC
* Amazon Elastic Container Service
* Application Load Balancer
* ターゲットグループ

また、リージョンを変えて作業する場合にはハンズオン資料内の記載を一部読み変える必要があることにご注意ください。ap-northeast-1と記載されているところは自分のリージョンに対応した表記に代わります。

# ECRにコンテナイメージをアップロード
Cloud9を用いて簡単なコンテナイメージを作成、ECRに作成したコンテナイメージをアップロードします。
基本的にはハンズオンの指示通りで問題ありません。ここで作成したコンテナイメージが間違っていると後の作業にも影響が出てしまうので、動作確認を行ってコンテナイメージが正しいことを確認しておきましょう。

# ECSの作成
ECSに関連する各種リソースを作成していきます。ハンズオンと比較してコンソール画面が大きく変わっているところもあり、AWS初心者にとっては混乱するポイントも多いのではないかと思います。

## VPCの作成
VPCの作成とセキュリティグループのインバウンドルールを編集します。コンソール画面も特に変わりなく、ハンズオンの指示通り進められるところだと思います。

## ECSクラスターの作成
EC2クラスターを作成します。少し画面が変わっていますのでスクリーンショットとともに説明していきます。
クラスターの作成を押すと、各パラメータの入力画面ではなく、クラスターパラメータ画面に移動します。今回はFargateを利用するので、左上の「ネットワーキングのみ」を選択して次に進んでください。
![クラスターテンプレート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/d9b5da2d-254b-3be3-8be4-baa4a271df37.png)
次に進むとクラスターの設定に移動します。ハンズオンの指示通りクラスター名を入力してください。ハンズオンではVPCを設定するよう指示がありますが、この画面では既存のVPCを設定できません。サービスを作成するときに設定できるので、今はVPCの項目は無視してクラスター名だけ入力したら作成を押してください。
![クラスター設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/eb2cf677-679b-fe83-6f9a-9959a5bbcc38.png)
クラスターの作成はこれで完了です。

## タスク定義の作成
タスク定義を作成します。こちらもクラスター同様画面が少し変わっています。
新しいタスク定義の作成を押すと起動タイプの互換性の選択画面に遷移します。FARGATEを選択して次に進みます。
![タスク起動タイプ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/dd980015-6000-050f-ccdc-aff1175d015d.png)
次に進むとタスクとコンテナの定義の設定に移動します。ハンズオン内で「タスク定義ファミリー」に入力する値は「タスク定義名」に入力してください。
![タスク定義名.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/f0959bf6-f57b-7185-5c9b-512234b8f827.png)
次にタスクサイズの設定とコンテナの追加を行います。タスクメモリとタスクCPUの項目に画像の通り選択してください。その後、コンテナの追加をクリックします。
![タスクサイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/f3cf720d-9f3f-bec6-b048-23faf75c0b50.png)
このタスクのコンテナの設定を行います。「コンテナ名」、「イメージ」、「コンテナポート」にハンズオンで指示されている値を入力してください。追加をクリックしてコンテナを追加します。
![コンテナの追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/48ba8fc3-0349-f974-7018-ff94dfe7845d.png)
ここまで入力したら、画面下の作成を押してタスク定義書を作成してください。これでタスク定義の作成は完了です。

## サービスの作成
最後にサービスの作成を行います。この項目はハンズオンと大きく作業の流れが変わっています。ハンズオン資料ではサービスの作成時にロードバランサ―とターゲットグループの作成を行っていますが、2022年12月現在、サービスの作成画面ではロードバランサーを作成できません。そのため、サービスよりも先にロードバランサーを作成する必要があります。ロードバランサーにもターゲットグループが必要なので、ターゲットグループ→ロードバランサー→サービスの順でリソースを作成していきます。

:::note info
クラスター作成時に、「いますぐ始める」という所から作成するとクラスターに関連するリソースをまとめて作ることができ、その際はロードバランサーも一緒に作成されるそうです。(参考：[【AWS】ECS構築の基礎 −クラスタ作成編−](https://qiita.com/suzuki0430/items/2745e9ca0ead8db982f9))
リソースを作成する順番がハンズオンの手順とは異なっており、ハンズオンを進めるには向かないと判断したため、今回は紹介までにとどめます。
:::

#### ターゲットグループの作成
検索バーからターゲットグループと入力してターゲットグループ画面に移動します。「Create target group」から作成画面に移動します。画像の通り各項目を入力したら「Next」を押し、次のページはすべて無視して「Create target group」を押してターゲットグループを作成します。
![ターゲットグループ１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/c460bfb0-2b02-9260-b788-211df0818c09.png)
![ターゲットグループ２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/79b4fdd4-23c7-dc64-464a-329b2aad2666.png)

#### ロードバランサーの作成
ターゲットグループ作成後、左のバーからロードバランサーを選択してロードバランサー画面に移動します。「Create Load Balancer」からロードバランサー作成画面に移動します。Select load balancer typeでは「Application Load Balancer」を選択してください。
![ALB1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/2c59b51e-b4a3-ca95-017d-f5c1554a3f4a.png)
次の画面で画像の通り各種設定を入力します。
![ALB2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/0fbbb3a0-5550-96cd-6ddd-386d94cc87e2.png)
![ALB3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/23c05e7d-99ae-7137-9687-291adefffa10.png)
![ALB4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/08c471c7-c28d-f0dd-da30-408ff21c5465.png)
入力が終わったら「Create load balancer」を押してロードバランサーを作成します。

#### サービスの作成
本題のサービスの作成を行います。
ECSのページに戻り、先ほど作成したクラスターを開きます。サービスタブの「作成」からサービス作成画面に移動してください。画像のように入力したら次の画面に進みます。
![サービス1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/d0d07393-180b-2d72-36d4-2cfff8d13f60.png)
![サービス2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/a1cc8660-5896-fd0a-f17c-710377a1ea85.png)
ネットワーク構成の設定に移動します。画像のように各項目を設定してください。セキュリティグループは設定しないと自動的に新しいものが作られてしまうので、「編集」からdefaultのセキュリティグループに変更してください。
![サービス3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/8efcf0f9-bf80-fa0a-7492-602962678131.png)
![サービス4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/de86a365-b8f6-0bd2-ca77-68d93b5e85f2.png)
セキュリティグループの設定まで終わったら、下に移動してロードバランシングの設定を行います。画像のように各項目を設定したら、ロードバランス用のコンテナの「ロードバランサーに追加」からコンテナの設定を行います。ターゲットグループを先ほど作成したものに設定をしたらサービスの設定は完了です。「次のステップ」を押して確認画面まで進み、「サービスの作成」からサービスを作成します。
![サービス5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/512f3b41-1bbc-8c89-df6c-60ea05b6efd5.png)
![サービス6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031942/eea0b776-e0f8-c57a-4e36-2832e6949de1.png)
これでサービスの作成は完了です。正常に設定できていれば、自動的にタスクが立ち上がって動き出します。

## 動作確認
作成したサービスが正常に動いているか動作確認を行います。ハンズオンでは動作確認のためにサービスの画面からDNS名をコピーしていましたが、現在はサービスの画面からDNS名を確認することができません。
EC2>ロードバランサーから先ほど作成したロードバランサーを選択してください。画面内に「DNS Name」と書かれた項目があるのでそちらのアドレスをコピーしてURL欄に張り付けて移動することでタスクにアクセスすることができます。
Hello Worldが出力されていれば成功です。

# 運用負担軽減の体験
ここまでに作成したリソースを使い、ECSの運用負担軽減を体験します。自動復旧とスケール変更が体験できます。この項目は指示されている通りに実行すれば問題ないかと思います。

# さいごに
ということで、ECSの入門ハンズオンについて詰まったところをまとめてみました。
途中で詰まってしまった人は今一度各種リソースの確認をしてみてください。個人的にはサービスの作成回り(ロードバランサー、ターゲットグループ、サービスの設定)で間違えてしまうことが多かったです。
この記事ECSのハンズオンを行う方の一助になっていれば幸いです。