WASM + WASI + WAGI + Rust 中的 Web 组装模块 — 第 2 部分
在 Rust 中加载外部 Web 组装模块 Rust 和 Web 组装 简介 这是三部分系列中的第 2 部分。如果您还没有,请在阅读本部分之前阅读第 -1 部分。 我们在 Part-1 中构建了一个非常简单的 Web Assembly 模块。现在我们需要找到一种方法来分发它。输入 wasm-to-oci。 我们将看看如何加载外部 Web 组装模块。 先决条件 1.锈(1.60+) 码头工人 3.C
在 Rust 中加载外部 Web 组装模块
Rust 和 Web 组装
简介
这是三部分系列中的第 2 部分。如果您还没有,请在阅读本部分之前阅读第 -1 部分。
我们在 Part-1 中构建了一个非常简单的 Web Assembly 模块。现在我们需要找到一种方法来分发它。输入 wasm-to-oci。 我们将看看如何加载外部 Web 组装模块。
先决条件
1.锈(1.60+)
- 码头工人
3.CNCF 分布
4.wasm-to-oci
WASM-TO-OCI
OCI 代表 Open Ccontainer Initiative。 Wasm-To-OCI 是使用 OCI 注册中心来分发 Web 组装模块。 OCI 注册表是符合 OCI 注册表工件规范的任何注册表。
ORAS(OCI Registry As Storage) 是 OCI 工件项目的实现。它简化了将内容存储到 OCI 注册表的过程。使用 ORAS 客户端库可以轻松地将 WASM 模块推送和拉取到 OCI 注册表。根据 ORAS 文档,目前以下注册表支持 OCI 工件
-
CNCF 分发— 本地/离线验证
-
Azure 容器注册表
-
Amazon Elastic Container Registry
-
Google Artifact Registry
-
GitHub Packages 容器注册表
-
捆扎条
对于我们的用例,我们将使用未经身份验证的本地 CNCF 分发。
CNCF 分布
CNCF 分发是OCI 分发规范的参考实现。在本地运行分发,作为容器,提供 ORAS 和OCI Artifacts的本地/离线验证。
- ORAS 文档
要启动本地分发实例,请运行以下命令
#!/bin/bashdocker run -it --rm -p 5000:5000 注册表
注意:您需要运行 docker daemon 才能成功执行此命令。
如果一切顺利,那么您应该会看到类似
泊坞窗运行注册表
推送到 OCI 注册表
现在我们已经启动了我们的注册表。是时候将我们的 Web 程序集推送到这个 OCI 注册表了。
从我们的Part-1我们将在 ./target/wasm32-wasi/debug/level1.wasm 中拥有 WASM 文件。 在您继续之前,请确保您拥有wasm-to-ocicli安装在你的机器上。
将以下行添加到您的 justfile
./justfilepush sample:wasm-to-oci push target/wasm32-wasi/debug/{{sample}}.wasm localhost:5000/wagi-{{sample}}-oci:latest
添加此行后,justfile 将如下所示:
只是文件快照
保存更改后,运行以下命令以推送到本地注册表。
#!/bin/bash 只需推送 1 级
如果一切顺利,你应该看到
WASM 推送到 OCI Registry
现在我们已将您的 Webassembly 推送到您的注册表。是时候在另一个项目中使用它了。
加载外部模块
现在编辑 modules.toml 文件并添加以下行
/modules.toml[[模块]]
路线 u003d "/ping-oci"
模块u003d“oci:本地主机:5000 / weights-level1-oci:最新”
添加此行后,您的 modules.toml 文件应如下所示:
模块.toml
在此之后,让我们通过运行启动 level1
#!/bin/bash 只运行级别 1
现在转到您的浏览器并导航到http://localhost:3000/ping-oci,如果一切顺利,您应该看到
ping-oci
你看看那个。我们得到了来自外部的 WASM 的响应,就像那样。
让我们看一下网络选项卡
网络选项卡
请注意,响应与我们从本地 WASM-WAGI ping 得到的响应相同,即
网络选项卡 — 本地 wagi
哇!我们能够在没有任何库的情况下加载外部 Web 组装模块。这个外部 WASM 在沙箱中运行,无法访问我们的文件系统或任何东西。 WAGI 服务器运行此代码并以“pong”响应。
在下一部分中,我们将了解如何将此 Web 程序集部署到 Kubernetes 集群。
参考文献
WAGI简介 |幻灯片 + 报道 (fettblog.eu)
https://youtu.be/9NDwHBjLlhQ— 非常有用的视频和对本文的主要影响
deislabs/wagi:用最少的工作量在 WebAssembly 中编写 HTTP 处理程序 (github.com)
Wasm、WASI、Wagi:它们是什么? | Fermyon Technologies (@FermyonTech)
thangchung/webassembly-tour: ⚙️ 带你参观 WebAssembly(WASI 上的 WASM 目标)和 wasmCloud、Krustlet、WAGI 等。🌟 如果你喜欢它,请给它一颗星。 (github.com)
更多推荐
所有评论(0)