この記事では
・Lamdba関数からParamter Storeの値を取得
する手順を紹介します!
手順は
・Paramter Storeのパラメータの作成
・IAMポリシーの作成
・IAMロールの作成
・Lambda関数の作成
となります!
※今回は、Lambda関数はPythonで作成します。
Paramter Storeのパラメータの作成
Paramter Storeのページを開いて「パラメータの作成」をクリックして、画面に従ってパラメータを作成します。
今回は以下で作成します。
項目 | 設定値 |
---|---|
名前 | sample-password |
タイプ | 文字列 |
データ型 | text |
値 | password12345 |
IAMポリシーの作成
Lamdba関数がParamter Storeから値を取得できるように、「Systems Manager」のアクション「GetParameter」を許可する権限を持つIAMポリシーを作成します。
今回は「get-key-parameterstore-string-text」という名前で作成します。
当該アクションの許可を持つJSONは以下となります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "*"
}
]
}
IAMロールの作成
以下をアタッチしたIAMロールを作成します。
ポリシー名 | 説明 |
---|---|
get-key-parameterstore-string-text | 上記で作成したIAMポリシー |
AWSLambdaBasicExecutionRole | CloudWatch Logsへの書き込み権限を持つポリシー |
今回は「get-key-parameterstore-Role」という名前で作成します。
Lambda関数の作成
Lambda関数のページを開いて「関数の作成」をクリックして、以下を入力/選択してLambda関数を作成します。
項目名 | 入力/選択 |
---|---|
関数名 | 任意の名前 ※get-key-parameterstore-funcなど |
ランタイム | Python 3.12 |
ロール | get-key-parameterstore-Role ※上記で作成したIAMロール |
下部の「レイヤーの追加」をクリックして、以下を選択して「追加」をクリックする。
項目名 | 入力/選択 |
---|---|
AWSレイヤー | AWS-Parameters-and-Secrets-Lambda-Extension |
バージョン | 11 ※2024/2/24時点では11しか選択できない |
Lambda関数のコードとして以下を記載します。
※以下のどちらかのコードを記載します。
・標準ライブラリ「urllib」を使用する方法
・サードパーティのライブラリ「requests」を使用する方法
●標準ライブラリ「urllib」を使用する方法
import urllib.request
import os
import json
aws_session_token = os.environ.get("AWS_SESSION_TOKEN")
key_name = "sample-password"
def lambda_handler(event, context):
req = urllib.request.Request("http://localhost:2773/systemsmanager/parameters/get/?name={}".format(key_name))
req.add_header("X-Aws-Parameters-Secrets-Token", aws_session_token)
config = urllib.request.urlopen(req).read()
print("パスワード = " + json.loads(config)["Parameter"]["Value"])
●サードパーティのライブラリ「requests」を使用する方法
import requests
import os
import json
headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get("AWS_SESSION_TOKEN")}
key_name = "sample-password"
def lambda_handler(event, context):
endpoint = "http://localhost:2773/systemsmanager/parameters/get/?name={}".format(key_name)
r = requests.get(endpoint, headers=headers)
print("パスワード = " + r.json()["Parameter"]["Value"])
実行結果
Lamdba関数からParamter Storeの値を取得できました。
CloudWatch Logsでも、問題無く実行できたことを確認できます。
参考①
上記に記載したAWSレイヤー「AWS-Parameters-and-Secrets-Lambda-Extension」を使用してParamter Storeの値を取得すると、値が一定期間キャッシュされます。
キャッシュされることでコスト削減が期待できます。
参考②
Lamdba関数からParamter Storeの値を取得する手順の詳細は、公式サイトをご確認ください。