AWS Secrets Manager の AWS Lambda ローテーション関数が「Database engine must be set to 'postgres'/'mysql'」というエラーで失敗しました。
簡単な説明
ユーザーの認証情報にマルチユーザーの AWS Lambda ローテーション関数を使用している場合、このエラーが発生することがあります。
注: このエラーは、Amazon Relational Database Service (Amazon RDS) の Amazon Aurora PostgreSQL 互換エディションと Amazon Aurora MySQL 互換エディションの 2 つのデータベースタイプでのみ発生します。
このエラーは、Amazon RDS データベース認証情報の Lambda ローテーション関数の setSecret ステップで発生します。
解決方法
関数のコードに変更を加えた場合は Lambda ローテーション関数を編集し、変更を加えなかった場合は新しいローテーションを作成します。
オプション 1: ローテーション関数のコードの編集
-
Lambda コンソールを開きます。
-
ナビゲーションペインで [関数] を選択し、Lambda 関数名を選択します。
-
[アクション] ドロップダウンリストで [関数のエクスポート] を選択し、[デプロイパッケージのダウンロード] を選択します。
-
ダウンロードした .zip ファイルからファイルを抽出します。
-
Visual Studio Code IDE で、lambda_function.py ファイルを開きます。
-
get_secret_dict() ヘルパー関数で、if secret_dict['engine'] != 'mysql': を次のコードに置き換えます:
supported_engines = ["mysql", "aurora-mysql"]
if secret_dict['engine'] not in supported_engines:
-
更新後の lambda_function.py ファイルを含む .zip フォルダーの内容を圧縮します。
-
Lambda コンソールの [コード] タブで [アップロード元] ドロップダウンリストから [.zip ファイル] を選択し、手順 7 の新しい .zip フォルダーを選択します。
オプション 2: 新しいローテーション関数を作成する
- Secrets Manager コンソールを開きます。
- [シークレット] ページで、シークレット名を選択します。
- [シークレットの詳細] ページの [ローテーション構成] セクションで、[ローテーションを編集] を選択します。
- [ローテーション設定を編集する] ダイアログボックスで、手順 3e の指示に従って、ローテーション用のシークレットを設定します。
- [個別の認証情報を使用してこのシークレットをローテーションする] で [はい] を選択します。
- [シークレット] で、Amazon RDS または Amazon Aurora のプライマリデータベースの認証情報のシークレットを選択します。
- [保存] を選択します。
- (オプション) 以前の Lambda ローテーション関数が複数のシークレットにアタッチされている場合は、それらのシークレットに新しい関数を使用できます。
シークレットごとに [シークレットの詳細] ページを開き、[ローテーション構成] セクションで [ローテーションを編集] を選択します。[ローテーション設定を編集する] ダイアログボックスの [Lambda ローテーション関数] ** で、新しいローテーション関数を選択し、[保存]** を選択します。
- すべてのシークレットを新しい Lambda ローテーション関数に切り替えたら、Lambda コンソールで以前の Lambda ローテーション関数を削除します。
関連情報
サポートされていないデータベースのために AWS Secrets Manager シークレットのローテーション関数を作成するにはどうすればよいですか?
AWS Secrets Manager を使用して Amazon RDS のプライマリデータベースの認証情報のセキュリティを強化する