🌲

【初心者向け】AWS Lambda パラメータストアを使用した環境変数

2024/08/24に公開

はじめに

本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。

やること

  • AWS Systems Managerパラメータストアに安全な文字列として"Helo World"を登録します。
  • パラメータを呼び出し、"Helo World"を出力させるLambda関数を作成します。

前提条件

  • KMSカスタマーマネージドキー:/mori/lambda/env は作成済みとします。

1. パラメータの作成

  1. パラメータを作成します。
  • 名前:mori-param-lambda-env
  • 利用枠:標準
  • タイプ:安全な文字列
  • KMSキーソース:現在のアカウント
    • KMSキーID:alias/mori/lambda/env
    • 値:Hello World




2. Lambda関数用のIAMロール作成

  1. IAMロールを作成します。
  • IAMロール名:mori-role-lambda
  • 信頼されたエンティティタイプを選択
    • 信頼されたエンティティタイプ:AWSのサービス
    • ユースケース:Lambda
  • 許可を追加
    • 許可ポリシー:mori-policy-get-param

mori-policy-get-param

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "${パラメータのARN}"
		},
		{
			"Effect": "Allow",
			"Action": "kms:Decrypt",
			"Resource": "${KMSキーのARN}",
		}
	]
}

ポリシーについて

  • "ssm:GetParameter":指定したパラメータストアの値を取得する権限。
  • "kms:Decrypt":パラメータストアの値を復号化する権限。

3. Lambda関数の作成

  1. Lambdaコンソールから関数の作成をクリックします。
  2. 以下の設定値を選択して関数の作成をクリックします。
  • 関数の作成:一から作成
  • 基本的な情報
    • 関数名:lambda-env-test
    • ランタイム:Python 3.12
    • アーキテクチャ:x86_64
  • デフォルトの実行ロールの変更
    • 実行ロール:mori-role-lambda ※手順2で作成したロール

4. ソースコードの作成

  1. Lambda関数lambda-env-testのコードソースを作成します。

lambda_function.py

import json
import message

def lambda_handler(event, context):
    
    msg = message.hello()
    
    return {
        'statusCode':200,
        'body':json.dumps(msg)
    }

message.py

import boto3

ssm = boto3.client('ssm')
response = ssm.get_parameter(
    Name="mori-param-lambda-env",
    WithDecryption=True
)
greet = response['Parameter']['Value']

def hello():
    return greet

コードについて

  • boto3.client('ssm').get_parameter()で取得したパラメータを、変数responseに代入しています。
response = ssm.get_parameter(
    Name="mori-param-lambda-env",
    WithDecryption=True
)

5. Lambda関数のテスト

  1. テスト実行後、Execution resultタブにHello worldが出力されます。

おわりに

  • Lambda関数の環境変数は関数ごとに設定する必要があるため、同じ文字列を複数のLambda関数で使用している場合、更新の際に運用コストがかかります。
    • 環境変数が頻繁に更新されるような場合は AWS Systems Managerパラメータストアを使用した良いでしょう。
  • AWS Systems Managerパラメータストアのサービス上限は4KB(Lambdaの環境変数上限と同じ)。アドバンスドの場合は8KBです。

参考

  • Lambda関数用のポリシー

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ps-integration-lambda-extensions.html

  • boto3 ssm.get_parameter()

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm/client/get_parameter.html

Discussion