订阅以接收新文章的通知:

由 marimo 提供支持,通过 Python 笔记本探索您的 Cloudflare 数据

2025-07-16

4 分钟阅读时间
这篇博文也有 English日本語版本。

此内容已使用自动机器翻译服务进行翻译,仅供您参考及阅读便利。其中可能包含错误、遗漏,或与原始英文版本存在理解方面的细微差别。如有疑问,请参考原始英文版本。

许多开发人员、数据科学家和研究人员在 Python 笔记本中完成大部分工作:十多年来, Python 笔记本一直是数据科学和共享的事实上的标准。笔记本之所以受欢迎,是因为它们可以轻松编码、探索数据、制作原型和分享结果。Cloudflare 大量使用笔记本,发现越来越多的开发人员使用笔记本处理数据,从分析 HTTP 流量趋势、查询 Workers Analytics Engine 到查询自己存储在 R2 中的 Iceberg 表

传统笔记本非常强大,但在构建它们时并没有考虑到协作、可重复性或作为数据应用部署的因素。随着使用量在不同团队和工作流程中增长,这些限制开始面临大规模工作的现实。

考虑到这些挑战marimo 重新构想了笔记本的体验。这是一个开源的反应式 Python 笔记本,具有可重复性,易于在 Git 中跟踪,可作为独立脚本执行并且可部署。我们与 marimo 团队合作,为 Cloudflare 开发人员带来这种简化的、生产友好的体验。减少因工具问题带来的麻烦,将更多时间用于探索数据。

今天,我们隆重宣布三件事:

想立即开始探索您的 Cloudflare 数据吗?前往 notebooks.cloudflare.com 。您也可以继续阅读,了解关于 marimo 的更多信息,我们如何在笔记本中简化身份验证,以及如何使用 marimo 在 Cloudflare 上浏览和共享笔记本和应用。

为什么选择 marimo?

marimo 是一个开源的反应式 Python 笔记本,专门为处理数据而设计,从头开始构建,以解决传统笔记本的许多问题。

将 marimo 与传统笔记本区分开来的核心功能在于其响应式执行模型,该模型由单元格上的静态推理数据流图谱提供支持。运行一个单元格或与 UI 元素交互,marimo 要么运行依赖的单元格,要么将其标记为过时(您的选择)。这可以保持代码和输出的一致性,防止错误发生,并显着提高用数据进行实验的速度。

得益于被动执行,笔记本也可作为数据应用部署,易于共享。虽然您可以在本地、在云服务器、GPU —— 任何可以传统上运行软件的地方运行 marimo 笔记本,但你也可以通过 WebAssembly 完全在浏览器中运行它们,使共享成本降至零。

因为 marimo 笔记本以 Python 格式存储,所以它们享受软件的所有好处:使用 Git 管理版本,作为脚本或管道执行,使用 pytest 测试,使用 uv 内联包要求,并将符号从笔记本导入其他 Python 模块。虽然存储为 Python,marimo 也支持 SQL 和数据源,例如 DuckDB、Postgres 和基于 Iceberg 的数据目录(除了 RAM 中的数据外,marimo 的AI 助手还可以访问这些数据目录)。

要了解 marimo 笔记本是什么样的,请查看下面的嵌入式示例笔记本:

使用 marimo 探索您的 Cloudflare 数据

准备好在 marimo 笔记本中探索您自己的 Cloudflare 数据了吗?最简单的开始方法是访问 notebooks.cloudflare.com 并通过 WebAssembly (Wasm) 直接在浏览器中运行我们的一个示例笔记本。您也可以在我们的笔记本示例 GitHub 存储库中浏览源代码。

想要创建自己的笔记本在本地运行?下面是一个简单示例,向您展示如何使用您的 Cloudflare 帐户进行身份验证,并列出您有权访问的区域:

  1. 如果尚未安装 uv,请按照安装指南进行安装。

  2. 为笔记本创建一个新的项目目录:

mkdir cloudflare-zones-notebook
cd cloudflare-zones-notebook

3. 初始化一个新的 uv 项目(这将创建一个 .venv和一个pyproject.toml):

uv init

4. 添加 marimo 和所需的依赖项:

uv add marimo

5. 创建一个名为 list-zones.py 的文件,并将以下笔记本粘贴到其中:

import marimo

__generated_with = "0.14.10"
app = marimo.App(width="full", auto_download=["ipynb", "html"])


@app.cell
def _():
    from moutils.oauth import PKCEFlow
    import requests

    # Start OAuth PKCE flow to authenticate with Cloudflare
    auth = PKCEFlow(provider="cloudflare")

    # Renders login UI in notebook
    auth
    return (auth,)


@app.cell
def _(auth):
    import marimo as mo
    from cloudflare import Cloudflare

    mo.stop(not auth.access_token, mo.md("Please **sign in** using the button above."))
    client = Cloudflare(api_token=auth.access_token)

    zones = client.zones.list()
    [zone.name for zone in zones.result]
    return


if __name__ == "__main__":
    app.run()

6. 打开笔记本编辑器:

uv run marimo edit list-zones.py --sandbox

7. 根据笔记本中的 OAuth 提示符登录。通过身份验证后,您将在最终单元格中看到 Cloudflare 区域的列表。

大功告成!从这里,您可以展开笔记本以调用 Workers AI 模型,查询 R2 Data Catalog 中的 Iceberg 表,或与任何 Cloudflare API 交互。

OAuth 在笔记本中的工作方式

您可以把 OAuth 想象成笔记本和 Cloudflare 之间的一次安全握手。无需复制粘贴 API 令牌,您只需点击“使用 Cloudflare 登录”,笔记本会处理剩下的事情。

我们使用 PKCE(代码交换证明密钥)构建这种体验,这是一种安全的 OAuth 2.0 流程,无需使用客户端密钥,并能防止代码拦截攻击。PKCE 的工作原理是生成一个一次性代码,该代码可在登录后交换令牌,永远不需要共享客户端密钥。了解有关 PKCE 如何工作的更多信息

登录小部件位于 Cloudflare 和 marimo 合作的 moutils.oauth 中,使笔记本中的 OAuth 身份验证简单而安全。要使用它,只需创建一个如下所示的单元格:

auth = PKCEFlow(provider="cloudflare")

# Renders login UI in notebook
auth

运行单元格时,您将看到一个“使用 Cloudflare 登录”按钮:

使用 Cloudflare 按钮登录的示例

登录后,您将拥有一个可在使用 Cloudflare API 时传递的只读访问令牌。

在 Cloudflare 上运行 marimo:Workers 与容器

除了在本地运行 marimo 笔记本外,您还可以使用 Cloudflare 通过 Workers 静态资产Cloudflare 容器共享和运行它们。

如果您有本地笔记本想与他人分享,可将其发布到 Workers。这之所以可行,是因为 marimo 可以将笔记本导出到 WebAssembly,从而使它们可以完全在浏览器中运行。您可以仅使用两个命令来开始:

marimo export html-wasm notebook.py -o output_dir --mode edit --include-cloudflare
npx wrangler deploy

如果您的笔记本需要身份验证,可叠加 Cloudflare Access,实现经过身份验证的安全访问。

对于需要更多计算能力、持久会话或长时间运行的任务的笔记本,您可以在我们的新容器平台上部署 marimo。要开始使用,请在 GitHub 上查看我们的 marimo 容器示例

Cloudflare + marimo 的下一步计划

这篇博文仅仅标志着 Cloudflare 与 marimo 合作的开端。虽然我们很期待看到您如何使用我们基于 WebAssembly 的联合笔记本平台来探索 Cloudflare 数据,但我们也希望帮助您对您的数据进行认真的计算——使您能够直接运行大规模分析和批处理作业。通过 marimo 笔记本。敬请关注!

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
开发人员平台APIR2Data CatalogNotebooks

在 X 上关注

Keith Adler|@Talador12
Akshay Agrawal (Guest Author)|@akshaykagrawal
Myles Scolnick (Guest Author)|@themylesfiles
Cloudflare|@cloudflare

相关帖子