翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用してロードバランサーエンドポイントが変更されたときの CloudFront 更新を自動化する
Tamilselvan P、Mohan Annam、および Naveen Suthar、Amazon Web Services
概要
Amazon Elastic Kubernetes Service (Amazon EKS) のユーザーが Helm チャートを使用して進入設定を削除して再インストールすると、新しい Application Load Balancer (ALB) が作成されます。Amazon CloudFront が古い ALB の DNS レコードを参照し続けるため、この問題が発生します。その結果、このエンドポイント宛てのサービスには到達できません。(この問題のあるワークフローの詳細については、「追加情報」を参照してください)。
この問題を解決するために、このパターンでは Python で開発されたカスタム AWS Lambda 関数の使用について説明します。この Lambda 関数は、Amazon EventBridge ルールを使用して新しい ALB がいつ作成されたかを自動的に検出します。を使用して AWS SDK for Python (Boto3)、関数は新しい ALB の DNS アドレスで CloudFront 設定を更新し、トラフィックが正しいエンドポイントにルーティングされるようにします。
この自動化されたソリューションは、追加のルーティングやレイテンシーなしでサービスの継続性を維持します。このプロセスは、基盤となるインフラストラクチャが変更されても、CloudFront が常に正しい ALB DNS エンドポイントを参照するのに役立ちます。
前提条件と制限
前提条件
アクティブ AWS アカウント。
Helm を使用して Amazon EKS にデプロイされるテストと検証用のサンプルウェブアプリケーション。詳細については、Amazon EKS ドキュメントの「Amazon EKS に Helm を使用してアプリケーションをデプロイする」を参照してください。
Helm イングレスコントローラー
によって作成された ALB に呼び出しをルーティングするように CloudFront を設定します。詳細については、Amazon EKS ドキュメントの「Helm を使用した Install AWS Load Balancer Controller」および CloudFront ドキュメントの「Application Load Balancer へのアクセスを制限する」を参照してください。 ローカルワークスペースにインストール
および設定された Terraform。
制約事項
一部の AWS のサービス は では使用できません AWS リージョン。リージョンの可用性については、AWS 「リージョン別のサービス
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。
製品バージョン
Terraform バージョン 1.0.0 以降
Terraform AWS プロバイダー
バージョン 4.20 以降
アーキテクチャ
次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

このソリューションでは、次のステップを実行します。
Amazon EKS Ingress Controller は、Helm の再起動またはデプロイが行われるたびに、新しい Application Load Balancer (ALB) を作成します。
EventBridge は ALB 作成イベントを検索します。
ALB 作成イベントは Lambda 関数をトリガーします。
Lambda 関数は python 3.9 に基づいてデプロイされており、boto3 API を使用して を呼び出します AWS のサービス。Lambda 関数は、ロードバランサーの作成イベントから受信した最新のロードバランサー DNS 名で CloudFront エントリを更新します。
ツール
AWS のサービス
Amazon CloudFront は、世界中のデータセンターネットワークを通じて配信することで、ウェブコンテンツの配信を高速化します。これにより、レイテンシーが減少し、パフォーマンスが向上します。
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
「Amazon EventBridge」 は、アプリケーションをさまざまなソースのデータに接続するために支援するサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS SDK for Python (Boto3)
は、Python アプリケーション、ライブラリ、またはスクリプトを と統合するのに役立つソフトウェア開発キットです AWS のサービス。
その他のツール
コードリポジトリ
このパターンのコードは、GitHub aws-cloudfront-automation-terraform-samples
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
Git CLI をセットアップして設定します。 | ローカルワークステーションに Git コマンドラインインターフェイス (CLI) をインストールして設定するには、Git ドキュメントの「開始方法 – Git のインストール | DevOps エンジニア |
プロジェクトフォルダを作成し、ファイルを追加します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
ソリューションをデプロイします。 | ターゲットにリソースをデプロイするには AWS アカウント、次の手順を実行します。
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
デプロイを検証します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
インフラストラクチャをクリーンアップします。 | 前に作成したインフラストラクチャをクリーンアップするには、次の手順を実行します。
| DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
プロバイダー認証情報の検証中にエラーが発生しました。 | ローカルマシンから Terraform
このエラーは、ローカルマシンの設定で使用されている認証情報のセキュリティトークンの有効期限が切れていることが原因です。 エラーを解決するには、 AWS Command Line Interface (AWS CLI) ドキュメントの「設定の設定と表示」を参照してください。 |
関連リソース
AWS リソース
Terraformのドキュメント
追加情報
問題のあるワークフロー

この図表は、次のワークフローを示しています:
ユーザーがアプリケーションにアクセスすると、呼び出しは CloudFront に送信されます。
CloudFront は、呼び出しをそれぞれの Application Load Balancer (ALB) にルーティングします。
ALB には、アプリケーションポッドの IP アドレスであるターゲット IP アドレスが含まれます。そこから、ALB はユーザーに期待される結果を提供します。
ただし、このワークフローは問題を示しています。アプリケーションのデプロイは Helm チャートを通じて行われます。デプロイがあるたびに、または誰かが Helm を再起動すると、それぞれの進入も再作成されます。その結果、外部ロードバランサーコントローラーは ALB を再作成します。また、再作成のたびに、ALB は別の DNS 名で再作成されます。このため、CloudFront にはオリジン設定に古いエントリがあります。この古いエントリのため、ユーザーはアプリケーションにアクセスできません。この問題により、ユーザーのダウンタイムが発生します。
代替ソリューション
もう 1 つの可能な解決策は、ALB の外部 DNS