☁️くもをもくもくまなぶ

クラウドコンピューティングサービスの学んだことを中心につらつらと書いています

JAWS-UG初心者支部#54 AWS SAM HandsOn に参加してきた

イベント

教材

利用ツール

AWS SAM(Serverles Application Model)

AWS SAMは、CloudFormationの拡張であり、サーバーレスアプリケーションのリソースを簡潔に定義できます。

後述するASGIアプリケーション(例えばFastAPI)とMangumアダプタを活用して、AWS SAMでサーバーレスアプリケーションを構築・デプロイする方法は以下のとおりです。

  1. プロジェクトのセットアップ:
    新しいプロジェクトフォルダを作成し、必要なファイル(アプリケーションコード、requirements.txt、template.yaml)を含めます。
  2. 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)
  3. 必要なパッケージをrequirements.txtに追加:
    MangumとFastAPI、その他必要なパッケージをrequirements.txtに追加します。
    fastapi
    mangum
    uvicorn
  4. 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/"
  5. パッケージングとデプロイ:
    AWS SAM CLIを使用してアプリケーションをパッケージ化し、AWSにデプロイします。
    sam build
    sam deploy --guided

OpenAPI

Swagger、OpenAPI、FastAPIの説明は次のとおりです。

  1. Swagger:
    Swaggerは、APIの仕様を視覚的に表現し、APIのドキュメントを生成し、APIエンドポイントをテストできるツールセットです。Swaggerは、RESTful APIの開発者にとって便利なツールであり、APIの機能と使い方を簡単に理解できるようになっています。
  2. OpenAPI:
    OpenAPIは、APIの仕様を記述するためのオープンなフォーマットで、以前はSwagger Specificationと呼ばれていました。JSONまたはYAML形式でAPIのエンドポイント、リクエスト、レスポンス、認証方法などを定義します。これにより、APIのクライアントやサーバー側のコード生成が可能になり、APIの開発、テスト、ドキュメント生成が容易になります。
  3. 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の主な特徴と利点は以下のとおりです。

  1. 非同期対応:
    ASGIは、Pythonの非同期機能(asyncioやasync/await)を活用して、同時に多くのリクエストを効率的に処理できます。これにより、高いパフォーマンスとスケーラビリティが実現されます。
  2. WebSocket対応:
    ASGIは、HTTPプロトコルだけでなく、リアルタイム通信が可能なWebSocketプロトコルにも対応しています。これにより、リアルタイムのデータ送受信やチャットアプリケーションの構築が容易になります。
  3. 柔軟性:
    ASGIは、アプリケーションとサーバーの間の中間層として動作し、コンポーネントを独立して開発・交換できるようになっています。これにより、アプリケーションの柔軟性と拡張性が向上します。
  4. 互換性:
    多くの非同期Webフレームワーク(FastAPI、Starlette、Quartなど)がASGIを採用しており、アプリケーションとサーバーを容易に交換できます。また、ASGIアプリケーションは、WSGIアプリケーションと同じサーバー上で実行できる場合があります。

Image in a image block

感想

なかなか過去にOpenAPIを触る機会がなかったので、イベントに参加してみました。

SAMと組み合わせて、Mangumでバックエンドの触りをできてよかったです。

参考