Serverless Offline이 OOM에서 떨어지기 때문에dynamo-local을 Docker로 사용합니다

serverlessframe 플러그인을 사용하여 로컬 환경에서 실행합니다.
서버less-offline 플러그인을 사용하면 메모리가 OOM에 다 떨어져서 아쉬운 특징이다.Giithub의 issue에서도
https://github.com/dherault/serverless-offline/issues/539
기본적으로 서버리스는 무상태 처리이기 때문에 떨어져도 문제가 되지 않지만 한 가지 중요한 것이 있습니다.
영구 레이어에 쓰기, 이번에는 DynamoDB에 쓰기.
서버less 프레임워크의 플러그인으로 서버less-dynamodb-local이 있습니다. 이것을 사용하면 로컬에서dynamoDB를 시작할 수 있습니다.
https://www.npmjs.com/package/serverless-dynamodb-local
이른바 서버less 프레임워크의 플러그인 동작이란 서버less 프레임워크의 하위 프로세스로 시작하는 것이다.즉 서버less 프레임워크가 상기 OOM에서 떨어지면 하위 프로세스도 함께 끝난다는 것이다.
이 때문에 다이나모DB에 테스트 데이터를 쓰는 과정에서 같은 처리가 여러 차례 발생했다.
서버less 프레임워크가 멈추더라도 데이터를 저장하는 방법은 2가지가 있다.dynamodb-local의 데이터를 파일에 저장하거나, dynamodb-loca를 다른 프로그램으로 시작합니다.
파일에 데이터를 저장하는 것은 직관적인 오류인 것 같아서 다른 프로그램으로 시작하는 방법을 논의했다.
시작 등에 시간을 들이고 싶지 않기 때문에, docker를 사용하여dynamodb-local을 시작하십시오.
서버less-dynamodb-local에서amazon에서 제공하는jar 파일을 실행합니다.
dynamodb-local이docker hub에 컨테이너를 등록해 주셔서 감사합니다.
https://hub.docker.com/r/amazon/dynamodb-local
설명을 보면 옵션은 특별히 필요하지 않습니다.port의 지정이 움직일 것 같습니다.
docker run -p 8000:8000 amazon/dynamodb-local
서버less-dynamodb-local 옵션에 noStart: true 시작serverless offline을 넣습니다.
  dynamodb:
    start:
      port: 8000
+      noStart: true
      inMemory: true
      migrate: true
      seed: true
정상적으로 시작된 것 같지만 서버less offline과dynamodb는 연결되지 않은 것 같습니다.
그래서 내가 알아봤는데 아래의 issue가 나왔다.
https://github.com/99x/serverless-dynamodb-local/issues/57
기본 docker는 옵션이 부족해서 시작할 수 없습니다.따라서 issue의 물건을 그대로 이용하여docker-compose로dynamodb-local을 시작할 때 의도와 같은 행동이 된다.
 dynamodb:
    image: 'amazon/dynamodb-local'
    ports:
      - '8000:8000'
    command: ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-inMemory"]
dynamodb-local을 자세히 보면 기본sharedDb 옵션이 진짜입니다.
https://github.com/99x/serverless-dynamodb-local/blob/v1/index.js#L248
index.js
            const config = this.service.custom && this.service.custom.dynamodb || {};
            const options = _.merge({
                    sharedDb: this.options.sharedDb || true,
                    install_path: this.options.localPath
                },
                config && config.start,
                this.options
            );
sharedDb 옵션이 필요한 이유는 공식 문서에 기재되어 있으니 참고하십시오.
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.UsageNotes.html
https://qiita.com/tamo_breaker/items/f86c9b5fc6991813e3ca

좋은 웹페이지 즐겨찾기