

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 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，亚马逊 Web Services*

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

对于本地数据库和托管在亚马逊弹性计算云 (Amazon EC2) 实例上的数据库，数据库管理员通常使用 **cron** 实用程序来安排作业。

例如，使用 **cron** 可轻松地安排数据提取任务或数据清除任务。对于这些任务，数据库凭证通常为硬编码或存储于属性文件。但是，当您迁移至 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora PostgreSQL-Compatible Edition，您将无法登录主机实例安排 **cron** 任务。 

此模式描述了迁移后如何使用 AWS Lambda 和 AWS Secrets Manager 安排适用于 PostgreSQL 的亚马逊 RDS 和兼容 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-Compatible 数据库

**限制**
+ 任务必须在 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)编写。

## 架构
<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 函数通过使用亚马逊 CloudWatch 事件按计划的时间间隔启动。

**目标架构**

![\[CloudWatch 事件启动了 Lambda 函数，该函数为 RDS 数据库实例安排作业。\]](http://docs.aws.amazon.com/zh_cn/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 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) Events 提供近乎实时的系统事件流，这些事件描述了 AWS 资源的变化。使用可以快速设置的简单规则，您可以匹配事件并将其路由到一个或多个目标函数或流。 CloudWatch 事件在发生时就会意识到操作变化。其可响应这些操作更改并在必要时采取纠正措施，方式是发送消息以响应环境、激活函数、进行更改并捕获状态信息。您还可以使用 Ev CloudWatch ents 来安排自动操作，这些操作在特定时间使用 **cron** 或**速率**表达式自行启动。
+ [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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Lambda 函数 创建数据库用户。 | 最好将不同的数据库用户用于不同的应用程序部分。如果您的 cron 任务已有单独的数据库用户，请使用该用户。否则，创建一个新数据库用户。有关更多信息，请参阅[管理 PostgreSQL 用户和](https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/)角色AWS （博客文章）。 | 数据库管理员 | 
| 将数据库凭证作为密钥存储至 Secrets Manager。 | 按照[创建数据库密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)（Secrets Manager 文档）中的说明。 | 数据库管理员， DevOps | 

### 编写 Lambda 函数的代码。
<a name="author-the-code-for-the-lam-function"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选择 Lambda 支持的编程语言。 | 有关支持的语言列表，请参阅 [Lambda 运行时系统](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)（Lambd 文档）。 | 开发者版 | 
| 编写从 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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 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 | 

### 使用事件安排 Lambda 函数 CloudWatch
<a name="schedule-the-lam-function-by-using-cwe"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建按计划运行 Lambda 函数的规则。 | 使用 CloudWatch 事件安排 Lambda 函数。有关说明，请参阅[使用 CloudWatch 事件安排 Lambda 函数（CloudWatch 事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html)教程）。 | 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/)（博客文章）