こんにちは、西海です。
ECS勉強の最初の一歩として、AWS公式ハンズオンである「AWS Hands-on for Beginners」から以下をやってみました。
やってみた際に感じたことをまとめます。
Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう
AWS Hands-on for Beginnersとは
AWS初心者向けにAWS公式が用意している、各サービスを使用して簡単なアプリケーションやアーキテクチャを構築するハンズオン資料です。
AWS公式ブログでは以下のようの紹介されています
AWS Hands-on for Beginners は、動画にそって実際に手を動かしながら AWS サービスについて学んでいただくコンテンツです。名前の通り、初めて AWS サービスをご利用される方向けの内容ですので、学習の最初のステップとしてご活用いただけます。オンデマンド形式での配信となるので、移動時間などのスキマ時間での学習もできますし、分かりにくい部分を巻き戻して何度でもご覧いただくことができます。
AWS ハンズオン資料
利用方法について詳しい説明は割愛しますが、やってみたいコースを選択後に必要な情報を入力して申し込むだけで使用できます。
Amazon Elastic Container Service 入門の概要
主にECSやECRなどのサービスについて学ぶことができるコースです。
コンテナイメージを作成して、AWS 上でコンテナを動かし、インターネットからアクセスする一連の流れを体験できます。
アジェンダ
ハンズオンの内容は次のようになっています。
1.コンテナが、どのような課題に役に立つのか
2.コンテナイメージを作成するための、Cloud9 環境を構築する
3.コンテナイメージを作成して動かす その1
4.コンテナイメージを作成して動かす その2
5.コンテナイメージを、ECR にアップロードする
6.VPC の作成
7.ECS クラスターの作成、タスク定義の作成
8.サービスの作成
9.コンテナの自動復旧、スケールアウトをやってみる
10.本シリーズのまとめ、リソースの削除
ハンズオン実践
実際にハンズオンを行っていき、各章でやったことをまとめます。
1.コンテナが、どのような課題に役に立つのか
ハンズオン実施前に、コンテナを利用することでどのような価値を提供できるのかを学ぶ座学パートです。
ビジネス環境の変化が早い昨今、そのような変化に対応するためにコンテナ技術がどのように課題を解決できるのかについて説明されています。
コンテナ技術のメリットとして、私は次のように理解しました。
・コンテナ技術で開発環境を構築することで、各動作環境で同じ開発環境を用意できる
・急な需要増加に素早く対応できる
2.コンテナイメージを作成するための、Cloud9 環境を構築する
この章では、この後進めていくハンズオンのための開発環境をCloud9で構築します。
ただ、今回私はCloud9ではなく、以前作成した自前の環境でハンズオンを実施しました。
詳細についてはこの記事をご覧ください。
WSL2+Docker+VSCodeを使用した環境構築
3.コンテナイメージを作成して動かす その1
この章では、今回使用するDockerイメージを作成します。
Dockerファイルの中身は教材として用意されていますが、内容についてしっかり解説がありどんな動作をさせるのか分かりやすいです。
しかし、教材のDockerファイルをそのままビルドすると以下のエラーが出ます。
1 warning found (use docker –debug to expand):
JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals (line 19)
Chatgptに聞いたところ、CMDで指定しているコマンドの記載をJSON形式にした方がいいとのことです。
このまま進めても特に問題はないですが、気になる方は以下のように修正しましょう。
CMD ["/bin/bash", "/root/run_apache.sh"]
4.コンテナイメージを作成して動かす その2
この章では、上記で作成したDockerイメージが正常に動作するか確認します。
イメージをビルドした後、Curlコマンドで正常にレスポンスが帰ってくるかを確認します。
また、docker container execコマンド(docker exec)を使用してコンテナ内の操作も実施します。
5.コンテナイメージを、ECR にアップロードする
この章では、上記で作成したDockerイメージをAWS ECRにアップロードして保存します。
DockerイメージをpushするためのECRリポジトリを作成し、そこにDockerイメージをPushします。
イメージのPush時は教材のコマンドを使用してもいいですが、リポジトリ作成時にECR側で自動的にコマンドが作成されますのでそちらを使用しても問題ありません。
ECRでのコマンドはリポジトリ画面の右上にある「プッシュコマンドを表示」から確認できます。
6.VPC の作成
この章では、この後作成するECSに使用するVPCを作成します。
特に特別なことはせず、動画の通りに進めていけば作成できます。
7.ECS クラスターの作成、タスク定義の作成
この章では、ECSクラスターとタスク定義の作成をします。
実際に作成する前にECSで重要な次の4つ項目について説明があります。
・クラスター:コンテナ―を動かすための論理的グループ
・サービス:タスクの起動タイプとタスク実行数を管理し、実行後のタスク数を維持する
・タスク:タスク定義に基づいて起動されるタスク群
・タスク定義:タスクを定義するコンテナ群の設定(使用するイメージ、CPU/メモリ、IAMロール、ネットワークモード、etc)
上記4つの要素はECSで重要な項目であるため、今後勉強を続けていく中で自分なりの理解ができるようにしていきます。
また、クラスター作成時に先ほど作成したVPCを選択するとありますが、2025/3月時点ではその設定はサービス作成画面で行うようです。
8.サービスの作成
この章では、先ほど作成したクラスターの中にサービスを作成し、そのサービスの中にタスク定義で定義したコンテナを起動します。
また、同時にALBを作成してロードバランシングができるようにします。
ここでALBを同時に作成するため、作成が完了するまでに5分程度かかります。
サービス作成後は各タスクのグローバルIPにアクセスし、ブラウザにHello World!の文字が表示されれば問題ありません。
9.コンテナの自動復旧、スケールアウトをやってみる
この章では、障害発生時のECSによるコンテナの自動復旧と、高負荷時を想定した手動スケール機能の確認をします。
手動でタスクを1つ停止することで、自動的に新しいタスクが起動することでコンテナの自動復旧機能の確認ができます。
また、サービスの設定から必要なタスク数を変更することで手動スケールを実施することができます。
ただし、実際にはスケール機能は自動で行うように設定するのが一般的なので、あくまでスケール機能が正常に機能することを確認するだけになります。
10.本シリーズのまとめ、リソースの削除
最後に、今まで作成したAWSリソースを削除します。
今回作成したリソースは費用が発生するものもあるので、余計な費用の発生を防ぐためにも忘れずに削除します。
まとめ
このハンズオンを通じて、DockerFileの作成~ECS上へのデプロイ、ALBでのロードバランシングとコンテナの自動復旧など基本的なことが勉強できました。
実際にやってみて、動画や資料もしっかりとしていて進める中で詰まる箇所もあまりなく、とても親切なハンズオンだと感じました。
私のようにECSをこれから勉強していく方の最初のステップとしてちょうどいいのでおススメです。
とはいえこのハンズオンだけではまだ分からに事も多いので、今後は別の資料などを使ってより深くECSのことについて勉強していきます。
また、弊ブログ内でも他の方がECSについて記事を書いていますので、こちらも是非ご覧ください。
CloudShellでDockerコンテナをECSにデプロイ ハンズオン
Amazon Elastic Container Service(ECS)について調べました