AWS FastAPI+Lmabda+APIgateway+DynamoDBで簡単にTODOアプリのBackendを構築した話
自己紹介
- 22卒でエンジニアになり、社会人1年目を終わり、来月からの住民税に怯えているヒト
- 業務では、VB.NET、Terraformを少し触った
- 趣味は、バレーボールと個人開発(自己満足の低レベル)
- 資格(AWS SAA SOA DVA CLF、高校教員免許)
- 好きな言語・興味ある言語:Python、Typescript、Terraform
目的
- AWS Summit2023でpaypayがserverlessで運用していることを知り、serverlessに興味を持った
- serverless framewarkを使って、なるはやで、TODOアプリのbackendを作成する
注意
- 本記事の内容は、ChatGPT(GPT-4)を全力で使って、作成したものです
環境
Windows10
VSCode
AWS
Docker(デプロイ時にDocker Desktopを起動しておく必要がある)
serverless frameworkバージョン
serverless -v
Running "serverless" from node_modules
Framework Core: 3.31.0 (local) 3.31.0 (global)
Plugin: 6.2.3
SDK: 4.3.2
フォルダ構成
root/
├ src/
│ ├ init.py 空っぽ
│ ├ database.py boto3でDynamoDBとの接続を行う
│ ├ main.py FastAPIの機能の中身
│ └ models.py Modelの定義
├ .gitignore
├ requirements.txt
└ serverless.yml
requirements.txt
- FastAPIを使う理由
- 興味があった(←これが一番の理由)
- APIgatewayの設定が手間
- LambdaでFastAPIを使うために
- Mangumというのを使う
- 詳しくは、ChatGPTに聞いてください
fastapi==0.68.1
mangum==0.12.1
pydantic==1.8.2
boto3==1.18.45
uvicorn==0.15
serverless.yml
- serverless frameworkは、serverless.ymlの内容に沿って、AWSのリソースを作成する
service: todo-app
provider:
name: aws
runtime: python3.8
region: ap-northeast-1
stage: ${opt:stage, 'dev'}
environment:
TABLE_NAME: todos
functions:
app:
handler: src.main.handler
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy+}
method: ANY
cors: true
resources:
Resources:
TodosDynamoDbTable:
Type: "AWS::DynamoDB::Table"
Properties:
AttributeDefinitions:
- AttributeName: name
AttributeType: S
KeySchema:
- AttributeName: name
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.TABLE_NAME}
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
続く。。。