AWS AppConfig エージェント Lambda 拡張機能を使用した設定データの取得 - AWS AppConfig

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS AppConfig エージェント Lambda 拡張機能を使用した設定データの取得

AWS Lambda 拡張機能は、Lambda 関数の機能を強化するコンパニオンプロセスです。拡張機能は、関数が呼び出される前に開始し、関数と並行して実行し、関数の呼び出しが処理された後も引き続き実行できます。本質的に、Lambda 拡張機能は Lambda 呼び出しと並行して実行されるクライアントのようなものです。この並列クライアントは、ライフサイクル中の任意の時点で関数とインターフェイスできます。

Lambda 関数で AWS AppConfig 機能フラグやその他の動的設定データを使用する場合は、 AWS AppConfig エージェント Lambda 拡張機能を Lambda 関数のレイヤーとして追加することをお勧めします。これにより、機能フラグの呼び出しが簡単になり、拡張機能自体には、コストを削減 AWS AppConfig しながら の使用を簡素化するベストプラクティスが含まれています。 AWS AppConfig サービスへの API コールが少なくなり、Lambda 関数の処理時間が短縮されるため、コストを削減できます。Lambda 拡張機能の詳細については、「AWS Lambda デベロッパーガイド」の「Lambda 拡張機能」を参照してください。

注記

AWS AppConfig の料金は、設定が呼び出されて受信された回数に基づきます。Lambda が複数のコールドスタートを実行し、新しい設定データを頻繁に取得すると、コストが増加します。

このトピックでは、 AWS AppConfig エージェント Lambda 拡張機能に関する情報と、Lambda 関数で動作するように拡張機能を設定する手順について説明します。

仕組み

AWS AppConfig を使用して Lambda 拡張機能のない Lambda 関数の設定を管理する場合は、 StartConfigurationSessionおよび GetLatestConfiguration API アクションと統合して、Lambda 関数が設定更新を受け取るように設定する必要があります。

AWS AppConfig エージェント Lambda 拡張機能を Lambda 関数と統合すると、このプロセスが簡素化されます。拡張機能は、 AWS AppConfig サービスの呼び出し、取得されたデータのローカルキャッシュの管理、次のサービス呼び出しに必要な設定トークンの追跡、バックグラウンドでの設定更新の定期的なチェックを行います。次の図は、その仕組みを示しています。

AWS AppConfig エージェント Lambda 拡張機能の仕組みの図
  1. AWS AppConfig エージェント Lambda 拡張機能は、Lambda 関数のレイヤーとして設定します。

  2. 設定データにアクセスするために、関数は で実行されている HTTP エンドポイントで AWS AppConfig 拡張機能を呼び出しますlocalhost:2772

  3. 拡張機能は、設定データのローカルキャッシュを保持します。データがキャッシュにない場合、拡張機能は を呼び出し AWS AppConfig て設定データを取得します。

  4. サービスから設定を受信すると、拡張機能はローカルキャッシュに設定を保存し、Lambda 関数に渡します。

  5. AWS AppConfig エージェント Lambda 拡張機能は、設定データの更新をバックグラウンドで定期的にチェックします。Lambda 関数が呼び出されるたびに、拡張機能は、設定を取得してからの経過時間をチェックします。経過時間が設定されたポーリング間隔より大きい場合、拡張機能は AWS AppConfig を呼び出して新しくデプロイされたデータをチェックし、変更があった場合にローカルキャッシュを更新し、経過時間をリセットします。

注記
  • Lambda は、関数が必要とする同時実行レベルに対応する個別のインスタンスをインスタンス化します。各インスタンスは分離され、設定データの独自のローカルキャッシュが保持されます。Lambda インスタンスと同時実行の詳細については、「Lambda 関数の同時実行数の管理」を参照してください。

  • から更新された設定をデプロイした後、Lambda 関数に設定変更が表示されるまでにかかる時間は AWS AppConfig、デプロイに使用したデプロイ戦略と、拡張機能に設定したポーリング間隔によって異なります。

開始する前に

AWS AppConfig エージェント Lambda 拡張機能を有効にする前に、次の操作を行います。

AWS AppConfig エージェント Lambda 拡張機能の追加

AWS AppConfig エージェント Lambda 拡張機能を使用するには、拡張機能を Lambda に追加する必要があります。これは、 AWS AppConfig エージェント Lambda 拡張機能を Lambda 関数にレイヤーとして追加するか、Lambda 関数で拡張機能をコンテナイメージとして有効にすることで実行できます。

注記

AWS AppConfig 拡張機能はランタイムに依存しず、すべてのランタイムをサポートします。

レイヤーと AWS AppConfig ARN を使用してエージェント Lambda 拡張機能を追加します。

AWS AppConfig エージェント Lambda 拡張機能を使用するには、拡張機能をレイヤーとして Lambda 関数に追加します。関数にレイヤーを追加する方法については、「AWS Lambda デベロッパーガイド」の「拡張機能の設定」を参照してください。 AWS Lambda コンソールの拡張機能の名前は AWS-AppConfig-Extension です。また、拡張機能を Lambda にレイヤーとして追加する場合は、Amazon リソースネーム (ARN) を指定する必要があることにも注意してください。プラットフォームと Lambda を作成した AWS リージョン 場所に対応する次のいずれかのリストから ARN を選択します。

拡張機能を関数に追加する前にテストする場合は、次のコード例を使用して拡張機能が機能することを確認できます。

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name' config = urllib.request.urlopen(url).read() return config

これをテストするには、Python 用の新しい Lambda 関数を作成し、拡張機能を追加して Lambda 関数を実行します。Lambda 関数を実行すると、Lambda AWS AppConfig 関数は http://localhost:2772 パスに指定した設定を返します。Lambda 関数の作成については、「AWS Lambda デベロッパーガイド」の「コンソールで Lambda の関数の作成」を参照してください。

AWS AppConfig エージェント Lambda 拡張機能をコンテナイメージとして追加するには、「」を参照してくださいコンテナイメージを使用して AWS AppConfig エージェント Lambda 拡張機能を追加する

AWS AppConfig エージェント Lambda 拡張機能の設定

拡張機能は、次の AWS Lambda 環境変数を変更することで設定できます。詳細については、「 AWS Lambda デベロッパーガイド」のAWS Lambda 「環境変数の使用」を参照してください。

設定データのプリフェッチ

環境変数 AWS_APPCONFIG_EXTENSION_PREFETCH_LIST は、関数の起動時間を大幅に改善できます。 AWS AppConfig エージェント Lambda 拡張機能が初期化されると、Lambda が関数の初期化を開始し、ハンドラーを呼び出す AWS AppConfig 前に、指定された設定が から取得されます。場合によっては、関数が要求する前に、設定データがローカルキャッシュで既に利用可能になっていることがあります。

プリフェッチ機能を使用するには、設定データに対応するパスに、環境変数の値を設定します。例えば、設定がそれぞれ「my_application」、「my_environment」、「my_configuration_data」という名前のアプリケーション、環境、および設定プロファイルに対応している場合、パスは /applications/my_application/environments/my_environment/configurations/my_configuration_data のようになります。設定項目をカンマ区切りのリストとして列挙することで、複数の設定項目を指定できます (カンマを含むリソース名がある場合は、リソースの名前ではなく ID 値を使用します)。

別のアカウントから設定データへアクセスします

AWS AppConfig エージェント Lambda 拡張機能は、データにアクセス許可を付与する IAM ロールを指定することで、別のアカウントから設定データを取得できます。これを設定するには、次の手順に従います。

  1. AWS AppConfig が設定データの管理に使用されるアカウントで、Lambda 関数を実行しているアカウントに appconfig:StartConfigurationSession および appconfig:GetLatestConfigurationアクションへのアクセス権と、 AWS AppConfig 設定リソースに対応する部分的または完全な ARNs を付与する信頼ポリシーを持つロールを作成します。

  2. Lambda 関数を実行するアカウントで、ステップ 1 で作成したロールの ARN AWS_APPCONFIG_EXTENSION_ROLE_ARN を含む環境変数を Lambda 関数に追加します。

  3. (オプショナル) 必要に応じて、AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID 環境変数を使用して外部 ID を指定できます。同様に、 AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME セッション名は環境変数を使用して設定できます。

注記

以下の情報に注意してください。

  • AWS AppConfig エージェント Lambda 拡張機能は、1 つのアカウントからのみデータを取得できます。IAM ロールを指定した場合、拡張子は Lambda 関数が実行されているアカウントから設定データを取得できません。

  • AWS Lambda は、Amazon CloudWatch Logs を使用して AWS AppConfig 、エージェント Lambda 拡張機能と Lambda 関数に関する情報をログに記録します。

環境変数 詳細 デフォルト値

AWS_APPCONFIG_EXTENSION_HTTP_PORT

この環境変数は、拡張機能をホストするローカル HTTP サーバーが実行されるポートを指定します。

2772

AWS_APPCONFIG_EXTENSION_LOG_LEVEL

この環境変数は、関数の Amazon CloudWatch Logs に送信される AWS AppConfig 拡張固有のログを指定します。大文字と小文字を区別しない有効な値は debuginfowarnerror、および none です。デバッグには、タイミング情報など、拡張機能に関する詳細情報が含まれます。

info

AWS_APPCONFIG_EXTENSION_MAX_CONNECTIONS

この環境変数は、拡張機能が AWS AppConfigから設定を取得するために使用する最大接続数を設定します。

3

AWS_APPCONFIG_EXTENSION_POLL_INTERVAL_SECONDS

この環境変数は、拡張機能が更新された設定 AWS AppConfig をポーリングする頻度を秒単位で制御します。

45

AWS_APPCONFIG_EXTENSION_POLL_TIMEOUT_MILLIS

この環境変数は、キャッシュ内のデータを更新する AWS AppConfig ときに、 からの応答を 拡張機能が待機する最大時間をミリ秒単位で制御します。が指定された時間内に応答 AWS AppConfig しない場合、拡張機能はこのポーリング間隔をスキップし、以前に更新されたキャッシュされたデータを返します。

3000

AWS_APPCONFIG_EXTENSION_PREFETCH_LIST

この環境変数は、関数が初期化されてハンドラーが実行される前に、拡張機能が取得を開始する設定データを指定します。これにより、機能のコールドスタート時間を大幅に短縮できます。

なし
AWS_APPCONFIG_EXTENSION_PROXY_HEADERS この環境変数は、AWS_APPCONFIG_EXTENSION_PROXY_URL 環境変数で参照されるプロキシに必要なヘッダーを指定します。値は、コンマで区切られたヘッダーの一覧です。各ヘッダーは次の形式を使用します。
"header: value"
なし
AWS_APPCONFIG_EXTENSION_PROXY_URL この環境変数は、 AWS AppConfig 拡張から への接続に使用するプロキシ URL を指定します AWS のサービス。 HTTPSおよび HTTP URLs がサポートされています。 なし
AWS_APPCONFIG_EXTENSION_ROLE_ARN この環境変数は、設定を取得するために AWS AppConfig 拡張機能が引き受ける必要があるロールに対応する IAM ロール ARN を指定します。 なし
AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID この環境変数は、想定されるロール ARN と組み合わせて使用する外部 ID を指定します。 なし
AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME この環境変数は、引き受ける IAM ロールの認証情報に関連付けるセッション名を指定します。 なし
AWS_APPCONFIG_EXTENSION_SERVICE_REGION この環境変数は、拡張機能が AWS AppConfig サービスを呼び出すために使用する代替リージョンを指定します。未定義の場合、拡張機能は現在のリージョンのエンドポイントを使用します。 なし

AWS_APPCONFIG_EXTENSION_MANIFEST

この環境変数は、マルチアカウント取得やディスク への設定の保存など、設定ごとに追加の機能を利用するように AWS AppConfig エージェントを設定します。 次のいずれかの値を入力できます。

  • "app:env:manifest-config"

  • "file:/fully/qualified/path/to/manifest.json"

これらの機能の詳細については、「その他の取り出し機能」を参照してください。

true

AWS_APPCONFIG_EXTENSION_WAIT_ON_MANIFEST

この環境変数は、起動を完了する前にマニフェストが処理されるまで待機するように AWS AppConfig エージェントを設定します。

true

機能フラグ設定から 1 つ以上のフラグを取得する

機能フラグ設定 (AWS.AppConfig.FeatureFlags タイプの設定) の場合、Lambda 拡張機能を使用すると、設定内の単一のフラグまたはフラグのサブセットを取得できます。1 つまたは 2 つのフラグを取得すると、Lambda で設定プロファイルからいくつかのフラグのみを使用する必要がある場合に便利です。次の例では Python を使用しています。

注記

設定で単一の機能フラグまたはフラグのサブセットを呼び出す機能は、 AWS AppConfig エージェント Lambda 拡張機能バージョン 2.0.45 以降でのみ使用できます。

ローカル HTTP エンドポイントから AWS AppConfig 設定データを取得できます。特定のフラグまたはフラグのリストにアクセスするには、?flag=flag_name 設定プロファイルの AWS AppConfig クエリパラメータを使用します。

1 つのフラグとその属性にアクセスする方法

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name' config = urllib.request.urlopen(url).read() return config

複数のフラグとその属性にアクセスする方法

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name_one&flag=flag_name_two' config = urllib.request.urlopen(url).read() return config

AWS AppConfig エージェント Lambda 拡張機能ログの表示

AWS AppConfig エージェント Lambda 拡張機能の AWS Lambda ログデータは、 ログで表示できます。ログエントリの先頭には が付きますappconfig agent。以下に例を示します。

[appconfig agent] 2024/05/07 04:19:01 ERROR retrieve failure for 'SourceEventConfig:SourceEventConfigEnvironment:SourceEventConfigProfile': StartConfigurationSession: api error AccessDenied: User: arn:aws:sts::0123456789:assumed-role/us-east-1-LambdaRole/extension1 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::0123456789:role/test1 (retry in 60s)