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をメインで使わない人たちにとって優しいかも?と感じました。