[AWS Hands-on for Beginners]Amazon ECSの入門ハンズオンをやってみた

ECSだけでなく、コンテナ自体何も分からん方でも大丈夫です
2023.08.14

こんにちは、洲崎です。
AWS Hands-on for BeginnersのAmazon ECSの入門ハンズオンをやってみたので紹介します。

「Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう」

「Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう」は、AWS Hands-on for Beginners(AWS初心者向けハンズオン)の中にあるECSの入門ハンズオンです。
コンテナイメージを作成し、ECS・Fargateを使って環境を構築します。

コンテナについて今まで触ったことがなくとも、Dockerの利用方法から丁寧に解説されているので大丈夫です。

ハンズオンのアジェンダ

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

各章ごとに、埋め込まれている動画(Youtube)を見て学ぶ形です。
自分の検証AWSアカウントを利用するので、ない場合は事前に作成します。
全体でかかった時間は約2時間です。

感想やコメント

Dockerの使い方を学べた

前半部分ではAWSサービスではなく、Dockerそのものの使い方を学ぶことができます。
「コンテナ自体わからん」という方向けに丁寧に解説されており、事前の知識がなくともハンズオンを進めることができます。
最初にコンテナの概念や利用するメリットを学んだ上で、実際にCloud9上でDockerコマンドを利用してコンテナイメージを作成します。
Dockerについて利用したファイルやコマンドは以下です。

dockerfile:コンテナイメージ作成で使う命令が書かれているスクリプトファイル
docker built:dockerfileに記載した内容を元にコンテナイメージを作成する
docker images:作成したコンテナイメージの一覧を確認する
docker run:コンテナを実行する
docker ps:動作しているコンテナの一覧を確認する

これらのコマンドをCloud9上で触りながら学ぶことができます。
スクリプトについてはただ用意されているものを利用するだけでなく、スクリプトファイルの構成の解説もあったのでとても分かりやすかったです。

Dockerのデバック作業まで学べた

よくあるハンズオンでは、一連の流れを元に触って学ぶのがメインだと思いますが、補足でデバック作業(コンテナの中を見る作業)まで行いました。
実際にDockerにbashモードで入って、どのようなファイルがあるかをls -laコマンドで確認します。
実際運用する際のイメージも掴みやすくなるのでよかったです。

docker exec -i -t {コンテナ名} bash:コンテナの中でbashを起動(Shellの表示に切り替わる)

ECR、ECS、Fargateの一連の構築の流れを学べた

ハンズオンの目玉であるECS関連もハンズオン通りに構築することができました。
サービス毎に実施したことを記載します。

ECR

コンテナイメージを保存・管理するサービスです。
実施したこと
今回はCloud9からECRにコンテナイメージをアップロードしました。

  • プライベートリポジトリの作成
  • docker build -t {ECRのURI} アップロード先のECRを定義
  • docker loginで認証
  • docker pushでECRにアップロード

ECS

コンテナのオーケストレーションサービスです。
VPCを作成したのち、クラスター・タスク定義・サービスを作成しました。

クラスター
コンテナを動かすための論理的なグループです。
紐づくVPC・サブネットの設定をしました。
Container Insightsを設定する案内もありました。(今回はしない)
→タスクやコンテナ単位のメトリクスを取得する機能です。

タスク定義
タスクを構成するコンテナ群の動作を定義したものです。
ECRの指定や、コンテナで利用するインフラの要件(CPUやメモリ)の設定を行いました。

サービス
ECSのクラスター内で、指定した数のコンテナ群(タスク)を維持する機能です。
タスクを実行するコピー数の定義や、起動後の数の維持、ELBとの連携を設定できます。

タスク
タスク定義に基づき起動される実行単位のことを指します。
ECSの「タスク」タブで、タスクごとに詳細の内容を確認することができます。

ECS特有のワードがいくつか出てきますが、いわゆるstep-by-step方式で進んでいくので、各機能を理解しながら構築することができました。

ハンズオンの話と少しずれますが、「ECSをチャーハンセットで例えてみた」という動画も上がっていますので、もし単語が覚えづらいという方は参考にしてみてください。

運用が軽くなる体験

最後に、ECSで運用が軽くなるメリットを体験することができました。

擬似障害の確認
サービスで最低起動数を2つとしつつ、実際にタスクを1つ終了させて自動復旧するかの確認です。
ここで丁寧だなと思ったのが、実際に通信が途切れないかを確認するために、1秒に1回コンテナにアクセスするコマンドが紹介されていました。
urlにECSサービスのDNS名を変数としていれて、下のコマンドで1秒に1回のアクセスをループさせます。

url=http://<your ecs dns name>/
while true; do TZ=JST-9 date; curl $url; sleep 1s; done

タスク画面から1個のタスクを停止させても、違うタスクが自動復旧で起動されて、その間の通信は途切れない確認を行うことができました。

スケール変更の確認
コンテナの数を実際にスケールアウトしました。
「サービス」から必要なコンテナ数を2→3に変更すると、数秒待たずして、3つ目のタスクが起動されました。
数クリックで、簡単にスケールアウトをすることができました。

最後に

コンテナの概念や、AWSのコンテナサービスがなんもわからん、という方はまずこのハンズオンをやってみてください。
入門ハンズオンというだけあって、丁寧に解説されていますし、さまざまなAWSサービスとの連携も学べて勉強になります。

ではまた!コンサルティング部の洲崎でした。