Google Colab 使って簡易的にJSON返すAPIを公開してみる
テストとかで一時的に使うには楽して公開できそう
ngrok を使って公開してます
Flask, FastAPI を使ってやってみる(両方とも大枠のやることは同じ)
ngrok よりアクセストークン、ドメインを取得
Google Colab (Flask を使って公開)
- ngrok のアクセストークン、ドメインをシークレットに追加する
アクセストークン :NGROK_AUTH_TOKEN
ドメイン :NGROK_DOMAIN
- ノートブックに以下のコードを記入
ノートブック
# ================================================================= # 1. 必要なライブラリのインストールとngrok認証 # ================================================================= !pip install pyngrok flask flask-cors -q from flask import Flask, jsonify from pyngrok import ngrok, conf from flask_cors import CORS import os import time from google.colab import userdata # シークレットから認証トークンとドメインを取得 try: NGROK_AUTH_TOKEN = userdata.get("NGROK_AUTH_TOKEN") NGROK_DOMAIN = userdata.get("NGROK_DOMAIN") if not NGROK_AUTH_TOKEN: raise ValueError("NGROK_AUTH_TOKEN がシークレットにない") if not NGROK_DOMAIN: print("NGROK_DOMAIN がシークレットにない") # 取得したトークンでngrokに認証 !ngrok authtoken $NGROK_AUTH_TOKEN except Exception as e: print(f"シークレットの取得またはngrok認証に失敗しました: {e}") # Flaskサーバーが使用するポート番号 FLASK_PORT = 5000 # ================================================================= # 2. Flaskアプリケーションの定義 # ================================================================= app = Flask(__name__) # CORS設定: 開発中は全てのオリジンからのアクセスを許可 CORS(app) # JSONを返すAPIエンドポイント @app.route("/api/sample", methods=["GET"]) def get_sample(): data = { "status": "success", "message": "Hello from Google Colab Flask API via ngrok!", "version": 1.5, "timestamp": time.time() } return jsonify(data) # ================================================================= # 3. ngrokトンネルの開始とURLの取得 # ================================================================= # 既存のngrokプロセスを終了(クリーンアップ) try: ngrok.kill() except Exception: pass # トンネル接続の確立 try: # ngrok設定に認証トークン、ドメインを適用 conf.get_default().auth_token = NGROK_AUTH_TOKEN public_tunnel = ngrok.connect(FLASK_PORT, domain=NGROK_DOMAIN) public_url = public_tunnel.public_url print("="*60) print("API公開に成功しました") print(f" * Public URL (ngrok): {public_url}") print(f" * Access the API endpoint: {public_url}/api/sample") print("="*60) except Exception as e: print("ngrokトンネルの開始中にエラーが発生しました") print(f"エラー内容: {e}") # ngrok認証が失敗している可能性があるため、処理を中断 public_url = None # ================================================================= # 4. Flaskアプリケーションの実行 # ================================================================= if __name__ == '__main__': if public_url: print(f"Flaskサーバーをポート {FLASK_PORT} で実行中") # Flaskサーバーを起動。これは前のprint文が出た後に動作し続けます。 app.run(port=FLASK_PORT, debug=False, use_reloader=False) else: print("Flaskサーバーは起動されませんでした。(ngrokエラーのため)") - ブラウザなどで以下のURLにアクセス(NGROK_DOMAINは各自の値)
https://NGROK_DOMAIN/api/sample - JSONが取得できればOK!
Google Colab (FastAPI を使って公開)
- ngrok のアクセストークン、ドメインをシークレットに追加する
アクセストークン :NGROK_AUTH_TOKEN
ドメイン :NGROK_DOMAIN
- ノートブックにコードを記入
ノートブック
# ================================================================= # 1. 必要なライブラリのインストールとngrok認証 # ================================================================= !pip install -q fastapi nest-asyncio uvicorn pyngrok from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from pyngrok import ngrok, conf import uvicorn import nest_asyncio import asyncio import time from google.colab import userdata # シークレットから認証トークンとドメインを取得 try: NGROK_AUTH_TOKEN = userdata.get("NGROK_AUTH_TOKEN") NGROK_DOMAIN = userdata.get("NGROK_DOMAIN") if not NGROK_AUTH_TOKEN: raise ValueError("NGROK_AUTH_TOKEN がシークレットにない") if not NGROK_DOMAIN: print("NGROK_DOMAIN がシークレットにない") # 取得したトークンでngrokに認証 !ngrok authtoken $NGROK_AUTH_TOKEN except Exception as e: print(f"シークレットの取得またはngrok認証に失敗しました: {e}") # FastAPIサーバーが使用するポート番号 FASTAPI_PORT = 8000 # ================================================================= # 2. FastAPIアプリケーションの定義 # ================================================================= app = FastAPI() # CORS設定: 開発中は全てのオリジンからのアクセスを許可 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # JSONを返すAPIエンドポイント @app.get("/api/sample") async def get_sample(): data = { "status": "success", "message": "Hello from Google Colab Flask API via ngrok!", "version": 1.5, "timestamp": time.time() } return data # ================================================================= # 3. ngrokトンネルの開始とURLの取得 # ================================================================= # 既存のngrokプロセスを終了(クリーンアップ) try: ngrok.kill() except Exception: pass # トンネル接続の確立 try: # ngrok設定に認証トークンを適用 conf.get_default().auth_token = NGROK_AUTH_TOKEN public_tunnel = ngrok.connect(FASTAPI_PORT, domain=NGROK_DOMAIN) public_url = public_tunnel.public_url print("="*60) print("API公開に成功しました") print(f" * Public URL (ngrok): {public_url}") print(f" * Access the API endpoint: {public_url}/api/sample") print("="*60) except Exception as e: print("ngrokトンネルの開始中にエラーが発生しました") print(f"エラー内容: {e}") # ngrok認証が失敗している可能性があるため、処理を中断 public_url = None # ================================================================= # 4. FastAPIアプリケーションの実行 # ================================================================= # Colabで非同期処理を正しく実行するための設定 nest_asyncio.apply() # uvicornサーバーの設定 config = uvicorn.Config(app, port=FASTAPI_PORT, host="0.0.0.0") server = uvicorn.Server(config=config) # サーバーを非同期で起動(**このセルを実行するとサーバーが実行状態になります**) await server.serve() - ブラウザなどで以下のURLにアクセス(NGROK_DOMAINは各自の値)
https://NGROK_DOMAIN/api/sample - JSONが取得できればOK!

