반응형

AWS Lambda와 SQS를 사용해서 카카오 메시지 전송하는 기능을 만들었는데 

 

1. [AWS SQS] Nestjs로 SQS 전송, 수신 구현하기

 

[AWS SQS] Nestjs로 SQS 전송, 수신 구현하기

AWS SQS가 뭐지?Amazon Simple Queue Service(SQS)는 쉽게 말해서 Queue입니다. 마이크로서비스, 분산 시스템 등에서 메시지 손실 걱정 없이 어떤 볼륨의 메시지든 전송, 저장 및 수신이 가능한 메시지 대기열

zsunn.tistory.com

2. [AWS] Lambda + SQS로 카카오 알림톡 서비스 구현하기

 

[AWS] Lambda + SQS로 카카오 알림톡 서비스 구현하기

저번에는 SQS 송수신하는 코드를 구현해 보았는데요! 이번에는 이어서 SQS로 전송한 데이터를 Lambda로 받아서 알림톡으로 전송하는 서비스를 구현해 보겠습니다! 이전 글 참고 해주세요! [AWS SQS] Ne

zsunn.tistory.com

 

이전 게시글에서 SQS 송수신 구현하고 Lambda 설정까지 끝냈습니다.

다음 lambda 코드 소스를 짜보겠습니다.

 

저는 Node로 코드 구성을 했고, 하단에 런타임 설정에서 언어 설정 가능합니다.

 

 

코드 소스

환경변수 가지고 와서 카카오 API로 메시지 전송하는 부분까지 코드를 간단하게 작성했습니다.

const request = require('request');

exports.handler = function (event) {
    console.log('consume sqs message event', JSON.stringify(event.Records[0].body));
    
    try {
        const headers = {
            'Content-type': 'application/json',
            'userid' : process.env.BIZMSG_USER_ID,
          };
        
        const options = {
            uri: process.env.BIZMSG_API_HOST,
            method: 'POST',
            headers: headers,
            body: event.Records[0].body
        };
    
        request.post(options, function (error, response, body) {
            if (error) {
                console.error(error);
            }
            console.log(body);
        });
    } catch (error) {
        console.error(error);
    }
    
};

 

 

하지만 이렇게 끝내면 오류가 발생합니다!!

이유는 request 라는 라이브러리를 가지고 올 수 없기 때문이죠

 

Lambda 에서 사용하고 싶은 라이브러리는 직접 layer로 생성을 해서 부여해주셔야 합니다

 

Layers 추가

1. 새로운 폴더를 만들어줍니다.

mkdir nodejs && cd nodejs

 

 

2. 원하는 라이브러리를 다운로드합니다.

npm init
npm install --save request

 

3. zip 파일로 변경해 줍니다.

cd ..
zip -r layer.zip nodejs

 

4. awscli 다운로드해줍니다.

brew install awscli

 

5. lambda layer로 올려줍니다.

aws lambda publish-layer-version --layer-name request-layer --description "add request library" --zip-file fileb://layer.zip --compatible-runtimes nodejs14.x nodejs16.x nodejs18.x\n

 

6. 계층 > [Add a layer]

사용자 지정 계층을 보면 이제까지 올렸던 layer들의 목록이 보입니다.

 

원하는 layer를 선택 후 추가하면 아래와 같이 목록이 생성됩니다!

 

 

layer 목록에서 삭제하는 방법은 다음과 같습니다.

aws lambda delete-layer-version --layer-name request-layer --version-number

 

 

테스트도 해볼 수 있습니다.

 

반응형
반응형

저번에는 SQS 송수신하는 코드를 구현해 보았는데요!
이번에는 이어서 SQS로 전송한 데이터를 Lambda로 받아서 알림톡으로 전송하는 서비스를 구현해 보겠습니다!
 
이전 글 참고 해주세요!
[AWS SQS] Nestjs로 SQS 전송, 수신 구현하기
 

AWS Lambda란?

Lambda는 서버를 따로 두지 않고도 코드를 실행할 수 있는 이벤트 중심의 서비스입니다.
작은 단위의 API를 만들고 싶은데 EC2 인스턴스를 생성하기에는 규모와 비용이 너무 커지기 때문에 간편하게 코드를 작성하고 업로드하면 API 사용이 가능합니다!
비용도 사용한 만큼만 지불하면 되기 때문에 너무 좋은 서비스라고 생각합니다.
 

1. IAM 역할 생성

Lambda를 호출할 수 있는 권한을 가진 IAM을 생성해 줍니다.
SQSFullAccess 권한과 LambdaBasicExecutionRole 권한을 넣어줍니다.

 

2. Lambda 함수 생성

이름과 함수를 어떤 언어로 작성할 것인지 고르고
실행 역할에는 기존 역할 사용을 클릭한 후 방금 생성해 준 역할을 선택해 줍니다.
kakao-messaging이라는 이름으로 생성해 볼게요!
 

3. Lambda 트리거 구성

Lambda에 SQS 트리거를 추가해 줍니다!
트리거에 추가된 SQS에 쌓일 때마다 Lambda가 실행됩니다.

트리거가 생겼습니다!
 

4. Lambda 환경변수 추가

이 부분은 자유이지만 저는 환경변수를 생성해서 코드를 작성해 보도록 하겠습니다!
구성 > 환경 변수 > 편집

 

4. Lambda 로그 스트림 확인

Lambda 로그는 CloudWatch에 쌓이고 있습니다.
로그 확인은 모니터링 > CloudWatch 로그 확인에서 확인할 수 있습니다.

 
카카오 알림톡 전송 코드는 다음 게시글에서 쓰겠습니다~ 

반응형

+ Recent posts