Lambda(TypeScript)로 SQS 메시지 사용

Amazon SQS(Simple Queue Service)는 서비스(예: mircoservices), 분산 시스템 및 서버리스 애플리케이션 간의 결합 정도를 낮출 수 있는 AWS의 완전 관리형 메시지 대기열 서비스입니다.

SQS에 메시지를 생성하는 방법에는 여러 가지가 있지만 이 게시물에서는 이러한 메시지를 TypeScript로 작성된 람다 함수로 소비(수신)하는 데 중점을 둘 것입니다.

SQS가 이미 준비되어 있고 이 대기열의 메시지를 사용하기 위해 람다 코드만 작성하면 된다고 가정해 보겠습니다.

다음은 우리가 사용할 기술 스택입니다.
  • Serverless
  • 타입스크립트
  • AWS Lambda

  • 이 구현을 3개 섹션에서 살펴보겠습니다.
  • Lambda 관리를 위한 IAM 사용자 생성.
  • 일부 코드 작성.
  • SQS 배포 및 연결!

  • Lambda 관리를 위한 IAM 사용자 생성.



    We can easily deploy Lambda functions using Serverless framework. We'll see the deployment script later, but let's focus on the IAM user who will manage the Lambda function we make here.
    

    Serverless는 압축되어 S3에 저장되는 Lambda 함수를 배포하며 Lambda 함수로 생성된 모든 로그는 CloudWatch에 유지됩니다.

    따라서 아래 AWS 서비스에 대한 권한이 필요합니다.
  • 람다
  • S3
  • 클라우드와치

  • 하지만 이 Lambda 함수는 SQS에서 메시지를 수신하고 소비하므로 이 IAM 사용자는 SQS에서 메시지를 수신하기 위한 권한(sqs:ReceiveMessage)도 필요합니다.

    몇 가지 코드 작성!



    Lambda 함수 코딩을 시작하겠습니다.
    여기서는 Lambda 함수가 SQS에서 메시지를 수신하고 해당 메시지를 Slack 작업 공간의 특정 채널로 보내길 원합니다.

    In case you don't know how to make slack apps, you can create a Slack App and get OAuth Token and clientSecret by following this great article here.



    이제 OAuth TokenclientSecret 가 있으므로 코딩을 시작하겠습니다!

    먼저 새로운 새 프로젝트에 아래의 종속성을 추가해야 합니다.

    "dependencies": {
        "@slack/bolt": "^3.11.0",
        "aws-lambda": "^1.0.7",
        //...
    }
    


    이제 이벤트(메시지 수신)를 처리할 핸들러 함수를 작성해야 합니다.

    const OAUTH_TOKEN = "slack app oauth token";
    const SIGNING_SECRET = "slack app signing secret";
    const CHANNEL = "slack channel name including #"
    
    const consumeSqsMessage: Handler = async (event: SQSEvent) => {
      const app = new App({
        token: OAUTH_TOKEN,
        signingSecret: SIGNING_SECRET,
      });
      const message = event.Records[0]?.body;
      await sendMessageToSlack(app, message);
    };
    
    const sendMessageToSlack = async (app: App, message: string) => {
      try {
        await app.client.chat.postMessage({
          token: OAUTH_TOKEN,
          channel: CHANNEL,
          text: message,
        });
        console.log("Sent!");
      } catch (error) {
        console.log("Failed to send message. error: ", { error });
      }
    };
    
    export { consumeSqsMessage };
    


    SQS 배포 및 연결!



    이제 Lambda 함수가 준비되었으므로 서버리스 배포 스크립트를 살펴보겠습니다.

    service: <ServiceName>
    plugins:
      - serverless-plugin-typescript
    
    provider:
      name: aws
      runtime: nodejs14.x
      state: active
      region: <aws region>
    
    functions:
      notifySQSMessageToSlack:
        handler: src/functions.consumeSqsMessage
        timeout: 30
    


    Note that the timeout value of Lambda functions should be lower than or equal to the visibility timeout of SQS.



    이제 서버리스 배포 스크립트가 준비되었으므로 Github 작업과 함께 this script을 사용하여 이를 AWS Lambda에 배포할 수 있습니다.

    마지막으로 새 메시지가 들어올 때마다 이 Lambda 함수를 처리하도록 SQS를 구성하기만 하면 됩니다.
    이 작업은 매우 쉽게 할 수 있습니다. SQS 콘솔로 이동하여 아래에서 Lambda triggers 탭을 찾으십시오! Configure Lambda function trigger 를 클릭하면 방금 배포한 Lambda 함수가 표시됩니다.

    그게 다야! 우리는 방금 SQS에서 메시지를 소비하고 Slack 채널로 보내는 람다 함수를 만들었습니다.

    이 글을 봐주셔서 감사합니다. 질문이나 피드백이 있으시면 댓글을 남겨주시거나 저에게 연락주세요!

    좋은 웹페이지 즐겨찾기