This demo was presented at the AWS Summit @ Cape Town on Jul 12th.
You can find the slides here.
- index.js: The node.js code used for AWS Lambda
- sam_template.yaml: The AWS SAM template in YAML format (i.e. CloudFormation)
| AWSTemplateFormatVersion: 2010-09-09 | |
| Transform: MyUniqueMacroName | |
| Resources: | |
| MyWebsite: | |
| Type: MyCompany::StaticWebsite |
| AWSTemplateFormatVersion: 2010-09-09 | |
| Transform: AWS::Serverless-2016-10-31 | |
| Resources: | |
| MyProcessingFunction: | |
| Type: AWS::Serverless::Function | |
| Properties: | |
| Handler: index.handler | |
| Runtime: python2.7 | |
| # ... |
| AWSTemplateFormatVersion : '2010-09-09' | |
| Transform: AWS::Serverless-2016-10-31 | |
| Resources: | |
| DeliveryBucket: | |
| Type: AWS::S3::Bucket | |
| StreamProcessFunction: | |
| Type: AWS::Serverless::Function | |
| Properties: |
| import json | |
| from base64 import b64decode, b64encode | |
| # some useful constants | |
| STATUS_OK = 'Ok' | |
| STATUS_DROPPED = 'Dropped' | |
| STATUS_FAIL = 'ProcessingFailed' | |
| class DroppedRecordException(Exception): | |
| """ This exception can be raised if a record needs to be skipped/dropped """ |
| AWSTemplateFormatVersion: '2010-09-09' | |
| Transform: 'AWS::Serverless-2016-10-31' | |
| Resources: | |
| MyFunction: | |
| Type: 'AWS::Serverless::Function' | |
| Properties: | |
| Handler: index.handler | |
| # ... | |
| # all the other properties here | |
| # ... |
| const aws = require('aws-sdk'); | |
| const config = new aws.ConfigService(); | |
| /** | |
| * Get the configurationItem for the resource using the getResourceConfigHistory API. | |
| */ | |
| async function getConfigurationFromHistory(configurationHistory, callback) { | |
| const params = { | |
| resourceType: configurationHistory.resourceType, | |
| resourceId: configurationHistory.resourceId, |
| const aws = require('aws-sdk'); | |
| const utility = require('./utility'); | |
| const config = new aws.ConfigService(); | |
| /** | |
| * In this example, the resource is compliant if it is an instance and its type matches the type specified as the desired type. | |
| * If the resource is not an instance, then this resource is not applicable. | |
| */ | |
| function evaluateChangeNotificationCompliance(configurationItem, ruleParameters) { | |
| if (configurationItem.resourceType !== 'AWS::EC2::Instance') { |
| AWSTemplateFormatVersion: '2010-09-09' | |
| Transform: 'AWS::Serverless-2016-10-31' | |
| Resources: | |
| MyFunction: | |
| Type: 'AWS::Serverless::Function' | |
| Properties: | |
| Handler: index.handler | |
| # ... | |
| # all the other properties here | |
| # ... |
| exports.handler = (event, context, callback) => { | |
| if(event.userPoolId === "theSpecialUserPool") { | |
| // check event type | |
| if(event.triggerSource === "CustomMessage_SignUp") { | |
| // customize message and subject content | |
| event.response.smsMessage = "Welcome to the service. Your confirmation code is " + event.request.codeParameter; | |
| event.response.emailSubject = "Welcome to the service"; | |
| event.response.emailMessage = "Thank you for signing up. " + event.request.codeParameter + " is your verification code"; | |
| } | |
| } |
This demo was presented at the AWS Summit @ Cape Town on Jul 12th.
You can find the slides here.