🐃

【Hello World⑰】AWS Lambda @ python(FastAPI)

2024/04/19に公開

AWSのLambda関数をPython(FastAPI)で作ります

Windows11のDocker環境上で
Python言語のFastAPIを使って、AWSのLambda関数(API)を作ります。

環境

Windows 11 Pro 23H2
WLS 2.1.5.0(Ubuntu 22.04.1 LTS)
Docker Desktop 4.29.0
Visual Studio Code

①フォルダ・ファイルを作成

以下の構成でフォルダとファイルを作ります。

フォルダ構成
lambda
 ├─app
 │   └─app.py
 └─Dockerfile

ファイルには以下の内容を記載します。

PowerShell
mkdir lambda        ;`
cd lambda           ;`
mkdir app           ;`
New-Item Dockerfile ;`
New-Item app/app.py ;`
code Dockerfile     ;`
code app/app.py
Dockerfile
FROM public.ecr.aws/lambda/python:3.10
COPY app/app.py ${LAMBDA_TASK_ROOT}
RUN  pip install fastapi==0.109.2 mangum==0.17.0
CMD  ["app.handler"]
app.py
from fastapi  import FastAPI
from mangum   import Mangum
app = FastAPI()
@app.get('/')
async def root():
    return {"message": "Hello World by FastAPI running in Lambda on Docker"}
handler = Mangum(app)

②コンテナを起動

以下のコマンドを実行し、Dockerのイメージを作成してコンテナを起動します。

PowerShell
docker build -t lambda . ;`
docker run --rm --name lambda -p 9000:8080 -d lambda

③Hello Worldが表示されることを確認

以下のコマンドでLambdaへリクエストを送り、Hello Worldの応答があることを確認します。

PowerShell(実行するコマンド)
Invoke-RestMethod `
-Method Post `
-Uri "http://localhost:9000/2015-03-31/functions/function/invocations" `
-Body '{"resource": "/", "path": "/", "httpMethod": "GET", "requestContext": {}}'
PowerShell(応答の内容)
statusCode        : 200
headers           : @{content-length=64; content-type=application/json}
multiValueHeaders : 
body              : {"message":"Hello World by FastAPI running in Lambda on Docker"}
isBase64Encoded   : False

Discussion