Экономьте время и настройте уведомления Slack для своих интерфейсных проектов.

Amplify — отличный сервис для развертывания интерфейсных приложений в облаке AWS. Но когда дело доходит до мониторинга ваших развертываний, Amplify предоставляет только базовую систему уведомлений. Хотя он позволяет отправлять уведомления по электронной почте, отправка их на ваш канал Slack — нетривиальная задача.

В этой короткой статье раскрываются секреты, которые необходимо знать, чтобы настроить уведомления Slack для своих развертываний AWS Amplify менее чем за 5 минут.

Вот следующие шаги, которые вам нужно будет выполнить, чтобы это произошло:

  • Настройте тему SNS
  • Настройте Slack Incoming Webhook
  • Создайте лямбда-функцию

1. Настройте тему SNS

В консоли AWS перейдите к Amplify.

Выберите приложение, в котором вы хотите настроить уведомления Slack.

Поскольку Amplify по умолчанию не создает тему SNS, нам нужно активировать это действие, добавив подписку на электронную почту к уведомлениям. Для этого перейдите в раздел «Уведомления» и добавьте свой адрес электронной почты.

Если вы не хотите получать электронные письма о развертываниях, вы можете сразу удалить подписку. Нам нужно было это, чтобы раскрыть тему SNS.

2. Настройте Slack Incoming Webhook

Следующим шагом будет настройка входящего веб-перехватчика в вашем Slack, который мы будем использовать для отправки сообщений. Подробнее об этом можно прочитать в официальном туториале.

Перейдите на эту страницу и нажмите Добавить в Slack.

После выбора канала, на который вы хотите публиковать уведомления, измените имя пользователя на «AWS Amplify», загрузите красивый логотип Amplify и сохраните настройки.

Скопируйте URL-адрес Webhook, он понадобится нам на следующем шаге.

3. Создайте лямбда-функцию

Теперь нам нужно создать лямбда-функцию, которая будет запускаться всякий раз, когда Amplify отправляет уведомление. Затем функция обработает событие уведомления и отправит сообщение на ваш канал Slack.

В консоли AWS перейдите к Lambda.

Выберите «Создать функцию» со следующими свойствами:

Передайте следующий код в файл index.js и нажмите «Развернуть»:

// This should be your webook URL from Slack Incoming Webhooks
const webhookUrl = "https://hooks.slack.com/services/...";
const https = require("https");
function postRequest(data) {
return new Promise((resolve, reject) => {
const url = new URL(webhookUrl);
const options = {
host: url.hostname,
path: url.pathname,
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
};
//create the request object with the callback with the result
const req = https.request(options, (res) => {
resolve(JSON.stringify(res.statusCode));
});
// handle the possible errors
req.on('error', (e) => {
reject(e.message);
});
//do the request
req.write(JSON.stringify(data));
//finish the request
req.end();
})
}
exports.handler = async (event) => {
const message = event.Records[0].Sns.Message.slice(1, -1);
const timestamp = (new Date(event.Records[0].Sns.Timestamp)).getTime()/1000;
let color = "info";
if(message.includes("FAILED")) {
color = "danger"
} else if (message.includes("SUCCEED")) {
color = "good"
}
const slackMessage = {
attachments: [{
color,
text: message,
ts: timestamp,
}]
}
await postRequest(slackMessage);
}

Измените значение webhookUrl на то, которое вы получили при создании Slack Incoming Webhook.

После этого нажмите «Добавить триггер» в обзоре функций.

Выберите SNS в качестве триггера, а затем выберите тему SNS, созданную AWS Amplify, когда мы добавили электронное письмо в уведомления.

Если все прошло хорошо, вы сможете найти только что установленную функцию на странице Lambda в AWS.

Вот и все! Теперь вы должны получать уведомления Slack при развертывании в AWS Amplify. Чтобы проверить, все ли работает правильно, перейдите в приложение Amplify и нажмите «Повторно развернуть эту версию».

Вскоре вы должны получить сообщение в Slack.

Я надеюсь, что это руководство помогло вам сэкономить время и настроить уведомления Slack для ваших интерфейсных проектов.