[AWS] Lambda - SQS 메시지 보내기

그냥·2022년 7월 29일
0

AWS

목록 보기
7/9

1. Simple Queue Service 정의

SQS란 여러 호출을 하나의 큐에 담아서 다른 곳에 보낼 수 있게 해주는 서비스이다. SQS는 전송, 수신, 삭제 3가지 기능을 제공한다.

SQS에는 세 가지 주체가 있다.

  • Producer(데이터 송신자)
  • SQS(Queue)
  • Consumer(데이터 수신자)

아래와 같이 여러 클라이언트가 호출을 할 때 하나씩 작업을 처리하기 보단, SQS의 queue에서 데이터를 한 번에 모으고 수신자에서 처리하는 것이 훨씬 효율적이다.

SQS 아키텍쳐



2. SQS 생성

1) 대기열 생성

  • SQS 검색 후 대기열 생성 클릭
  • 대기열 유형: 필자는 FIFO로 사용해서 FIFO 사용
  • 이름: 대기열 유형을 FIFO로 선택했을 때 마지막에 .fifo를 붙여주어야 함
  • 액세스 정책: 기본으로 설정하면 JSON > Action > SQS > * 로 되어 있다. 이는 SQS에서 전송, 수신, 삭제 등 모든 기능을 수행할 수 있게 한다는 것이다. 기본으로 설정한다.
  • 맨 아래의 [대기열 생성] 버튼을 클릭한다.

2) SQS 편집

  • 생성 후 나온 페이지 중앙 윗 부분에 [편집]을 클릭한다.
  • [콘텐츠 기반 중복 제거]를 클릭하여 활성화 해준다.



3. Lambda 생성

1) 함수 생성

  • 람다 함수 생성을 한다. 생성 할 때는 따로 설정할 것이 없다.

2) 권한 추가

  • 생성한 함수에 클릭하여 들어간다.
  • [구성] - [권한] - 실행 역할의 [역할 이름]을 클릭한다.
  • [권한 정책] 안에 있는 [권한 추가]를 클릭하여 [정책 연결]을 클릭한다.
  • [기타 권한 정책] 아래에 있는 검색 창에서 "SQS"를 검색한다.
  • "AmazonSQSFullAccess"가 나오면 왼쪽 체크박스를 클릭 후, 아래에 있는 [정책 연결]을 클릭한다.

3) SQS 메시지 전송 코드

import json
import os
import boto3
import logging

from botocore.exceptions import ClientError


def lambda_handler(event, context):
    _params = {'message': "hello"}

    msg_body = json.dumps(_params)
    msg = send_sqs_message(os.environ['SQS_QUEUE'], msg_body)
    return msg


def send_sqs_message(sqs_queue_url, msg_body):
    sqs_client = boto3.client('sqs')
    try:
        msg = sqs_client.send_message(QueueUrl=sqs_queue_url,
                                      MessageBody=msg_body,
                                      MessageGroupId="ikaria")
    except ClientError as e:
        logging.error(e)
        return None
    return msg
- boto3: AWS Service와 연결할 수 있게 해주는 라이브러리
- sqs_client = boto3.client('sqs') :
 >> boto3를 사용해서 sqs 서비스에 접근할 수 있는 client 객체 생성
- msg = sqs_client.send_message(QueueUrl=sqs_queue_url,
                                      MessageBody=msg_body,
                                      MessageGroupId="ikaria")
 >> QueueUrl = {SQS 엔드포인트 작성}
    MessageBody = {보낼 메시지}
    MessageGroupId = {FIFO로 대기열을 설정했을 경우 꼭 작성해야 함}
  • [함수] - [테스트] 를 클릭하면 SQS 대기열에 메시지가 들어간다.
  • [SQS] - [대기열] - [생성한 대기열] - 오른쪽 위의 [메시지 전송 및 수신] 선택
  • 만약 메시지가 잘 발송되었다면 아래 [메시지 수신] - [사용 가능한 메시지]가 1로 되어 있을 것이다.
  • [메시지 풀링]을 클릭하면 아래 [메시지]에 메시지가 나온다.

0개의 댓글