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

    参考

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark