使用 Terraform 模块部署 Amazon RDS Custom for Oracle 数据库

使用 Terraform 模块部署 Amazon RDS Custom for Oracle

关键要点

在这篇文章中,我们将探讨如何使用 Terraform 模块自动化部署 Amazon RDS Custom for Oracle。此解决方案支持定制的操作系统与数据库环境,适合需要特殊访问权限的应用程序。

Amazon Relational Database Service (Amazon RDS) Custom for Oracle 是一种托管数据库服务,专用于需要定制底层操作系统和数据库环境的应用程序。借助 RDS 的自动化功能,您可以自由地定制数据库和操作系统,以支持需要特权访问的第三方应用程序,从而专注于对业务有影响的战略活动。

本文将提供关于如何使用 HashiCorp Terraform 和 AWS 发布的 AWS RDS Custom for Oracle Terraform 模块 的指导。Terraform 是一种基础设施为代码IaC工具,可以安全高效地配置资源。AWS RDS Custom for Oracle Terraform 模块提供预设的部署配置,并自动化所需的资源类型的部署和配置,如 AWS 身份与访问管理IAM角色、实例配置文件、数据库子网组、安全组和 VPC 端点。

解决方案概述

使用 Terraform 和 CfO 模块,我们可以自动化创建一个 RDS Custom for Oracle 主实例及两个读副本,跨越三个可用区Availability Zones,分别为主实例和副本提供支持。以下图示展示了该架构。

实现此解决方案的高层步骤如下:

创建和初始化 Terraform 项目。创建一个客户管理的 AWS 密钥管理服务AWS KMS密钥对称。创建适用于 Amazon RDS Custom for Oracle 的自定义引擎版本CEV。创建一个包含三个子网的 VPC,覆盖三个可用区。创建一个 Oracle 的 RDS Custom 主实例。创建两个 Oracle 的 RDS Custom 读副本。

先决条件

此解决方案需要以下先决条件:

授予 IAM 用户或角色所需的权限安装 Terraform v100 或更新版本

创建和初始化 Terraform 项目

在此部分,我们将创建一个新的 Terraform 项目并进行初始化。您可以选择任何本地文件夹进行操作。完成以下步骤:

在您喜欢的终端中,创建一个名为 rdscfo 的新文件夹: mkdir rdscfo cd rdscfo

使用您喜欢的文本编辑器,添加以下 Terraform 代码 到新文件: hcl terraform { requiredversion = gt= 100 requiredproviders { aws = { source = hashicorp/aws version = gt= 400 } } }

将文件保存为 maintf 放在 rdscfo 文件夹根目录。

在终端中运行以下命令以 初始化 Terraform 工作目录: terraform init

终端输出将包含成功消息,如下所示:“Terraform 已成功初始化”

在终端中 验证 Terraform 文件的语法: terraform validate

创建客户管理的 KMS 密钥

在此步骤中,您将使用 Terraform 创建一个客户管理密钥CMK,并输出该密钥的 Amazon 资源名称ARN。完成以下步骤:

在文本编辑器中,将以下 Terraform 代码添加到 maintf 文件: hcl #创建客户管理密钥 resource awskmskey rdscfokmskey { description = KMS 对称密钥,用于 RDS Custom for Oracle }

output kmskeyarn { description = KMS 密钥的 ARN value = awskmskeyrdscfokmskeyarn }

保存文件。在终端中 应用 Terraform 配置以创建 CMK: terraform apply

您的终端应输出类似以下内容:awskmskeyrdscfokmskey Creatingawskmskeyrdscfokmskey Creation complete after 1s [id=a1b2c3d4567890abcdefEXAMPLE11111]

Apply complete! Resources 1 added 0 changed 0 destroyed

Outputs

kmskeyarn = arnawskmsuswest2111122223333 key/a1b2c3d4567890abcdefEXAMPLE11111

请记录下 CMK ARN,后续创建 CEV 时会用到。在此示例中,CMK ARN 为:arnawskmsuswest2111122223333key/a1b2c3d4567890abcdefEXAMPLE11111。

创建 CEV

CEV 的创建在 Terraform 中尚不支持。我们将使用 AWS 管理控制台创建 CEV。请注意,CEV 的创建可能需要 2 小时或更长时间。完成以下步骤:

创建 CEV当系统提示您输入 KMS 密钥时,请提供上一步骤获得的 ARN。

创建包含三个子网的 VPC

接下来,创建托管 RDS Custom for Oracle 实例所需的网络资源:

将以下 Terraform 代码添加到 maintf 文件:您可以根据需要更改参数值。我们为这些参数大部分添加了注释以 # 开头,提供示例名称、VPC、CIDR 块等: hcl # 创建一个 VPC 和子网以部署 RDS 实例和副本 module vpc { source = awsia/vpc/aws version = gt= 400

name = multiazvpc01 # 根据需要修改 VPC 名称 cidrblock = 10200/20 # 根据需要修改 CIDR 块 azcount = 3

subnets = { private = { netmask = 24 } } }

output subnetconfig { description = 创建的子网。 value = flatten([for value in modulevpcprivatesubnetattributesbyaz {subnetid = valueid availabilityzone = valueavailabilityzone}]) }

保存文件。

在终端中再次初始化 Terraform 以安装 VPC 模块: terraform init

使用 plan 命令预览 Terraform 拟进行的更改: terraform plan

应用 Terraform 配置以创建 VPC 和子网: terraform apply

创建 Oracle RDS Custom 主实例

您可以使用 Terraform 的 数据源 查找在相应区域支持的自定义引擎版本的实例类型。利用 AWS 发布的 CfO 模块,创建一个 Oracle 的 RDS Custom 主实例。

将以下 Terraform 代码添加到 maintf 文件中:您可以根据自己的需要更改参数值。 hcl # 查找指定 CEV 支持的实例类型 data awsrdsorderabledbinstance customoracle { engine = customoracleee # CEV 引擎 engineversion = 19202101customoraclehome # 提供之前创建的 CEV 版本/名称 licensemodel = bringyourownlicense storagetype = gp3 preferredinstanceclasses = [dbr5xlarge dbr52xlarge dbr54xlarge] }

接下来,使用 CfO 模块创建主实例。您可以根据需求定制模块的属性,比如存储大小以及符合组织安全政策的用户名和密码。

编辑 maintf 以包含 rdscustomfororacle 模块,实例参数值如下所示您可以更改参数值: hcl module rdscustomfororacle { source = awsia/rdscustomfororacle/aws version = gt= 100

vpcid = modulevpcvpcattributesid vpccidr = modulevpcvpcattributescidrblock

privatesubnetroutetableids = [for value in modulevpcrtattributesbytypebyazprivate valueid] privatesubnetconfig = flatten([for value in modulevpcprivatesubnetattributesbyaz {subnetid = valueid availabilityzone = valueavailabilityzone}])

kmskeyid = awskmskeyrdscfokmskeyarn

使用 Terraform 模块部署 Amazon RDS Custom for Oracle 数据库

createdbsubnetgroup = true # 切换以创建或分配 db 子网组。默认名称和描述将被使用。 createvpcendpoints = true # 切换以创建或不创建 VPC 端点。默认名称和描述将被使用。

createiamrole = true # 切换以创建或分配 IAM 角色。默认名称和描述将被使用。 createiaminstanceprofile = true # 切换以创建或分配 IAM 实例配置文件。默认名称将被使用。

awsdbinstanceprimary = { allocatedstorage = 50 backupretentionperiod = 1 dbname = ORCL engine = dataawsrdsorderabledbinstancecustomoracleengine engineversion = dataawsrdsorderabledbinstancecustomoracleengineversion identifier = instanceha instanceclass = dataawsrdsorderabledbinstancecustomoracleinstanceclass username = dbadmin password = avoidplaintextpasswords # 使用符合您组织安全政策的密码。 skipfinalsnapshot = true }

tags = { CostCenter = exampleinccostallocationCostCenter }

# 明确依赖 VPC 模块,因为 modulevpcawsroutetableassociationprivate[] 是完整生命周期操作所需的 dependson = [modulevpc] }

output awsdbinstanceprimaryarn { description = 创建的 RDS 主实例 ARN。 value = modulerdscustomfororacleawsdbinstanceprimaryattributesarn }

output dbsubnetgroup { description = 创建的 RDS DB 子网组。 value = modulerdscustomfororacledbsubnetgroup }

保存文件。

在终端中再次初始化 Terraform 以安装 CfO 模块: terraform init

预览 Terraform 拟进行的更改: terraform plan

应用 Terraform 配置以创建 RDS CfO 主实例: terraform apply

创建两个 RDS Custom for Oracle 读副本

现在您可以扩展上一个部分的 CfO 模块配置,以包括两个读副本。CfO 模块会自动将副本在不同的可用区中进行地理分布。您可以通过使用 awsdbinstancereplicas 嵌套块属性来添加副本配置。

用以下代码替换 maintf 中 rdscustomfororacle 的定义您可以根据需要更改参数值: hcl module rdscustomfororacle { source = awsia/rdscustomfororacle/aws version = gt= 100

vpcid = modulevpcvpcattributesid vpccidr = modulevpcvpcattributescidrblock

privatesubnetroutetableids = [for value in modulevpcrtattributesbytypebyazprivate valueid] privatesubnetconfig = flatten([for value in modulevpcprivatesubnetattributesbyaz {subnetid = valueid availabilityzone = valueavailabilityzone}])

kmskeyid = awskmskeyrdscfokmskeyarn

createdbsubnetgroup = true # 切换以创建或分配 db 子网组。默认名称和描述将被使用。 createvpcendpoints = true # 切换以创建或不创建 VPC 端点。默认名称和描述将被使用。

createiamrole = true # 切换以创建或分配 IAM 角色。默认名称和描述将被使用。 createiaminstanceprofile = true # 切换以创建或分配 IAM 实例配置文件。默认名称将被使用。

awsdbinstanceprimary = { allocatedstorage = 50 backupretentionperiod = 1 dbname = ORCL engine = dataawsrdsorderabledbinstancecustomoracleengine engineversion = dataawsrdsorderabledbinstancecustomoracleengineversion identifier = instanceha instanceclass = dataawsrdsorderabledbinstancecustomoracleinstanceclass username = dbadmin password = avoidplaintextpasswords # 使用符合您组织安全政策的密码。 skipfinalsnapshot = true }

awsdbinstancereplicas = { replicacount = 2 backupretentionperiod = 30 instanceclass = dataawsrdsorderabledbinstancecustomoracleinstanceclass skipfinalsnapshot = true }

tags = { CostCenter = exampleinccostallocationCostCenter }

# 明确依赖 VPC 模块,因为 modulevpcawsroutetableassociationprivate[] 是完整生命周期操作所需的 dependson = [modulevpc] }

预览 Terraform 拟进行的更改: terraform plan

应用 Terraform 配置以创建 RDS CfO 副本: terraform apply

清理

当您不再需要本文中创建的资源时,请清理这些资源以节省开销。可以通过使用 terraform destroy 命令清理通过 Terraform 创建的 AWS 资源。terraform destroy

此命令将尝试删除第一部分所创建的 CMK,但可能会失败,因为该 CMK 与使用控制台手动创建的 CEV 相关联。如果 terraform destroy 命令出错,请使用 控制台删除 CEV,然后再次运行该命令。

结论

在这篇文章中,我们展示了如何使用 Terraform 模块部署 RDS Custom for Oracle 的主实例和副本实例。此外,还创建了必要的资源,如 KMS 密钥、CEV 和 VPC。

我们建议您在开发环境中测试这些模块和示例,并根据需要进行适当的更改以用于生产环境。

您可以在我们的 GitHub 仓库中找到更多 Terraform 示例。

飞机加速app官方下载

我们欢迎您的反馈。如果您有任何问题或建议,请在评论区留言。

作者介绍

Vishal Patil 是亚马逊网络服务的高级数据库专家解决方案架构师。他帮助客户设计架构、迁移并优化 AWS 中的 Oracle 工作负载。

Wesley Hong 是 RDS 商业引擎团队的软件开发经理。

Tyler Lynch 是 AWS 的首席解决方案架构师。Tyler 支持并贡献开源软件。他目前是 Terraform AWS 提供程序的前十大贡献者之一

云计算入门:Deepti 的三步法by Deepti Trivedi 在 2023年11月07日于 AWS 培训与认证, 最佳实践 永久链接 分享飞机vn...

加速跨账户Amazon RDS的增量快照刷新关键要点使用Amazon RDS的增量快照刷新可以提高跨AWS账户数据传输的效率。该方法通过增量快照的复制减少了时间和成本。具体流程包括快照的设置、共享及复...