Lambda と Secrets Manager を使用して Amazon RDS for PostgreSQL と Aurora PostgreSQL のジョブをスケジュールする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Lambda と Secrets Manager を使用して Amazon RDS for PostgreSQL と Aurora PostgreSQL のジョブをスケジュールする

作成者: Yaser Raja (AWS)

環境:PoC またはパイロット

ソース: データベース: リレーショナル

ターゲット: AWS 上の PostgreSQL

R タイプ: 該当なし

ワークロード: オープンソース

テクノロジー: データベース

AWS サービス: AWS Lambda、Amazon RDS、AWS Secrets Manager、Amazon Aurora

[概要]

オンプレミスデータベースと Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストされているデータベースの場合、データベース管理者は cron ユーティリティを使用してジョブをスケジュールすることがよくあります。

例えば、データ抽出用のジョブやデータ消去用のジョブは、cron を使用して簡単にスケジュールできます。これらのジョブでは、通常、データベースの認証情報はハードコーディングされるか、プロパティファイルに保存されます。ただし、Amazon Relational Database Service (Amazon RDS) または Amazon Aurora PostgreSQL 互換エディションに移行すると、ホストインスタンスにログインして cron ジョブをスケジュールすることができなくなります。 

このパターンでは、移行後に AWS Lambda と AWS Secrets Manager を使用して Amazon RDS for PostgreSQL および Aurora PostgreSQL 互換データベースのジョブをスケジュールする方法について説明します。 

前提条件と制限

前提条件 

  • アクティブな AWS アカウント 

  • Amazon RDS for PostgreSQL または Aurora PostgreSQL 互換データベース

制限

アーキテクチャ

ソーステクノロジースタック

このスタックには、Bash、Python、Java などの言語で記述されたジョブが含まれています。データベースの認証情報はプロパティファイルに保存され、ジョブは Linux cron を使用してスケジュールされます。

ターゲットテクノロジースタック

このスタックには、Secrets Manager に保存されている認証情報を使用してデータベースに接続し、アクティビティを実行する Lambda 関数があります。Lambda 関数は、Amazon CloudWatch Events を使用してスケジュールされた間隔で開始されます。

ターゲット アーキテクチャ

CloudWatch RDS DB インスタンスのジョブをスケジュールする Lambda 関数を開始する イベント。

ツール

  • AWS Lambda はサーバーをプロビジョニングしたり管理したりしなくてもコードを実行できるコンピューティングサービスです。AWS Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。使用したコンピューティング時間に対してのみお支払いいただきます- コードが実行中でなければ料金はかかりません。AWS Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。AWS Lambda は、高可用性コンピューティングインフラストラクチャ上でコードを実行し、サーバーとオペレーティングシステムのメンテナンス、容量のプロビジョニングと自動スケーリング、コードのモニタリング、ロギングを含むすべてのコンピューティングリソースを管理します。必要なのは、AWS Lambda がサポートする言語のいずれかでコードを提供することだけです。

  • Amazon CloudWatch Events は、AWS リソースの変更を示すシステムイベントのほぼリアルタイムのストリームを提供します。すばやく設定できる簡単なルールを使用すると、イベントを照合し、1 つ以上のターゲット関数またはストリームにルーティングできます。 CloudWatch イベントが発生すると、運用上の変更が認識されます。オペレーションの変更に応答し、必要に応じて、応答メッセージを環境に送り、機能をアクティブ化し、変更を行い、状態情報を収集することによって、修正アクションを実行します。 CloudWatch イベントを使用して、cron 式または rate 式を使用して特定の時間に自己開始する自動アクションをスケジュールすることもできます。

  • AWS Secrets Manager は、アプリケーション、サービス、IT リソースへのアクセスに必要なシークレットの保護に役立ちます。データベース認証情報、API キー、その他のシークレットをライフサイクル全体にわたって簡単にローテーション、管理、取得できます。ユーザーとアプリケーションは Secrets Manager API を呼び出してシークレットを取得するため、機密情報をプレーンテキストでハードコーディングする必要がなくなります。Secrets Manager には、Amazon RDS、Amazon Redshift、Amazon DocumentDB の統合機能が組み込まれたシークレットローテーションが用意されています。このサービスは API キーや OAuth トークンなど、他のタイプのシークレットにも拡張できます。Secrets Manager では、きめ細かい権限を使用してシークレットへのアクセスを制御し、AWS クラウド、サードパーティサービス、オンプレミスのリソースに関するシークレットローテーションを一元的に監査できます。

エピック

タスク説明必要なスキル

Lambda 関数用のデータベースユーザーを作成します。

アプリケーションのさまざまな部分に別々のデータベースユーザーを使用することをお勧めします。cron ジョブ用に別のデータベースユーザーが既に存在する場合は、そのユーザーを使用してください。それ以外の場合は、新しいデータベースユーザーを作成します。詳細については、「Managing PostgreSQL users and roles」(AWS ブログ記事) を参照してください。

DBA

Secrets Manager でデータベース認証情報をシークレットとして保存します。

AWS Secrets Manager データベースシークレットを作成する」(Secrets Manager ドキュメント) の指示に従います。

DBA、 DevOps
タスク説明必要なスキル

AWS Lambda がサポートするプログラミング言語を選択してください。

サポートされている言語のリストについては、「Lambda ランタイム」(Lambda ドキュメント) を参照してください。

開発者

Secrets Manager からデータベース認証情報を取得するロジックを記述します。

サンプルコードについては、「How to securely provide database credentials to Lambda functions by using AWS Secrets Manager」(AWS ブログ記事) を参照してください。

開発者

スケジュールされたデータベースアクティビティを実行するロジックを記述します。

オンプレミスで使用しているスケジューリングジョブの既存のコードを AWS Lambda 関数に移行します。詳細については、「Lambda 関数のデプロイ」(Lambda ドキュメント) を参照してください。

開発者
タスク説明必要なスキル

Lambda 関数デプロイパッケージを作成します。

このパッケージには、コードとその依存関係が含まれます。詳細については、「デプロイパッケージ」(Lambda ドキュメント) を参照してください。

開発者

Lambda 関数を作成します。

AWS Lambda コンソールで、[関数の作成] を選択し、関数名を入力し、ランタイム環境を選択して、[関数の作成] を選択します。

DevOps

デプロイパッケージをアップロードする

作成した Lambda 関数を選択し、設定を開きます。コードをコードセクションに直接記述することも、デプロイパッケージをアップロードすることもできます。パッケージをアップロードするには、[Function code] セクションに移動し、[コードエントリタイプ] を選択して.zip ファイルをアップロードし、パッケージを選択します。

DevOps

Lambda 関数を要件に合わせて設定します。

例えば、Timeout パラメータを Lambda 関数にかかると予想される時間に設定できます。詳細については、「関数オプションの設定 (Lambda ドキュメント)」を参照してください。

DevOps

Lambda 関数ロールが Secrets Manager にアクセスするためのアクセス権限を設定します。

手順については、「AWS Lambda 関数で AWS Secrets Manager シークレットを使用する」(Secrets Manager のドキュメント) を参照してください。

DevOps

Lambda 関数をテストします。

関数を手動で開始して、期待どおりに機能することを確認します。

DevOps
タスク説明必要なスキル

Lambda 関数をスケジュールに従って実行するルールを作成します。

CloudWatch イベントを使用して Lambda 関数をスケジュールします。手順については、 CloudWatch 「イベントを使用して Lambda 関数をスケジュールする」(CloudWatch イベントチュートリアル) を参照してください。

DevOps

関連リソース