注意:

使用 OCI 事件服务规则使用 OCI 函数更新专用区域的跨区域 DNS 记录

简介

在本教程中,我们将学习如何在创建新计算实例时或者在 Oracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR) 计划的切换方案期间移动这两个区域内专用区域中计算实例的域名系统 (Domain Name System,DNS) 记录。本教程介绍了两个特定的 OCI 服务。

此用例最初设想用于 OCI 全栈 DR 切换计划,其中实例在区域之间移动。从本质上讲,灾难恢复 (Disaster Recovery,DR) 切换过程涉及在新区域中创建新实例,然后在上一个区域中终止实例。根据此方案,本教程重点介绍启动 - 实例结束事件类型,这会触发 OCI 函数来更新两个区域中专用区域的 DNS 记录。

此解决方案还可以用作默认的 OCI DNS 专用区域自动化。它将为在所选区间中创建的每个新实例或您指定用于标识目标实例的任何其他筛选器创建 DNS 记录。有关详细信息,请参阅生成事件的服务

高级别体系结构

T3_1

注:

目标

先决条件

任务 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 容器注册表

  1. 转到 Developer Services(开发人员服务),单击 Container registry(容器注册表)并为 Fn 映像创建专用系统信息库。

    资料档案库名称:lab/fnpy-event-dns-update

    T3_1

  2. 检查系统信息库并记下 Namespace

    T3_1

  3. 打开安装了 OCI CLI 和 Docker 的终端 shell,然后登录到注册表。检查您所在区域的正确 URL。在本教程中,我们使用注册表 URL 为 gru.ocir.ioBrazil East (Sao Paulo) 区域。

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

任务 4:创建 Python OCI 函数以更新专用区域上的 DNS

  1. 转到 OCI 控制台,然后单击开发人员服务。在 Functions(函数)下,单击 Applications(应用程序)Create application(创建应用程序)

    T9_1

  2. 为受影响的 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
    

    T4_2

  3. 转到安装了 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-urlregistry 位置。

    T4_3

    init 命令将在 func.py 上创建 hello world 函数。我们将覆盖此代码。

  4. 从此处获取 Python 函数示例代码: fnpy-event-dns-update.zip ,解压缩该代码并在 init 命令期间覆盖文件。

    1. 将 zip 文件复制到执行 fn init 命令的 lab 目录中,并检查该目录中的文件。

      ls -lrt
      
    2. 解压缩该文件并覆盖现有文件。

      unzip fnpy-event-dns-update.zip
      

    T9_1

  5. 构建新代码并部署函数。

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

任务 5:创建 OCI 事件服务规则

  1. 转到 OCI 控制台,然后单击观测和管理。在 Events Service(事件服务)下,选择 Rules(规则)并单击 Create Rule(创建规则)

  2. 输入以下信息。

    • 名称:输入 MyAutoDNSRule
    • 规则条件:
      • 条件 1:
        • 条件:选择 Event Type
        • 服务名:选择 Compute
        • 事件类型:选择 Instance - Launch End
      • 条件 2:
        • 条件:选择 Attribute
        • 属性名称:选择 compartmentId
        • 属性值:输入您的区间 OCID。
    • 操作:
      • 操作类型:选择 Functions
      • 函数区间:选择您的区间。
      • 函数应用程序:选择 MyApp
      • 函数:选择 fnpy-event-dns-update

    T5_1

    注:在此示例中,按 compartmentID 过滤实例,这意味着该区间中新启动的任何实例都将触发所选函数。您可以根据自己的需要指定不同的筛选器和条件。

任务 6:验证解决方案

在本教程中,我们在 GRU 和 VCP 区域中建立了 DNS 专用区域,并记录了每个 DNS 专用区域的 OCID。这些 OCID 将用于配置 OCI 函数。

  1. 确保 OCI Functions 可用并启用日志记录。

    1. 转到 OCI 控制台,然后单击开发人员服务。在函数下,单击应用程序并选择您创建的应用程序 MyApp

      T6_1

    2. 单击日志,然后选择启用日志

      T6_1

  2. 检查当前的 DNS 专用区域。我们在两个区域中都设置了一个名为 UBUNTUAPPS.COM 的域,如下图所示。

    T6_1

    T6_1

  3. 创建新的计算实例以模拟 OCI 全栈 DR 切换。这将触发 Instance Launch - END 事件,随后将调用 OCI 函数来更新这两个区域中的 DNS 专用区域。

    T6_2

    T6_2

  4. 创建实例后,验证是否已在两个区域中正确更新了 DNS 专用区域。

    T6_3

    T6_3

  5. 查看 OCI 函数日志以验证已执行函数的详细信息。

    T6_4

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心