21
loading...
This website collects cookies to deliver better user experience
mkdir how-to-trigger-lambda-from-sns
cd how-to-trigger-lambda-from-sns
npx cdk init app --language typescript
npm i @aws-cdk/aws-sns
lib/how-to-trigger-lambda-from-sns-stack.ts
, add a new SNS topic, and deploy.import * as cdk from '@aws-cdk/core';
import * as sns from '@aws-cdk/aws-sns';
export class HowToTriggerLambdaFromSnsStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const topic = new sns.Topic(this, 'OurSnsTopic', {
displayName: 'Our SNS Topic',
});
}
}
npm run cdk deploy
npm i @aws-cdk/aws-lambda
npm run cdk bootstrap
exports.handler = async (event) => {
event.Records.forEach((record) => {
console.log('Record: %j', record);
});
};
lib/how-to-trigger-lambda-from-sns-stack.ts
, add a new Lambda function, and deploy.import * as cdk from '@aws-cdk/core';
import * as sns from '@aws-cdk/aws-sns';
import * as lambda from '@aws-cdk/aws-lambda';
export class HowToTriggerLambdaFromSnsStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const topic = new sns.Topic(this, 'OurSnsTopic', {
displayName: 'Our SNS Topic',
});
const lambdaFunction = new lambda.Function(this, 'Function', {
code: lambda.Code.fromAsset('src'),
handler: 'index.handler',
functionName: 'SnsMessageHandler',
runtime: lambda.Runtime.NODEJS_12_X,
});
}
}
npm run cdk deploy
npm i @aws-cdk/aws-lambda-event-sources
import * as cdk from '@aws-cdk/core';
import * as sns from '@aws-cdk/aws-sns';
import * as lambda from '@aws-cdk/aws-lambda';
import * as lambdaEventSources from '@aws-cdk/aws-lambda-event-sources';
export class HowToTriggerLambdaFromSnsStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const topic = new sns.Topic(this, 'OurSnsTopic', {
displayName: 'Our SNS Topic',
});
const lambdaFunction = new lambda.Function(this, 'Function', {
code: lambda.Code.fromAsset('src'),
handler: 'index.handler',
functionName: 'SnsMessageHandler',
runtime: lambda.Runtime.NODEJS_12_X,
});
const eventSource = new lambdaEventSources.SnsEventSource(topic);
lambdaFunction.addEventSource(eventSource);
}
}
npm run cdk deploy
aws sns list-topics --query "Topics[?contains(TopicArn, 'OurSnsTopic')]"
aws sns publish \
--topic-arn "arn:aws:sns:us-east-2:472331918655:HowToTriggerLambdaFromSnsStack-OurSnsTopic2ED19057-1GAA1XT2U6XXH" \
--message "Hello from SNS"
/aws/lambda/SnsMessageHandler
and open up the latest LogStream. You should see some log messages that look similar to this.npm run cdk destroy
21