• 디스코드 웹훅 AWS Lambda로 자동화

    2022. 8. 13.

    by. 카유.

    이전 글인 디스코드 웹훅 Node.js로 연동하기에서
    NodeJS로 디스코드 웹훅 만드는 방법을 알아봤는데요

    웹훅을 통해 특정 시간마다 메시지를 보내는
    알림봇이나 공지봇을 만들고자 하는 경우

    무거운 작업도 아니고 HTTP 요청
    잠깐 실행했다가 끝나는거라

    서버에서 24시간 실행될 필요는 없습니다.

    이때 쓰기 좋은게 AWS Lambda 입니다.

     

     

    AWS Lambda란?

    서버가 항시 돌아가지 않고
    필요할때 잠깐 실행하고 끝나는
    짧은 작업에 맞춰져있는 서비스입니다.

     

    한달에 100만번, 320만초까지 실행은 무료입니다.

    100만번을 다 쓸거라고 가정하면
    프로그램이 개당 3.2초안에 끝나면 되는거죠

    알림이나 공지 주기가 용도마다 다 다르겠지만
    1분마다 실행한다고 가정하면
    한달에 약 44,640번 실행할 수 있어서 여유롭습니다.

    지원하는 언어는 다음과 같습니다.

     

    Node.js, TypeScript, Pytrhon, Ruby, Java, Go, C#

     

     

    Lambda 함수 생성

    먼저, Lambda로 들어오신 후
    우측 상단의 '함수 생성'을 누릅니다.

     

    위에는 건드리지 않고 '새로 작성'으로 둡니다.

     

    함수 이름을 작성하고
    Node.js 버전을 선택할 수 있는데

     

    버전은 12, 14, 16만 선택할 수 있습니다.
    다 하셨으면 우측 하단에 '함수 생성' 눌러줍니다.

     

    그리고 아래로 내려와보시면 이렇게 되있는데요
    오른쪽에 코드를 바로 입력할수도있지만
    Node.js 패키지와 파일들을 올릴수도 있습니다.

    모듈을 설치해서 실행해야해서
    코드를 따로 작성해서 올려보겠습니다.

     

    Lambda용 디스코드 웹훅 구현

    Node.js 모듈 설치

    HTTP 비동기 요청

    npm install axios

     

     

    코드로 구현

    자바스크립트 파일을 만드시고 이름은
    index.js로 지어줍니다.

     

    const axios = require("axios");
    
    const webhookURL = "웹훅 URL";
    
    exports.handler = async (event) => {
        try {
            await axios.post(webhookURL, {
                "content": "보낼 내용"
            });
        }
        catch (err) {
            console.error(err);
        }
        const response = {
            statusCode: 200,
            body: JSON.stringify('Hello from Lambda!'),
        };
        return response;
    }

    위 처럼 작성하시고 저장합니다.

     

     

    업로드

    작성했던 Node.js 파일들을 모두 선택한 후
    .zip으로 압축합니다.

     

    다시 AWS Lambda로 돌아와서
    우측에 '에서 업로드'를 누릅니다.

     

    '.zip 파일'을 선택합니다.

     

    '업로드' 누르시고
    방금 압축했던 파일을 찾아서 올리고
    우측에 '저장' 누릅니다.

     

     

    테스트

    다시 돌아와서 'Test' 누릅니다.

     

    아무것도 없으면 이렇게 이벤트 구성 페이지가 열릴텐데
    이벤트 이름 지어주고 우측 하단에 '저장' 눌러줍니다.
    저는 test로 지었습니다.

    그리고 다시 'Test' 눌러주시면

     

    이렇게 아래에 상세한 로그가 뜨고
    0.41초동안 실행했다고 나오네요

     

    디스코드에는 이렇게 메시지가 옵니다.

     

     

    주기적으로 자동 실행

    디스코드 웹훅을 만들었다면 이제
    원하는 시간마다 실행하게 만들 수 있는데요

     

    보고있는 화면에서 이번엔 '구성' 눌러줍니다.

     

    그리고 좌측에 '트리거'로 가신 후
    '트리거 추가' 눌러줍니다.

     

    트리거 구성에서 CloudWatch Events 찾아서 선택합니다.

     

    규칙은 '새 규칙 생성'으로 선택하고

     

    규칙 이름과 설명을 작성합니다.

     

    예약 표현식을 작성해야하는데요
    주기를 너무 짧게하면 요금이 청구될 수 있습니다.

    1분마다 실행해야하니 다음과 같이 작성합니다.

    rate(1 minute)

     

    5분마다 실행은 다음과 같습니다.

    rate(5 minutes)

     

    보면 1분과 5분은 minute, minutes 이렇게
    뒤에 s가 붙었다 안붙었다 하는데요

    단위가 1이면 단수로
    단위가 1보다 크면 복수로 써야합니다.

    1시간이면

    rate(1 hour)


    5시간이면

    rate(5 hours)

     

    그리고 이외에도 더 자세히 알고싶으시면

    예약 표현식 설명서

     

    다 작성하셨으면 우측 하단에 '추가' 눌러서 마무리합니다.

     

    그럼 위 사진처럼 1분마다 메시지가 옵니다.

    긴 글 읽어주셔서 감사합니다.

     

     

    참고

    Lambda 개발자 안내서 Node.js

     

     

    댓글