

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 相容資料庫

**限制**
+ 任務必須在 15 分鐘內完成，也就是 Lambda 函數逾時限制。如需其他限制，請參閱 [AWS Lambda 文件](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)。
+ 任務程式碼必須以 [Lambda 支援的語言](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)撰寫。

## Architecture
<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** 排程任務。

**目標技術堆疊**

此堆疊具有 Lambda 函數，使用存放在 Secrets Manager 中的登入資料來連線至資料庫並執行活動。Lambda 函數是使用 Amazon CloudWatch Events 在排程間隔啟動。

**目標架構**

![\[CloudWatch 事件會啟動 Lambda 函數，以排程 RDS 資料庫執行個體的任務。\]](http://docs.aws.amazon.com/zh_tw/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 資源的變更。使用您可以快速設定的簡單規則，您可以比對事件並將它們路由到一或多個目標函數或串流。CloudWatch Events 在操作變更時會查覺到。它會回應這些操作變更，並視需要採取修正動作，透過傳送訊息來回應環境、啟用 函數、進行變更，以及擷取狀態資訊。您也可以使用 CloudWatch Events 來排程使用 **Cron** 或 **Rate** 表達式在特定時間自行啟動的自動化動作。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一種運算服務，讓您無需設定或管理伺服器即可運行程式碼。Lambda 只有在需要時才會執行程式碼，可自動從每天數項請求擴展成每秒數千項請求。您只需為使用的運算時間付費；程式碼未執行時無需付費。使用 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 APIs 來擷取秘密，無需以純文字硬式編碼敏感資訊。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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 為 Lambda 函數建立資料庫使用者。 | 最佳實務是針對應用程式的不同部分使用不同的資料庫使用者。如果您的 Cron 任務已存在不同的資料庫使用者，請使用它。否則，請建立新的資料庫使用者。如需詳細資訊，請參閱[管理 PostgreSQL 使用者和角色](https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/) (AWS 部落格文章）。 | DBA | 
| 在 Secrets Manager 中將資料庫登入資料儲存為秘密。 | 遵循[建立資料庫秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html) (Secrets Manager 文件） 中的指示。 | DBA、DevOps | 

### 編寫 Lambda 函數的程式碼
<a name="author-the-code-for-the-lam-function"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 選擇 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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 Lambda 函數部署套件。 | 此套件包含程式碼及其相依性。如需詳細資訊，請參閱[部署套件](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) (Lambda 文件）。 | 開發人員 | 
| 建立 Lambda 函數。 | 在 Lambda 主控台中，選擇**建立函數**，輸入函數名稱，選擇執行時間環境，然後選擇**建立函數**。 | DevOps | 
| 上傳部署套件。 | 選擇您建立的 Lambda 函數以開啟其組態。您可以直接在程式碼區段中撰寫程式碼，或上傳部署套件。若要上傳套件，請前往**函數程式碼**區段，選擇**程式碼項目類型**以上傳 .zip 檔案，然後選取套件。 | DevOps | 
| 根據您的需求設定 Lambda 函數。 | 例如，您可以將**逾時**參數設定為您預期 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 Events 排程 Lambda 函數
<a name="schedule-the-lam-function-by-using-cwe"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立規則以依排程執行 Lambda 函數。 | 使用 CloudWatch Events 排程 Lambda 函數。如需說明，請參閱[使用 CloudWatch Events 排程 Lambda 函數](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html) (CloudWatch Events 教學課程）。 | 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 事件規則](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/)（部落格文章）