4
3

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.

SAM CLI + DynamoDB Local 環境構築手順メモ

Posted at
  • SAM CLIとDynamo DB Localを使用してローカル環境でサーバーレスアプリを構築する手順についてメモする。

前提条件

  • Docker、docker-composeインストール済みであること。

  • dynamodb-admin(DynamoDB GUIツール)インストール済みであること。インストール手順

  • SAM CLIインストール済みであること。

  • ディレクトリ構成

    local_app	-	dynamodb	--	docker-compose.yml
    			|				|_	docker	-	dynamodb
    			|_	sam-app				
    

構築手順

DynamoDB Local準備

  1. docker-compose.yml準備

    version: '3.8'
    services:
      dynamodb-local:
        command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
        image: "amazon/dynamodb-local:latest"
        container_name: dynamodb-local
        ports:
          - "8000:8000"
        volumes:
          - "./docker/dynamodb:/home/dynamodblocal/data"
        working_dir: /home/dynamodblocal
        networks:
          - lambda-local
    networks:
      lambda-local:
        external: true
    

2.Docker network 作成+コンテナ起動

docker network create lambda-local
docker-compose up

※localhost:8000でコンテナが起動する。

3.dynamodb-admin(http://localhost:8001)にアクセス

4.テスト用テーブルtest-table作成
※テーブル設定は下記の通り。

{
  "AttributeDefinitions": [
    {
      "AttributeName": "name",
      "AttributeType": "S"
    },
    {
      "AttributeName": "date",
      "AttributeType": "S"
    }
  ],
  "TableName": "test-table",
  "KeySchema": [
    {
      "AttributeName": "name",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "date",
      "KeyType": "RANGE"
    }
  ],
  "TableStatus": "ACTIVE",
  "CreationDateTime": "2022-01-16T05:43:16.767Z",
  "ProvisionedThroughput": {
    "LastIncreaseDateTime": "1970-01-01T00:00:00.000Z",
    "LastDecreaseDateTime": "1970-01-01T00:00:00.000Z",
    "NumberOfDecreasesToday": 0,
    "ReadCapacityUnits": 3,
    "WriteCapacityUnits": 3
  },
  "TableSizeBytes": 116,
  "ItemCount": 3,
  "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/test-table"
}

SAMプロジェクト準備

1.SAMプロジェクト作成

local_appディレクトリ内で次のコマンドを実行。

sam init --runtime python3.8

※HelloworldFunction利用。その他もデフォルト設定で作成。

2.各種設定、コード変更

  • app.py

    DynamoDBテーブルtest-tablenamedateを登録する。

import json
import boto3
import string
import random
from datetime import datetime


def lambda_handler(event, context):
    # DynamoDB接続設定
    session = boto3.session.Session()
    region = session.region_name
    dynamodb = boto3.resource('dynamodb', region_name = region, endpoint_url = "http://dynamodb-local:8000")
    # テーブルを取得
    table = dynamodb.Table('test-table')
    # name(文字数5の英数字文字列)
    dat = string.digits + string.ascii_lowercase + string.ascii_uppercase
    name = ''.join([random.choice(dat) for i in range(5)])
    # 日時
    date = datetime.utcnow().isoformat()
    # 登録アイテム
    item = {'name': name, 'date': date}
    # テーブル登録
    table.put_item(
        Item=item
    )
    return {
        "statusCode": 200,
        "body": json.dumps(item),
    }

  • requirements.txt

    boto3追加

    requests
    boto3
    
  • template.yml

    ※Pathを/item、Methodをpostに変更

    ~省略~
          Events:
            HelloWorld:
              Type: Api 
              Properties:
                Path: /item
                Method: post
    

3.API起動

sam local start-api --docker-network lambda-local

動作確認

  • APIリクエスト

    POST /item HTTP/1.1
    Host: localhost:3000
    Content-Type: application/json
    Content-Length: 2
    
    {}
    
  • APIレスポンス

    {
        "name": "d4jlG",
        "date": "2022-01-16T06:00:45.853215"
    }
    
  • dynamodb-adminからテーブル内容確認
    dynamo_api.png

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?