翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用してロードバランサーエンドポイントが変更されたときの CloudFront 更新を自動化
Amazon Web Services、Tamilselvan P、Mohan Annam、Naveen Suthar
概要
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 ドキュメントの「Helm を使用して Amazon EKS にアプリケーションをデプロイする」を参照してください。
Helm のIngress コントローラー
が作成した ALB に、呼び出しをルーティングするように CloudFront を設定します。詳細については、Amazon EKS ドキュメントの「Install AWS Load Balancer Controller with Helm」および CloudFront ドキュメントの「Application Load Balancer へのアクセスを制限する」を参照してください。 ローカルワークスペースにインストール
され設定された Terraform。
制限事項
一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS サービス (リージョン別)
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。
製品バージョン
Terraform バージョン 1.0.0 以降
Terraform AWS Provider
バージョン 4.20 以降
アーキテクチャ
次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

以下の手順で実行します。
Amazon EKS Ingress コントローラーは、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 ドキュメントの「Getting Started – Installing 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