2024/09/03 更新
無料PaaSとして提供されていたDetaが残念ながら今年10月でクローズとなるようです。もし稼働しているアプリがある場合は後片付けをしてくださいとのことで、エクスポート用ツールも提供してくれているようなのでそれを活用しましょう。リリース当初から「Deta is free for ever.」という理念というか標語を掲げてがんばっていたみたいなのですが、さすがに限界が来たようですね。この結末に特に驚きはないですが、2年持ったというのは多分凄いことなのだと思います。
次のステージとしてDeta Surfというプロジェクトに取り組んでいるそうです。どのようなプロダクトになるのかぜんぜんわかりませんが楽しみに待っておこうと思います。
今回はDeta CloudというPaaSについて少し調べてみました。これはGoogle検索が日本語設定だとほとんど情報が引っかからないので日本人だと知らない人も多いかもしれませんが、以下の謳い文句でなかなかすごい感じがします。
Build & deploy your ideas on the universe’s most developer friendly cloud platform. Say goodbye to servers and bills. Deta is free for ever.
永久に無料。
Detaについて
Detaは個人向けのPaaS製品を提供しています。2022/2現在、提供機能としては以下の3つ。
- Deta Micros: アプリケーションランタイム
- Deta Base: NoSQLデータベース
- Deta Drive: ファイルストレージ
昨今のクラウド事情を考えると機能面で特に驚くようなところはないのですが、期間限定の無料トライアルとか極小リソースの無料枠という形ではなく、そもそもDetaには課金の仕組みがないのが驚きです。どういうこと?と思いましたが、理念としては以下を掲げています。
For developers, not enterprises
Unlike ‘big cloud’, Deta is made with developers in mind. We have no plans to shift our focus to selling to enterprise.
Free, for purpose
Credit cards and server costs are creativity-killers for developers worldwide. Deta is free, built to back creators and their ideas.
We make money together
Deta is building tools to help developers earn money. We aspire to pay you, not charge you.
開発者はDetaを使って良い製品を作って儲けていただいて、いずれはその儲けからいくらか支払ってもらう形にしていきたいということでしょうか。と思ったら、別製品を作っているようなので収益はそちらで賄うとのことです。
We’re working on a big, parallel product that we will be announcing soon. This product will be responsible for generating revenue. Stay tuned!
ちなみに、僕は業務でFastAPIというフレームワークを使っているんですが、そのFastAPIのドキュメントにDetaがスポンサーになっていると書かれていたことでDetaの存在を知りました。
参考: Deta にデプロイ – FastAPI
試してみる
Deta Microsを実際に使ってみます。Deta自体のサインアップ方法は省略しますが、普通にメールアドレスとパスワードのみで登録できます。クレジットカード登録の画面すら存在していませんし、MFA認証などももちろんありません。
CLIのインストール
Deta CLIをインストールします。なんと今のところpipで入れられないようですので、公式ドキュメントの通りシェル経由で入れます。
1 |
curl -fsSL https://get.deta.dev/cli.sh | sh |
$HOME/.deta 以下にコマンドなどがインストールされますので、削除したいときは $HOME/.deta 以下をまるごと消せばいいです。
1 2 3 4 5 6 7 8 |
$ deta version deta v1.3.2-beta x86_64-linux # CLI経由でログインしておく $ deta login Please, log in from the web page. Waiting... Failed to open the login page, open the following link in your browser: {自動でブラウザに遷移しない場合はログインページのURLが表示される} Logged in successfully. |
アプリケーションの準備
MicrosがサポートしているランタイムはPythonとNodeのようですが、今回はPythonでFastAPIのアプリを準備します。MicrosはDockerランタイムではないのでDockerfileは不要、Poetryのみでパッケージ管理しました。
1 2 3 4 5 6 7 8 |
$ poetry init This command will guide you through creating your pyproject.toml config. Package name [deta_sample]: ... 省略 Compatible Python versions [^3.10]: ^3.9 $ poetry add fastapi |
Pythonのバージョンが3.7 ~ 3.9までしか対応していないので(2022/02現在)、今のところは3.10以降の機能は使わないようにしましょう。
1 2 3 4 5 6 7 8 9 |
# main.py from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return "hello, world" |
注意点として、アプリのエントリーポイントは main:app 固定のようなのでファイル名は main.py、アプリ本体の変数は app としておきます。uvicornのオプションも指定できるのかもしれませんがドキュメントには書いてなさそうなので未調査。
Microsアプリケーションの作成とデプロイ
Pythonランタイムでは requirements.txt でパッケージインストールをするのでデプロイ前に用意しておきます。注意点としては、ハッシュ値付きだとエラーになったので取り除いておく必要がありました。poetryなら –without-hashes オプションを使えばOKです。プロジェクトの作成はdeta new
コマンドを使います。
1 2 3 4 5 6 7 8 9 10 |
$ poetry export --without-hashes > requirements.txt # プロジェクトのルートディレクトリで実行 $ data new Successfully created a new micro { "name": "deta_sample", "id": "97f0acfd-cca6-4492-9245-e129f48639e9", "project": "c06ol4yn", "runtime": "python3.9", ... 以下プロジェクト情報がいろいろ表示される |
newするだけでデプロイまでされるようなのでダッシュボードを見てみます。
↑の画像だと見切れていますが、画面右上あたりにエントリーポイントのURLが表示されているのでクリックして確認します。”hello, world”と画面に表示されていればOKです。お疲れ様でした。
その他コマンド
いくつかよく使うコマンドを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# details: アプリの詳細情報を表示、URLを確認する時とかに使う $ deta details { "name": "deta_sample", "id": "97f0acfd-cca6-4492-9245-e129f48639e9", ... "endpoint": {エンドポイントURLが表示される} # deploy: デプロイする、コードやパッケージ更新があった時とかに使う $ deta deploy Deploying... Successfully deployed changes Updating dependencies... ... 省略 # logs: デプロイ後のデバッグ用途 $ deta logs [2022-02-23T13:30:26+09:00] [ERROR] AssertionError: We couldn't find your 'app'. Please refer to the Manual. Traceback (most recent call last): File "/opt/python/detalib/debugger.py", line 154, in wrap raise e File "/opt/python/detalib/debugger.py", line 142, in wrap result = func(event, context) File "/var/task/_entry.py", line 14, in handler return handle(event, main) File "/opt/python/detalib/handler.py", line 8, in handle assert hasattr( ... |
Deta Base
NoSQLデータベースのDeta Baseも無料で利用できます。単純なKVSではなくMongoDBのようなオブジェクトデータベースになっているようです。
1 2 |
# Deta SDKのインストール $ poetry add deta |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from deta import Deta # Import Deta # Initialize with a Project Key # project keyはアカウント作成時に発行されます # PythonコードにハードコードしたりGitHubにコミットしないよう注意 deta = Deta("project key") # This how to connect to or create a database. db = deta.Base("test_db") # you can store objects db.put({"name": "alex", "age": 77}, "one") # We will use "one" as a key item = db.get("one") # retrieving item with key "one" # itemは以下のdict(json)で返る # { "name": "alex", "age": 77, "key": "one" # } # 条件検索も可能 (age<100のデータを取得) item = db.fetch({"age?lt": 100}) # delete key db.delete("one") |
サーバレスアプリケーションを作るには必須の機能だと思うのでこちらも活用していきましょう。
Deta Driveについては、公式ドキュメント通りに試そうとしましたが、ランタイム側でエラーが起きて実行できませんでした、。ランタイム側に入るSDKが認識していないように見えます。要調査。
1 2 3 4 5 6 7 8 |
Traceback (most recent call last): File "/opt/python/detalib/debugger.py", line 142, in wrap result = func(event, context) File "/var/task/_entry.py", line 12, in handler import main # noqa File "/var/task/main.py", line 8, in <module> drive = deta.Drive("test_drive") AttributeError: 'Deta' object has no attribute 'Drive' |
リソースについて
Microsのリソース制限などについては細かいので以下のドキュメントを参照してください。
特にRAMについてはデフォルトで128MBと少ないですが、アプリ単位で512MBか1GBに増強できるようです。1GBだと機械学習の推論APIとか動かすのは少し厳しそうですね。せめて3GBあれば用途はもっと広がるかもしれませんが。また、Deta Baseの容量制限等については記載が見当たりません(?。さすがに無限ではないと思いますが、ドキュメントの整備はまだ完全では無さそうです。
ランタイムの途中変更は以下のコマンドで対応できます。
1 2 3 |
$ deta update -r python3.8 Updating runtime... Successfully update micro's runtime |
ちなみにPythonのplatformモジュールで少し調べたところ、ランタイムはAmazon Linux2だったのでDetaプラットフォーム自体はAWS上に構築されているようです。
おわりに
永久に無料というのはいつまで続くのかわかりませんが、今のところアプリも無制限に作れるしアイドル時のシャットダウンも無いので、現状はPythonとNodeしか対応していませんが個人開発用としてはけっこう使えるかと思いました。他の著名なPaaS製品だとHerokuがありますが、それと比較してみてもDetaの方が無料で使えるリソースが大きいのでオススメです。とはいえ対応言語などの機能面ではHerokuに大きく劣ってますし、ダッシュボードのUIもまだまだ荒削りです。シンプルなWeb API等を置いておくのにちょうど良いサービスなのではないでしょうか。冒頭でも書いたようにGoogle検索が日本語設定だとほとんど情報が出てこないので、詳しく調べたい場合は英語設定にして調べることをオススメします。Detaは正式リリースが2021年9月らしく、まだ生まれて間もないようなので今後の動向に期待しましょう。
Deta is free for ever.
参考: Deta vs. Heroku: Finding the better cloud provider – LogRocket Blog