Thanks to visit codestin.com
Credit goes to github.com

Skip to content

hiroyannnn/py-sse

Repository files navigation

py-sse

PythonでServer-Sent Events (SSE)を実装するプロジェクト

AWS Lambda Web AdapterとLambda Function URLs (Response Streaming)を使用して、AWS Lambda上でSSEを実現します。

デモ

デプロイ後、test_client.htmlをブラウザで開き、Lambda Function URLを入力して「接続」をクリックすると、リアルタイムでイベントを受信できます。

機能

  • FastAPIによるREST API
  • Server-Sent Eventsによるリアルタイム通信
  • AWS Lambda Web Adapterを使用したLambdaでのSSE実現
  • Lambda Function URLs + Response Streamingでのストリーミング対応
  • ローカル開発環境

セットアップ

1. 依存関係のインストール

# Python依存関係(ローカル開発用)
pip install -r requirements.txt

2. ローカル実行

python run_local.py

ブラウザで以下のURLにアクセス:

3. テスト実行

pytest

AWS Lambdaへのデプロイ

前提条件

  • Dockerがインストールされていること
  • AWS CLIが設定されていること
  • Serverless Frameworkがインストールされていること

デプロイ手順

# 1. Node.js依存関係をインストール
npm install

# 2. デプロイ(初回はDockerイメージのビルドとECRへのプッシュのため時間がかかります)
npm run deploy

# デプロイ後、Function URLが出力されます
# 例: https://xxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/

# 3. SSEエンドポイントにアクセス
# https://xxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/events

# 4. スタックを削除する場合
npm run remove

アーキテクチャ

このプロジェクトでは、以下の技術を組み合わせてSSEを実現しています:

  1. Lambda Web Adapter: 通常のWebアプリケーションをLambdaで実行可能にするExtension
  2. Response Streaming: AWS_LWA_INVOKE_MODE=RESPONSE_STREAMでストリーミングレスポンスを有効化
  3. Lambda Function URLs: API Gatewayをバイパスして直接Lambdaにアクセス
  4. FastAPI + SSE-Starlette: PythonでSSEを簡単に実装

エンドポイント

  • GET / - ヘルスチェック
  • GET /events - SSEイベントストリーム

SSEイベントの形式

{
  "time": "2024-01-01T12:00:00.000000",
  "message": "Event number 1",
  "count": 1
}

トラブルシューティング

デプロイが失敗する場合

  1. Dockerがインストールされているか確認

    docker --version
  2. AWS認証情報が設定されているか確認

    aws sts get-caller-identity
  3. ECRへのプッシュ権限があるか確認

Lambdaログの確認

# ログをリアルタイムで確認
npm run logs

# 最近10分間のログを確認
aws logs tail /aws/lambda/py-sse-dev-api --since 10m

注意事項

  • Lambda Function URLsはAPI Gatewayとは異なり、SSEをサポートします
  • Lambdaのタイムアウト(15分)に注意してください
  • 初回デプロイ時はDockerイメージのビルドとECRへのプッシュに時間がかかります

参考資料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published