AWS Lambda 関数での Parameter Store パラメーターの使用 - AWS Systems Manager

AWS Lambda 関数での Parameter Store パラメーターの使用

AWS Systems Manager の一機能である Parameter Store は、設定データ管理と機密管理のための安全な階層型ストレージを提供します。パスワード、データベース文字列、Amazon Machine Image (AMI) ID、ライセンスコードなどのデータをパラメータ値として保存することができます。

SDK を使用せずに AWS Lambda 関数の Parameter Store からパラメーターを使用するには、AWS パラメーターとシークレットの Lambda 拡張機能を使用できます。この拡張機能は、パラメータ値を取得して、今後使用するためにキャッシュします。Lambda 拡張機能を使用すると、Parameter Store への API コール回数が減り、コストを削減できます。拡張機能を使用すると、キャッシュされたパラメータを取得する方が、Parameter Store から取得するよりも高速になるため、待ち時間を短縮することもできます。

Lambda 拡張機能は、Lambda 関数の機能を強化するコンパニオンプロセスです。拡張機能は、Lambda 呼び出しと並行して実行されるクライアントのようなものです。この並列クライアントは、ライフサイクル中の任意の時点で関数とインターフェイスできます。Lambda 拡張機能の詳細については、AWS Lambda デベロッパーガイドの「Lambda 拡張機能 API」を参照してください。

AWS パラメータとシークレット Lambda 拡張機能は、Parameter Store と AWS Secrets Manager の両方で機能します。Secrets Manager のシークレットで Lambda 拡張機能を使用する方法については、AWS Secrets Manager ユーザーガイドの「AWS Lambda 関数での AWS Secrets Manager シークレットの使用」を参照してください。

関連情報

パラメータとシークレット Lambda 拡張機能を使用して AWS パラメータとシークレットをキャッシュする」(AWS Compute ブログ)

拡張機能の仕組み

Lambda 拡張機能を利用せずに Lambda 関数でパラメータを使用する場合、Parameter Store の GetParameter API アクションと統合して、Lambda 関数が設定の更新を受信するように設定する必要があります。

AWS パラメータとシークレット Lambda 拡張機能を使用すると、拡張機能は Parameter Store からパラメータ値を取得し、ローカルキャッシュに保存します。その後、キャッシュされた値は、有効期限が切れるまで以降の呼び出しに使用されます。キャッシュ値は、期限 (TTL) を過ぎると期限切れになります。このトピックで後述するように、SSM_PARAMETER_STORE_TTL 環境変数 を使用して TTL 値を設定できます。

設定されたキャッシュ TTL の有効期限が切れていない場合は、キャッシュされたパラメータ値が使用されます。時間が経過すると、キャッシュされた値は無効になり、パラメータ値は Parameter Store から取得されます。

また、システムは頻繁に使用されるパラメータ値を検出し、期限切れまたは未使用のパラメータ値をクリアしながらキャッシュに保持します。

実装の詳細

AWS パラメータとシークレット Lambda 拡張機能の設定に役立つ以下の詳細情報を参考にしてください。

認証

Parameter Store リクエストを承認および認証するために、拡張機能は Lambda 関数自体の実行に使用されたものと同じ認証情報を使用します。そのため、関数の実行に使用する AWS Identity and Access Management (IAM) ロールには、Parameter Store と対話するための次の権限が必要です。

  • ssm:GetParameter — Parameter Store からパラメータの取得に必要

  • kms:Decrypt — Parameter Store から SecureString パラメータを取得するために必要

詳細については、「AWS Lambda デベロッパーガイド」の「AWS Lambda 実行ロール」を参照してください。

インスタンス化

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

SDK への依存なし

AWS パラメータとシークレット Lambda 拡張機能は、どの AWS SDK 言語ライブラリからも独立して動作します。Parameter Store に GET リクエストを行うのに AWS SDK は必要ありません。

Localhost ポート

GET リクエストに localhost を使用します。拡張機能は、localhost ポート 2773 に送信されます。拡張機能を使用する場合、外部または内部エンドポイントを指定する必要はありません。このポートを設定するには、環境変数 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT を設定します。

たとえば、Python では、GET URL は次の例のようになります。

parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
TTL 期限が切れる前にパラメータ値を変更します

拡張機能はパラメータ値の変更を検出せず、TTL の有効期限が切れる前に自動更新を実行しません。パラメータ値を変更すると、キャッシュされたパラメータ値を使用する操作は、キャッシュが次に更新されるまで失敗する可能性があります。パラメータ値が頻繁に変更されることが予想される場合は、TTL 値を短く設定することをお勧めします。

ヘッダー要件

拡張キャッシュからパラメータを取得するには、GET リクエストのヘッダーに X-Aws-Parameters-Secrets-Token 参照を含める必要があります。トークンを AWS_SESSION_TOKEN に設定します。これは実行中のすべての関数に対して Lambda によって提供されます。このヘッダーを使用すると、呼び出し元が Lambda 環境内にあることがわかります。

次の Python の例は、キャッシュされたパラメータの値を取得する基本的なリクエストを示しています。

import urllib.request import os import json aws_session_token = os.environ.get('AWS_SESSION_TOKEN') def lambda_handler(event, context): # Retrieve /my/parameter from Parameter Store using extension cache req = urllib.request.Request('http://localhost:2773/systemsmanager/parameters/get?name=%2Fmy%2Fparameter') req.add_header('X-Aws-Parameters-Secrets-Token', aws_session_token) config = urllib.request.urlopen(req).read() return json.loads(config)
ARM サポート

この拡張は、x86_64 と x86 のアーキテクチャがサポートされている、同じ AWS リージョン のすべてで ARM アーキテクチャをサポートしていません。

拡張 ARN の完全なリストについては、AWS Parameters and Secrets Lambda Extension の ARN を参照してください。

ログ記録

Lambda は、Amazon CloudWatch Logs を使用して、Lambda 関数と共に Lambda 拡張機能に関する実行情報をログに記録します。デフォルトでは、Lambda 拡張機能は最小限の情報を CloudWatch に記録します。詳細をログに記録するには、環境変数 PARAMETERS_SECRETS_EXTENSION_LOG_LEVELDEBUG に設定します。

Lambda 関数への拡張機能の追加

AWS Parameters and Secrets Lambda Extension を使用するには、拡張機能を Lambda 関数にレイヤーとして追加します。

関数に拡張機能を追加するには、以下のいずれかの方法を使用します。

AWS Management Console (レイヤーオプションの追加)
  1. AWS Lambda コンソールを https://console.aws.amazon.com/lambda/ で開きます。

  2. 関数を選択します。[Layers] (レイヤー) エリアで、[Add a layer] (レイヤーの追加) を選択します。

  3. [Choose a layer] (レイヤーを選択) エリアで、[AWS layers] オプションを選択します。

  4. [AWS layers] で、[AWS-Parameters-and-Secrets-Lambda-Extension] を選択し、バージョンを選択してから [Add] (追加) を選択します。

AWS Management Console (ARN オプションを指定)
  1. AWS Lambda コンソールを https://console.aws.amazon.com/lambda/ で開きます。

  2. 関数を選択します。[Layers] (レイヤー) エリアで、[Add a layer] (レイヤーの追加) を選択します。

  3. [Choose a layer] (レイヤーの選択) エリアで、[Specify an ARN] (ARN の指定) オプションを選択します。

  4. [Specify an ARN] (ARN の指定) に、AWS リージョン およびアーキテクチャの拡張子 ARN を入力し、[Add] (追加) を選択します。

AWS Command Line Interface

AWS CLI で、次のコマンドを実行します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

aws lambda update-function-configuration \ --function-name function-name \ --layers layer-ARN

関連情報

Lambda 関数でのレイヤーの使用

拡張子の設定 (.zip ファイルアーカイブ)

AWS Parameters and Secrets Lambda Extension の環境変数

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

注記

AWS Lambda は、Lambda 拡張機能と Lambda 関数に関する操作の詳細を Amazon CloudWatch Logs に記録します。

環境変数 詳細 必須 有効な値 デフォルト値

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

Parameter Store へのリクエストのタイムアウト (ミリ秒単位)。

0 (ゼロ) 値は、タイムアウトは発生しません。

いいえ すべての整数 0 (ゼロ)

SECRETS_MANAGER_TIMEOUT_MILLIS

Secrets Manager へのリクエストのタイムアウト (ミリ秒単位)。

0 (ゼロ) 値は、タイムアウトは発生しません。

いいえ すべての整数

0 (ゼロ)

SSM_PARAMETER_STORE_TTL

キャッシュ内のパラメータが無効になるまでの最大有効期間 (秒単位)。0 (ゼロ) 値は、キャッシュをバイパスする必要があることを示します。PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE の値が 0 (ゼロ) の場合、この変数は無視されます。

いいえ 0 (ゼロ) から 300 秒 (5 分) 300 秒 (5 分)

SECRETS_MANAGER_TTL

キャッシュ内のシークレットが無効になるまでの最大有効期間 (秒単位)。0 (ゼロ) 値は、キャッシュがバイパスされたことを示します。PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE の値が 0 (ゼロ) の場合、この変数は無視されます。

いいえ 0 (ゼロ) から 300 秒 (5 分) 300 秒 (5 分)
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

拡張機能のキャッシュが有効になっているかどうかを決定します。重要な値: TRUE | FALSE

いいえ TRUE、FALSE TRUE
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE

アイテム数に関するキャッシュの最大サイズ。0 (ゼロ) 値は、キャッシュがバイパスされたことを示します。両方のキャッシュ TTL 値が 0 (ゼロ) の場合、この変数は無視されます。

いいえ 0 (ゼロ) から 1000

1000

PARAMETERS_SECRETS_EXTENSION_HTTP_PORT ローカル HTTP サーバーのポート。 いいえ 1 - 65535

2773

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS

拡張機能が Parameter Store または Secrets Manager へのリクエストに使用する HTTP クライアントの最大接続数。これは、Secrets Manager クライアントと Parameter Store クライアントの両方がバックエンドサービスに対して行う接続数のクライアントごとの設定です。

いいえ 最小 1、上限なし。

3

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

拡張機能のログに報告された詳細レベル。

拡張機能をセットアップしてテストする際は、キャッシュ構成に関する最も詳細に知るには DEBUG を使用することをお勧めします。

Lambda 操作のログは、関連する CloudWatch Logs ロググループに自動的にプッシュ配信されます。

いいえ

DEBUG | WARN | ERROR | NONE | INFO

INFO

AWS Systems Manager、Parameter Store および AWS Secrets Manager 拡張機能を使用するサンプルコマンド

このセクションの例は、AWS Systems Manager、Parameter Store および AWS Secrets Manager 拡張機能で使用する API アクションを示しています。

Parameter Store に対するサンプルコマンド

Lambda 拡張機能は、GetParameter API アクションへの読み取り専用アクセスを使用します。

このアクションを呼び出すには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get?name=parameter-path&version=version&label=label&withDecryption={true|false}

この例では、parameter-path は完全なパラメーター名、またはパラメーターが階層の一部である場合はパラメーターパスを表します。バージョンラベルは、GetParameter アクションで使用できるセレクターです。このコマンド形式では、標準パラメータ層のパラメータにアクセスできます。

注記

GET 呼び出しを使用する場合、特殊文字を保存するために、パラメータ値を HTTP 用にエンコードする必要があります。たとえば、/a/b/c のように階層パスをフォーマットする代わりに、%2Fa%2Fb%2Fc など、URL の一部として解釈できる文字をエンコードします。

GET http://localhost:port/systemsmanager/parameters/get/?name=MyParameter&version=5

階層内のパラメータを呼び出すには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release

パブリック (グローバル) のパラメータを呼び出すには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…

Parameter Store 参照を使用して Secrets Manager シークレットに HTTP GET 呼び出しを行うには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…

パラメータの Amazon リソースネーム( ARN) を使用して呼び出しを行うには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter

復号化を使用して SecureString パラメータにアクセスする呼び出しを行うには、次のような HTTP GET 呼び出しを行います。

GET http://localhost:port/systemsmanager/parameters/get?name=MyParameter&withDecryption=true

withDecryption を省略するか、明示的に false に設定することで、パラメータが復号化されないように指定できます。バージョンまたはラベルのいずれかを指定することもできますが、両方を指定することはできません。その場合、URL のクエスチョンマーク (?) の後に置かれた最初のものだけが使用されます。

AWS Parameters and Secrets Lambda Extension の ARN

次の表は、サポートされているアーキテクチャとリージョンの拡張 ARN を示しています。

x86_64 および x86 アーキテクチャの拡張 ARN

リージョン ARN

米国東部 (オハイオ)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

米国東部 (バージニア北部)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

米国西部 (北カリフォルニア)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

米国西部 (オレゴン)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アフリカ (ケープタウン)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (香港)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (ハイデラバード) リージョン

arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

アジアパシフィック (ジャカルタ)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (メルボルン)

arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

アジアパシフィック(ムンバイ)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (大阪)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (ソウル)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (シンガポール)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (シドニー)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

アジアパシフィック (東京)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

カナダ (中部)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

カナダ西部 (カルガリー) arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1
中国 (北京)

arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

中国 (寧夏)

arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (フランクフルト)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (アイルランド)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (ロンドン)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (ミラノ)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (パリ)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

欧州 (スペイン) リージョン

arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

欧州 (ストックホルム)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

イスラエル (テルアビブ)

arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

欧州 (チューリッヒ) リージョン

arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

中東 (バーレーン)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

中東 (アラブ首長国連邦) arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

南米(サンパウロ)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (米国東部)

arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (米国西部)

arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

ARM64 および Mac with Apple silicon アーキテクチャの拡張 ARN

リージョン ARN

米国東部 (オハイオ)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

米国東部 (バージニア北部)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

US West (N. California) リージョン

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

米国西部(オレゴン)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

アフリカ(ケープタウン)リージョン

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

アジアパシフィック (香港) リージョン

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

アジアパシフィック (ジャカルタ) リージョン

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

アジアパシフィック(ムンバイ)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

アジアパシフィック (大阪)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

アジアパシフィック (ソウル) リージョン

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

アジアパシフィック (シンガポール)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

アジアパシフィック (シドニー)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

アジアパシフィック (東京)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

カナダ (中部) リージョン

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

欧州 (フランクフルト)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

欧州 (アイルランド)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

欧州 (ロンドン)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

欧州(ミラノ)リージョン

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

欧州 (パリ) リージョン

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

欧州 (ストックホルム) リージョン

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

中東 (バーレーン) リージョン

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

南米 (サンパウロ) リージョン

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8