使用 GitHub 操作为 OCI 函数构建 CI/CD 管道

CI/CD(连续集成/连续部署)可自动执行构建、测试和部署,从而更快、更可靠地发运代码更改。Oracle Cloud Infrastructure Functions 是一个完全托管的多租户、高度可扩展的按需平台。它基于企业级 Oracle Cloud Infrastructure (OCI) 构建,由 Fn Project 提供开源引擎支持。此参考架构提供了推荐的结构和集成,以说明如何在任何集成开发环境 (Integrated Development Environment,IDE) 工具中使用 Fn Project CLI 来构建和部署 CI/CD OCI Functions 服务管道。

体系结构

此架构使用 GitHub Actions 作为外部连续集成和部署系统,以构建代码、将其容器化并部署 Oracle Cloud Infrastructure Functions。您可以使用其他集成开发环境 (IDE) 工具(例如 GitLab 或 Azure DevOps),而不是 GitHub Action。

下图说明了此引用体系结构。

下面是 cicd-deploy-oci-functions.png 的说明
插图 cicd-deploy-oci-functions.png 的说明

cicd-deploy-oci-functions-oracle.zip

该体系结构包括以下外部系统:

  • 外部系统 (CI/CD)

    CI/CD 的外部系统包括集成开发环境 (IDE)、代码存储库和管道。

    此体系结构使用 GitHub 操作作为外部连续集成和部署代码资料档案库系统。它用于构建代码,然后使用 Docker 进行容器化。容器化映像准备就绪后,GitHub 操作会将映像推送到 OCI 注册表。完成向注册表的传输后,它将启动 OCI Functions 部署。您可以根据自己的需求使用其他连续集成或部署系统,例如 OCI DevOps、Azure DevOps、Gitlab 或 Jenkins。

  • 外部系统 (SIEM/ITSM/OTHER)

    SIEM 和 ITSM 的外部系统代表其他第三方系统或非 OCI 服务。

    汇总和扩充 OCI 审计日志、服务日志和安全事件是外部 SIEM 或 ITSM 系统的基本要求。通过集中管理这些数据,组织可以分析、监视和保护其租户。

该体系结构具有以下组件:

  • 区域

    Oracle Cloud Infrastructure 区域是包含一个或多个数据中心(称为可用性域)的本地化地理区域。地区独立于其他地区,远距离可以把它们分开(跨越国家甚至大陆)。

  • 虚拟云网络 (VCN) 和子网

    VCN 是一个可定制的软件定义网络,您可以在 Oracle Cloud Infrastructure 区域中设置。与传统的数据中心网络一样,VCN 允许您控制您的网络环境。VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 划分为子网,子网可以限定为区域或可用性域。每个子网都包含一系列不与 VCN 中的其他子网重叠的连续地址。可以在创建后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 注册表

    Oracle Cloud Infrastructure Registry 是一个由 Oracle 管理的注册表,可帮助您简化开发到生产工作流。通过注册表,您可以轻松地存储、共享和管理开发对象,例如 Docker 映像。Oracle Cloud Infrastructure 的高可用性和可扩展性架构可确保您能够可靠地部署和管理应用。

  • 函数

    Oracle Cloud Infrastructure Functions 是一个完全托管的多租户、高度可扩展的按需函数即服务 (FaaS) 平台。它由 Fn Project 开源引擎提供支持。使用函数可以部署代码,也可以直接调用代码或触发代码以响应事件。Oracle Functions 使用 Oracle Cloud Infrastructure Registry 中托管的 Docker 容器。

  • 服务连接器

    Oracle Cloud Infrastructure Service Connector Hub 是一个云消息总线平台,可编排 OCI 服务之间的数据移动。可以使用服务连接器将数据从源服务移动到目标服务。服务连接器还允许您选择性地指定在将数据交付到目标服务之前要对数据执行的任务(例如函数)。

    您可以使用 Oracle Cloud Infrastructure 服务连接器中心为安全信息和事件管理 (SIEM) 系统快速构建日志记录聚合框架。

  • 日志记录
    日志记录是一项高度可扩展且完全托管的服务,它允许您从云端资源访问以下类型的日志:
    • 审计日志:与审计服务发出的事件相关的日志。
    • 服务日志:由各个服务发出的日志,如 API 网关、事件、函数、负载平衡、对象存储和 VCN 流日志。
    • 定制日志:包含来自定制应用程序、其他云提供商或内部部署环境的诊断信息的日志。
  • Oracle Cloud Infrastructure Streaming 提供了一个完全托管、可扩展且持久的存储解决方案,可以摄取连续的大量数据流,以便您实时使用和处理。您可以使用流处理来摄取高容量数据,例如应用日志、运行状况遥测、Web 点击流数据;或用于在发布 - 订阅消息传递模式中连续生成和处理数据的其他用例。

  • 通知

    Oracle Cloud Infrastructure Notifications 服务通过发布 - 订阅模式向分布式组件广播消息,为托管在 Oracle Cloud Infrastructure 上的应用提供安全、高度可靠、低延迟和持久的消息。

推荐

使用以下建议作为起点。 您的要求可能与此处描述的体系结构不同。
  • VCN

    创建 VCN 时,请根据您计划附加到 VCN 中子网的资源数量,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。

    选择不与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure 、您的内部部署数据中心或其他云提供商中)重叠的 CIDR 块。

    创建 VCN 后,您可以更改、添加和删除其 CIDR 块。

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可以用作安全边界的同一子网。

    使用区域子网。

  • 安全列表

    使用安全列表定义应用于整个子网的入站和出站规则。

  • 网络安全组 (NSG)

    可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG 而非安全列表,因为 NSG 使您能够将 VCN 的子网体系结构与应用的安全要求分开。

  • Cloud Guard

    在租户级别应用 Cloud Guard,以涵盖最广泛的范围并减轻维护多个配置的管理负担。

    还可以使用“托管列表”功能将某些配置应用于检测器。

  • 安全区域

    对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是与 Oracle 定义的基于优秀实践的安全策略配方关联的区间。例如,安全区域中的资源必须无法从公共 Internet 访问,并且必须使用客户管理的密钥对它们进行加密。在安全区域中创建和更新资源时,Oracle Cloud Infrastructure 会根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。

  • OCI 函数

    通过 OCI Functions 服务部署的应用具有高可用性、可扩展性、安全性和监视性。借助 OCI 函数,您可以使用 Java、Python、Node、Go、Ruby 和 C# 编写代码(对于高级用例,请使用您自己的 Dockerfile 和 Graal VM)。然后,您可以部署代码、直接调用代码或触发代码以响应事件。

  • OCI 注册表

    此体系结构部署公共 Docker 注册表。Docker 映像会推送到注册表并从中拉取,任何具有 Internet 访问权限且知道相应 URL 的用户都可以从 Oracle Cloud 中的公共资料档案库中提取映像。

注意事项

部署此引用体系结构时,请考虑以下几点。

  • SIEM 集成

    为了简化跨租户区域和应用程序配置的聚合日志信息的部署,您可以使用 OCI Functions 服务。

    您可以使用 OCI 函数将日志推送到 SIEM 的 HTTPS API 端点。为此,请添加从其他 OCI 服务读取的区域 OCI 服务连接器中心。

  • Grouping 函数

    作为最佳实践,您可以定义多个函数(例如,每个环境一个函数)。如果有多个环境(如 DEV、UAT、PROD),则可以在单独的环境中跟踪每个函数的单独代码行。

部署

从 GitHub 下载自动化脚本代码,自定义代码并部署它。

您可以从以下位置调用已部署到 OCI 函数的函数:

  • Fn 项目 CLI。
  • Oracle Cloud Infrastructure SDK。
  • 已将 HTTP 请求签名到函数的调用端点。每个函数都有一个调用端点。
  • 其他 Oracle Cloud 服务(例如,由事件服务中的事件触发)或来自外部服务。
  1. 转至 GitHub
  2. 克隆或下载系统信息库。
  3. 要部署此体系结构,请遵循参考 YAML 文件、示例 hello world 应用程序代码和自述文件。

确认

  • 作者Dipesh Rathod
  • 贡献者Bhanu Prakash Lohumi