[レポート] Learn multi-tier application architectures on Amazon ECS に参加しました #SVS310 #AWSreInvent
こんにちは! AWS 事業本部コンサルティング部のトクヤマシュンです。
ラスベガスで開催されている AWS re:Invent 2024に参加しています。
本記事は AWS re:Invent 2024 のセッション「SVS310 | Learn multi-tier application architectures on Amazon ECS」のセッションレポートです。
ECSの安定的な運用に必要な内容を、周辺知識を含めて多層的に体験できるハンズオン形式のセッション(Workshop)で、とても良い内容だと感じたのでご紹介します!
セッション
タイトル
SVS310 | Learn multi-tier application architectures on Amazon ECS
概要
In this workshop, gain practical experience in deploying, scaling, and observing a complex multi-tier application on Amazon ECS. Explore common best practices on how to operate and manage containerized applications that can be translated into any environment. You must bring your laptop to participate.
Chat GPTによる和訳:
このワークショップでは、Amazon ECS を使用して複雑なマルチティアアプリケーションをデプロイ、スケール、監視する実践的な経験を積むことができます。コンテナ化されたアプリケーションを運用・管理するための一般的なベストプラクティスを学び、それをあらゆる環境に応用する方法を探求します。参加するには、ノートパソコンをご持参ください。
スピーカー
- Simone Tallevi-Diotallevi, Sr. Partner Solution Architect, AWS
- Carlos Henrique Silva Santana, Sr. Cloud Support Engineer, Amazon Web Service
他セッション情報
Session types: Workshop
Topic: Serverless Compute & Containers
Area of interest: Modernization
Level: 300 – Advanced
Role: Developer / Engineer, DevOps Engineer, IT Professional / Technical Manager
Services: Amazon Elastic Container Service (Amazon ECS)
内容
はじめに
本ワークショップの内容は Amazon ECS Immersion Dayとして行われたワークショップの再演のようで、リンク先で内容も公開されていました。本記事を見て興味が出たら、ぜひ覗いてみてください。
ただしこのワークショップは、今回のようにAWSのイベント内で実行することが想定されているようで、AWS所有の事前準備がされているアカウント実行することを前提としています。
もし自分でやってみよう!となった場合、いくつかの事前準備されたリソース(ALBやセキュリティグループなど)は別途自分で作成することが必要となりますのでご注意ください。
逆に言うと、このようにワークショップのための準備が十分になされていたり、講師に質問したりできるのがリアルイベントでワークショップに参加する意義だと感じます。
アジェンダ
ワークショップのアジェンダは次の通りでした。
- Getting Started
- Fundamentals
- Auto Scaling
- Networking
- Observability
- Security
- Automation
- Storage
本ワークショップはネットワーキング、オブザーバビリティ、セキュリティなどECSを利用する際に必要となるさまざまな領域について、多層的にベストプラクティスを基にした構築を体験できるものとなっています。
ECSを触ったことがない方でも本アジェンダに沿って構築を行うことで、安定的にECSを運用するための勘所をひととおり学ぶことができ、とても良いワークショップだと感じました。
その分ボリュームは多めなので、ECS経験者の方は自分が興味のある領域だけを体験してみるのも良いかもしれません。
それでは、各章ごとに内容をみていきます。
Getting Started
ワークショップの始め方や、今回構築するECサイトのサンプルの紹介がありました。
FrontendのUIとCarts、Catalogといった複数のBackendで構成されるシステムになっています。
AWSリソースでいうとこんな感じです。(上に比べてリソースが少ないですが、ハンズオン内で利用するサービスのみにフォーカスしているためだと思われます)
本システムのソースやDockerfileなどは下記のGitHubで公開されているので、具体的な実装方法に興味がある方は参考にしてみてください。
aws-containers/retail-store-sample-app/retail-store-sample-app
Fundamentals
はじめに、ハンズオンの基本となる下記のECS関連の設定を行います。
- ECSクラスターを構築
- UIタスク用のECSタスク定義を作成
- UIのECSサービスを作成および更新
- UIタスクのECS Execを有効化し、アプリケーションコンテナへログイン
Auto Scaling
続いて下記のような設定を行い、Auto Scalingの挙動を体験します。
- UIのECSサービスにTarget Tracking Scalingを設定
- ALBのリクエスト数をトラッキングの値とします
- Heyツールを使って一時的にトラフィックを印加
- UIサービスの起動タスク数が増減することを確認
- UIのECSサービスにScheduled Scalingを設定
Heyツールは存在を知りませんでした。Apache Benchのように負荷をかけられるツールで、お手軽に使うことができました。
Networking
続いて下記のような設定を行い、 FrontendサービスからBackendサービスにアクセスできるようにします。
- BackendのAssetsとCatalogのECSサービスを作成
- ECS Service Connectを設定
- 各ECSサービスにService Connectのサイドカーコンテナが追加されプロキシとして動作
- UIサービスからAssets、CatalogのECSサービスに接続できるように
- heyツールでトラフィックを印加し、ECSサービスのTraffic HealthダッシュボードでService Connectのメトリクスを確認
- 各ECSサービスにService Connectのサイドカーコンテナが追加されプロキシとして動作
- ECS Service ConnectにTLS接続を設定
- UI、Assets、CatalogのService ConnectとAWS Private CAを連携し、通信経路をTLS暗号化
はじめてService ConnectにTLS接続を設定しました。
Private CAは料金がそれなりにかかるため個人レベルでは、利用を躊躇することがあるのですが、こうしたワークショップだと気楽に試すことができ、良かったです。
Observability
下記のような設定を行い、ECSにおけるObservabilityを体験します。
- Container Insightsの設定
- メトリクスや可視化されたマップ、ログなどを確認
- AWS Distro for OpenTelemetry Collector(ADOT Collector)の設定
- UIのタスク定義に追加でOTEL Collectorのサイドカーエージェントを起動するよう設定
- UIサービスのアプリケーションには自動計測(Auto-instrumentation)が組み込まれており、コード変更無しでトレース情報取得が可能
- 組み込む実装方法はDockerファイル参照
- UIサービスのアプリケーションには自動計測(Auto-instrumentation)が組み込まれており、コード変更無しでトレース情報取得が可能
- ADOTで取得した情報をX-Ray Trace Mapやメトリクス、ログから確認
- UIのタスク定義に追加でOTEL Collectorのサイドカーエージェントを起動するよう設定
後者のADOT Collectorによる情報収集は下図のようなイメージです。
実装することによって、下記のようにトレース情報などが確認できます
ADOTはまだまだ馴染みが薄い方も多いのではないでしょうか。
どのような情報が取得でき、どのようにAWS上で可視化できるのか、までをワークショップ内で確認することができるので、興味がある方はぜひ体験してみてください。
Security
- IAM Roleの設定
- タスクロールとタスク実行ロールの違いとそれぞれの実践
- GuardDuty ECS Runtime Monitoringの設定
- サイドカーエージェントの起動
- 悪意のあるECSタスクを故意に実行し、GuardDutyでの検知を確認
Automation
- Terraformを使ってCodePipelineを用いたCI/CDパイプラインの構築
- ソースステージにはCodeCommit、ビルドステージはCoddeBuild、デプロイはRollingUpdateを利用
- CodeCommitは新規利用ができなくなっているため、これまでCodeCommitを利用していなかったAWSアカウントではこの部分はハンズオン不可となります
- ソースステージにはCodeCommit、ビルドステージはCoddeBuild、デプロイはRollingUpdateを利用
- CI/CDパイプラインの実行
Storage
- FargateでのEFSボリュームのマウント
- AssetのECSタスクのアプリケーションコンテナにEFSボリュームをマウント
- EFSボリュームに画像をアップロードして、画像置き換えを実行
以上でワークショップは完了となります。大ボリューム!!
終わりに
「Learn multi-tier application architectures on Amazon ECS」のセッションレポートをお届けしました。
ボリュームは大きいけど、ECSを使う際には意識したいことばかりでした。
これからECSを使い始める方にも、すでに使っている方にも、どなたにも刺さる箇所があるワークショップだったのではないでしょうか。
本レポートがどなたかのお役に立てば幸いです。