21 个版本 (10 个破坏性更新)
0.11.0 | 2019年11月12日 |
---|---|
0.10.0 | 2019年7月15日 |
0.9.0 | 2019年6月11日 |
0.6.0 | 2019年3月19日 |
0.1.5 | 2018年7月28日 |
#70 在 #input-output
每月41次 下载
在 2 crates 中使用
210KB
5K SLoC
注意
⚠️
该项目不再由原作者积极维护。
鼓励进行分叉或衍生作品!
Rust 的 Azure Functions
在 Rust 中实现 Azure Functions 的框架。
🚩 免责声明
此项目不是官方认可微软产品,也不是对微软未来产品推出的认可。Microsoft 和 Azure 是微软公司的注册商标。
如果您希望 Azure Functions 团队考虑支持 Rust,请 对此反馈项目进行投票。
示例
简单的 HTTP 触发 Azure Function
use azure_functions::{
bindings::{HttpRequest, HttpResponse},
func,
};
#[func]
pub fn greet(req: HttpRequest) -> HttpResponse {
format!(
"Hello from Rust, {}!\n",
req.query_params().get("name").map_or("stranger", |x| x)
)
.into()
}
Azure Functions for Rust 也支持 异步 函数
use azure_functions::{
bindings::{HttpRequest, HttpResponse},
func,
};
use futures::future::ready;
#[func]
pub async fn greet_async(req: HttpRequest) -> HttpResponse {
// Use ready().await to simply demonstrate the async/await feature
ready(format!(
"Hello from Rust, {}!\n",
req.query_params().get("name").map_or("stranger", |x| x)
))
.await
.into()
}
有关更多信息,请参阅 构建异步 Azure Functions 应用程序。
入门
目录
安装
要求
.NET Core SDK
需要 .NET Core SDK 以同步 Azure Functions Host 绑定扩展。
例如,使用 Cosmos DB 绑定需要在 Azure Functions Host 中安装 Microsoft.Azure.WebJobs.Extensions.CosmosDB
扩展。
当应用程序初始化时,Azure Functions for Rust 会自动执行此操作。
按照 2.2 .NET Core SDK 的下载说明 在 Windows、macOS 或您的 Linux 发行版上安装。
Azure Functions Core Tools
安装 Azure Functions Core Tools 的 2 版或更高版本。
如果您使用的是 Windows,您必须将 %ProgramFiles%\nodejs\node_modules\azure-functions-core-tools\bin
(其中 func.exe
所在位置)添加到 PATH
环境变量中。
安装 Azure Functions for Rust SDK
使用 cargo install
命令安装 Azure Functions for Rust SDK。
cargo install azure-functions-sdk
这会安装一个名为 func
的新 cargo 命令,可用于创建和运行新的 Azure Functions 应用程序。
创建新的 Azure Functions 应用程序
使用 cargo func new-app
命令创建一个新的 Azure Functions 应用程序
cargo func new-app hello
这将创建一个名为 functions
的模块,该模块位于 ./hello
目录中,并期望将导出的 Azure Functions 放置在其中。
添加简单的 HTTP 触发应用程序
使用 cargo func new
命令创建一个名为 hello
的新 HTTP 触发 Azure Function
cargo func new http -n hello
函数的源代码将在 src/functions/hello.rs
。
构建 Azure Functions 应用程序
要构建您的 Azure Functions 应用程序,只需使用 cargo build
cargo build
如果您使用的是夜间编译器,可以在编译期间启用改进的错误消息。
将以下内容添加到您的 Cargo.toml
[features]
unstable = ["azure-functions/unstable"]
构建您的应用程序
cargo build --features unstable
这使 Azure Functions for Rust 能够发出包含属性中错误位置的诊断消息。
构建异步 Azure Functions 应用程序
要构建支持异步 Azure Functions,请将以下内容添加到您的 Cargo.toml
[dependencies]
futures-preview = "0.3.0-alpha.19"
然后进行构建
cargo build
运行 Azure Functions 应用程序
要构建和运行您的 Azure Functions 应用程序,请使用 cargo func run
cargo func run
如果您需要启用 unstable
功能,请向 cargo 传递 --features
选项
cargo func run -- --features unstable
cargo func run
命令使用由 Azure Functions Core Tools 安装的 Azure Function Host 在本地构建和运行您的应用程序。
默认情况下,主机将配置为监听 0.0.0.0:8080
。
对于之前添加的 hello
函数,可以从 https://127.0.0.1:8080/api/hello
调用。
调试 Azure Functions 应用程序
最简单的方法是使用 Visual Studio Code 以及 CodeLLDB 扩展来调试 Azure Functions 应用程序。
默认情况下,当您运行 cargo func new-app
时,Azure Functions for Rust SDK 将创建一个 Visual Studio Code 启动配置。
这将为 Debug
启动配置启用功能,该配置会在将 lldb
调试器附加到 Rust 工作进程之前在本地构建和运行您的应用程序。
部署 Azure Functions 应用程序
将来,将会有一个 cargo func deploy
命令,可以直接将 Azure Functions 应用程序部署到 Azure。
在此之前,您必须手动构建并推送 Docker 镜像到 Azure 可以访问的存储库。
注意:这需要至少为实验性的 BuildKit 支持配置 Docker 的 18.06 版本。
要启用 BuildKit 支持,在运行 docker build
命令之前将 DOCKER_BUILDKIT
环境变量设置为 1
。
首先使用 docker build -t $TAG_NAME .
构建您的镜像。
docker build -t $TAG_NAME .
其中 $TAG_NAME
是要使用的标签名称(例如,username/my-functions-app
)。
使用 docker push
将镜像推送到 Azure Functions 可以访问的存储库。
docker push $TAG_NAME
使用 "Linux (Preview)" 操作系统在 Azure 中创建 "Function App (Classic)"。在 "发布" 设置下,选择 "Docker Image"。
在 "配置容器" 部分中,选择存储库并输入您推送的镜像。
这就完成了!一旦 Azure 中的 Functions App 启动,您应该能够查看函数并运行它们。
Azure Functions 绑定
Azure Functions 支持广泛的各种输入和输出绑定,这些绑定可以被函数使用。
在 C# 等语言中,可以使用描述参数如何绑定的属性对参数进行注释。
Rust 不支持对参数使用属性,因此将 #[binding]
属性应用于与参数标识符匹配的函数名称。属性的参数取决于绑定类型。
使用 #[func]
属性可以将普通 Rust 函数转换为 Azure Function。它是通过检查函数的参数和返回类型并自动映射到相应的绑定来实现的。
当前支持的绑定列表
Rust 类型 | Azure Functions 绑定 | 方向 | Vec<T> |
---|---|---|---|
Blob | 输入和输出 Blob | in, inout, out | 无 |
BlobTrigger | Blob 触发器 | in, inout | 无 |
CosmosDbDocument | 输入和输出 Cosmos DB 文档 | in, out | 是 |
CosmosDbTrigger | Cosmos DB 触发器 | in | 无 |
DurableActivityContext | 持久活动触发器 | in | 无 |
DurableOrchestrationClient | 持久编排客户端 | in | 无 |
DurableOrchestrationContext | 持久编排触发器 | in | 无 |
EventGridEvent | 事件网格触发器 | in | 无 |
EventHubMessage | 事件中心输出消息 | out | 是 |
EventHubTrigger | 事件中心触发器 | in | 无 |
GenericInput | 通用输入 | in | 无 |
GenericOutput | 通用输出 | out | 无 |
GenericTrigger | 通用触发器 | in | 无 |
HttpRequest | HTTP 触发器 | in | 无 |
HttpResponse | 输出 HTTP 响应 | out | 无 |
QueueMessage | 输出队列消息 | out | 是 |
QueueTrigger | 队列触发器 | in | 无 |
SendGridMessage | SendGrid 邮件消息 | out | 是 |
ServiceBusMessage | 服务总线输出消息 | out | 是 |
ServiceBusTrigger | 服务总线触发器 | in | 无 |
SignalRConnectionInfo | SignalR 连接信息 | in | 无 |
SignalRGroupAction | SignalR 群组操作 | out | 是 |
SignalR 消息 | SignalR 消息 | out | 是 |
表格 | 输入和输出表格 | in, out | 无 |
计时器信息 | 计时器触发 | in | 无 |
TwilioSmsMessage | Twilio SMS 消息输出 | out | 是 |
将来将实现更多绑定,包括支持从自定义绑定检索数据。
Rust 中的绑定
Azure Functions for Rust 会根据绑定在函数声明中的使用方式自动推断绑定的方向。
输入绑定
类型为 T
或 &T
的参数,其中 T
是触发器或输入绑定类型,被推断为具有 in
方向的绑定。
#[func]
...
pub fn example(..., blob: Blob) {
...
}
#[func]
...
pub fn example(..., blob: &Blob) {
...
}
此外,一些输入绑定类型支持类型为 Vec<T>
和 &Vec<T>
的参数,其中 T
是输入绑定类型
#[func]
...
pub fn example(..., documents: Vec<CosmosDbDocument>) {
...
}
以下输入绑定支持类型为 Vec<T>
CosmosDbDocument
输入输出(inout)绑定
类型为 &mut T
的参数,其中 T
是支持 inout
方向的触发器或输入绑定类型,被推断为具有 inout
方向的绑定。
#[func]
...
pub fn example(..., blob: &mut Blob) {
...
}
注意:目前除了 C# 之外的语言,尚未实现 inout
方向绑定。
有关 Azure Functions Host 的此问题,请参阅 此问题。
输出绑定
返回类型为 T
的函数,其中 T
是输出绑定类型,或输出绑定类型的元组,被推断为具有 out
方向的绑定。
#[func]
...
pub fn example(...) -> Blob {
...
}
函数还可以返回任何输出绑定类型 T
的 Option<T>
;一个 None
值将跳过输出值。
#[func]
...
pub fn example(...) -> Option<Blob> {
...
}
#[func]
...
pub fn example(...) -> (HttpResponse, Option<Blob>) {
...
}
此外,一些输出绑定类型支持返回 Vec<T>
,其中 T
是输出绑定类型
#[func]
...
pub fn example(...) -> Vec<CosmosDbDocument>) {
...
}
以下输出绑定支持返回类型 Vec<T>
CosmosDbDocument
EventHubMessage
QueueMessage
SendGridMessage
ServiceBusMessage
SignalRGroupAction
SignalR 消息
TwilioSmsMessage
对于返回单个输出绑定类型的函数,绑定具有特殊的名称 $return
,并被视为函数的返回值。
对于返回输出绑定类型元组的函数,元组的第一个值具有绑定名称 $return
,并被视为函数的返回值。其余值具有绑定名称 output1
、output2
、...、output(N-1)
,其中 N
是元组中类型的数量,并仅被视为输出绑定。
单元元组 ()
可用于元组中以“跳过”绑定
#[func]
...
pub fn example(...) -> ((), Blob) {
...
}
对于上述示例,没有 $return
绑定,Azure Function "返回" 没有值。相反,使用了一个名为 output1
的单个输出绑定。
贡献者
感谢以下这些优秀的人 (emoji key)
胡恩彼得 💻 🐛 📖 🤔 🚇 🚧 📦 👀 ⚠️ ✅ |
莱维克·瑞恩 💻 🤔 🚧 👀 🚇 |
埃克特·托马斯 💻 🖋 🎨 📖 🤔 🚇 🚧 👀 ✅ |
克洛伊·R·泰勒 💻 📖 👀 🤔 |
莫洛卡诺夫·德尼斯 💻 ⚠️ 🎨 🤔 |
莱昂斯·斯科特 💻 ⚠️ 🎨 🤔 |
普里纳·罗汉 💻 |
布维克·克里斯蒂安 🐛 💻 ✅ |
布朗宁·丹尼 💻 🚧 |
此项目遵循all-contributors规范。欢迎所有类型的贡献!
lib.rs
:
Rust 的 Azure Functions
此包在azure-functions-codegen
和azure-functions
包之间共享类型。
依赖项
~10–14MB
~247K SLoC