AWS Lambda がシークレットをローテーションできなかった場合に、AWS Secrets Manager Lambda 関数のログに表示される「pg module not found」エラーを解決したいです。
簡単な説明
Lambda 関数が Python 3.7 から新しいバージョンに自動的にアップグレードされた場合、「pg module not found」というエラーが発生する場合があります。Python 3.9 などの新しいバージョンでは、必要なモジュールがサポートされていない場合があります。Lambda の各 Python バージョンでサポートされているモジュールとライブラリについては、「サポートされているランタイム」を参照してください。
解決策
Lambda 関数での Python のバージョンを確認する
次の手順を実行します。
-
Lambda コンソールを開きます。
-
ナビゲーションペインで [関数] を選択し、ローテーションに失敗した Lambda の名前を選択します。
-
[コード] タブを選択します。
-
ランタイム設定で Python のバージョンを確認します。
-
[アクション] を選択し、[関数のエクスポート] を選択してから、[デプロイパッケージのダウンロード] を選択します。
-
非圧縮 .zip ファイルのディレクトリで、次の Linux コマンド find を実行します。
find ./ -name “*cpython-*-x86_64-linux-gnu.so”
-
Python ランタイムのバージョンが .so ファイルの名前に含まれていることを確認します。
例: _cffi_backend.cpython-37m-x86_64-linux-gnu.so
注: Python 3.7 の .so ファイルがあるものの、Lambda ランタイムでは新しいバージョンが表示される場合は、バージョンの不一致が示唆されます。この不一致は、CloudFormation テンプレートの更新プロセスによって解決する必要があります。
AWS CloudFormation テンプレートを更新する
この Lambda 関数の障害を解決するには、次の手順を実行します。
- Lambda 関数の作成に使用したスタックテンプレートを更新します。
- AWS::SecretsManager::RotationSchedule HostedRotationLambda の HostedRotationLambda オブジェクトに、Runtime プロパティを追加します。
- CloudFormation スタックを再デプロイして変更を適用します。
CloudFormation により、Lambda のローテーション関数は Python 3.7 に戻ります。
注: Python 3.7 では、ランタイムのキー値は python3.7 である必要があります。
関連情報
既存のローテーション関数を Python 3.7 から 3.9 にアップグレードする