Closed10

Cloudflare WorkersでちょっとしたNode.jsアプリを動かす

Zennで現状CloudFunctionsにデプロイしている一部のAPIを可能ならCloudflare Workersに移行してみたい。
CloudFunctionsでも問題なく動いているが

  • コールドスタートの遅さを解消したい
  • Cloud Functionsよりパフォーマンスが良さそう
  • (おそらく)料金的にも安くなる

などがCloudflare Workersへ移行するモチベーションになっている。

AWS Lambdaと比べたときのパフォーマンス

こちらはCloudflareの公式サイトに載っているAWS Lambdaと比較したときの計測結果。

How can serverless improve performance?

CDNのエッジで動かすということもあり制限が厳しめ

こちらは2021/02/06時点でのCloudflare WorkersのLimits。

特に気になるのはScript sizeの1MB。いけるかな

ここより下の内容は整理して下記の記事にまとめた。

https://zenn.dev/catnose99/articles/f86d74cc5abc37

wrangler(CLI)をインストール

Cloudflare Workersをビルド・プレビュー・デプロイするうえで、WranglerというCLIを使うことになる。

https://developers.cloudflare.com/workers/cli-wrangler/install-update

npmでWranglerをインストールする場合

$ npm install -g @cloudflare/wrangler

注意)M1 Macではnpmでwranglerをインストールできない => cargoを使う

2021/07/25追記: 解決済みであることを確認しました

2021年2月時点ではRustのパッケージマネージャーの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を聞かれたときに入力する。

スターター(テンプレート)からプロジェクトを作成

https://developers.cloudflare.com/workers/starters

今回は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
このスクラップは2021/02/07にクローズされました
ログインするとコメントできます