Git Product home page Git Product logo

hvt-write-api's Introduction

hvt-write-api

Serverless Node lambdas (PatchLambdaFunction and BulkUpdateFunction) for patching DynamoDB data.

Requirements

Run Locally

  1. Follow build steps in hvt-data to prepare local dataset
  2. npm i
  3. cp .env.development .env
  4. npm run build:dev
  5. npm run start:dev
  6. Send an HTTP request to the lambda's URI (curl --request PUT http://localhost:3001/<DYNAMODB_TABLE_NAME>/<ITEM_ID>?keyName=<ITEM_KEYNAME> \--header 'Content-Type: application/json' \--data-raw '{"test":"test"}')
    • E.G. ITEM_ID=c6af9ab6-7b62-11ed-9ae1-93e8dgadbdef, ITEM_KEYNAME=id

Debug Locally (VS Code only)

  1. Run lambdas in debug mode: npm run start:dev -- -d 5858
  2. Add a breakpoint to the lambda being tested (src/handler/patfch.ts)
  3. Run the debug config from VS Code that corresponds to lambda being tested (GetLambdaFunction)
  4. Send an HTTP request to the lambda's URI (curl --request PUT http://localhost:3001/<DYNAMODB_TABLE_NAME>/<ITEM_ID>?keyName=<ITEM_KEYNAME> \--header 'Content-Type: application/json' \--data-raw '{"test":"test"}')
    • E.G. ITEM_ID=c6af9ab6-7b62-11ed-9ae1-93e8dgadbdef, ITEM_KEYNAME=id

Tests

  • The Jest framework is used to run tests and collect code coverage
  • To run the tests, run the following command within the root directory of the project: npm test
  • Coverage results will be displayed on terminal and stored in the coverage directory
    • The coverage requirements can be set in jest.config.js

Build for Production

  1. npm i
  2. add environment variables to .env
  3. npm run build:prod
  4. to build with commit id
  5. npm run build:prod -- --emv.commit=<commit-hash>
  6. Zip file can be found in ./dist/

Logging

By using a utility wrapper (src/util/logger) surrounding console.log, the awsRequestId and a "correlation ID" is output with every debug/info/warn/error message.

For this pattern to work, every service/lambda must forward their correlation ID to subsequent services via a header e.g. X-Correlation-Id.

In practice, the first lambda invoked by an initial request will not have received the X-Correlation-Id header, so its correlationId gets defaulted to its lambdaRequestId. This correlationId should then be used when invoking subsequent lambdas via the X-Correlation-Id header. Every lambda called subsequently will then check for that X-Correlation-Id header and inject it into their logs.

This shows an example of what the log looks like from the first invoked lambda:

2020-09-10T17:03:04.891Z	5ff37fce-5ace-114c-9120-a1406cc8d11d	INFO	{"apiRequestId":"c6af9ac6-7b61-11e6-9a41-93e8deadbeef","correlationId":"5ff37fce-5ace-114c-9120-a1406cc8d11d","message":"Here's a gnarly info message from lambda 1 - notice how my correlationId has been set to my lambdaRequestId?"}

This shows an example of what the logs look like from the second invoked lambda (called via the first lambda):

2020-09-10T17:05:31.627Z	32ff455b-057d-1dd7-98b8-7034bf182dc8	INFO	{"apiRequestId":"d9222e0a-6bd9-49e0-84dd-ffe0680bd141","correlationId":"5ff37fce-5ace-114c-9120-a1406cc8d11d","message":"Here's a gnarly info message from lambda 2 - notice how my correlationId is the same as the lambda 1"}

hvt-write-api's People

Contributors

bdrozd-kainos avatar szymonkaczorowski-kainos avatar sdh100shaun avatar annadodson avatar faggc avatar ibrahimjassat avatar

Watchers

 avatar James Cloos avatar Aaron Long avatar Caoimhe Boyle avatar Anna Rompa avatar Chris Iliev avatar Eugene Nosenko avatar  avatar

Forkers

uk-gov-mirror

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.