翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EKS Pod Identity と KEDA を使用して Amazon EKS でイベント駆動型自動スケーリングをセットアップする
Amazon Web Services、Dipen Desai、Abhay Diwan、Kamal Joshi、Mahendra Revanasiddappa
概要
Amazon Elastic Kubernetes Service (Amazon EKS) などのオーケストレーションプラットフォームは、コンテナベースのアプリケーションのライフサイクル管理を合理化してきました。これにより、組織はコンテナベースのアプリケーションの構築、保護、運用、保守に集中できます。イベント駆動型デプロイがより一般的になるにつれて、組織はさまざまなイベントソースに基づいて Kubernetes デプロイをより頻繁にスケーリングするようになっています。この方法と自動スケーリングを一緒に使用し、アプリケーションロジックに合わせたオンデマンドコンピューティングリソースと効率的なスケーリングを提供することで、大幅なコスト削減につながります。
KEDA
AWS は AWS Identity and Access Management 、Amazon EKS、Amazon EKS Anywhere、(ROSA)、Amazon Elastic Compute Cloud (Amazon EC2) 上のセルフマネージド Kubernetes クラスターなど、さまざまな Kubernetes デプロイオプションをサポートする (IAM) ロールを提供します。 Red Hat OpenShift Service on AWS Amazon EC2 これらのロールは、OpenID Connect (OIDC) ID プロバイダーや IAM 信頼ポリシーなどの IAM コンストラクトを使用することにより、Amazon EKS サービスや API に直接依存することなく、さまざまな環境で機能します。詳細については、Amazon EKS ドキュメントの「サービスアカウントの IAM ロール」を参照してください。
Amazon EKS Pod Identity を使用すると、Kubernetes サービスアカウントが OIDC プロバイダーなしで IAM ロールを引き受けるプロセスが簡素化されます。これにより、アプリケーションの認証情報を管理できます。 AWS 認証情報を作成してコンテナに配布したり、Amazon EC2 インスタンスのロールを使用する代わりに、IAM ロールを Kubernetes サービスアカウントに関連付け、サービスアカウントを使用するように Pod を設定します。これにより、複数のクラスターで IAM ロールを使用することができ、IAM ロール間でアクセス許可ポリシーを再利用することでポリシー管理を簡素化することができます。
KEDA と Amazon EKS Pod Identity を実装することで、企業は効率的なイベント駆動型の自動スケーリングとシンプルな認証情報管理を実現できます。アプリケーションは需要に基づいてスケールするため、リソース使用率を最適化し、コストを削減できます。
このパターンは、Amazon EKS Pod Identity を KEDA と統合するのに役立ちます。keda-operator サービスアカウントを使用し、TriggerAuthentication で認証を委任する方法を説明します。また、KEDA オペレータ用の IAM ロールとアプリケーション用の IAM ロールの間に信頼関係をセットアップする方法についても説明します。この信頼関係により、KEDA はイベントキュー内のメッセージをモニタリングし、送信先 Kubernetes オブジェクトのスケーリングを調整することができます。
前提条件と制限
前提条件
AWS Command Line Interface (AWS CLI) バージョン 2.13.17 以降、インストール済み
Python バージョン 3.11.5 以降がインストールされていること
AWS SDK for Python (Boto3) バージョン 1.34.135 以降、インストール
済み Helm バージョン 3.12.3 以降がインストールされていること
kubectl バージョン 1.25.1 以降がインストールされていること
Docker Engine バージョン 26.1.1 以降がインストールされていること
Amazon EKS クラスターバージョン 1.24 以降が作成されていること
Amazon EKS Pod Identity エージェントを作成するための前提条件が満たされていること
制限事項
keda-operatorロールとkeda-identityロールの間に信頼関係を確立する必要があります。手順については、このパターンの「エピック」セクションを参照してください。
アーキテクチャ
このパターンでは、次の AWS リソースを作成します。
Amazon Elastic Container Registry (Amazon ECR) リポジトリ – このパターンでは、このリポジトリの名前は
keda-pod-identity-registryです。このプライベートリポジトリは、サンプルアプリケーションの Docker イメージを保存するために使用されます。Amazon Simple Queue Service (Amazon SQS) キュー – このパターンでは、このキューの名前は
event-messages-queueです。キューは、受信メッセージを収集して保存するメッセージバッファとして機能します。KEDA は、メッセージ数やキューの長さなどのキューメトリクスをモニタリングし、これらのメトリクスに基づいてアプリケーションを自動的にスケーリングします。アプリケーションの IAM ロール – このパターンでは、このロールの名前は
keda-identityです。keda-operatorロールはこのロールを引き受けます。このロールにより、Amazon SQS キューへのアクセスが許可されます。KEDA オペレーターの IAM ロール – このパターンでは、このロールの名前は
keda-operatorです。KEDA 演算子は、このロールを使用して必要な AWS API コールを行います。このロールには、keda-identityロールを引き受けるためのアクセス権限が割り当てられています。keda-operatorとkeda-identityロールの間には信頼関係があるため、keda-operatorロールにも Amazon SQS アクセス権限が割り当てられます。
TriggerAuthentication および ScaledObject Kubernetes カスタムリソースを通じて、オペレーターは keda-identity ロールで Amazon SQS キューに接続します。キューのサイズに基づいて、KEDA は自動的にアプリケーションのデプロイをスケーリングします。キュー内の 5 つの未読メッセージごとに 1 つのポッドを追加します。デフォルト設定では、Amazon SQS キューに未読メッセージがない場合、アプリケーションはポッド数 0 までスケールダウンします。KEDA オペレーターは、指定した間隔でキューをモニタリングします。
次の図に、Amazon EKS Pod Identity を使用して keda-operator ロールに Amazon SQS キューへの安全なアクセスを提供する方法を示します。

この図表は、次のワークフローを示しています:
Amazon EKS Pod Identity エージェントを Amazon EKS クラスターにインストールします。
Amazon EKS クラスターの KEDA 名前空間に KEDA オペレーターをデプロイします。
ターゲットに
keda-operatorおよびkeda-identityIAM ロールを作成します AWS アカウント。IAM ロールの間に信頼関係を確立します。
アプリケーションを
security名前空間にデプロイします。KEDA オペレーターは、Amazon SQS キュー内のメッセージをポーリングします。
KEDA が HPA を開始し、キューのサイズに基づいてアプリケーションが自動的にスケーリングされます。
ツール
AWS のサービス
Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
「Amazon Simple Queue Service (Amazon SQS)」は、分散したソフトウェアシステムとコンポーネントの統合と切り離しを支援し、セキュアで耐久性があり、利用可能なホスト型キューを提供します。
その他のツール
KEDA
は、Kubernetes ベースのイベント駆動型オートスケーラーです。
コードリポジトリ
このパターンのコードは、GitHub 内の「Event-driven auto scaling using EKS Pod Identity and KEDA
ベストプラクティス
ACM のベストプラクティスに従うことをおすすめします。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
KEDA オペレーターの IAM ロールを作成します。 |
| AWS 管理者 |
サンプルアプリケーションの IAM ロールを作成します。 |
| AWS 管理者 |
Amazon SQS キューを作成します。 |
| AWS 全般 |
Amazon ECR リポジトリを作成します。 |
| AWS 全般 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Amazon EKS Pod Identity エージェントをデプロイします。 | ターゲット Amazon EKS クラスターで、Amazon EKS Pod Identity エージェントをセットアップします。Amazon EKS ドキュメントの「Amazon EKS Pod Identity エージェントのセットアップ」の手順に従います。 | AWS DevOps |
KEDA をデプロイします。 |
| DevOps エンジニア |
IAM ロールを Kubernetes サービスアカウントに割り当てます。 | Amazon EKS ドキュメントの「IAM ロールを Kubernetes サービスアカウントに割り当てる」の手順に従ってください。以下の値を使用します。
| AWS DevOps |
名前空間を作成します。 | 次のコマンドを入力して、ターゲット Amazon EKS クラスターに
| DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
アプリケーションファイルのクローンを作成します。 | 次のコマンドを入力して、GitHub の「Event-driven auto scaling using EKS Pod Identity and KEDA repository
| DevOps エンジニア |
Docker イメージを作成します。 |
| DevOps エンジニア |
Amazon ECR にDocker イメージをプッシュします。 |
注記プッシュコマンドを見つけるには、Amazon ECR リポジトリページに移動し、[プッシュコマンドを表示] を選択します。 | DevOps エンジニア |
サンプルアプリケーションをデプロイします。 |
| DevOps エンジニア |
IAM ロールをアプリケーションサービスアカウントに割り当てます。 |
| DevOps エンジニア |
|
| DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Amazon SQS キューにメッセージを送信します。 |
| DevOps エンジニア |
アプリケーションポッドをモニタリングします。 |
| DevOps エンジニア |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
KEDA オペレーターがアプリケーションをスケールできません。 | 次のコマンドを入力して、
|
関連リソース
Amazon EKS Pod Identity エージェントのセットアップ (Amazon EKS ドキュメント)
Deploying KEDA
(KEDA ドキュメント) ScaledObject specification
(KEDA ドキュメント) Authentication with TriggerAuthentication
(KEDA ドキュメント)