AWS Workshop Studioで、Amazon ECSハンズオン(ECS Cats and Dogs)をやってみた
はじめに
こんにちは、YUJIです。
先日、AWS Workshop Studioでレクチャー用にAWSアカウントを一時的に払い出していただき
ECS on EC2, ECS on Fargateの両方を学べるハンズオン、ECS Cats and Dogsを体験する機会があったので
感想レポートとして残します。
この記事で書くこと
- ハンズオン(ECS Cats and Dogs)の大まかな概要
- ハンズオンをなぞることで、実感したECSの裏側の挙動
この記事で書かないこと
- AWS Workshop Studioの概要、使用方法
- ハンズオン手順の細かなフォローアップ
- 各用語の説明(AWS セッションレベルで言うところの、Level 200以下の説明は割愛いたします。)
ハンズオン(ECS Cats and Dogs)の概要
ECS Cats and Dogs
https://catalog.workshops.aws/ecs-cats-and-dogs/en-US
ECSを利用して、3つのサービス web、cats、dogsを作ります。
クラスター
├── web (Amazon EC2)
├── cats (Amazon EC2)
└── dogs (AWS Fargate)
これらの設定を通じて、Amazon ECSを使ったサービスの新規構築の方法、運用の勘所を学ぶという内容でした。
※ハンズオン当日の時間の都合のため、CI/CDパイプラインの構築パートまではたどり着けませんでした。無念。
アプリケーションの実際の挙動としては
トップページ(web)で、猫派か犬派かをクリックで選択して
かわいい猫のページ(cats)か、かわいい犬のページ(dogs)に到達するものになっています。
↓
子どもの頃、お隣さんが飼っていた犬といっぱい遊んだ経験から犬派です。
かわいいね。
大まかなハンズオン手順
① AWS Cloud9の環境を作って、資材をダウンロードする。
② AWS Cloud9上でweb、cats、dogsのイメージをビルドして、Amazon ECRにプッシュする
③ ALB、クラスター用のセキュリティグループを作る。
④ ECS クラスターを作成する。
⑤ web、cats、dogsそれぞれのタスク定義を作る。
⑥ 自動で作成されるタスク実行ロールに、CloudWatchFullAccessのポリシーをつける。
⑦ ALBを作成する。
⑧ web、cats、dogsのサービスを作成し、設定したパスパターンの通りにweb、cats、dogsにアクセスが可能か確認する。
⑨ Container Insights、Logs Insightsの使用感を確かめる。
⑩ オートスケール設定を行い、実際に負荷をかけてスケールするまでを確認してみる。
⑪ CI/CDパイプラインを構築する。
ハンズオンで得た学び
ただただ「ハンズオンしたよ」という報告では味気ないので、今回のハンズオンで得た学びを3つ記載します。
学びその① ECSクラスター作成の裏側では、AWS CloudFormationが実行されている。
クラスター作成失敗した時のエラー内容も、CloudFormationで改めて確認できます。
例えば
初回のクラスター作成で、まだECS用のサービスロール(AWSServiceRoleForECS)が出来上がっていない ↓ Resource handler returned message: "Error occurred during operation 'CreateCluster SDK error: Service Unavailable. Please try again later. (Service: AmazonECS; Status Code: 500; Error Code: ServerException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Proxy: null)'." (RequestToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HandlerErrorCode: GeneralServiceException) のエラーが発生する。 ↓ クラスターの画面をすぐ閉じてしまい、失敗原因がなんだったのか分からない。 ↓ 再作成しようとしても、同名クラスターで再作成できない。
上記のように行き詰まってしまうケースもあると思います。
ですが、裏側を知っていれば
CloudFormationの失敗原因を確認する ↓ 失敗したCloudFormationのスタックごと削除する ↓ 改めてECSのコンソール画面から作成し直す ↓ 今度はECS用のサービスロールが自動で作成されているため、クラスターの作成に成功する。
と、落ち着いて対処することが可能です。
学びその② ターゲット追跡スケーリングの裏側では、Amazon CloudWatch Alarmが動いている。
よほど「CPU使用率◯%の時はコンテナが何個、×%の時は何個…」という細かい要件がなければ、ターゲット追跡ポリシーを使っているケースが多いと思います。
ターゲット追跡タイプのスケーリングポリシーを使う場合は、裏側でCloudWatch Alarmが自動的に作られるようです。
ハンズオン手順に従い、最大8個までタスクが増えるよう、webサービスのスケーリングポリシーを編集してみます。
試しに、負荷テストツールSiegeを使い、多数のリクエストを送信します。
ALBのCloudWatchメトリクスからも、リクエスト数の増加を確認できました。
…すぐには、タスクは増えません。
そこで、CloudWatch Alarmを見に行ってみます。
「データポイント収集は1分ごとで、3回連続でしきい値に触れている必要がある」という設定になっていますが
まだこの条件を満たしていないから、スケールアウトが実行されていないだけだったんですね。
アラーム状態になると
タスクもどんどん増えていきます。
背景が分かっていると、このように確認がスムーズですね。
最終的には、webのタスクが6個までタスクが増えました。
…ん?6個?
学びその③ ECS on EC2の場合、サービスのスケーリング設定だけではEC2側のvCPUがボトルネックになることがある。
webのスケーリング設定では、最大8個のタスクが起動されるように設定したのに、6個までしかタスクが起動しなかった原因を
今回のハンズオンを担当したソリューションアーキテクトさんから解説していただきました。
下記画像にて示す通り、今回はEC2をm5.large × 2台で、合計4vCPU分の容量を確保しています。
タスク:cats(0.5vCPU) × 2台で、既に1vCPUを使っていることから、空きが3vCPUしかなく
タスク:web(0.5vCPU)は、6台までしか立てる余地が無かったんですね。
この問題を解消するため、EC2もスケーリングするよう運用するには
Capacity Providerを用いるなどして、タスクの増減に合わせてEC2もスケールする必要があるようです。
今までFargateしか触って来なかったので、知らなかったポイントでした。
まとめ
今回は、ハンズオン:ECS Cats and Dogsを実践したことでの学びを書いてみました。
今後のECS運用において役立つ部分が多く、充実した学びになりました。
引き続きいろんなことを学んで、アウトプットすることで知識の定着を図っていきます。
最後まで読んでいただき、ありがとうございました。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2023年9月に入社 邦ロックとVtuber好き
Recommends
こちらもおすすめ
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16