注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 OCI 事件服务规则使用 OCI 函数更新专用区域的跨区域 DNS 记录
简介
在本教程中,我们将学习如何在创建新计算实例时或者在 Oracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR) 计划的切换方案期间移动这两个区域内专用区域中计算实例的域名系统 (Domain Name System,DNS) 记录。本教程介绍了两个特定的 OCI 服务。
-
OCI 事件服务规则:一种服务,可触发对 OCI 环境中的更改和事件的自动响应。
-
OCI 函数:一种无服务器计算服务,允许您执行代码以响应事件而无需管理基础结构。
此用例最初设想用于 OCI 全栈 DR 切换计划,其中实例在区域之间移动。从本质上讲,灾难恢复 (Disaster Recovery,DR) 切换过程涉及在新区域中创建新实例,然后在上一个区域中终止实例。根据此方案,本教程重点介绍启动 - 实例结束事件类型,这会触发 OCI 函数来更新两个区域中专用区域的 DNS 记录。
此解决方案还可以用作默认的 OCI DNS 专用区域自动化。它将为在所选区间中创建的每个新实例或您指定用于标识目标实例的任何其他筛选器创建 DNS 记录。有关详细信息,请参阅生成事件的服务。
高级别体系结构
注:
本教程仅为教育和学习目的而设计。它为学习者提供了一个在受控环境中进行实验和获得实践经验的环境。需要注意的是,本教程中使用的安全配置和做法可能不适合实际情况。
现实应用的安全注意事项往往更加复杂和动态。因此,在实施生产环境中演示的任何技术或配置之前,必须进行全面的安全评估和审查。本审查应涵盖安全的所有方面,包括访问控制、加密、监视和合规性,以确保系统符合组织的安全政策和标准。
从实验室环境过渡到实际部署时,安全性始终是重中之重。
目标
-
设置 OCI 事件服务规则以触发提供的 OCI 函数。只要在所选区间中创建了新实例,此功能就会在两个区域中更新 DNS 专用区域记录。
注:本教程不介绍 OCI Full Stack DR 的设置。相反,它将专注于在两个或多个区域中自动执行 DNS 专用区域。有关详细信息,请参阅将 OCI Full Stack Disaster Recovery Service 与 Oracle WebLogic Server 域配合使用。
先决条件
-
OCI Environment
-
具有管理员权限的 OCI 账户。
-
用于创建资源的区间。
注:请注意区间名称和区间 ID。
-
OCI DNS 专用区域 Oracle Cloud 标识符 (OCID) 的列表,其中新启动的实例在您可能需要的每个区域中具有 DNS 记录。在本教程中,我们提供了两个 DNS 专用区域:一个用于 GRU 区域,一个用于 VCP 区域。
-
-
本地计算机环境
-
设置本地 Oracle Cloud Infrastructure 命令行界面 (OCI CLI)。有关详细信息,请参阅安装 OCI CLI 。
-
本地 Docker 能够构建映像。如果使用的是 Oracle Linux,请参见Docker:Install Docker on Oracle Linux 8 (OL8) 。
-
本地 Fn 项目 CLI,用于将函数部署到 OCI。有关更多信息,请参见 Installing the Fn Project CLI 。
-
任务 1:设置动态组
转到您的域,单击动态组并创建以下组。
动态组名:MyFunctions
。
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
任务 2: 创建策略
转到策略并创建以下策略。
策略名: FunctionsPolicies
。
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage dns-records in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use dns-zones in compartment YOUR-COMPARTMENT-NAME
任务 3:创建 OCI 容器注册表
-
转到 Developer Services(开发人员服务),单击 Container registry(容器注册表)并为 Fn 映像创建专用系统信息库。
资料档案库名称:
lab/fnpy-event-dns-update
。 -
检查系统信息库并记下 Namespace 。
-
打开安装了 OCI CLI 和 Docker 的终端 shell,然后登录到注册表。检查您所在区域的正确 URL。在本教程中,我们使用注册表 URL 为
gru.ocir.io
的 Brazil East (Sao Paulo) 区域。docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
任务 4:创建 Python OCI 函数以更新专用区域上的 DNS
-
转到 OCI 控制台,然后单击开发人员服务。在 Functions(函数)下,单击 Applications(应用程序)和 Create application(创建应用程序)。
-
为受影响的 OCI DNS 专用区域创建配置。
注:此配置变量指定要更新的专用区域 OCID。可以列出多个 OCID,以逗号分隔。
密钥名称 值 TARGET_ZONES_OCID 将专用区域 OCID 的列表设置为逗号分隔 在本教程中,我们将设置两个专用区域:一个用于 GRU 区域,一个用于 VCP 区域。
示例:
ocid1.dns-zone.oc1.sa-saopaulo-1.xxxx
ocid1.dns-zone.oc1.sa-vinhedo-1.xxx
-
转到安装了 Docker、OCI CLI、Fn Project CLI 的终端 shell,然后运行以下命令来初始化函数。
注:如果执行了任务,则您的 Docker 登录命令现在已执行,如果未执行,请继续执行任务 3.3 中的 Docker 登录。
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fnpy-event-dns-update cd fnpy-event-dns-update ls -lrt
注:在本教程中,我们使用的是 Brazil East(Sao Paulo) 区域,如果您使用的是其他区域,则需要更改
api-url
和registry
位置。init
命令将在func.py
上创建 hello world 函数。我们将覆盖此代码。 -
从此处获取 Python 函数示例代码: fnpy-event-dns-update.zip ,解压缩该代码并在
init
命令期间覆盖文件。-
将 zip 文件复制到执行
fn init
命令的 lab 目录中,并检查该目录中的文件。ls -lrt
-
解压缩该文件并覆盖现有文件。
unzip fnpy-event-dns-update.zip
-
-
构建新代码并部署函数。
ls -lrt fn deploy --app MyApp
任务 5:创建 OCI 事件服务规则
-
转到 OCI 控制台,然后单击观测和管理。在 Events Service(事件服务)下,选择 Rules(规则)并单击 Create Rule(创建规则)。
-
输入以下信息。
- 名称:输入
MyAutoDNSRule
。 - 规则条件:
- 条件 1:
- 条件:选择
Event Type
。 - 服务名:选择
Compute
。 - 事件类型:选择
Instance - Launch End
。
- 条件:选择
- 条件 2:
- 条件:选择
Attribute
。 - 属性名称:选择
compartmentId
。 - 属性值:输入您的区间 OCID。
- 条件:选择
- 条件 1:
- 操作:
- 操作类型:选择
Functions
。 - 函数区间:选择您的区间。
- 函数应用程序:选择
MyApp
。 - 函数:选择
fnpy-event-dns-update
。
- 操作类型:选择
注:在此示例中,按 compartmentID 过滤实例,这意味着该区间中新启动的任何实例都将触发所选函数。您可以根据自己的需要指定不同的筛选器和条件。
- 名称:输入
任务 6:验证解决方案
在本教程中,我们在 GRU 和 VCP 区域中建立了 DNS 专用区域,并记录了每个 DNS 专用区域的 OCID。这些 OCID 将用于配置 OCI 函数。
-
确保 OCI Functions 可用并启用日志记录。
-
转到 OCI 控制台,然后单击开发人员服务。在函数下,单击应用程序并选择您创建的应用程序
MyApp
。 -
单击日志,然后选择启用日志。
-
-
检查当前的 DNS 专用区域。我们在两个区域中都设置了一个名为
UBUNTUAPPS.COM
的域,如下图所示。 -
创建新的计算实例以模拟 OCI 全栈 DR 切换。这将触发
Instance Launch - END
事件,随后将调用 OCI 函数来更新这两个区域中的 DNS 专用区域。 -
创建实例后,验证是否已在两个区域中正确更新了 DNS 专用区域。
-
查看 OCI 函数日志以验证已执行函数的详细信息。
相关链接
确认
- 作者 — Joao Tarla(Oracle LAD A-Team 解决方案工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use OCI Events Service Rule to Update Cross Region DNS Records for a Private Zone with OCI Functions
G11044-01
July 2024