パラメータストアをLambdaPowertoolsで使う
もくじ
SSM のパラメーターストアを使ってますか?
外部連携の認証キーとかを保存しておいて、Lambda で使う!とかの用途で使うと思いますが、
この記事は Lambda Powertools を使うと、実装が多少楽になるよ、という内容と具体的な動作を確認してみます。
何が嬉しいの?
今回は書くソースコードの量が少し少なくなる程度だと思っているので、これの目的のために Lambda Powertools を使うというよりは、
Lambda Powertools を使っていて、Parameter ストアを使う場合は使うといいよ! 的な嬉しさです。
前提
- ローカルから SSM の Parameter ストアにアクセスできる権限がある
では 動作の確認していきましょう!
今回は Parameter ストアにアクセスするだけなので、CDK とかは使いません(笑)
環境をつくる
下記のコマンドで仮想環境を作って、Lambda Powertools をインストールします
# とりあえず仮想環境を作る
$ python3 -m venv .venv
$ source .venv/bin/activate
# インストール
$ pip install aws-lambda-powertools
Parameter ストアに登録する
アクセスするための値を ssm に登録します
# 登録
$ aws ssm put-parameter --name "/test/hogehoge" --value "HOOOOOGEEEEEE" --type SecureString
# 確認
$ aws ssm get-parameter --name "/test/hogehoge"
# こんな感じで設定されている
{
"Parameter": {
"Name": "/test/hogehoge",
"Type": "SecureString",
"Value": "dummy",
"Version": 1,
"LastModifiedDate": "dummy",
"ARN": "dummy",
"DataType": "text"
}
}
今回は/test/hogehoge
にHOOOOOGEEEEEE
という値を暗号化して登録しました!
Parameter を使う
今回はコードが少ないので、python のインタプリタを使って動作確認します。
$ python
対話形式のコンソールを呼び出して下記2行叩く。
>>> from aws_lambda_powertools.utilities import parameters
>>> parameters.get_parameter("/test/hogehoge", decrypt=True)
'HOOOOOGEEEEEE' # <- こんな出力が返ってくる
まさかの 2 行で動作確認終わり
ちなみは暗号化されてない値を使うときはdecrypt=True
は不要です。
パラメーターは削除しておきましょう
# 削除
$ aws ssm delete-parameter --name "/test/hogehoge"
# 確認
$ aws ssm get-parameter --name "/test/hogehoge"
# こんな内容が表示されればOK
An error occurred (ParameterNotFound) when calling the GetParameter operation:
完
余談。。。
やるきになればboto3
でも 2 行でとってこれる
# python インタプリタ
>>> import boto3
>>> boto3.client("ssm").get_parameter(Name="/test/hogehoge",WithDecryption=True)["Parameter"]["Value"]
'HOOOOOGEEEEEE'
その上で、下記のようなユースケースの場合はLambdaPowertools
のほうが幸せになれるかもしれません。
- Parameter ストアに保存した値が頻繁に変わるような場合。
LambdaPowertools
は値をメモリーにキャッシュさせて定期的に(例えば 30 秒毎とか)Parameter を更新させるような処理ができる - ストアの値が json 形式だったり base64 の値だった場合。取得と同時に変形させることができる。
最後のこの機能(from aws_lambda_powertools.utilities import parameters
)は ssm 以外にも DynamoDB でも使えるので、それが結構便利そうなので別の記事でまとめようと思います!
以上でした!