解锁效率:将 AWS Lambda 与 Amazon RDS for Oracle 集成以自动化自定
提升效率:将 AWS Lambda 与 Amazon RDS for Oracle 集成以自动化自定义脚本操作
文章重点总结
本文介绍了如何将 AWS Lambda 与 Amazon RDS for Oracle 集成,实现自定义数据库监控脚本的自动执行。通过使用 AWS Lambda,您可以设定定时任务,并结合其他 AWS 服务,如 AWS Secrets Manager 和 Amazon SNS,实现全面监控与提醒功能。
Amazon Relational Database ServiceAmazon RDS使得在 AWS 云中设置、操作以及扩展关系型数据库变得非常简单。在监控 Amazon RDS 时,您可以使用 Amazon CloudWatch 指标 进行基本监测,使用 Amazon RDS Performance Insights 进行数据库和查询性能分析,并通过 增强监控 监控操作系统级别的指标。这些工具为您提供了宝贵的监控洞察,帮助您了解 RDS 实例的健康状况和性能状态。
除了标准的 Amazon RDS 监控工具之外,数据库管理员通常会创建自定义脚本来监控数据库的特定方面。例如,您可能会跟踪表空间的使用情况、等待特定事件的会话或数据库对象的状态。数据库管理员通常会使用操作系统工具如 cron来调度这些监控脚本。然而,在 Amazon RDS for Oracle 中,无法直接访问操作系统。因此,无法在 Amazon RDS for Oracle 中调度 cron 作业。不过,您可以将 AWS Lambda 与 Amazon RDS for Oracle 集成,这使您能够根据预定义的时间表运行自定义监控脚本,或响应特定事件的触发。
在本文中,我们将提供一个详细指南,介绍如何将 Amazon RDS for Oracle 与 Lambda 集成,以运行自定义脚本。同时,我们还将展示如何与其他服务如 AWS Secrets Manager 和 Amazon Simple Notification Service进行集成。
解决方案概览
以下是我们解决方案架构的概述:
为实现该解决方案,需要以下步骤:
使用 Lambda 配置与 RDS for Oracle 数据库的连接。创建一个用于邮件通知的 SNS 主题。可选地,创建一个 Amazon EventBridge 定时规则以自动触发 Lambda。先决条件
要完成此演练,您需要以下先决条件:
一个正在运行 RDS for Oracle 实例的 AWS 账号。一个包含数据库用户凭证的 RDS for Oracle 实例,这些凭证存储在 Secrets Manager 中。在创建 RDS for Oracle 实例时,您可以配置实例将超级用户凭证存储在 Secrets Manager 中,或者通过修改现有实例来进行存储。一个 Amazon Simple Storage Service (Amazon S3) 存储桶,以便上传 Lambda 层。使用 Python 从 Lambda 函数连接到 Amazon RDS for Oracle
有关使用 Lambda 连接到 Amazon RDS 的详细信息,请参见 教程:使用 Lambda 函数访问 Amazon RDS 数据库 和 自动将 Lambda 函数连接到 DB 实例。
按以下步骤操作,以使 Python Lambda 函数能够连接到 Amazon RDS for Oracle:
为 Secrets Manager 和 Amazon SNS 创建 VPC 接口终端节点,以允许与这些服务端点进行通信。创建 SNS 主题,以通知用户有关 RDS for Oracle 数据库的信息。创建 SNS 主题后,您可以将电子邮件订阅到此主题。订阅此主题的用户在 Lambda 函数运行时会收到输出的电子邮件通知。
订阅电子邮件到您创建的 SNS 主题。 创建 SNS 主题后,Amazon SNS 将向指定地址发送确认邮件。
当您收到确认邮件时,请接受确认。接下来的步骤是为 Amazon SNS 创建一个 AWS 身份和访问管理 (IAM) 访问策略。
使用以下策略文档创建一个客户管理的 IAM 策略本文中策略名称为 snsaccess。此策略为 Lambda 函数提供必要的权限以发布消息到您创建的 SNS 主题。将资源的 ARN 替换为您的 SNS 主题的 ARN:
json { Version 20121017 Statement [ { Sid PublishSNSMessage Effect Allow Action snsPublish Resource arnawssnsltyourregiongtltyouraccountnumbergtltyourtopicnamegt } ] }
使用以下策略文档为 Secrets Manager 创建一个客户管理的 IAM 策略本文中策略名称为 secretsmanagerread。此策略为 Lambda 函数提供读取含有 RDS 数据库用户凭证的 Secrets Manager 密钥所需的权限。将资源的 ARN 替换为您的 RDS for Oracle 实例的主凭证 ARN:json { Version 20121017 Statement [ { Effect Allow Action secretsmanagerGetSecretValue Resource SecretARN } ] }
创建一个 IAM 角色,该角色为您的 Lambda 函数提供以下权限:AWSLambdaBasicExecutionRole 此 AWS 管理策略允许 Lambda 函数写入 Amazon CloudWatch Logs。AWSLambdaVPCAccessExecutionRole 此 AWS 管理策略包含允许 Lambda 函数管理网络资源的权限。这是连接 VPC 资源例如 RDS 数据库连接所必需的。AWSLambdaENIManagementAccess 此 AWS 管理策略提供 Lambda 函数管理弹性网络接口创建、描述、删除所需的最低权限,从而使 Lambda 函数能够访问 VPC 资源。snsaccess 之前创建的策略,为 Lambda 函数提供发布消息到 SNS 主题的权限。secretsmanagerread 之前创建的策略,为 Lambda 函数提供读取 Secrets Manager 密钥的权限。现在您已准备好创建 Lambda 函数。
创建一个 Lambda 函数,选择 Python 运行时Python 38 或更高版本,并选择您在前一步中创建的 IAM 角色。 Lambda 运行时应与创建层时的 Python 版本匹配。例如,如果层是用 Python 38 创建的,则 Lambda 函数的运行时也应使用 Python 38。如果 Lambda 运行时与创建层时使用的 Python 版本不匹配,您在运行 Lambda 函数代码时可能会遇到以下错误:
json{ “errorMessage” “Unable to import module ‘lambdafunction’ cannot import name ‘baseimpl’ from partially initialized module ‘oracledb’ (most likely due to a circular import) (/opt/python/oracledb/initpy)“ “errorType” “RuntimeImportModuleError” “requestId” “4f07eee9d8d34f2f9d58d4ecc1a543cd” “stackTrace” []}
接下来的步骤是创建一个用于 Python 包依赖的 Lambda 层。 pythonoracledb 驱动是一个 Python 扩展模块,使得对 Oracle 数据库的访问变得更加轻松。该驱动程序支持 Python 数据库 API v20 规范,并具有大量附加功能。pythonoracledb 驱动是 cxOracle 83 的重命名版本,后者已停止维护。
默认情况下,pythonoracledb 允许直接连接到 Oracle Database 121 或更高版本。该 Thin 模式不需要 Oracle 客户端库。
在与 Oracle 客户端库链接的情况下,pythonoracledb 将以 Thick 模式运行。在此模式下,应用程序脚本的运行选项通过加载库来启用请参阅 启用 pythonoracledb Thick 模式。这将为您提供一些 附加功能。根据 Oracle 客户端库的版本,pythonoracledb 的这一模式可连接到 Oracle Database 92 或更高版本。
pioneer加速器下载安装
在本文中,我们将介绍如何在不需要 Oracle 客户端库的情况下使用 pythonoracledb 驱动的 Thin 模式。
启动一个 Amazon Elastic Compute CloudAmazon EC2实例或使用 AWS Cloud9 集成开发环境IDE。确保安装了 Python 337 版本或更高。如果您有更低版本,可以 升级。使用以下代码创建一个带有 pythonoracledb 模块的层:bash which python python version mkdir lambdaorcllayer cd lambdaorcllayer/ mkdir python python m pip install oracledb t python/ upgrade zip r y q lambdaorcllayerzip python/
使用您在前一步创建的 lambdaorcllayerzip 创建一个新的 Lambda 层。 有关如何创建和使用 Lambda 层的更多信息,请参见 处理 Lambda 层。要创建 Lambda 层,您可以直接从本地桌面上传此 zip 文件,或从 S3 存储桶中上传。为此,我们 创建了一个 S3 存储桶,并使用以下 AWS 命令行界面AWS CLI命令 上传文件:
bash
将层 lambdaorcllayerzip 上传到 Amazon S3 存储桶
aws s3 cp /lambdaorcllayerzip s3//
将您创建的 Layer 添加到 Lambda 函数中。现在,您可以在 Lambda 函数中编写连接到 RDS for Oracle 实例的 Python 代码。您可以使用以下示例 Python 脚本 来监控 Amazon RDS for Oracle 中的表空间,并通过 Amazon SNS 将报告发送给数据库管理员。
在 Lambda 函数中部署代码。该脚本使用 Lambda 层中包含的 oracledb 包连接 RDS for Oracle 数据库。转到函数的环境变量,选择 编辑 ,然后添加以下值:plaintext host ltamazonrdsoracledbendpointaddressgt port ltamazonrdsoracleportgt sid ltdatabasenamegt tsthreshold 80 (可以根据业务需求进行指定) snsarn ltarnofsnstopicgt secretname ltarnsecretsmanagersecretgt regionname ltregiongt tablespace lttablespacenamegt
部署您的 Lambda 函数并手动测试,以验证与 RDS for Oracle 实例的连接是否成功,并检查您的收件箱以验证 Amazon SNS 的通知是否成功。此外,您还可以 调度 EventBridge 事件以定期触发 Lambda 函数。
日志记录与错误处理
确保在 Lambda 函数中实现适当的日志记录和错误处理,以监测和排查在数据库连接过程中可能出现的问题。
安全注意事项
确保安全处理数据库凭证,使用 Secrets Manager,并根据需要限制对您的 Lambda 函数的访问。
此外,请确保您的 Lambda 函数具有必要的网络访问权限,将其放置在与 RDS 实例相同的 VPC 中,并相应地配置 安全组。
清理
为了避免产生后续费用,请删除您创建的资源:
降级或删除未使用的 RDS 实例。[删除您