🌲
【初心者向け】AWS Lambda パラメータストアを使用した環境変数
はじめに
本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。
やること
-
AWS Systems Managerパラメータストアに安全な文字列として
"Helo World"
を登録します。 - パラメータを呼び出し、"Helo World"を出力させるLambda関数を作成します。
前提条件
- KMSカスタマーマネージドキー:
/mori/lambda/env
は作成済みとします。
1. パラメータの作成
- パラメータを作成します。
- 名前:
mori-param-lambda-env
- 利用枠:
標準
- タイプ:
安全な文字列
- KMSキーソース:
現在のアカウント
- KMSキーID:
alias/mori/lambda/env
- 値:
Hello World
- KMSキーID:
2. Lambda関数用のIAMロール作成
- 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関数の作成
- Lambdaコンソールから関数の作成をクリックします。
- 以下の設定値を選択して関数の作成をクリックします。
- 関数の作成:
一から作成
- 基本的な情報
- 関数名:
lambda-env-test
- ランタイム:
Python 3.12
- アーキテクチャ:
x86_64
- 関数名:
- デフォルトの実行ロールの変更
- 実行ロール:
mori-role-lambda
※手順2で作成したロール
- 実行ロール:
4. ソースコードの作成
- 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関数のテスト
- テスト実行後、Execution resultタブに
Hello world
が出力されます。
おわりに
- Lambda関数の環境変数は関数ごとに設定する必要があるため、同じ文字列を複数のLambda関数で使用している場合、更新の際に運用コストがかかります。
- 環境変数が頻繁に更新されるような場合は AWS Systems Managerパラメータストアを使用した良いでしょう。
- AWS Systems Managerパラメータストアのサービス上限は4KB(Lambdaの環境変数上限と同じ)。アドバンスドの場合は8KBです。
参考
- Lambda関数用のポリシー
- boto3 ssm.get_parameter()
Discussion