앞서 AWS Lambda를 사용하고 있다. AWS 계정을 만들어야 진행할 수 있으니 주의바람
공식 홈페이지에서의 AWS Lambda 설명은 다음과 같다.
AWS Lambda은 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다.
Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. Lambda를 사용하면 Lambda가 지원하는 언어 런타임 중 하나로 코드를 제공하기만 하면 됩니다.
Lambda 함수에 코드를 구성합니다. Lambda 서비스는 필요할 때만 함수를 실행하고 자동으로 확장됩니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
그리고 아래 사진을 확인해보면 프리 티어에는 거의 무료수준에 가까운 비용이 포함된다.
나도 한 일주일동안 켜놓은거 같은데 0원 나왔다.
뭐 아무튼 잡설은 이쯤하고 디스코드 웹훅을 만들어보자
앞서서 이 블로그(https://oliviakim.tistory.com/55)를 참고했습니다.
1. 디스코드 웹훅(WebHook) 만들기
우선 웹훅을 만들고 싶은 채널의 채널 편집으로 들어간다.
연동 - 웹후크에서 웹후크 만들기를 누른다.(웹후크 보기 있는 자리에 있다.)
웹훅의 사진, 이름을 설정하고 웹훅의 URL을 저장한다.(전에 토큰 저장하던거랑 비슷)
여기까지 하면 웹훅은 그냥 만들 수 있다.
2. AWS Lambda 사용하기
우선 아래 AWS 람다 홈페이지로 들어간다.
함수 생성을 누른다.
이름과 런타임 설정 후 함수 생성을 누른다.
런타임에 대해서는 Node.js를 이용했다.
만들어진 함수를 보면 코드를 확인할 수 있다.
이 부분이 서버 관리 없이 코드를 실행하는 람다 서비스의 코드를 맡고있다.
나는 아래처럼 코드를 작성했고, axios.post() 안에 웹훅 URL을 넣으면 된다.
그냥 아무 폴더를 만들어 놓고, 코드를 복사해서 저장한 다음 아래 코드를 터미널에서 입력한다.
나는 디스코드 봇을 만들어 놨던 프로젝트에 만들어놨다.
npm init # 엔터로 다 넘기면 된다.
npm install axios
다 하면 아래처럼 파일이 3개가 존재해야 한다.
여기다가 아까 복사한 코드를 'index.mjs' 자바스크립트 파일로 저장한다.
그러면 정확히 이런 모습이 된다.
이제 index 자바 스크립트 파일을 수정하면 된다,,, 지만
사실 나도 자바스크립트 문법은 잘 몰라서 검색해보고 작성했다.
자기가 작성하고 싶은대로 작성하면 된다.
혹시나 제 코드 참고하고 싶으면 복붙이 되는지는 모르겠는데 코드도 추가해놓겠습니다~
import axios from 'axios';
export const handler = async(event) => {
// TODO implement
try {
const payload = {
content: "공부 시작 시간입니다.",
embeds: [
{
title: '📔 Let\'s Start Study!',
description: '50분 동안 열심히 공부합시다. 🔥',
color: 0xd3d3d3
}
]
};
await axios.post('input webhook url', payload);
console.info('웹훅 성공');
} catch(error) {
console.error('웹훅 실패', error);
}
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
이제 이 4개의 파일을 .zip 형식으로 압축한다.
다시 AWS 람다에서 에서 업로드 - .ZIP 파일을 클릭하고 압축한 파일을 업로드 한다.
다음에 두 번째 탭인 테스트를 누르고 새 이벤트 생성으로 대충 test라고 이름 짓고 테스트 해볼 수 있다.
3. 일정 시간마다 메세지 보내기
우선 만들어진 함수를 보면 좌하단에 트리거 추가가 있는데 클릭한다.
나는 이미 생성해놔서 저 화면이지만 만들어져 있지 않으면 트리거 추가만 있을 것이다.
트리거는 EventBridge(CloudWatch Events)로 설정한다.
그 후 새 규칙 생성을 눌러 규칙 이름과 설명을 자기가 하고 싶은 것으로 적는다.
그리고 아래 보면 예약 표현식이라는 게 있는데, 날짜와 시간을 설정해놓을 수 있다.
cron(초 분 시 일 월 요일 년) 으로 표현하는데 요일은 대소문자 구분안한다.
그리고 매 년 매 주 << 매번 실행할 경우 *을 추가하는데 매 월과 매 주는 중복할 수 없어 매 월같은 경우는 ?로 표시한다는 특징이 있다.
나는 평일 7시, 8시에만 공부 시작을 위한 웹훅을 날리기 위해 cron(00 10-11 ? * MON-FRI *)으로 작성했다.
참고) 우리나라는 UTC+9를 따르기 때문에 '오후 7시 -> (UTC+9)19시 -> (UTC)10시' 라는 절차를 가진다.
이렇게까지 하면 7시와 8시에 알림이 온다~ 와~~
근데 하면서 생각해본건데 쉬는 시간도 있으면 좋을 것 같아서 EventBridge를 하나 더 생성해보고는 했는데
신호가 갈 경우 코드를 실행하는 함수이기 때문에 정상 작동을 안할 것 같다.
그래서 bool 값을 저장할 수 있으면 true, false로 쉬는시간 메세지만 다르게 작성해보고 싶은데
해보고 되면 포스팅 하나 더 올라오는거고 아니면 마는거고,,,
사실 같은 방식으로 함수하나 더만들어서 하는게 더 빠를 거 같긴하다.
아무튼 여기까지하면 웹훅이 만들어 진다는 것~~