Gửi notification từ AWS Lambda đến Slack

1.Giới thiệu

1.1 Slack là gì?

Chắc hẳn mọi develop đều không còn xa lạ gì với Slack, một công cụ hỗ trợ việc nhắn tin hiệu quả. Slack có trên đa nền tảng (Window, Mac, Android, iOS) nên mọi người trong công ty có thể chat nhóm với nhau bất kể họ dùng thiết bị gì và cũng là cái đáng nói nhất là khả năng liên kết với các ứng dụng lưu trữ của những hãng khác, ví dụ như Dropbox, Google Drive và ứng dụng liên quan đến bài viết hôm nay đó là AWS Lambda function.

1.2 AWS Lambda là gì?

AWS Lambda là một dịch vụ tính toán nơi mà bạn có thể up code của mình lên, và dịch vụ AWS Lambda sẽ giúp bạn chạy đoạn code đó bằng việc sử dụng các tài nguyên sẵn có của AWS. Sau khi bạn up code, và bạn tạo ra một Lambda function, AWS sẽ cung cấp và quản lý các server mà bạn sử dụng để chạy code. Hiện tại AWS Lambda có hỗ trợ các ngôn ngữ Node.js, Java, C #, Go và Python.

2.Tạo room slack

Việc tạo room slack cực kỳ đơn giản, các bạn có thể truy cập vào trang https://slack.com/, nhập email của bạn, check email để lấy mã và xác thực email đăng ký. Sau đó làm từng bước tạo room theo page hướng dẫn là xong. 😄 Ok, room đã được tạo, vậy làm thế nào để gửi notification từ một ứng dụng khác vào slack? Câu trả lời là bạn sẽ cần 1 URL webhook slack, URL này như 1 cái private key để bạn post vào room slack vậy.

2.1 Get URL webhook Slack

Sau khi login, bạn truy cập vào https://my.slack.com/services/new/incoming-webhook/ ở phần Post to Channel chọn kênh bạn muốn post message và click button Add incoming webhooks integration. Sau đó bạn sẽ được redirect đến 1 trang thông tin của webhook đó, và copy url webhook slack tại mục Webhook URL. Như vậy bạn đã có một URL rồi, giờ tiếp đến giai đoạn config trên AWS.

3. Cấu hình AWS

3.1 Cài đặt Identity and Access Management(IAM)

Để chạy được Lambda function, bạn cần tạo 1 role để execute function đó.

  1. Truy cập vào: https://console.aws.amazon.com/iam/home?region=ap-northeast-1#/roles click button create role
  2. In tab AWS service choose Lambda => Next
  3. Tick choose AWSLambdaExcute => Next
  4. Enter role name, ex: test-function-lambda=> Create role Như thế bạn đã tạo được 1 role mới với tên: test-function-lambda.

3.2 Tạo function Lambda

  1. Truy cập vào https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/functions click create function để tạo lambda function. Điền tên function, chọn role vừa tạo (ex: test-function-lambda)
  2. Tiếp đến mở function mình vừa tạo ra, code function để lambda send notify đến slack. Trên AWS có Cloud9 là 1 IDE dùng khá hịn, bạn có thể code trực tiếp trên đó hoặc dùng file zip up code lên nhé.
  3. Code function cho lamda, dưới đây mình dùng nodejs để demo:
const https = require('https');
const url = require('url');

//Set your URL webhook Slack
const slack_url = "https://hooks.slack.com/services/../../../";
const slack_req_opts = url.parse(slack_url);
slack_req_opts.method = 'POST';
slack_req_opts.headers = {'Content-Type': 'application/json'};

exports.handler = function (event, context, callback) {
    context.callbackWaitsForEmptyEventLoop = false;

    // (event.Records || []).forEach(function (rec) {
    //     if (rec.Sns) {
            var req = https.request(slack_req_opts, function (res) {
                if (res.statusCode === 200) {
                    var msgSuccess = 'Success posted to slack!';
                    console.log(msgSuccess);
                    callback(null, msgSuccess);
                } else {
                    var msgError = 'Status code: ' + res.statusCode;
                    console.log(msgError);
                    callback(null, msgError);
                }
            });

            req.on('error', function (e) {
                var msgError = 'Problem with request: ' + e.message;
                console.log(msgError);
                callback(e);
            });

            req.write(JSON.stringify({text: JSON.stringify("This is message test send to slack room.", null, '  ')}));
            //req.write(JSON.stringify({text: JSON.stringify(rec.Sns.Message, null, '  ')}));
            req.end();
    //     }
    // });
};
  1. View kết quả 😃)

3.3 Send notification

Phần mình comment vào dùng để send 1 message từ 1 service của AWS đã được lambda trigger nhé. Ở đây mình chạy test luôn nên không cần trigger nữa.

4. Kết bài

Như vậy mình đã hướng dẫn xong các bạn làm thế nào để send notification từ AWS Lambda đến Slack, cảm ơn các bạn đã xem đến đoạn này =)). See you in next post 😃)


All Rights Reserved