Cloudflare WorkersでちょっとしたNode.jsアプリを動かす
Zennで現状CloudFunctionsにデプロイしている一部のAPIを可能ならCloudflare Workersに移行してみたい。
CloudFunctionsでも問題なく動いているが
- コールドスタートの遅さを解消したい
- Cloud Functionsよりパフォーマンスが良さそう
- (おそらく)料金的にも安くなる
などがCloudflare Workersへ移行するモチベーションになっている。
AWS Lambdaと比べたときのパフォーマンス
こちらはCloudflareの公式サイトに載っているAWS Lambdaと比較したときの計測結果。
CDNのエッジで動かすということもあり制限が厳しめ
こちらは2021/02/06時点でのCloudflare WorkersのLimits。
特に気になるのはScript sizeの1MB。いけるかな
ここより下の内容は整理して下記の記事にまとめた。
wrangler(CLI)をインストール
Cloudflare Workersをビルド・プレビュー・デプロイするうえで、WranglerというCLIを使うことになる。
npmでWranglerをインストールする場合
$ npm install -g @cloudflare/wrangler
注意)M1 Macではnpmでwrangler
をインストールできない => cargoを使う
wrangler
をインストールできない => cargoを使う2021/07/25追記: 解決済みであることを確認しました
2021年2月時点ではRustのパッケージマネージャーのcargoを使ってインストールを行う必要がある。
- 関連するIssue: https://github.com/cloudflare/wrangler/issues/1685
- cargoでインストールする手順:https://developers.cloudflare.com/workers/cli-wrangler/install-update#using-cargo
$ curl https://sh.rustup.rs -sSf | sh # cargoがまだ入っていない場合
$ cargo install wrangler # wranglerを入れる
これでOK
$ wrangler --version
👷 ✨ wrangler 1.13.0
wrangler config
wranglerにアカウントを紐付ける。手順はドキュメントの通り。
wrangler config
を実行すると、API Tokenの入力を求められる。
API Tokenの取得について
API TokenはCloudflareのダッシュボードから取得することが可能(Managing API Tokens and Keys)。
今回はCloudflare Workersを動かすので[Edit Cloudflare Workers]のテンプレートを選んでTokenを生成した。これをwrangler config
でTokenを聞かれたときに入力する。
スターター(テンプレート)からプロジェクトを作成
今回はTypeScriptのスターターを使ってみる。
$ wrangler generate my-app https://github.com/EverlastingBugstopper/worker-typescript-template
2021/02/06時点だとM1 Macでwrangler generate
を実行すると以下のようなエラーが発生する
2021/07/25追記: wrangler v1.18.0
で解決済みであることを確認しました
Error: could not download `cargo-generate`
Error: could not download `cargo-generate`
no prebuilt cargo-generate binaries are available for this platform
仕方がないので、スターターのGitHubリポジトリをcloneしたうえでwrangler.toml
をプロジェクトのルートに配置する。その後、wrangler.tomlの書き方を参考にwrangler.toml
にCloudflareのaccount_id
などを指定しておく。
これでwrangler generate
を実行したときと同じ構成になると思われる。
実装サンプル
公式のサンプルコードが充実しているため、困ったらまず同じようなことをやっているサンプルがないか探してみると良い。
個人的には以下のサンプルが参考になった。
localhostでworkerを試す
下記のコマンドを実行するとlocalhostでサーバーが立ち上がり関数が試せる。
$ wrangler dev
デプロイする
下記のコマンドを実行すると、Cloudflare Workersにデプロイされて外部からリクエストを受け付けられるようになる。
$ wrangler publish
Cloudflare Workersの使い方とハマったポイントを記事にしておいた。