# Serverless ```bash Is a function responding to an API endpoint. A request comes in, server wakes up, runs for a few ms, and go to sleep. The platform takes care of optimization, configuration, and everything else ``` ## Key features Easy to add new services. Quickly gain familiarity with the project. Don't deal with servers, focus on application code ## Components Functions Events: http, cron Resources: dynamoDB, schedule, S3 changes Service: It's like a project. It's where you define your AWS Lambda Functions, the events that trigger them and any AWS infrastructure resources they require, all in a file called serverless.yml Use templates `serverless create --template aws-nodejs --path servicename` `npm init && npm -i` ## Layers A Lambda layer is a .zip file archive that can contain additional code or data. A layer can contain libraries, a custom runtime, data, or configuration files. Layers promote code sharing and separation of responsibilities so that you can iterate faster on writing business logic. Layers are extracted on the /opt directory of the function environment ## DynamoDB Item: row equivalent in SQL Attribute: column Table: collection of items `docker run -d -p 8001:8001 --name=dynamoDB-local amazon/dynamodb-local` `aws dynamodb list-tables --endpoint=http://localhost:8000` ```bash // create a simple template schema aws dynamodb create-table --generate-cli-skeleton > dynamo_table_def.json // create a table with a json file aws dynamodb create-table --cli-input-json \ file://dynamo_table_def.json \ --endpoint-url http://localhost:port // insert item aws dynamodb put-item \ --table-name Posts \ --item '{ "id": {"S": "1"}, "Title": {"S": "my first title"} }' \ --return-consumed-capacity TOTAL \ --endpoint-url http://localhost:port // list items aws dynamodb scan --table-name TABLENAME \ --endpoint-url http://127.0.0.1:port ```bash # GUI client for local dynamoDB dynamodb-admin is a gui tool to visualize and manipulate data. ```bash //install global package $ npm install -g dynamodb-admin // runs gui in http://localhost:8001 $ AWS_REGION=localhost DYNAMO_ENDPOINT=http://localhost:8000 \ dynamodb-admin ``` ## Run service offline ```bash serverless offline start ``` ### Create a Post ```bash curl -X POST -H "Content-Type:application/json" http://localhost:3000/dev/post --data '{ "title": "my awesome title", "text": "my awesome text" }' ```