「Amazon Elastic Container Service 入門　コンテナイメージを作って動かしてみよう」のハンズオンを実施したのでまとめてみた

# やったこと
AWS公式のハンズオン「Amazon Elastic Container Service 入門　コンテナイメージを作って動かしてみよう」を実施したので私なりにまとめてみました。
ハンズオンを通して実施した事をAgendaよりも一歩踏み込んで記載していますので、ハンズオンを実施するか悩んでいる方の参考となれば嬉しいです。また、誤っている点はご指摘いただければ幸いです。感想やハートをいただけますと励みになります。

# 記事の目的
- 記事を書くことでAWSサービスを用いたコンテナの理解を深める。
- 今後何を学習するか迷っている方やコンテナを学ぶか悩んでいる方の参考になれば嬉しいです。

# ハンズオンへのリンク
[Amazon Elastic Container Service 入門　コンテナイメージを作って動かしてみよう](https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-ECS-2022-reg-event.html?trk=aws_introduction_page "Amazon Elastic Container Service 入門　コンテナイメージを作って動かしてみよう")

# ハンズオンの対象者
ハンズオン登録画面では以下のような方におすすめと書かれています
- コンテナに今まで触れたことが無く、新たに学習したい方
- ECS を使って、インターネットにコンテナを公開する方法を知りたい方
- わかりやすく説明を受けながら、ハンズオンを進めていきたい方
（ハンズオン登録画面から引用）

# ハンズオンの構成
![Hands-On-for-Beginners_2022_Container_0819_v1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691245/81835a9b-4539-5812-490e-5a5dcebf256b.png)
（ハンズオンの登録ページから画像をお借りしました）

## 全体の流れ
流れとしては、以下のような流れです。
1. Cloud9でコンテナイメージを作成
2. 作成したイメージをECRに保存
3. ECS、Fargateを利用してコンテナを動かす
4. コンテナ上の簡単なウェブページがブラウザから見られることの確認

## 利用するサービス
利用するAWSサービスについてご説明します。
`AWS Cloud9`：統合開発環境サービス。ブラウザのみでコードを記述して実行できる。dockerコマンドも最初から使えるようになっている。
`Amazon ECR`：AWS版コンテナレジストリ。Docker Hubみたいなもの。作成したコンテナイメージを保存する場所。
`Amazon ECS`：AWS版コンテナオーケストレーションサービス。Docker Composeみたいなもの。複数のコンテナに対して1つずつコマンドを実行していくのは面倒なので、複数の仮想マシンでコンテナを管理するしやすくするために使う。
`AWS Fargate`：コンテナの実行環境。この上でコンテナが動く。EC2（仮想サーバー）上で動かすよりも管理がラクになる。
`Amazon VPC`：AWS上の仮想ネットワーク
（Dockerを業務でガンガン使っているというわけではないため、ツッコミがあればお願いします）

# ハンズオンのAgenda
1. コンテナが、どのような課題に役に立つのか
2. コンテナイメージを作成するための、Cloud9 環境を構築する
3. コンテナイメージを作成して動かす その1
4. コンテナイメージを作成して動かす その2
5. コンテナイメージを、ECR にアップロードする
6. VPC の作成
7. ECS クラスターの作成、タスク定義の作成
8. サービスの作成
9. コンテナの自動復旧、スケールアウトをやってみる
10.  本シリーズのまとめ、リソースの削除
（ハンズオン登録画面から引用）

ここから上記Agendaに紐づく実施内容となります。

**1. コンテナが、どのような課題に役に立つのか**
座学パートです。短い動画ですが、コンテナやECSについての理解が深まります。
- コンテナが生まれた世の中の背景
    - アプリケーションへフォーカスしたい
    - アプリケーションが稼働するインフラを要件に応じて管理したい
    - 迅速なスケーリング
    - セキュリティ
- コンテナを選択する理由
    - リスクの低減
    - 運用の効率性
    - スピード
    - 俊敏性
- アプリケーション開発時によくある課題もコンテナで解決（メリット）
- コンテナを実現するための技術
    - Docker
    - Amazon ECS

**2. コンテナイメージを作成するための、Cloud9 環境を構築する**
ここではコンテナイメージを作成するための環境として、Cloud9を構築します。
- Cloud9環境構築
    - Cloud9にDockerがインストールされていることの確認

**3. コンテナイメージを作成して動かす** **その1**
ここではCloud9上でコンテナイメージを作成する方法を学びます。Dockerfileやビルドについても説明があります。
- Cloud9上でコンテナイメージを作成
    - Dockerfileを作成
    - dockerビルド

**4. コンテナイメージを作成して動かす** **その2**
前回作成したコンテナが正常に動作するか確認します。
- dockerコマンドを使ってコンテナを動かす
- 動いていることの確認

**5. コンテナイメージを、ECR** **にアップロードする**
コンテナイメージをECRにアップロードします。アップロードするためのdockerコマンドも学びます。
- コンテナイメージをECRにアップロードする
    コンテナイメージをECSで使うにはどこかにアップロードしなければならず、今回はコンテナイメージの置き場所としてECRを使っている。
    - ECRでプライベートリポジトリの作成
    - 作成したリポジトリにコンテナイメージをアップロード

**6. VPC** **の作成**
- ネットワーク作成

**7. ECS** **クラスターの作成、タスク定義の作成**
- **ECSの大切な概念「クラスター」、「タスク定義」、「サービス」、「タスク」の説明**
- ECSクラスターの作成
    クラスターはECSを使う際の大元のグループのようなもの。どこで使うかネットワーク内のエリアを設定する感じ。VPCの中にクラスターを作って、その中にサービスやタスクがある。タスク定義はVPCの外っぽい。
- タスク定義の作成
    タスク定義はどのようにコンテナ群を動かすかを指定するテンプレート。

**8. サービスの作成**
※7も8もECSでの設定操作ですが、ボリュームが多いため分かれている感じです。
ここではECSクラスターで、コンテナを動かすためのサービスを作成します。
- サービスの作成
    コンテナをどれくらいの数動かすのか等定義する。デプロイ設定やネットワーキングもここで設定。サービス内に複数タスクがある。タスクとはコンテナ群のこと。
- ブラウザからアクセスして確認

**9. コンテナの自動復旧、スケールアウトをやってみる**
ECSを利用することで運用負荷が軽減するメリットがあり、それらを少しだけ試します。
- 疑似障害を起こす
    - タスクを停止した際に新たなタスクが自動で立ち上がることを確認
- コンテナの数を増やす（スケールアウト）
    - 設定を変更して新たにタスクが立ち上がるか確認。自動でスケール変更したい場合はAutoScalingを検討するとよい。

**10. 本シリーズのまとめ、リソースの削除**
ハンズオンで作成したリソースを削除する手順を紹介してくれます。


# ハンズオン実施の記録
## 実施した日
2022/11/18~21
※ハンズオン動画が収録された日ではなく、私がハンズオンを実施した日です。

## かかった時間
まとめながら実施したため11時間くらいかかりました。。手順を実施するだけであれば1/4以下の時間でできると思います。

## おすすめポイント
- ハンズオン資料がもらえるのですが、画像付きでかなり丁寧に書かれていました。

## 実施した際に困ったことや気づいたこと
- ECSクラスターを作成する際にエラーが発生しました。AWSアカウントで一番最初にECSクラスターを作成する際に出てきてしまうエラーらしく、ハンズオンの動画内でもお話しされていました。対応としてはもう一度作り直せばよいのですが、AWSの裏側を知らない私からすると結構びっくりしました。。
- 現時点でマネジメントコンソール上からサービスを検索する際に「ECR」と入れてもECRが見つからず、「registry」等フルネームを意識したワードで検索する必要があるようです。ECSは「ECS」で出てくるんですけど、謎ですね。

## 感想
サクッとECSを触ってみたい方にはちょうど良いボリュームだと思います。おすすめです。