0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaとローカルで非同期処理をシームレスに実行するユーティリティを作った話

Posted at

はじめに

AWS Lambdaの非同期実行とローカル開発の両立って意外と面倒ですよね。
本記事では、asyncioによるローカル非同期処理と、Lambdaの非同期実行を同じAPIで扱えるユーティリティを作成し、LitestarでAPI化、CDKでデプロイまで自動化した構成を紹介します。

目的・背景

  • ローカルではasyncioで高速に非同期処理を試したい
  • 本番はAWS Lambdaでスケールしたい
  • API設計はモダンなPythonフレームワーク(Litestar)で
  • デプロイ・管理はCDKで自動化したい

アーキテクチャ概要

+-------------+       +----------------+       +--------------------+
| API Gateway |  -->  | API Lambda     |  -->  | Worker Lambda      |
+-------------+       +----------------+       +--------------------+
         ↑                   |                        |
         |   (Litestar)      |   (async invoke)       | (async job)
         +-------------------+------------------------+
  • API Gateway経由でリクエストを受け、API Lambda(Litestarアプリ)で処理
  • 非同期ジョブはWorker Lambdaへinvoke
  • ローカルではasyncioで同等の非同期実行

ソースコード

ローカル&Lambda両対応の非同期処理

  • async_lambda_invokerデコレータで、ローカル時はasyncio、Lambda時はboto3でinvoke
  • 共通APIでどちらでも非同期ジョブをキックできる
from main import async_lambda_invoker

@async_lambda_invoker
async def process_job(data):
    # 非同期ジョブ本体

LitestarによるAPI実装

  • / でサービスのステータス確認
  • /process で非同期ジョブをPOST
  • VS Code REST Client用の api_test.http で簡単にAPIテスト

AWS CDKによるデプロイ自動化

  • Lambda関数、IAMロール、API Gatewayなど全てCDKで定義
  • manage.sh./manage.sh deploy するだけで一発デプロイ
  • .envでAWSプロファイルやリージョンを安全に管理
./manage.sh deploy

プロジェクト構成と管理

  • main.py: 非同期処理ロジックとAPI
  • infra/cdk/: CDKスタック定義
  • src/lambda/: Lambdaハンドラー
  • manage.sh: 統合管理スクリプト
  • .env & .env.sample: 設定ファイル
  • requirements.txt, requirements-dev.txt: 依存関係管理

まとめ

  • ローカルとLambdaの両方で同じAPIで非同期処理ができる
  • LitestarでモダンなAPI開発
  • CDKと管理スクリプトでデプロイも超簡単
  • AWSプロファイルも安全に切り替え可能

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?