LambdaでAWS Systems Manager パラメータストア(KMS暗号化)を利用する際に注意すべき性能について

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSの新しいアイコンに慣れるため小ネタを連発しております。

Lambdaで機密情報(鍵等)利用するなら、SSMパラメータストアを利用しましょう!
という事でKMS暗号化を施した文字列を利用する際は、結構パフォーマンスが落ちるので
キャッシング等を利用しましょうというネタです。

検証した構成は非常にシンプルな物です。
※ALBはRegional,SSMでは安全な文字列を指定のためKMSが利用される設定です。

目次

性能について

対して参考になるわけでもないですが一応...

if not self.機密情報_exists() or Lambda環境変数 SSM_CACHEがOFFならば:
    client = boto3.client('ssm')
    res = client.get_parameters(
                Names=パラメータキー,
                WithDecryption=True
            )
    ...
    self.機密情報 = SSMより取得した秘密文字列

当然個体差・環境差がございますが256MBLambdaにて下記のような結果でした、
(他の処理も入っているため、このような結果になることを保証するわけではありません。)

SSM_CACHEをOFFとした場合

  • 21req/s エラー率 13% レスポンスタイムは 3.6秒程

SSM_CACHEをONとした場合

  • 100req/s以上 エラー率 0% レスポンスタイムは 1秒以内

まとめ

高頻度で呼び出されるLambda関数にてSSMより値を取得する場合にはキャッシング等を活用しないと難しい事が分かりました。
Lambdaの性質上新しいホストでの初回実行時にはある程度時間が掛かる事を見越しておく必要があります。

また、実運用でLambdaを常時Latestに向けているケースも少ないと思いますので、上記のような実装ですと
Lambdaが完全にアンロードされる or 再デプロイ等まで、キャッシングされた内容は更新されないため注意が必要です。

投稿者プロフィール

takashi
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。

ABOUTこの記事をかいた人

Japan AWS Ambassadors 2023, 2024 開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。