SAM CLI+DynamoDB Local 환경 구축 단계 설명

  • 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 준비
  • 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-adminhttp://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_응용 디렉토리에서 다음 명령을 실행합니다.
    sam init --runtime python3.8
    
    ※ HelloworldFunction을 사용하세요.다른 것도 기본 설정으로 만듭니다.
    2. 각종 설정, 코드 변경
  • app.py
  • DynamoDB 테이블test-table에 등록namedate.
    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에서 표 내용 확인

  • 좋은 웹페이지 즐겨찾기