🏗️

Cloudflare Workers Plugin for PipeCD

に公開

はじめに

CyberAgentのDeveloper Productivity室で室長をしています、 uncle__ko です
現在PipeCDではPlugin化構想に向けて鋭意開発中です
そこで、PipeCDで実現すると面白そうなPluginのアイデアについて記載していきます

What is Cloudflare Workers?

Cloudflare Workersは、Cloudflare のエッジで動くサーバーレスの JavaScript 実行環境

主な特徴:

  • エッジコンピューティング: Cloudflareのグローバルネットワーク上で動作し、遅延を削減。
  • サーバーレス: インフラ管理不要で手軽に利用可能。
  • スケーラビリティ: トラフィックの増減に自動対応。

V8 isolate architecture
開始時にインスタンスにruntimeがロードされるのを待つ遅延がない
isolateはすでににruntimeを備えており、必要なのは呼び出し時にCodeをロードすることだけ
リクエスト時のcold startは存在しない

Deploying PipeCD Plugins with Wrangler

Wrangler
Cloudflare Workersを管理することができるCLI
※ちなみにCDNとかdomainの管理はflarectl

https://developers.cloudflare.com/workers/wrangler/
https://github.com/cloudflare/workers-sdk/tree/main/packages/wrangler

欲しいコマンドはだいたいあると思われる

init - Create a new project from a variety of web frameworks and templates.
deploy - Deploy your Worker to Cloudflare.
delete - Delete your Worker from Cloudflare.
rollback - Rollback to a recent deployment.

https://developers.cloudflare.com/workers/wrangler/commands/

Configuration fileもあり、現状はJSONC or TOMLがサポートされている

{
  "name": "my-worker",
  "main": "src/index.js",
  "compatibility_date": "2022-07-12",
  "workers_dev": false,
  "route": {
    "pattern": "example.org/*",
    "zone_name": "example.org"
  },
  "kv_namespaces": [
    {
      "binding": "<MY_NAMESPACE>",
      "id": "<KV_ID>"
    }
  ],
  "env": {
    "staging": {
      "name": "my-worker-staging",
      "route": {
        "pattern": "staging.example.org/*",
        "zone_name": "example.org"
      },
      "kv_namespaces": [
        {
          "binding": "<MY_NAMESPACE>",
          "id": "<STAGING_KV_ID>"
        }
      ]
    }
  }
}
# Top-level configuration
name = "my-worker"
main = "src/index.js"
compatibility_date = "2022-07-12"

workers_dev = false
route = { pattern = "example.org/*", zone_name = "example.org" }

kv_namespaces = [
  { binding = "<MY_NAMESPACE>", id = "<KV_ID>" }
]

[env.staging]
name = "my-worker-staging"
route = { pattern = "staging.example.org/*", zone_name = "example.org" }

kv_namespaces = [
  { binding = "<MY_NAMESPACE>", id = "<STAGING_KV_ID>" }
]

Configuration fileの形式をどうサポートするかは悩みどころ
個人的にはv3.91.0以上がjsoncとtoml、それ以下はtomlしかサポートされてないので、最初はtomlだけサポートしておけば良い気もする

https://developers.cloudflare.com/workers/wrangler/configuration/

最初は下記stageさえ用意できれば問題ない気がしてる

  • WRANGER_DRY_RUN
    • wrangler deploy –dry-run
  • WRANGER_DEPLOY
    • wrangler deploy
  • WRANGER_ROLLBACK
    • wrangler rollback

※これは勝手な想像です
こんなapp.pipecd.configになるイメージをしてます

apiVersion: pipecd.dev/v1beta1
kind: WranglerApplication
spec:
  name: wrangler
  input:
    config: wrangler.toml
  pipeline:
    stages:
      - name: WRANGER_DRY_RUN
      - name: WRANGER_DEPLOY

Summary

  • plugin化たのしみ
  • plugin作れるようになったら本スライドで話したwrangler用のplugin作ろうかなって思ってる
  • Cloudflare Workersはこれから需要も増えていくだろうし、対応すれば使ってくれる人もいるかなって思ったりしてる
  • Hono界隈の人にも認知されたら熱そう

参考記事

CyberAgent Developer Productivity室

Discussion