Secrets Manager の Lambda 関数のローテーションが「pg module not found」というエラーで失敗したのはなぜですか?

所要時間1分
0

AWS Secrets Manager の AWS Lambda 関数が Amazon CloudWatch Logs で「pg module not found」というエラーで失敗しました。

簡単な説明

以前の Lambda 関数を実行していて、それが Python 3.7 から新しいバージョンの Python に自動でアップグレードされた場合にこのエラーが発生することがあります。

解決方法

Lambda 関数のバージョンを Python 3.7 に戻し、Lambda 関数を再デプロイします。

Lambda 関数の Python のバージョンを確認する

1.    Lambda コンソールを開きます。

2.    ナビゲーションペインで [関数] を選択し、ローテーションに失敗した Lambda 関数の名前を選択します。

3.    [コード] タブを選択します。

4.    ランタイム設定で、Python のバージョンを確認します。

5.    [アクション] を選択し、[関数のエクスポート] を選択してから、[デプロイパッケージのダウンロード] を選択します。

6.    圧縮されていない .zip ファイルのディレクトリで、次の Linux の find コマンドを実行します:

find ./ -name “*cpython-*-x86_64-linux-gnu.so”

7.    Python ランタイムのバージョンが .so ファイルの名前に含まれていることを確認します。例えば、_cffi_backend.cpython-37m-x86_64-linux-gnu.so のような名前です。

.so のバージョンが Python 3.7 でない場合、Lambda はライブラリをインポートできません。

AWS CloudFormation テンプレートを変更する

Lambda 関数のエラーを解決するには、Lambda 関数の作成に使用した CloudFormation テンプレートを変更します。AWS::SecretsManager::RotationScheduleHostedRotationLambda オブジェクトに、Runtime プロパティを追加します。その後、CloudFormation スタックを再デプロイします。CloudFormation により、Lambda ローテーション関数が Python 3.7 に戻ります。

注: Python 3.7 では、ランタイムのキー値は python3.7 である必要があります。


関連情報

AWS Secrets Manager のトラブルシューティング

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ