Экономьте время и настройте уведомления 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 для ваших интерфейсных проектов.