概要
AWS Lambda Powertools Python 1 の機能のうち、パラメータ機能(Parameters) 2 にはJSONとbase64を変換してくれる機能が含まれています。
簡単なサンプルで動作を確認します。
確認手順
対象はSSM Parameter Storeとします。
モジュール
aws-lambda-powertools 1.31.1
boto3 1.24.96
botocore 1.27.96
パラメータ設定
AWS CLIで設定しました。
JSONテキストを設定
$ aws ssm put-parameter \
--name "/my/json-parameter" \
--value "{\"name\": \"AWS Lambda Powertools\", \"language\": \"Python\"}" \
--type String
base64テキストを設定
Hello AWS Lambda Powertools!
をbase64コマンドでエンコードした結果を設定しています
$ aws ssm put-parameter \
--name "/my/base64-parameter" \
--value "`echo -n 'Hello AWS Lambda Powertools!' | base64`" \
--type String
ソースコード
transform
引数を指定しない場合と適切に指定した場合の結果を確認します。
parameter_transform.py
from aws_lambda_powertools.utilities import parameters
# JSON
value_json_raw = parameters.get_parameter("/my/json-parameter")
value_json_dict = parameters.get_parameter("/my/json-parameter", transform='json')
print(f'{value_json_raw=}')
print(f'{value_json_dict=}')
# base64
value_base64_raw = parameters.get_parameter("/my/base64-parameter")
value_base64_bin = parameters.get_parameter("/my/base64-parameter", transform='binary')
print(f'{value_base64_raw=}')
print(f'{value_base64_bin=}')
実行結果
- value_json_raw...設定したJSONテキストそのままです
- value_json_dict...JSONテキストが辞書型に変換されています
- value_base64_raw...base64テキストそのままです
- value_base64_bin...base64デコード結果のバイナリに変換されています
$ python parameter_transform.py
value_json_raw='{"name": "AWS Lambda Powertools", "language": "Python"}'
value_json_dict={'name': 'AWS Lambda Powertools', 'language': 'Python'}
value_base64_raw='SGVsbG8gQVdTIExhbWJkYSBQb3dlcnRvb2xzIQ=='
value_base64_bin=b'Hello AWS Lambda Powertools!'
変換エラーの捕捉
TransformParameterError
例外で捕捉できます。
parameter_transform_exception.py
from aws_lambda_powertools.utilities import parameters
try:
value = parameters.get_parameter("/my/json-parameter", transform='binary') # invalid transform
except parameters.exceptions.TransformParameterError as e:
print(f'変換エラーです: {e=}')
$ python parameter_transform_exception.py
変換エラーです: e=TransformParameterError('Invalid base64-encoded string: number of data characters (37) cannot be 1 more than a multiple of 4')