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

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

続く。。。

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?