

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

# Lambda と Secrets Manager を使用して Amazon RDS for PostgreSQL と Aurora PostgreSQL のジョブをスケジュールする
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager"></a>

*Yaser Raja、Amazon Web Services*

## 概要
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-summary"></a>

オンプレミスデータベースと 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 互換データベースのジョブをスケジュールする方法について説明します。 

## 前提条件と制限
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Amazon RDS for PostgreSQL または Aurora PostgreSQL 互換データベース

**制限**
+ ジョブは Lambda 関数のタイムアウト制限である 15 分以内に完了する必要があります。その他の制限については、[AWS Lambda のドキュメント](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)をご覧ください。
+ Job コードは [Lambda がサポートする言語](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)で記述する必要があります。

## アーキテクチャ
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-architecture"></a>

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

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

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

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

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

![\[RDS DB インスタンスのジョブをスケジュールする Lambda 関数を開始する CloudWatch イベント。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8e0d1c90-0599-4909-a800-26a89b87f686/images/61f9ca34-9157-4565-96ba-5234d389ac2a.png)


## ツール
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) は、 AWS リソースの変更を記述するシステムイベントのほぼリアルタイムのストリームを提供します。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上のターゲット関数またはストリームに振り分けることができます。CloudWatch Events が発生すると、運用上の変更が認識されます。オペレーションの変更に応答し、必要に応じて、応答メッセージを環境に送り、機能をアクティブ化し、変更を行い、状態情報を収集することによって、修正アクションを実行します。CloudWatch Events を使用して、**cron式** や **rate式**により特定の時間に自己トリガーする自動アクションをスケジュールすることもできます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) はサーバーのプロビジョニングや管理をする必要がなく、コードを実行できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。使用したコンピューティング時間に対してのみお支払いいただきます- コードが実行中でなければ料金はかかりません。Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。Lambda は、高可用性コンピューティングインフラストラクチャ上でコードを実行し、サーバーとオペレーティングシステムのメンテナンス、容量のプロビジョニングと自動スケーリング、コードのモニタリング、ロギングを含むすべてのコンピューティングリソースを管理します。必要なのは、[Lambda がサポートする言語](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)のいずれかでコードを提供することのみです。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) は、アプリケーション、サービス、および IT リソースへアクセスするためのシークレットの保護に役立ちます。データベース認証情報、API キー、その他のシークレットをライフサイクル全体にわたって簡単にローテーション、管理、取得できます。ユーザーとアプリケーションは Secrets Manager API を呼び出してシークレットを取得するため、機密情報をプレーンテキストでハードコーディングする必要がなくなります。Secrets Manager には、Amazon RDS、Amazon Redshift、Amazon DocumentDB の統合機能が組み込まれたシークレットローテーションが用意されています。このサービスは API キーや OAuth トークンなど、他のタイプのシークレットにも拡張できます。Secrets Manager を使用すると、きめ細かなアクセス許可を使用してシークレットへのアクセスを制御し、シークレットローテーションを一元的に監査して AWS クラウド、、サードパーティーのサービス、オンプレミスのリソースを監査できます。

## エピック
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-epics"></a>

### Secrets Manager にデータベース認証情報を保存する
<a name="store-database-credentials-in-asm"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数用のデータベースユーザーを作成します。 | アプリケーションのさまざまな部分に別々のデータベースユーザーを使用することをお勧めします。cron ジョブ用に別のデータベースユーザーが既に存在する場合は、そのユーザーを使用してください。それ以外の場合は、新しいデータベースユーザーを作成します。詳細については、[PostgreSQL ユーザーとロールの管理](https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/)」(AWS ブログ記事) を参照してください。 | DBA | 
| Secrets Manager でデータベース認証情報をシークレットとして保存します。 | 「[AWS Secrets Manager データベースシークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)」(Secrets Manager ドキュメント) の指示に従います。 | DevOps、DBA | 

### Lambda 関数のコードを作成する
<a name="author-the-code-for-the-lam-function"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda がサポートするプログラミング言語を選択してください。 | サポートされている言語のリストについては、「[Lambda ランタイム](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)」(Lambda ドキュメント) を参照してください。 | 開発者 | 
| Secrets Manager からデータベース認証情報を取得するロジックを記述します。 | サンプルコードについては、「 [を使用して Lambda 関数にデータベース認証情報を安全に提供する方法 AWS Secrets Manager](https://aws.amazon.com/blogs/security/how-to-securely-provide-database-credentials-to-lambda-functions-by-using-aws-secrets-manager/)」(AWS ブログ記事) を参照してください。 | 開発者 | 
| スケジュールされたデータベースアクティビティを実行するロジックを記述します。 | オンプレミスで使用しているスケジューリングジョブの既存のコードを Lambda 関数に移行します。詳細については、「[Lambda 関数のデプロイ](https://docs.aws.amazon.com/lambda/latest/dg/lambda-deploy-functions.html)」(Lambda ドキュメント) を参照してください。 | 開発者 | 

### コードをデプロイして Lambda 関数を作成する
<a name="deploy-the-code-and-create-the-lam-function"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数デプロイパッケージを作成します。 | このパッケージには、コードとその依存関係が含まれます。詳細については、「[デプロイパッケージ](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html)」(Lambda ドキュメント) を参照してください。 | 開発者 | 
| Lambda 関数の作成 | Lambda コンソールで、**[関数の作成]** を選択し、関数名を入力し、ランタイム環境を選択して、**[関数の作成]** を選択します。 | DevOps | 
| デプロイパッケージをアップロードする | 作成した Lambda 関数を選択し、設定を開きます。コードをコードセクションに直接記述することも、デプロイパッケージをアップロードすることもできます。パッケージをアップロードするには、**[Function code]** セクションに移動し、**[コードエントリタイプ]** を選択して.zip ファイルをアップロードし、パッケージを選択します。 | DevOps | 
| Lambda 関数を要件に合わせて設定します。 | 例えば、**Timeout** パラメータを Lambda 関数にかかると予想される時間に設定できます。詳細については、「[関数オプションの設定](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) (Lambda ドキュメント)」を参照してください。 | DevOps | 
| Lambda 関数ロールが Secrets Manager にアクセスするためのアクセス権限を設定します。 | 手順については、[「 AWS Lambda 関数でシークレットを使用する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)」(Secrets Manager ドキュメント) を参照してください。 | DevOps | 
| Lambda 関数をテストします。 | Lambda 関数を手動で開始して、期待どおりに機能することを確認します。 | DevOps | 

### CloudWatch イベントを使用して Lambda 関数をスケジュールします
<a name="schedule-the-lam-function-by-using-cwe"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数をスケジュールに従って実行するルールを作成します。 | CloudWatch イベントを使用して Lambda 関数をスケジュールします。手順については、「[Schedule Lambda functions using CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html)」(CloudWatch イベントチュートリアル) を参照してください。 | DevOps | 

## 関連リソース
<a name="schedule-jobs-for-amazon-rds-for-postgresql-and-aurora-postgresql-by-using-lambda-and-secrets-manager-resources"></a>
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [Lambda の使用開始](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [イベントでトリガーする CloudWatch Events のルールの作成](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)
+ [AWS Lambda 制限](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)
+ [サーバーレスアプリケーションから AWS データベースをクエリする](https://aws.amazon.com/blogs/database/query-your-aws-database-from-your-serverless-application/) (ブログ記事)