marchio-lambda-delete
REST DELETE from DynamoDB via Lambda
Installation
$ npm init
$ npm install marchio-lambda-delete --save
Lambda Setup
References
-
Create an API with Lambda Proxy Integration through a Proxy Resource
-
Build an API Gateway API Using Proxy Integration and a Proxy Resource
-
Create and Test an API with HTTP Proxy Integration through a Proxy Resource
Steps
Create Test Role
- Browse to: https://console.aws.amazon.com/iam/
- Click: Roles (from the left column)
- Click: Create new role
- Step 1: Select role type
- Expand Section: AWS Service Role
- For AWS Lambda, click: Select
- Step 2 is automatically skipped
- Step 3: Attach policy
- Select both AmazonDynamoDB* policies
- Click: Next Step
- Create a name for the role (like lambda-db-delete)
- Click: Create role
Create Lambda Function
- Browse to: https://console.aws.amazon.com/lambda
- Click: Create a Lambda Function
- Select: Blank Function
- Click: Next
- Name: marchio-delete
- Description: Marchio service
- Runtime: Node.js 4.3
- Set the Role
- Role: Choose and existing role
- Existing role: service-role/(name of role you created earlier)
- Click: Next
- Click: Create Function
Setup API Gateway
- Browse to: https://console.aws.amazon.com/apigateway
- Click: Create API
- Select: New API
- API name: marchio-delete
- Description: Marchio service
- Click: Create API
- Click on the slash (/)
- Drop down: Actions
- Select: Create Resource
- Check: Configure as proxy resource
- (Optionally enabled CORS)
- Click: Create Resource
- For Integration type select: Lambda Function Proxy
- Lambda Region: For example: us-east-1
- Lambda Function: marchio-delete
- Click: Save
- Add Permission to Lambda Function: OK
- Drop down: Actions
- Select: Deploy API
- Define a new stage (call it "test")
- Click: Deploy
- Save the Invoke URL
Create DynamoDB Table
If you've already setup a demo for marchio-lambda-post then you may have this table already. If not, create it and load it with a few test records.
- Browse to: https://console.aws.amazon.com/dynamodb/
- Click: Create Table
- Table name: mldb
- Primary key: eid
- The type should be the default (string)
- Click: Create
- After some churning, click the Capacity tab
- Set the Read / Write capacity units to 1 to save money while testing
- Click: Save
Example and Deploy
See the deployment example located in the repo under:
- examples/deploy
It contains a deployment script and an example lambda source file.
- Install the dependencies by running:
$ npm install
To run the script you must first make it runnable:
$ chmod +x deploy-lambda.sh
To test:
- Deploy the API via API Gateway
- Create an environment variable called AWS_HOST_MARCHIO_DELETE which is set to the invocation url
- Test the deployment using curl (substitute a valid eid value):
$ curl -i -X DELETE -H "Accept: applications/json" \
$AWS_HOST_MARCHIO_DELETE/test/marchio-delete/110ec58a-a0f2-4ac4-8393-c866d813b8d1
- The response should contain a 204 status code.
Partition / Sort Tables
For DynamoDB tables where you have a partition and a sort key append the sort value to the URL:
$ curl -i -X DELETE -H "Accept: applications/json" \
$AWS_HOST_MARCHIO_DELETE_SORT/test/marchio-delete/mldb-sort/110ec58a-a0f2-4ac4-8393-c866d813b8d1/record-sort-key
Modules
- marchio-lambda-delete
-
Module
- marchio-lambda-delete-factory
-
Factory module
marchio-lambda-delete
Module
marchio-lambda-delete-factory
Factory module
Promise
marchio-lambda-delete-factory.create(spec) ⇒ Factory method It takes one spec parameter that must be an object with named parameters
Kind: static method of marchio-lambda-delete-factory
Returns: Promise
- that resolves to {module:marchio-lambda-delete}
Param | Type | Description |
---|---|---|
spec | Object |
Named parameters object |
spec.event | Object |
Lambda event |
spec.context | Object |
Lambda context |
spec.callback | function |
Lambda callback |
spec.model | Object |
Table model |
Example (Usage example)
// Lambda root file
"use strict";
var mlFactory = require('marcio-lambda-delete');
exports.handler = function(event, context, callback) {
var model = {
name: 'mldb', // must match DynamoDB table name
partition: 'eid', // primary partition key - cannot be reserved word (like uuid)
// sort: 'gid', // primary sort key
fields: {
eid: { type: String }, // primary partition key
// gid: { type: String }, // primary sort key
email: { type: String, required: true },
status: { type: String, required: true, default: "NEW" },
// Password will be (fake) hashed by filter before being saved
password: { type: String, select: false }, // select: false, exclude from query results
}
};
mlFactory.create({
event: event,
context: context,
callback: callback,
model: model
})
.catch(function(err) {
callback(err);
});
};
Testing
To test, go to the root folder and type (sans $):
$ npm test
Repo(s)
Contributing
In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
Version History
Version 0.3.2
- updated test cases
Version 0.3.1
- updated deploy example with latest package
Version 0.3.0
- removed model/table name from url
Version 0.2.1
- updated example and doc
Version 0.2.0
- change model.primary to model.partition
- add support for sort key
Version 0.1.0
- initial release