- Docker Desktop (for local dynamoDB emulation)
Depending on your preferred package manager, follow the instructions below to deploy your project.
Requirements: NodeJS
lts/fermium (v.14.15.0). If you're using nvm, runnvm useto ensure you're using the same Node version in local and in your lambda's runtime.
- Run
npm ito install the project dependencies - Run
npx sls deployto deploy this stack to AWS
- Run
yarnto install the project dependencies - Run
yarn sls deployto deploy this stack to AWS
In order to test the hello function locally, run the following command:
npx sls invoke local -f hello --path src/functions/hello/mock.jsonif you're using NPMyarn sls invoke local -f hello --path src/functions/hello/mock.jsonif you're using Yarn
Check the sls invoke local command documentation for more information.
Alternatively, host the service locally with serverless-offline
npm run serve
This command runs sls offline with local parameters. See package.json for more info.
DynamoDB is used as the backing store. Run the npm run start-db command to locally run a DynamoDB instance. docker-compose is used to run the db container from src/utils/local-db
Copy and replace your url - found in Serverless deploy command output - and name parameter in the following curl command in your terminal or in Postman to test your newly deployed application.
curl --location --request POST 'https://myApiEndpoint/dev/hello' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Frederic"
}'
The project code base is mainly located within the src folder. This folder is divided in:
functions- containing code base and configuration for your lambda functionslibs- containing shared code base between your lambdas
.
├── src
│ ├── functions # Lambda configuration and source code folder
│ │ ├── hello
│ │ │ ├── handler.ts # `Hello` lambda source code
│ │ │ ├── index.ts # `Hello` lambda Serverless configuration
│ │ │ ├── mock.json # `Hello` lambda input parameter, if any, for local invocation
│ │ │ └── schema.ts # `Hello` lambda input event JSON-Schema
│ │ │
│ │ └── index.ts # Import/export of all lambda configurations
│ │
│ └── libs # Lambda shared code
│ └── apiGateway.ts # API Gateway specific helpers
│ └── handlerResolver.ts # Sharable library for resolving lambda handlers
│ └── lambda.ts # Lambda middleware
│
├── package.json
├── serverless.ts # Serverless service file
├── tsconfig.json # Typescript compiler configuration
├── tsconfig.paths.json # Typescript paths
└── webpack.config.js # Webpack configuration
- json-schema-to-ts - uses JSON-Schema definitions used by API Gateway for HTTP request validation to statically generate TypeScript types in your lambda's handler code base
- middy - middleware engine for Node.Js lambda. This template uses http-json-body-parser to convert API Gateway
event.bodyproperty, originally passed as a stringified JSON, to its corresponding parsed object - @serverless/typescript - provides up-to-date TypeScript definitions for your
serverless.tsservice file
Any tsconfig.json can be used, but if you do, set the environment variable TS_NODE_CONFIG for building the application, eg TS_NODE_CONFIG=./tsconfig.app.json npx serverless webpack