【Actix】RustをAzure Functionsで使う方法
投稿日: 更新日:
環境💻
OS: Ubuntu 22.04.2 (WSL2)
Azure Functions Core Tools: 4.0.5148
rustc: 1.68.2
VSCodeの拡張機能などの設定は済んでいるとします
1.プロジェクトを作成する
VSCodeから関数を作成します。
Custom Handlerを選択
HTTP triggerを選択
関数名を入力。今回はHttpTrigger1とします。
Anonymousを選択
2.関数を作成する
以下のコマンドでCargoパッケージを作成します。名前はhandlerとします
cargo init --name handler
そしたら、dependenciesに依存関係を追加します
[dependencies]
actix-web = "4"
次に、src/main.rs
に以下のコードを書いてください。function_name
の部分は1で作成した関数名と同じにしてください。
use actix_web::{App, get, HttpServer, HttpResponse, Responder, web };
use std::net::Ipv4Addr;
#[get("")]
async fn hello() -> impl Responder {
HttpResponse::Ok().body("Hello world!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT";
let port: u16 = match std::env::var(port_key) {
Ok(val) => val.parse().unwrap(),
Err(_) => 3000,
};
let function_name = "HttpTrigger1";
HttpServer::new( move || {
App::new()
.service(web::scope(format!("api/{}", function_name).as_str()).service(hello))
})
.bind((Ipv4Addr::LOCALHOST, port))?
.run()
.await
}
次に、ビルドします。
cargo build --release
そして、成果物をコピーします
cp target/release/handler .
3.関数アプリの設定
host.json
を開いてcustomHandler
の部分を以下のように書き換えます。
"customHandler": {
"description": {
"defaultExecutablePath": "handler",
"workingDirectory": "",
"arguments": []
},
"enableForwardingHttpRequest": true
}
4.ローカルで実行する
以下のコマンドで実行できます
func start
そして、http://localhost:7071/api/HttpTrigger1 にアクセスしてください。以下の画像のようになれば成功です!
5.デプロイする
デプロイに不要な物を記載します。.funcignore
に以下を書き加えてください。
target
そして、Azure用にコンパイルしなければなりません。functionsのOSによって異なります。
functionsのOSがLinuxの場合
.cargo/config
に以下の内容を書きます。.cargo
ディレクトリが無い場合は作成してください。
[target.x86_64-unknown-linux-musl]
linker = "rust-lld"
musl-toolsをインストールします。
sudo apt install musl-tools
そして、以下のコマンドをそれぞれ実行してください。
rustup target add x86_64-unknown-linux-musl
cargo build --release --target=x86_64-unknown-linux-musl
cp target/x86_64-unknown-linux-musl/release/handler .
functionsのOSがWindowsの場合
.cargo/config
に以下の内容を書きます。.cargo
ディレクトリが無い場合は作成してください。
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
mingw-w64をインストールします
sudo apt install mingw-w64
そして、以下のコマンドをそれぞれ実行してください。
rustup target add x86_64-pc-windows-gnu
cargo build --release --target=x86_64-pc-windows-gnu
cp target/x86_64-pc-windows-gnu/release/handler.exe .
host.json
を開いてcustomHandler
の部分を以下のように書き換えます。
handler
をhandler.exe
と書き換えました。
"customHandler": {
"description": {
"defaultExecutablePath": "handler.exe",
"workingDirectory": "",
"arguments": []
},
"enableForwardingHttpRequest": true
}
後は、以下のボタンで関数をデプロイします。
関数のURLにアクセスし、ローカルで実行した時と同じ結果が表示されれば成功です。