SQS에서 AWS Lambda를 트리거하는 방법

이 게시물에서는 AWS CDK를 사용하여 AWS SQS 메시지에서 트리거되는 AWS Lambda 함수를 빌드할 것입니다.

모든 코드can be found in this repository .

설정



CDK 앱을 설정하려면 몇 가지 명령을 실행해야 합니다.

mkdir how-to-trigger-lambda-from-sqs
cd how-to-trigger-lambda-from-sqs
npx cdk init app --language typescript


그러면 다음과 같은 디렉토리 구조가 제공됩니다.


또한 AWS CLI를 구성했는지 확인하십시오. 자세한 내용은 the AWS CLI quickstart guide을 참조하십시오.

SQS 대기열 생성



SQS CDK 패키지를 설치합니다.

npm i @aws-cdk/aws-sqs

lib/how-to-trigger-lambda-from-sqs-stack.ts를 열고 새 SQS 대기열을 추가한 다음 배포합니다.

import * as cdk from '@aws-cdk/core';
import * as sqs from '@aws-cdk/aws-sqs';

export class HowToTriggerLambdaFromSqsStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const queue = new sqs.Queue(this, 'OurSqsQueue', {
      queueName: 'OurSQSQueue',
    });
  }
}



멋진! 스택을 배포합시다.
npm run cdk deploy

람다 생성



Lambda CDK 패키지를 설치합니다.

npm i @aws-cdk/aws-lambda


Lambda 함수를 배포하려면 Lambda의 소스 코드가 상주할 S3 버킷을 제공하는 CDK 앱을 부트스트랩해야 합니다. 이것은 일회성 작업입니다.

npm run cdk bootstrap


src/index.js를 생성하고 다음 코드를 붙여넣습니다.

exports.handler = async (event) => {
  event.Records.forEach((record) => {
    console.log('Record: %j', record);
  });
};

lib/how-to-trigger-lambda-from-sqs-stack.ts를 열고 새 Lambda 함수를 추가하고 배포합니다.

import * as cdk from '@aws-cdk/core';
import * as sqs from '@aws-cdk/aws-sqs';
import * as lambda from '@aws-cdk/aws-lambda';

export class HowToTriggerLambdaFromSqsStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const queue = new sqs.Queue(this, 'OurSqsQueue', {
      queueName: 'OurSQSQueue',
    });

    const lambdaFunction = new lambda.Function(this, 'Function', {
      code: lambda.Code.fromAsset('src'),
      handler: 'index.handler',
      functionName: 'SqsMessageHandler',
      runtime: lambda.Runtime.NODEJS_12_X,
    });
  }
}


다시 배포...

npm run cdk deploy


일부 IAM 변경 사항을 확인해야 할 수도 있습니다.

이벤트 소스 만들기



Lambda 이벤트 소스 CDK 패키지를 설치합니다.

npm i @aws-cdk/aws-lambda-event-sources


lib/how-to-trigger-lambda-from-sqs-stack.ts를 열고 Lambda 함수에 새 SqsEventSource를 추가합니다.

import * as cdk from '@aws-cdk/core';
import * as sqs from '@aws-cdk/aws-sqs';
import * as lambda from '@aws-cdk/aws-lambda';
import * as lambdaEventSources from '@aws-cdk/aws-lambda-event-sources';

export class HowToTriggerLambdaFromSqsStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const queue = new sqs.Queue(this, 'OurSqsQueue', {
      queueName: 'OurSQSQueue',
    });

    const lambdaFunction = new lambda.Function(this, 'Function', {
      code: lambda.Code.fromAsset('src'),
      handler: 'index.handler',
      functionName: 'SqsMessageHandler',
      runtime: lambda.Runtime.NODEJS_12_X,
    });

    const eventSource = new lambdaEventSources.SqsEventSource(queue);

    lambdaFunction.addEventSource(eventSource);
  }
}


한 번 더 배포 ...

npm run cdk deploy


마지막으로 IAM 변경을 승인해야 할 수도 있습니다.



테스트



AWS CLI를 사용하여 스택을 테스트할 것입니다.

먼저 SQS 대기열의 대기열 URL이 필요합니다. 다음 명령을 사용하여 얻을 수 있습니다.

aws sqs get-queue-url --queue-name OurSQSQueue


그런 다음 이전 명령의 Queue URL을 사용하여 AWS CLI를 사용하여 OurSQSQueue에 새 메시지를 보냅니다. 대기열 URL은 다를 수 있지만 나에게 이 명령은 다음과 같습니다.

aws sqs send-message \
--message-body "Hello, world" \
--queue-url https://sqs.us-east-2.amazonaws.com/472331918655/OurSQSQueue


CloudWatch를 확인하여 Lambda가 실행되었는지 확인합니다. /aws/lambda/SqsMessageHandler라는 LogGroup을 찾아 최신 LogStream을 엽니다. 이와 유사한 일부 로그 메시지가 표시되어야 합니다.



정리



완료되면 스택을 삭제하는 것을 잊지 마십시오!

npm run cdk destroy


읽어 주셔서 감사합니다! 도움이 되셨다면 여기에서 저를 팔로우 해주세요

좋은 웹페이지 즐겨찾기