注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于您的云环境的值。
使用 OCI 函数通过资源主用户验证将消息发布到 Kafka 流
简介
了解 Oracle Cloud Infrastructure (OCI) Functions 与 OCI Streaming 在编排实时数据管道方面的无缝协同作用。在本教程中,我们将利用 Oracle 资源主体验证方法和单例设计模式,探讨安全高效的消息生成方法。了解资源主用户身份验证如何通过使用 OCI 流处理服务无缝验证无服务器功能来简化安全管理,而单例模式可优化资源利用率并提高消息生成效率。我们深入了解 OCI Functions 和 OCI Streaming 的融合,让开发人员能够轻松构建强大、可扩展的事件驱动解决方案。
OCI 流处理: OCI 提供一系列工具来处理云中的数据,OCI 流处理服务专为高吞吐量实时数据流而定制。利用 OCI Streaming,开发人员可以构建可扩展、可靠的数据管道,高效摄取、处理和分发数据流。
OCI Functions: OCI Functions 是一个完全托管、多租户、高度可扩展的按需函数即服务平台。它基于企业级 OCI 构建,由 Fn Project 开源引擎提供支持。当您需要专注于编写代码以满足业务需求时,请使用 OCI Functions(有时缩写为 Functions,以前称为 Oracle Functions)。
资源主体验证:您可以使用资源主体验证和访问 OCI 资源。资源主体由临时会话令牌和安全凭证组成,允许 OCI Functions 向其他 OCI 服务(例如 OCI Streaming)进行自我验证。
注:
- 本教程仅用于教育和学习目的。它为学习者提供了一个在受控环境中进行实验和获得实践经验的环境。值得注意的是,本教程中使用的安全配置和实践可能不适合实际场景。
- 现实世界应用的安全注意事项通常更加复杂和动态。因此,在实施生产环境中此处演示的任何技术或配置之前,必须进行全面的安全评估和审查。此审查应涵盖安全的所有方面,包括访问控制、加密、监视和合规性,以确保系统与组织的安全政策和标准保持一致。
- 从实验室环境过渡到实际部署时,安全性应始终是首要任务。
目标
- 使用 OCI Functions 将消息无缝地生成到 OCI 流池中的流式主题中。利用 Oracle 资源主体验证方法并在 Java 中实施单例设计模式,我们将指导您完成使用 Kafka API 安全验证无服务器函数的过程,并优化资源利用率以实现高效的消息生成。
先决条件
-
Oracle Cloud Infrastructure
-
具有管理员级别访问权限的 Oracle 账户。
-
用于创建资源的区间。
注:记下区间名称和区间 ID。
-
具有专用子网的 VCN。有关更多信息,请参见 Creating a Virtual Cloud Network 。
-
专用子网上的流池来自 VCN。有关更多信息,请参阅创建流池。
-
在上述流池上创建的名为
my-pvt-topic
的流。有关详细信息,请参阅创建流。
-
-
本地计算机环境
-
专用子网上的 Oracle Linux 计算实例。这对于访问专用子网上的资源(例如,在本教程期间将部署的 OCI 流处理和函数)非常重要。
-
用于连接到 Oracle Linux 计算实例并执行教程任务的 OCI 堡垒主机。有关更多信息,请参见 Bastion Overview 。
-
本地 Oracle Cloud Infrastructure 命令行界面 (OCI CLI) 设置。有关更多信息,请参见 Installing the CLI 。
-
要生成映像的本地 Docker(如果您使用的是 Oracle Linux),请参见 Docker:在 Oracle Linux 8 (OL8) 上安装 Docker 。
-
用于将函数部署到 OCI 的本地 FN CLI: Installing the Fn Project CLI
-
任务 1:设置动态组
转到域,单击动态组并创建以下组。
- 组名:
MyFunctions
。
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
任务 2:创建策略
转到策略并创建以下策略。
- 策略名:
FunctionsPolicies
。
Allow dynamic-group MyFunctions to {STREAM_INSPECT, STREAM_READ, STREAM_CONSUME, STREAM_PRODUCE} in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
任务 3:创建 OCI 容器注册表
-
转到开发人员服务,单击容器注册表并为 Fn 映像创建专用资料档案库。
名称:
lab/fn-java-streaming
。 -
检查系统信息库并记下名称空间。
-
打开安装了 OCI CLI 和 Docker 的终端 shell,然后继续在注册表上登录。检查您所在区域的正确 URL。在本教程中,我们将使用 Brazil East (Sao Paulo) ,其中注册表 URL 为
gru.ocir.io
。docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
任务 4:创建 Java OCI 函数以接收消息并发布到 OCI 流处理主题
注意确保选择专用子网,即流池的同一子网。
-
转到 Developer Services(开发人员服务),在 Functions(函数)下单击 Applications(应用程序),然后单击 Create application(创建应用程序)。
-
创建一些配置来存储 OCI 流处理设置。
注意此配置变量在本教程 Java 示例代码内使用,以便能够向流生成消息,确保从环境中传递正确的配置变量。
密钥名称 值 BOOTSTRAP_SERVERS 将流池引导服务器粘贴到端口 9092 上 STREAM_POOL_OCID 粘贴流池 OCID STREAM_TOPIC_NAME 粘贴流名称 -
转到安装了 Docker、OCI CLI、Fn Project CLI 的终端 shell,然后运行以下命令来初始化函数。
注:如果您执行了这些任务,则 Docker 登录命令现在已经执行,如果尚未执行,请继续执行任务 3 中的 Docker 登录步骤。
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
注:在本教程中,我们将使用 Brazil East(Sao Paulo) 区域,如果您使用的是其他区域,则需要更改 api-url 和 registry 位置。
-
从此处获取 Java 函数示例代码: fn-java-streaming.zip 并将其解压缩到堡垒控制台 shell 计算机上。
# check your file is there ls -lrt # unzip the file unzip fn-java-streaming.zip
此简单的 Java 代码项目将从流池中向名为
my-pvt-topic
的主题生成消息。它将使用在步骤 3 中创建的 Fn 配置值。-
HelloFunction.java
. -
KafkaProducerSingleton.java
.
-
-
构建新代码并部署函数。
cd fn-java-streaming ls -lrt fn deploy --app fn-lab
-
调用该函数。
# Invoke the function to check if it is working as expected. echo -n 'Hello from OSS' | fn invoke fn-lab fn-java-streaming
注:第一次调用最多可能需要 1 分钟才能调用函数。
相关链接
确认
- 作者 - Joao Tarla(Oracle LAD A 团队解决方案工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Post Messages to Kafka Stream with Resource Principal Authentication using OCI Functions
F93780-01
February 2024
Copyright © 2024, Oracle and/or its affiliates.