イベント
教材
利用ツール
AWS SAM(Serverles Application Model)
AWS SAMは、CloudFormationの拡張であり、サーバーレスアプリケーションのリソースを簡潔に定義できます。
後述するASGIアプリケーション(例えばFastAPI)とMangumアダプタを活用して、AWS SAMでサーバーレスアプリケーションを構築・デプロイする方法は以下のとおりです。
- プロジェクトのセットアップ:
新しいプロジェクトフォルダを作成し、必要なファイル(アプリケーションコード、requirements.txt、template.yaml)を含めます。 - FastAPIアプリケーションとMangumアダプタの実装:
FastAPIを使用してAPIを構築し、MangumアダプタをインポートしてLambdaとの間のインターフェイスを作成します。
例:from fastapi import FastAPI from mangum import Mangum app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} handler = Mangum(app)
- 必要なパッケージをrequirements.txtに追加:
MangumとFastAPI、その他必要なパッケージをrequirements.txtに追加します。fastapi mangum uvicorn
- AWS SAMテンプレートの作成:
template.yamlファイルを作成し、AWS Lambda関数、API Gateway、IAMロールなどのリソースを定義します。例:AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Description: An AWS SAM template for a FastAPI application with Mangum. Resources: LambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: app.handler Runtime: python3.9 Events: ApiEvent: Type: Api Properties: Path: /{proxy+} Method: ANY Outputs: ApiGatewayURL: Description: "API Gateway URL" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
- パッケージングとデプロイ:
AWS SAM CLIを使用してアプリケーションをパッケージ化し、AWSにデプロイします。sam build sam deploy --guided
OpenAPI
Swagger、OpenAPI、FastAPIの説明は次のとおりです。
- Swagger:
Swaggerは、APIの仕様を視覚的に表現し、APIのドキュメントを生成し、APIエンドポイントをテストできるツールセットです。Swaggerは、RESTful APIの開発者にとって便利なツールであり、APIの機能と使い方を簡単に理解できるようになっています。 - OpenAPI:
OpenAPIは、APIの仕様を記述するためのオープンなフォーマットで、以前はSwagger Specificationと呼ばれていました。JSONまたはYAML形式でAPIのエンドポイント、リクエスト、レスポンス、認証方法などを定義します。これにより、APIのクライアントやサーバー側のコード生成が可能になり、APIの開発、テスト、ドキュメント生成が容易になります。 - FastAPI:
FastAPIは、PythonでAPIを開発するための高速なWebフレームワークです。このフレームワークは、APIの開発プロセスを効率化し、エラーを減らし、パフォーマンスを向上させることを目的としています。FastAPIは、Pythonの型ヒントを利用してAPIの仕様を自動的に生成し、OpenAPIおよびJSON Schemaとして出力できます。また、FastAPIはSwagger UIとReDocを組み込んでおり、ドキュメント生成とAPIのテストが簡単に行えます。
Mangum
Mangum(マンガム)は、PythonのASGI(Asynchronous Server Gateway Interface)アプリケーションをAWS Lambdaや他のサーバーレスプラットフォームで実行するためのアダプタです。
ASGIは、PythonのWebアプリケーションとWebサーバー間の非同期通信を可能にするインターフェイスです。FastAPIやStarletteなどの非同期WebフレームワークはASGIを利用しています。
ASGIの主な特徴と利点は以下のとおりです。
- 非同期対応:
ASGIは、Pythonの非同期機能(asyncioやasync/await)を活用して、同時に多くのリクエストを効率的に処理できます。これにより、高いパフォーマンスとスケーラビリティが実現されます。 - WebSocket対応:
ASGIは、HTTPプロトコルだけでなく、リアルタイム通信が可能なWebSocketプロトコルにも対応しています。これにより、リアルタイムのデータ送受信やチャットアプリケーションの構築が容易になります。 - 柔軟性:
ASGIは、アプリケーションとサーバーの間の中間層として動作し、コンポーネントを独立して開発・交換できるようになっています。これにより、アプリケーションの柔軟性と拡張性が向上します。 - 互換性:
多くの非同期Webフレームワーク(FastAPI、Starlette、Quartなど)がASGIを採用しており、アプリケーションとサーバーを容易に交換できます。また、ASGIアプリケーションは、WSGIアプリケーションと同じサーバー上で実行できる場合があります。
感想
なかなか過去にOpenAPIを触る機会がなかったので、イベントに参加してみました。
SAMと組み合わせて、Mangumでバックエンドの触りをできてよかったです。