Sử dụng hàm Lambda với các sự kiện đã lên lịch
Các sự kiện đã lên lịch được cho là xảy ra trong khoảng thời gian đều đặn dựa trên một bộ quy tắc. Các sự kiện đã lên lịch được sử dụng để thực thi hàm Lambda sau một khoảng thời gian được xác định trong các dịch vụ đồng hồ đám mây. Chúng được sử dụng tốt nhất để thực hiện các công việc cron cùng với AWS Lambda. Chương này sẽ giải thích bằng ví dụ đơn giản về cách gửi thư sau mỗi 5 phút bằng cách sử dụng các sự kiện đã lên lịch và AWS Lambda.
Yêu cầu
Các yêu cầu để sử dụng hàm Lambda với các sự kiện đã lên lịch như sau:
- Xác minh id email bằng AWS SES
- Tạo vai trò để sử dụng AWS SES, Cloudwatch và AWS Lambda
- Tạo hàm Lambda để gửi email
- Thêm quy tắc cho các sự kiện đã lên lịch từ AWS CloudWatch
Thí dụ
Ví dụ mà chúng ta sẽ xem xét sẽ thêm sự kiện CloudWatch vào hàm AWS Lambda. Cloudwatch sẽ kích hoạt AWS Lambda dựa trên mẫu thời gian được đính kèm với nó. Ví dụ, trong ví dụ dưới đây, chúng tôi đã sử dụng 5 phút làm kích hoạt. Có nghĩa là cứ sau 5 phút, AWS Lambda sẽ được kích hoạt và AWS Lambda sẽ gửi thư bất cứ khi nào được kích hoạt.
Sơ đồ khối cơ bản cho tương tự được hiển thị bên dưới:
Xác minh ID email bằng AWS SES
Đăng nhập AWS và vào dịch vụ AWS SES như hình dưới đây -
Bây giờ, hãy nhấp vào Simple Email Dịch vụ như hình -
Nhấp chuột Email Addresses ở bên trái như hình -
Nó hiển thị một nút Verify a New Email Address. Nhấp vào nó.
Đi vào Email Addressbạn muốn xác minh. Nhấp chuộtVerify This Email Addresscái nút. Bạn sẽ nhận được thư từ AWS trên id email đó với tiêu đề email: Amazon Web Services - Yêu cầu xác minh địa chỉ email ở khu vực US East (N. Virginia)
Nhấp vào liên kết được cung cấp trong thư để xác minh địa chỉ email. Sau khi được xác minh, nó sẽ hiển thị id email như sau:
Tạo vai trò để sử dụng AWS SES, Cloudwatch và AWS Lambda
Bạn cũng có thể tạo một vai trò cho phép sử dụng các dịch vụ. Đối với điều này, hãy chuyển đến IAM và chọn Vai trò. Thêm các chính sách bắt buộc và tạo vai trò. Quan sát rằng vai trò được tạo ở đây làevents with lambda.
Tạo hàm Lambda để gửi email
Bạn sẽ phải làm theo các bước để tạo hàm Lambda bằng cách sử dụng thời gian chạy dưới dạng nodejs.
Bây giờ, thêm trình kích hoạt vào Lambda như được hiển thị -
Thêm chi tiết vào CloudWatch Events Trigger như hình dưới đây -
Lưu ý rằng sự kiện sẽ được kích hoạt sau mỗi 5 phút theo trình kích hoạt quy tắc được tạo.
Mã Lambda để gửi email được cung cấp bên dưới:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Bây giờ, chúng tôi cần dịch vụ AWS SES. Bạn có thể thêm điều này bằng cách sử dụng mã hiển thị như sau:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
Để gửi thư từ nodejs, Chúng tôi đã tạo eParams đối tượng có các chi tiết như example mail, to mail id và the body with message như sau -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
Mã Lambda để gửi email như sau:
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
Bây giờ, chúng ta hãy lưu hàm Lambda này và kiểm tra id email cho các thư. Ảnh chụp màn hình hiển thị bên dưới cho thấy rằng thư được gửi từ AWS Lambda sau mỗi 5 phút.