使用 Lambda 和 Secrets Manager 计划适用于 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 的任务 - AWS Prescriptive Guidance

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

使用 Lambda 和 Secrets Manager 计划适用于 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 的任务

由 Yaser Raja (AWS) 创建

环境:PoC 或试点

源:数据库:关系

目标:PostgreSQL on AWS

R 类型:不适用

工作负载:开源

技术:数据库

Amazon Web Services: 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-Compatible Edition,您将无法登录主机实例安排 cron 任务。 

此模式描述了如何在迁移后使用 AWS Lambda 和 AWS Secrets Manager 为 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL-Compatible 实例计划任务。 

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account 

  • Amazon RDS for PostgreSQL 或 Aurora PostgreSQL-Compatible 数据库

限制

架构

源技术堆栈

此堆栈包含通过 Bash、Python 和 Java 等语言编写的任务。数据库凭证存储于属性文件,任务使用 Linux cron 调度。

目标技术堆栈

此堆栈包含 Lambda 函数,该函数使用存储在 Secrets Manager 中的凭证连接至数据库并执行活动。Lambda 函数通过使用亚马逊 CloudWatch 事件按计划的时间间隔启动。

目标架构

CloudWatch 事件启动了 Lambda 函数,该函数为 RDS 数据库实例安排作业。

工具

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。只有在需要时 AWS Lambda 才运行您的代码,并且能自动扩展,从每天几个请求扩展到每秒数千个请求。您只需按消耗的计算时间付费;代码未运行时不产生费用。借助 AWS Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,并且不必进行任何管理。AWS Lambda 可在高可用性计算基础设施上运行代码,管理所有计算资源,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和日志记录。您只需要以 AWS Lambda 支持的一种语言提供您的代码。

  • Amazon CloudWatch Events 提供近乎实时的系统事件流,这些事件描述了 AWS 资源的变化。使用可以快速设置的简单规则,您可以匹配事件并将它们路由到一个或多个目标函数或流。 CloudWatch 事件在发生时就会意识到操作变化。它将响应这些操作更改并在必要时采取纠正措施,方式是发送消息以响应环境、激活函数、进行更改并捕获状态信息。您还可以使用 Ev CloudWatch ents 来安排自动操作,这些操作在特定时间使用 cron速率表达式自行启动。

  • AWS Secrets Manager 可帮助您保护访问您的应用程序、服务和 IT 资源的密钥。您可以在数据库凭证、API 密钥和其他密钥的整个生命周期内轻松地对其进行轮换、管理和检索。用户和应用程序通过调用 Secrets Manager API 来检索密钥,而不必将敏感信息硬编码为纯文本。Secrets Manager 使用 Amazon RDS、Amazon Redshift 和 Amazon DocumentDB 的内置集成提供密钥轮换。该服务可扩展至其他类型的密钥,包括 API 密钥和 OAuth 令牌。Secrets Manager 使您能够使用精细权限控制对密钥的访问,并集中审计 Amazon Web Services Cloud、第三方服务和本地资源的密钥轮换。

操作说明

任务描述所需技能

为 Lambda 函数 创建数据库用户。

最好将不同的数据库用户用于不同的应用程序部分。如果您的 cron 任务已有单独的数据库用户,请使用该用户。否则,创建一个新数据库用户。有关更多信息,请参阅管理 PostgreSQL 用户与角色(AWS Blog 文章)。

数据库管理员

将数据库凭证作为密钥存储至 Secrets Manager。

按照创建数据库密钥(Secrets Manager 文档)中的说明。

数据库管理员, DevOps
任务描述所需技能

选择 AWS Lambda 支持的编程语言。

有关支持的语言列表,请参阅 Lambda 运行时系统(Lambd 文档)。

开发人员

编写从 Secrets Manager 获取数据库凭证的逻辑。

有关示例代码,请参阅 如何使用 AWS Secrets Manager 安全地向 Lambda 函数提供数据库凭证(AWS Blog 文章)。

开发人员

编写执行计划数据库活动的逻辑。

将本地正在使用的现有计划任务代码迁移至 AWS Lambda 函数。有关更多信息,请参阅部署 Lambda 函数(Lambda 文档)。

开发人员
任务描述所需技能

创建 Lambda 函数部署包。

此数据包包含代码及其依赖项。有关更多信息,请参阅部署包(Lambda 文档)。

开发人员

创建 Lambda 函数。

在 AWS Lambda 控制台中,选择创建函数,输入函数名称,选择运行时环境,然后选择创建函数

DevOps

构建部署程序包。

选择您创建的 Lambda 函数,以打开其配置。您可以直接在代码部分编写代码或上传部署包。若要上传数据包,请前往函数代码部分,选择要上传 .zip 文件的代码条目类型,然后选择该数据包。

DevOps

根据您的要求配置 Lambda 函数。

例如,您可以将 超时 参数设置为您的 Lambda 函数预计花费的时间。有关更多信息,请参阅 配置函数选项 (Lambda 文档)。

DevOps

为 Lambda 函数角色设置 Secrets Manager 访问权限。

有关说明,请参阅在 AWS Lambda 函数中使用密钥(Secrets Manager 文档)。

DevOps

测试 Lambda 函数

手动启动此函数,以确保其按预期运行。

DevOps
任务描述所需技能

创建按计划运行 Lambda 函数的规则。

使用 CloudWatch 事件安排 Lambda 函数。有关说明,请参阅使用 CloudWatch 事件安排 Lambda 函数(CloudWatch 事件教程)。

DevOps

相关资源