最近 Rust をさわり始めてる @zaru です。Rust で雑に Web アプリを作ったものを雑にデプロイしたいな〜と思って調べたところ、render が手頃で良さそうだったので紹介します。
デプロイは GitHub に push するだけ
Dockerfile や設定ファイルなどは何も必要ありません。render のコンソールから GitHub 連携をし、プロジェクトを作り、リポジトリを指定したら、あとは GitHub に push するだけで Rust のビルドが始まり、デプロイされます。超手軽ですね。Heroku のような PaaS になっています。
注意点は host と port くらい
render に限らず他の PaaS もそうですが、Web アプリの host と port 指定は気をつける必要があります。と言っても以下の2点くらいです。
- host は
0.0.0.0
にする - port は環境変数
PORT
を受け取れるようにする
render 公式ドキュメントでこの記載は見つけられなかったのですが、これで動くので、おそらく大丈夫でしょう。
具体的に Rust の Web アプリフレームワーク warp
のサンプルコードです。
use warp::Filter;
use std::env;
#[tokio::main]
async fn main() {
let port_key = "PORT";
let default_port = 3000;
let port = match env::var(port_key) {
Ok(val) => match val.parse::<u16>() {
Ok(port) => port,
Err(_) => {
println!(
"the port number \"{}\" is invalid. default port will be used.",
val
);
default_port
}
},
Err(_) => {
println!(
"\"{}\" is not defined in environment variables. default port will be used.",
port_key
);
default_port
}
};
let hello = warp::path!("hello" / String)
.map(|name| format!("Hello, {}!", name));
warp::serve(hello)
.run(([0, 0, 0, 0], port))
.await;
}
render についての感想
- 初回ビルドは依存パッケージをダウンロードしてくるので、少し時間がかかる
- 2回目以降はキャッシュしてくれるので、ビルドのみ
- リージョン
- 今は2つのリージョンをサポート
- Oregon, USA
- Frankfurt, Germany
- Tokyo リージョンなどのアジア圏への対応は検討中
- ここで要望を確認できる
- Asia Region
- render で決済をする際に国を聞かれる
- 実際にお金を払ってくれる人が多い地域を優先的にサポートするはずなので、Tokyo リージョンを待望する人は、ぜひお金を払って render を支援してあげてください
- 今は2つのリージョンをサポート
- 実質 Heroku ?
- 使い勝手の感覚はほぼ Heroku なので、Heroku が好きな人は好きそう
- ソースコードのみでデプロイできる、まさに PaaS らしい PaaS
- Heroku との明確な違いは現時点ではそこまで感じてない
- サポート言語・フレームワークがモダンな感じ