cfn-dynamodb-streamspecification
Purpose
AWS CloudFormation does not support AWS DynamoDB Streams (StreamSpecification
s). This is a Lambda-backed custom resource to add AWS DynamoDB's Streams to CloudFormation.
This package on NPM
This package on GitHub
Implementation
This Lambda makes use of the Lambda-Backed CloudFormation Custom Resource flow module, cfn-lambda
(GitHub / NPM).
Usage
See ./example.template.json
for a sample CloudFormation template. The example uses Condition
statements, Parameters
, and dynamic ServiceToken
generation fully.
"StreamSpecificationLogicalIdInResourcesObject": {
"Type": "Type": "Custom::DynamoDBStreamSpecification",
"Properties": {
"ServiceToken": "arn:aws:lambda:<cfn-region-id>:<your-account-id>:function:<this-deployed-lambda-name>",
"TableName": { "Ref": "MyDynamoDBTable" }, // REQUIRED
"StreamViewType": "NEW_IMAGE" // REQUIRED enum (line below)
// Values: NEW_IMAGE | OLD_IMAGE | NEW_AND_OLD_IMAGES | KEYS_ONLY
}
}
}
Ref
and Fn::GetAtt
Ref
does not return the ARN, it returns the <table>::<viewType>
and is used internally for state management on UPDATE
actions.
Fn::GetAtt
has one property, Arn
. This returns the table's LatestStreamArn
.
Installation of the Resource Service Lambda
Using the Provided Instant Install Script
The way that takes 10 seconds...
# Have aws CLI installed + permissions for IAM and Lamdba
$ npm run cfn-lambda-deploy
You will have this resource installed in every supported Region globally!
Using the AWS Console
... And the way more difficult way.
IMPORTANT: With this method, you must install this custom service Lambda in each AWS Region in which you want CloudFormation to be able to access the DynamoDBStreamSpecification
custom resource!
- Go to the AWS Lambda Console Create Function view:
-
Zip this repository into
/tmp/DynamoDBStreamSpecification.zip
$ cd $REPO_ROOT && zip -r /tmp/DynamoDBStreamSpecification.zip;
-
Enter a name in the Name blank. I suggest:
CfnLambdaResouce-DynamoDBStreamSpecification
-
Enter a Description (optional).
-
Toggle Code Entry Type to "Upload a .ZIP file"
-
Click "Upload", navigate to and select
/tmp/DynamoDBStreamSpecification.zip
-
Set the Timeout under Advanced Settings to 10 sec
-
Click the Role dropdown then click "Basic Execution Role". This will pop out a new window.
-
Select IAM Role, then select option "Create a new IAM Role"
-
Name the role
lambda_cfn_api_gateway_deployment
(or something descriptive) -
Click "View Policy Document", click "Edit" on the right, then hit "OK"
-
Copy and paste the
./execution-policy.json
document. -
Hit "Allow". The window will close. Go back to the first window if you are not already there.
-
Click "Create Function". Finally, done! Now go to Usage or see the example template. Next time, stick to the instant deploy script.
Miscellaneous
Collaboration & Requests
Submit pull requests or Tweet to one us (Andrew @ayetempleton / Alex @omgnvm) if you want to get involved with roadmap as well, or if you want to do this for a living :)
License
Want More CloudFormation Custom Resources?
Work is (extremely) active by our contributors, published here:
Andrew Templetons's NPM Account
Alex Jestin Taylor's NPM Account