0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS FastAPI+Lmabda+APIgateway+DynamoDBで簡単にTODOアプリのBackendを構築した話②

Last updated at Posted at 2023-05-28

前回の内容

database.py

import boto3
from botocore.exceptions import ClientError

# Get the service resource.
dynamodb = boto3.resource('dynamodb')

# Instantiate a table resource object
table = dynamodb.Table('todos')

def get_items():
    try:
        response = table.scan()
    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        return response['Items']

def create_item(item):
    try:
        response = table.put_item(Item=item)
    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        return response

main.py

from fastapi import FastAPI
from mangum import Mangum
from starlette.middleware.cors import CORSMiddleware
from .models import Item
from .database import get_items, create_item

app = FastAPI(root_path="/dev")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # or ["*"] for all origins
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/todo/")
async def read_items():
    items = get_items()
    return items

@app.post("/todo/")
async def add_item(item: Item):
    response = create_item(item.dict())
    return response

handler = Mangum(app)

models.py

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    completed: bool = False

deployしてみる

  • AWSの設定は、割愛
- デプロイコマンド
serverless deploy

- リソースの削除
serverless remove

結果の確認

  • APIgatewayのエンドポイント/dev/docs にアクセスすると下記のようにSwaggerが表示されればOK
    image.png

詰まった点

  • DynamoDBへの書き込み権限(デプロイ後に手動で付け足した。。。)
  • 困ったらCloudWatchでログを確認(ローカルで動作確認していないため、、)、
  • おそらく、環境構築が一番つらい。。
  • Dockerを起動しておく必要がある
  • CORSの設定 serverless.ymlとFastAPI側にCORSの設定を追加する必要がある
  • FastAPIのCORSの設定

最後に

  • Pythonは、簡潔にかけて、すごい楽しい。
  • 最近は、業務でソースを書いていないから、書けて満足した
  • AWSは、もっと学習して活用していきたいと改めて思った
  • 業務では、サーバレスアーキテクチャをあまり、取り入れてはいないが、ネットワークを構築しないで良いのは非常に楽
  • Docker等を用いて、ローカルでもテストできるような環境をつくるべきだったと、ちょっと後悔した。。
  • serverless frameworkをfrontendでも作成したが、frontendとbackendでそれぞれ別のバージョンで動かす必要がある(バグなのか、環境のせいなのか不明)

何かあれば、Twitter @Kazu_e_aws にDMいただけますと、幸いです。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?