Table of contents
In this tutorial we are going to use AWS Chatbot to run a Lambda function remotely from Slack.
To create the lambda and the SNS Topic to talk to the Bot, we are going to use CDK. To setup the ChatBot we'll do it on the console.
The Lambda
Let's create our project
mkdir chatBotLambda
cd chatBotLambda
npm init -y
Then install CDK and the packages we need
npm install -g aws-cdk
npm i @aws-cdk/aws-lambda
npm i @aws-cdk/aws-sns
npm i @aws-cdk/aws-sns-subscriptions
mkdir cdk-folder
cdk init app --language typescript
Open the file lib/cdk-folder-stack.ts
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';
import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
import * as path from 'path';
export class CdkFolderStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// sns topic
const topic = new sns.Topic(this, 'my-lambda-notifications', {
displayName: 'My SNS topic',
});
topic.addSubscription(new subscriptions.EmailSubscription("your-email@adress");
// lambda function
const myLambdaFunction = new lambda.Function(this, 'my-lambda', {
runtime: lambda.Runtime.NODEJS_14_X,
memorySize: 256,
timeout: cdk.Duration.seconds(60),
handler: 'index.main',
code: lambda.Code.fromAsset(path.join(__dirname, '/../app/my-lambda/')),
});
}
}
Lambda part Now the lambda code
mkdir app
cd app
mkdir my-lambda
cd my-lambda
npm init -y
touch index.js
Very simple code for the lambda :
exports.main = async (event) => {
console.log('Hello ChatBot');
};
Bootstrap and deploy
cdk bootstrap
⏳ Bootstrapping environment aws://XXXXXXXXXXXXX/us-east-1...
✅ Environment aws://XXXXXXXXXXXXXX/us-east-1 bootstrapped (no changes).
cdk deploy
Now we have our lambda, next step, the ChatBot
The ChatBot
Open the AWS Chatbot console.
Under Configure a Chat client choose Slack, and then choose Configure.
In the upper right corner, choose the dropdown list, and then choose the Slack workspace that you want to use with AWS Chatbot and choose Allow.
Choose Configure new channel.
Under Configuration details, for Name, enter AWSChatBot.
Under Channel type, choose Private.
Navigate to Slack and create a private channel by choosing the + button to the right of Channels.
Choose Create a channel.
Name the channel AWSChatBot and make it private then hit create.
When prompted to add people, choose x.
Navigate back to the AWS Chatbot console and enter the private channel ID.
Define the IAM permissions that the chatbot uses for messaging your Slack chat room:
For Role name, enter AWSChatBotRole.
For Policy Templates, select Read-only command permissions and Lambda-invoke command permissions.
In the SNS topics section, choose the appropriate AWS Region under Region.
Under Topics, select the AWSChatBotNotifications topic.
Choose Configure.
Your ChatBot is ready !
Make them work together
Invite yout AWS Chatbot to your channel by doing the following in Slack :
@AWS
hit enter and choose invite to the channel.
Enter the following command in Slack
@aws lambda invoke --function-name <your-function-name> --region <your region>
The output should be :
Congrats ! You can now invoke your lambda from Slack ! Pretty convenient to test out some stuff !
Clean up
To destroy the lambda and the SNS topic :
cdk destroy
To delete the chatbot :
Open the AWS Chatbot console.
Choose Slack.
Choose the radio button next to the channel you created and then choose Delete.