일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- sequelize
- Batch
- 프로그래머스
- docker
- kotest
- 보안
- Python
- 웹보안
- gcp ci/cd
- Baekjoon
- 포너블
- webhacking.kr
- 스프링 배치
- 파이썬
- 회고
- 네트워크
- 백준
- gcp cloud build
- node.js
- spring Batch
- 사이버보안
- 시스템 해킹
- 리버싱
- programmers
- gcp
- hackctf
- 웹해킹
- pwnable.xyz
- nodejs
- cloud run
uju's Tech
[Node.js: Lambda] AWS의 lambda와 SNS를 이용한 Slack Webhook 으로 메시지 보내기(1탄) 본문
<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>
개발 진행 중 특정한 상황에 Slack으로 메시지를 보내 확인할 수 있도록 구축해주고 싶었다. 또한 이를 기존 구현하는 프로젝트 내에 구현하는 것이 아닌 lambda 에 올려 서버 부하를 줄이고자 했다.
nodejs 에서 slack incoming webhook을 사용하기 위해 아래의 링크를 참고하여 설치를 진행해준다.
www.npmjs.com/package/@slack/webhook
npm install @slack/webhook
아래는 프로젝트 디렉토리 구조이다. 이 구조의 폴더는 아래에서 천천히 설명하도록 하겠다.
프로젝트
|
|-- slack.js
|-- slackMessage.js
|-- index.js
|-- package.json
|-- package-lock.json
|-- .gitignore
1. 먼저 slack.js를 생성해준다.
설치 후 원하는 webhookUrl과 payload를 보낼 수있도록 slack.js 폴더 내에 코드를 작성해 준다.
const { IncomingWebhook } = require('@slack/webhook');
/**
* @param {string} webhookUrl
* @param {object} payload
* @returns {Promise<void>}
*/
const sendSlackWebhook = async (webhookUrl, payload) => {
const webhook = new IncomingWebhook(webhookUrl);
try {
await webhook.send(payload);
} catch (e) {
console.log(e);
}
};
module.exports = {
sendSlackWebhook,
};
slack.js에 위와 같이 작성해주어 우리가 보낼 Incoming webhookUrl에 보내고 싶은 payload를 작성될 수있도록 구현해준다.
"slack webhook url은 slack에서 incoming webhook 앱 연결하면 생성된다. -> 구글에 아주 많은 자료가 있다"
2. 전송하고 싶은 message 형식(payload) 을 지정하기 위해 slackMessage.js 폴더를 생성하여 해당 메시지 형식을 작성해준다.
예를 들어 아래와 같이 작성할 수 있다.
const { sendSlackWebhook } = require('./slack');
const webhookUrl = process.env.SLACK_WEBHOOK_NOTIFICATION_URL;
if (!webhookUrl) {
throw Error('webhookUrl 환경변수가 존재하지 않습니다.');
}
/**
* {object} message
*/
const sendMessage = async (message) => {
const payload = {
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: message.text,
},
accessory: {
type: 'image',
image_url: message.image,
alt_text: '메시지',
},
},
],
};
await sendSlackWebhook(webhookUrl, payload);
};
module.exports = {
sendMessage,
};
이러한 block을 원하는 형태로 커스텀할 수있다.
아래 링크(slack api)에서 block을 커스텀하고 테스트를 실행해 볼 수있다.
api.slack.com/messaging/composing/layouts
1번, 2번까지 진행하였으면 slack의 메시지 webhook과 메시지 형식을 지정하였다.
다음 2탄으로는 람다 생성과 람다로의 배포과정 및 handler 구현에 대해 작성해볼 예정이다.
'Node' 카테고리의 다른 글
[Node.js] 소셜로그인 정복하기 - google (2) | 2021.05.27 |
---|---|
[Node.js] 소셜 로그인 정복하기 - facebook (0) | 2021.05.27 |
어느날 발생한 [gyp: No Xcode or CLT version detected!] 에러 (0) | 2020.09.24 |
[Node.js : Sequelize] many to one 관계 (0) | 2020.07.29 |
[Node.js : Sequelize] Mysql 버전이 json타입을 지원하지 않을 때 (0) | 2020.07.18 |