Slide 1

Slide 1 text

Cloudflare Containersの使用感と ユースケースに思いを馳せる Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 1

Slide 2

Slide 2 text

Who am I Kanahiro Iguchi MapLibre User Group Japan AWS Community Builder - Serverless 『位置エン本』 『位置ベロ本』 『実践QGIS』著者 Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 2

Slide 3

Slide 3 text

Cloudflare Workers とは? Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 3

Slide 4

Slide 4 text

Contents 1. Cloudflareとわたし 2. Cloudflare Containers 3. 実際にやってみた 4. ユースケースに思いを馳せる Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 4

Slide 5

Slide 5 text

1. Cloudflareとわたし Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 5

Slide 6

Slide 6 text

仕事でも個人開発でも、パブリッククラウドはもっぱらAWSかCloudflareを使います Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 6

Slide 7

Slide 7 text

ポートフォリオサイトだったり https://spatialty.io/ Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 7

Slide 8

Slide 8 text

地図タイルサーバーだったり https://kanahiro.github.io/tameike-viewer/ タイルサーバーにはHonoを利用しています。Hono ConfでCfPが採択されたら喋ります Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 8

Slide 9

Slide 9 text

仕事では最近『れきちず』をAWS AmplifyからCloudflare Workersへお引越ししました。 https://rekichizu.jp/ Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 9

Slide 10

Slide 10 text

太っ腹な無料枠のため、とくに個人開発においてはCloudflare Workersを第一選択肢と しています(Paid Planではあるけど枠を超過したことがない) Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 10

Slide 11

Slide 11 text

2. Cloudflare Containers Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 11

Slide 12

Slide 12 text

最近、Cloudflare Containersというものがベータリリースされました Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 12

Slide 13

Slide 13 text

Cloudflare Workers(workerd) は、Node.jsと比べるとさまざまな制約のあるランタイム であり、バイナリに依存するライブラリが使えないなどの制限がある 「Workersでコンテナが使える」というのはWorkersがカバーできる領域が大きく広がる 可能性を示唆する とはいえ使ってみないとわからない Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 13

Slide 14

Slide 14 text

Geospatial Specialistを名乗っているので、こういうとき私は地図タイルサーバーを動かして 味見します。 さくらのクラウドのAppRunを試したようす https://x.com/kanahiro_iguchi/status/1890028133916803437 Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 14

Slide 15

Slide 15 text

例によって、私が開発している地図タイルサーバー https://github.com/Kanahiro/chiitiler のコンテナをCloudflare Containersで動かして検 証しました Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 15

Slide 16

Slide 16 text

3. 実際にやってみた Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 16

Slide 17

Slide 17 text

https://spatialty.io/posts/2025-08-12_Cloudflare Containersでchiitilerを動かしてみる かっこいいブログでContainersの利用手順などをまとめました。 Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 17

Slide 18

Slide 18 text

import { Container, getRandom } from '@cloudflare/containers'; export class MyContainer extends Container { defaultPort = 3000; sleepAfter = '2m'; envVars = { CHIITILER_DEBUG: 'true', CHIITILER_CACHE_METHOD: 'file', }; } export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { return (await getRandom(env.MY_CONTAINER, 10)).fetch(request); }, }; Workersのコード上でコンテナの実行方法を定義 Workersはコンテナのインスタンスを参照して、Fetch APIでやりとり getRandom で複数のインスタンスからひとつを選ぶ Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 18

Slide 19

Slide 19 text

ポイント アーキテクチャは linux/amd64 のみ。Dockerfileをビルドする部分も含むサンプルが多 いが、任意のコンテナイメージを利用可能(Cloudflareのコンテナレジストリに保存す る) 通常のWorkersが常に手前に存在することになる。WorkersとコンテナはFetch APIでや りとりする。 利用可能なインスタンス数は最大10までで任意の数を選択できる。CPU/RAM/Storage で課金される。 コンテナはWorkersとは別の実行環境上で動いていて、指定した時間以上アクセスがな いとスリープする。コールドスタートは比較的重たい。 Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 19

Slide 20

Slide 20 text

デモ Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 20

Slide 21

Slide 21 text

4. ユースケースに思いを馳せる Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 21

Slide 22

Slide 22 text

コールドスタートが重め 常駐させるとコストがかかる ということから、常に一定の流量があって、ある程度の即応性が求められるサーバーには向 かなそう Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 22

Slide 23

Slide 23 text

常に手前にWorkerが存在することから、非同期でコンテナに処理を実行させたい時にはかな り簡単に記述出来るはず。 ユーザーからのリクエストをもとに、ちょっと重めの処理を非同期で実行させるとか export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { const instance = await getRandom(env.MY_CONTAINER, 10) // 非同期で処理を実行する ctx.waitUntil(instance.fetch(someRequest)); return new Response('OK'); }, }; このとき、Workersの待ち時間も課金されるのかよくわかってない Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 23

Slide 24

Slide 24 text

Cron Triggerで発火させるのも便利そう export default { async scheduled(controller: ScheduledController, env: Env, ctx: ExecutionContext) { // こんな感じ? const instance = await getRandom(env.MY_CONTAINER, 10) await instance.fetch(someRequest); }, }; 週次レポートを作成してどこかに送信するとか Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 24

Slide 25

Slide 25 text

つまり… 1. workerdでは動かなくて 2. コールドスタートによる遅延が許容できる このような処理をコンテナで動かすのに向いているね、と理解しています。 加えて、現状では一番強いインスタンスでも0.5vCPUしか使えないので、CPUの能力に 強く依存する処理もさせづらい Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 25

Slide 26

Slide 26 text

https://x.com/yusukebe/status/1937461910590620065 思いを馳せていたらこのポストを見つけました。中の人と答え合わせ出来たね。 Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 26

Slide 27

Slide 27 text

Cloudflare Containers のまとめ Amazon ECSやGoogle Cloud Runのような、それだけでアプリを動かそう、みたいなコ ンテナサービスではない 何かと制約のあるWorkersの限界を超えるための手段、Workersで出来ることはWorkers がやるべき ただし全ては「現時点では」 今後の進化に期待です! Cloudflare Workers Tech Talks in Hokkaido #1 2025/09/04 27