PythonアプリケーションをCloudflare Workersにデプロイしてみた
この記事は、PythonアプリケーションをWranglerでCloudflare Workersへデプロイする方法や注意点をまとめた記事です。利用できるライブラリの制限などが2024/10時点ではある様子なので、試される方はそこにご注意ください。
目次
この記事は、PythonアプリケーションをWranglerでCloudflare Workersへデプロイする方法や注意点をまとめた記事です。利用できるライブラリの制限などが2024/10時点ではある様子なので、試される方はそこにご注意ください。
試そうとした背景
個人的に作ろうとしていたものに、Pythonで公開されているライブラリが必要だったので、WorkersのPython版を試してみる事にしました。
Create Cloudflare CLIでセットアップする
Pythonで実装する場合も、npm create cloudflare
が使えます。
npm create cloudflare@latest -- my-python-worker
作成時のウィザードを進めると、言語を選択するステップが出てきます。ここでPython
を選びましょう。
╰ Which language do you want to use?
○ TypeScript
○ JavaScript
● Python (beta)
◁ Go back
あとはコマンドがセットアップを進めてくれますので、下のような完了メッセージが出るまで待ちましょう。
────────────────────────────────────────────────────────────
🎉 SUCCESS Application created successfully!
💻 Continue Developing
Change directories: cd weather-forcast
Start dev server: npm run start
Deploy: npm run deploy
📖 Explore Documentation
https://developers.cloudflare.com/workers
💬 Join our Community
https://discord.cloudflare.com
────────────────────────────────────────────────────────────
Pythonでもローカル開発はWranglerを使う
ローカルでのアプリケーション開発には、こちらもWranglerを使います。
> wrangler dev
⛅️ wrangler 3.81.0
-------------------
▲ [WARNING] The entrypoint src/entry.py defines a Python worker, support for Python workers is currently experimental. Python workers with a requirements.txt file can only be run locally and cannot be deployed.
⎔ Starting local server...
[wrangler:inf] Ready on http://localhost:8787
╭───────────────────────────╮
│ [b] open a browser │
│ [d] open devtools │
│ [l] turn off local mode │
│ [c] clear console │
│ [x] to exit │
╰───────────────────────────╯
Wranglerがコンテナ?を利用してアプリを立ち上げる様子なので、Pythonが入っていないPCでも動きます。
% python
zsh: command not found: python
Pythonまわりの環境セットアップが不要なのはありがたいですね。
2024/10時点では、デフォルトでバンドルされているライブラリのみ使える様子?
Beta提供だからだとは思いますが、次のような注意書きがあります。どうやらpip
を使ってライブラリをインストールすることに制限がある様子です。
Currently, you can only deploy Python Workers that use the standard library. Packages cannot be deployed and will only work in local development for the time being.
試しにrequirements.txt
にライブラリを追加したところ、エラーが出ました。
Attaching additional modules:
┌──────────────────┬────────────────────┬──────────┐
│ Name │ Type │ Size │
├──────────────────┼────────────────────┼──────────┤
│ eorzeaenv │ python-requirement │ │
├──────────────────┼────────────────────┼──────────┤
│ Total (1 module) │ │ 0.00 KiB │
└──────────────────┴────────────────────┴──────────┘
⎔ Starting local server...
[wrangler:inf] Ready on http://localhost:8787
✘ [ERROR] service core:user:weather-forcast: Uncaught Error: It appears that a package ("eorzeaenv") you requested is not available yet in workerd.
If you would like this package to be included, please open
an issue at
https://github.com/cloudflare/workerd/discussions/new?category=python-packages.
at null.<anonymous>
(pyodide-internal:setupPackages:203:15) in
addPackageToLoad
at null.<anonymous>
(pyodide-internal:setupPackages:185:9) in
recursiveDependencies
at null.<anonymous>
(pyodide-internal:setupPackages:141:26) in
getTransitiveRequirements
at null.<anonymous>
(pyodide-internal:setupPackages:212:40)
使えるライブラリリストがドキュメントにありますので、これをみて導入判断する必要がありそうです。
LangChainはぶんまわせる
ちなみにリストを見るとLangChain系が一通り入っています。生成AI方面での利用を想定しているのかもしれませんね。他にもfastapiやnumpy / openaiなども入っている様子です。
使いたいライブラリがある場合は、requirements.txt
ファイルを作成して列挙します。
langchain
langchain-core
langchain_openai
langsmith
openai
あとはnpm run dev
でWranglerから開発サーバーを立ち上げると、自動でバンドルしてくれます。
> wrangler dev
⛅️ wrangler 3.81.0
-------------------
▲ [WARNING] The entrypoint src/entry.py defines a Python worker, support for Python workers is currently experimental. Python workers with a requirements.txt file can only be run locally and cannot be deployed.
Attaching additional modules:
┌───────────────────┬────────────────────┬──────────┐
│ Name │ Type │ Size │
├───────────────────┼────────────────────┼──────────┤
│ langchain │ python-requirement │ │
├───────────────────┼────────────────────┼──────────┤
│ langchain-core │ python-requirement │ │
├───────────────────┼────────────────────┼──────────┤
│ langchain_openai │ python-requirement │ │
├───────────────────┼────────────────────┼──────────┤
│ langsmith │ python-requirement │ │
├───────────────────┼────────────────────┼──────────┤
│ openai │ python-requirement │ │
├───────────────────┼────────────────────┼──────────┤
│ Total (5 modules) │ │ 0.00 KiB │
└───────────────────┴────────────────────┴──────────┘
⎔ Starting local server...
[wrangler:inf] Ready on http://localhost:8787
╭───────────────────────────╮
│ [b] open a browser │
│ [d] open devtools │
│ [l] turn off local mode │
│ [c] clear console │
│ [x] to exit │
╰───────────────────────────╯
ちょっとだけ触ってみた感想
まだまだBeta提供のため、使える場所使えない場所の判断は難しそうです。ただ、LangChain系が使えるので、VectorizeやWorkers AI・AI Gatewayなどを使った開発で試してみる分には良さそうかなと思います。
個人的には、Pythonのインストール・バージョン管理やvenv
まわりを省略できるところが、Pythonをメインで使わない人たちにとって優しいかも?と感じました。