この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
前回
こちらの投稿は「Amazon ECS について調べ、実際に使用してみた 前編」 の続きになります。
前編は下記のリンクから参照ください
Amazon ECS について調べ、実際に使用してみた 前編
1. コンテナオーケストレーションの ECS を作成
Amazon ECS の主要な構成要素を順に作成していきます
-
クラスター
・コンテナを動かすための理論的なグループ -
タスク定義
・タスクを構成するコンテナ群定義
・コンテナ定義(イメージ場所等)
・要求 CPU & メモリ
・タスクに割り当てるIAMロール
・ネットワークモード
etc… -
サービス
・タスク実行コピー数(n個)を定義
・起動後、タスク実行コピー数を維持
・ELBと連携
・起動タイプ(EC2、Fargate)を設定 -
タスク
・タスク定義に基づき起動されるコンテナ群
・タスク内コンテナは同一ホスト上で実行される
クラスター
- ECS を作成するために VPC を作成
簡単に作成するために、VPCを作成をクリック

作成していきます。パラメーターは以下の通りです
| 項目 | 値 |
|---|---|
| 作成するリソース | VPC、サブネットなど |
| 自動生成 | 任意で入力 |
| IPv4 CIDR | 10.0.0.0/16 |
| Ipv6 CIDR | IPv6 CIDR ブロックなし |
| アベイラビリティゾーン | 2 |
| パブリックサブネット | 2 |
| プライベートサブネット | 0 |
| NATゲートウェイ | なし |
| VPCエンドポイント | S3ゲートウェイ |

↓

作成できました
- コンテナに HTTP アクセスを許可するために、セキュリティグループを変更
セキュリティグループのインバウンドルールを変更します
手順は以下の通りです
1.左上のVPCでフィルタリング
2.作成したVPCをクリック
3.セキュリティグループをクリック
4.インバウンドのルールを編集をクリック
5.ルールを追加をクリック

インバウンドルールを追加します、設定は以下の通りです
| 項目 | 値 |
|---|---|
| タイプ | HTTP |
| ソース | Anywhere-IPv4 |

ルールを保存をクリック

80番ポートをインターネットに公開する設定が完了しました
- ECS クラスターを作成する
クラスターを作成します
手順は以下の通りです
1.マネジメントコンソールでECSを検索しクリック
2.左側のクラスターをクリック
3.クラスターの作成をクリック

パラメータは以下の通りです、その他はデフォルト作成をクリック
| 項目 | 値 |
|---|---|
| クラスター名 | 任意で入力 |
| VPC | 作成したVPC |
| サブネット | 表示されている2つのパブリックサブネット |

クラスターが作成されました
タスク定義
- タスク定義の作成
タスク定義を作成していきます
1.画面左上の ≡ をクリック
2.タスク定義をクリック
3.新しいタスク定義の作成をクリック

ステップ1
タスク定義とコンテナの設定
パラメータは以下の通りです、URIの末尾にはタグ:0.0.1を付けます
例 717076937412.dkr.ecr.ap-southeast-1.amazonaws.com/motoishi-ecs-helloworld:0.0.1
| 項目 | 値 |
|---|---|
| タスク定義ファミリ | 任意で入力 |
| 名前 | 任意で入力 |
| イメージ URI | ECRにアップロードしたコンテナイメージのURIを入力 |
| コンテナポート | 80 |
| プロトコル | TCP |

入力し、次へをクリック
ステップ2 環境、ストレージ、モニタリング、タグの設定はすべてデフォルトで設定します

次へをクリック
設定を確認して作成をクリック

タスク定義が作成されました
サービス
- サービスを作成していきます
1.画面左上の ≡ をクリック
2.クラスターをクリック
3.作成したクラスターをクリック

4.サービスをクリック
5.デプロイをクリック

6.デプロイの設定を行います
パラメータは以下の通りです
| 項目 | 値 |
|---|---|
| アプリケーションタイプ | サービス |
| ファミリー | 作成したタスク定義 |
| リビジョン | 1 |
| サービス名 | 任意で入力 |
| 必要なタスク | 2 |
| ロードバランサーの種類 | Application Load Balancer |
| Application Load Balancer | 新しいロードバランサーの作成 |
| ロードバランサー名 | 任意で入力 |
| ポート | 80 |
| プロトコル | HTTP |
| ターゲットグループ名 | 任意で入力 |
| プロトコル | HTTP |
その他はデフォルトのままでデプロイをクリックします




サービスが作成できました

タスクをクリックするとタスクが2個動いてることが確認できます

- インターネット経由でアクセスする
1.サービスタブをクリック
2.作成したサービスをクリック

3.ネットワーキングをクリック
4.DNS名のオープンアドレスをクリック

5.インターネット経由でコンテナにアクセス
Hello World! と表示されれば、実際に ECS, Fargate の上で稼働するコンテナに、インターネット経由でアクセスする環境が完成しました

2.コンテナの自動復旧、スケールアウトを実施
- Cloud9 上で実際に ECS にアクセスしてみる
1.DNS名をコピーし、Cloud9の画面に切り替えます


2.コンテナに障害が起きた際に、アクセスでき自動復旧できているかの確認をします
Cloud9 上からインターネットに公開しているECSからアクセスURLに対して、1秒に1回アクセスし続けるようにコマンドを実行していきます
url=http://<DNS名>
while true; do TZ=JST-9 date; curl $url; sleep 1s; done

1秒に1回にサービスが正しく動いてる事が確認できます

- インターネット上からタスクにアクセスできるか確認する
1.マネジメントコンソールに切り替えクラスターをクリック
2.タスクのタブをクリック
3.1個目のタスクをクリック

4.パブリックIPのオープンアドレスをクリックしインターネット上からアクセスしてみる

↓

5.Hello World!と表示されたのでアクセスできています。もう1個のタスクでも確認してください
- 1個のタスクに疑似障害を起こしてサービスに影響がないか確認する
1.1個目のタスクをクリック
停止ボタンをクリック、選択されたものを停止をクリック

2.タスクが停止しても1秒に1回のアクセスはエラーが出ていません

3.リロードをクリックすると、タスクが自動復旧しています
1個のタスクに障害が発生してもサービスの提供としては問題ないことが分かります

4.タスクが停止している事を確認

停止したタスクのURLページを更新しても、レスポンスが返ってこない事を確認
- コンテナ数をスケールアウトする
1.マネジメントコンソールに切り替え、サービスをクリック
2.サービスのチェックボックスにチェックを入れる
3.編集をクリック

4.必要なタスクを2→3に変更し更新ボタンをクリック

↓

3個目のタスクが作成されました

↓

5.新たに作成されたタスクがインターネット上からアクセスできるか確認
6.作成されたタスクをクリック

7.パブリックIP オープンアドレスをクリック

↓

8.Hello World! が表示されているのでタスクが正常に稼働している事を確認できました
9.リソースの削除
料金がかかるものもあるのでハンズオン中に作成した、以下のリソースを上から順番に削除してください
・ALB
・TargetGroup
・ECS Service の Task 数を 0 に変更
・ECS Service の削除
・クラスターの削除
・VPC の削除
・ECR の削除
・Cloud9 の削除
まとめ
今回、コンテナイメージを作成してAWS上でコンテナを動かし、インターネットからアクセスする一連の流れをハンズオンで学習しました。サービス名しか知らない私は勉強になる事が多くハンズオンをして学ぶのが1番良い学習法だと感じました。しかしECSの知識だけでは業務に生かせないと感じましたのでECR、Fargate、Dockerについても学習していきたいと思います。
参考資料 初心者向けAWSハンズオン


