Amazon MQ에서 Lambda 사용 - AWS Lambda

Amazon MQ에서 Lambda 사용

참고

Lambda 함수 이외의 대상으로 데이터를 전송하거나 데이터를 전송하기 전에 데이터를 보강하려는 경우 Amazon EventBridge 파이프를 참조하세요.

Amazon MQ는 Apache ActiveMQRabbitMQ를 위한 관리형 메시지 브로커 서비스입니다. 메시지 브로커를 사용하면 소프트웨어 애플리케이션 및 구성 요소가 토픽 또는 대기열 이벤트 대상을 통해 다양한 프로그래밍 언어, 운영 체제 및 공식 메시징 프로토콜을 사용하여 통신할 수 있습니다.

Amazon MQ는 ActiveMQ 또는 RabbitMQ 브로커를 설치하고 다른 네트워크 토폴로지 및 기타 인프라 요구 사항을 제공하여 사용자 대신 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 관리할 수도 있습니다.

Lambda 함수를 사용하여 Amazon MQ 메시지 브로커의 레코드를 처리할 수 있습니다. Lambda는 이벤트 소스 매핑을 통해 함수를 호출합니다. 이 매핑은 브로커로부터 메시지를 읽고 함수를 동기식으로 호출하는 Lambda 리소스입니다.

주의

Lambda 이벤트 소스 매핑은 각 이벤트를 한 번 이상 처리하므로 레코드가 중복될 수 있습니다. 중복 이벤트와 관련된 잠재적 문제를 방지하려면 함수 코드를 멱등성으로 만드는 것이 좋습니다. 자세한 내용은 AWS 지식 센터의 멱등성 Lambda 함수를 만들려면 어떻게 해야 합니까?를 참조하세요.

Amazon MQ 이벤트 소스 매핑에는 다음과 같은 구성 제한 사항이 있습니다.

  • 동시성 — Amazon MQ 이벤트 소스 매핑을 사용하는 Lambda 함수에는 기본 최대 동시성 설정이 있습니다. ActiveMQ의 경우 Lambda 서비스는 동시 실행 환경 수를 다섯으로 제한합니다. RabbitMQ의 경우 동시 실행 환경 수는 1개로 제한됩니다. 함수의 예약되거나 프로비저닝된 동시성 설정을 변경하더라도 Lambda 서비스가 더 많은 실행 환경을 사용할 수 있게 해 주지는 않습니다. 기본 최대 동시성 증가를 요청하려면 AWS Support에 문의하세요.

  • 교차 계정 - Lambda는 교차 계정 처리를 지원하지 않습니다. Lambda를 사용하여 다른 AWS 계정에 있는 Amazon MQ 메시지 브로커의 레코드를 처리할 수 없습니다.

  • 인증 - ActiveMQ의 경우 ActiveMQ SimpleAuthenticationPlugin만 지원됩니다. RabbitMQ의 경우 PLAIN 인증 메커니즘만 지원됩니다. 사용자는 AWS Secrets Manager를 사용해 자신의 자격 증명을 관리해야 합니다. ActiveMQ 인증에 대한 자세한 내용은 Amazon MQ 개발자 안내서ActiveMQ 브로커와 LDAP 통합을 참조하세요.

  • 연결 할당량 - 브로커에는 와이어 레벨 프로토콜당 허용되는 최대 연결 수가 있습니다. 이 할당량은 브로커 인스턴스 유형에 따라 결정됩니다. 자세한 내용은 Amazon MQ 개발자 안내서에서 Amazon MQ의 할당량브로커 단원을 참조하세요.

  • 연결성 - 퍼블릭 또는 프라이빗 Virtual Private Cloud(VPC)에서 브로커를 생성할 수 있습니다. 프라이빗 VPC의 경우 레코드와 상호 작용하려면 Lambda 함수에게 메시지를 수신하는 VPC에 대한 액세스 권한이 있어야 합니다. 자세한 내용은 이 주제의 후반부에서 네트워크 구성 단원을 참조하세요.

  • 이벤트 대상 - 대기열 대상만 지원됩니다. 그러나 Lambda와 상호 작용하는 동안 내부적으로 토픽으로 동작하는 가상 토픽을 대기열로 사용할 수 있습니다. 자세한 내용은 Apache ActiveMQ 웹사이트의 가상 대상과 RabbitMQ의 가상 호스트를 참조하세요.

  • 네트워크 토폴로지 - ActiveMQ의 경우 이벤트 소스 매핑당 하나의 단일 인스턴스 또는 대기 브로커만 지원됩니다. RabbitMQ의 경우 이벤트 소스 매핑당 하나의 단일 인스턴스 브로커 또는 클러스터 배포만 지원됩니다. 단일 인스턴스 브로커에는 장애 조치 엔드포인트가 필요합니다. 이러한 브로커 배포 모드에 대한 자세한 내용은 Amazon MQ 개발자 안내서에서 Active MQ 브로커 아키텍쳐Rabbit MQ 브로커 아키텍쳐를 참조하세요.

  • 프로토콜 - 지원되는 프로토콜은 Amazon MQ 통합 유형에 따라 다릅니다.

    • ActiveMQ 통합의 경우 Lambda는 OpenWire/Java Message Service(JMS) 프로토콜을 사용하여 메시지를 소비합니다. 메시지 소비를 위한 다른 프로토콜은 지원되지 않습니다. JMS 프로토콜 내에서 TextMessageBytesMessage만 지원됩니다. Lambda는 JMS 사용자 지정 속성도 지원합니다. OpenWire 프로토콜에 대한 자세한 내용은 Apache ActiveMQ 웹 사이트에서 OpenWire를 참조하세요.

    • RabbitMQ 통합의 경우 Lambda는 AMQP 0-9-1 프로토콜을 사용하여 메시지를 소비합니다. 메시지 소비를 위한 다른 프로토콜은 지원되지 않습니다. RabbitMQ의 AMQP 0-9-1 프로토콜 구현에 대한 자세한 내용은 RabbitMQ 웹사이트의 AMQP 0-9-1 전체 참조 가이드를 참조하세요.

Lambda는 Amazon MQ가 지원하는 최신 버전의 ActiveMQ 및 RabbitMQ를 자동으로 지원합니다. 지원되는 최신 버전은 Amazon MQ 개발자 가이드Amazon MQ 릴리스 노트를 참조하세요

참고

기본적으로 Amazon MQ에는 브로커에 대한 주별 유지 관리 기간이 있습니다. 해당 기간 동안에는 브로커를 사용할 수 없습니다. 예비 인스턴스가 없는 브로커의 경우 Lambda가 해당 기간 동안 메시지를 처리할 수 없습니다.

Lambda 소비자 그룹

Amazon MQ와 상호 작용하기 위해 Lambda는 Amazon MQ 브로커에서 읽을 수 있는 소비자 그룹을 생성합니다. 소비자 그룹은 이벤트 소스 매핑 UUID와 동일한 ID를 사용하여 생성됩니다.

Amazon MQ 이벤트 소스의 경우 Lambda에서 레코드를 일괄 처리하여 단일 페이로드로 함수에 전송합니다. 동작을 제어하려면 일괄 처리 기간 및 배치 크기를 구성할 수 있습니다. Lambda는 페이로드 크기 최댓값인 6MB이 처리되거나 일괄 처리 기간이 만료되거나 레코드 수가 전체 배치 크기에 도달할 때까지 메시지를 가져옵니다. 자세한 내용은 일괄 처리 동작 단원을 참조하십시오.

소비자 그룹은 메시지를 바이트의 BLOB로 검색하고 단일 JSON 페이로드에 base64로 인코딩한 다음, 함수를 호출합니다. 함수가 배치의 어떤 메시지에 대해 오류를 반환하면 Lambda는 처리가 성공하거나 메시지가 만료될 때까지 전체 메시지 배치를 다시 시도합니다.

참고

Lambda 함수의 최대 제한 시간은 일반적으로 15분이지만 Amazon MSK, 자체 관리형 Apache Kafka, Amazon DocumentDB, ActiveMQ 및 RabbitMQ용 Amazon MQ에 대한 이벤트 소스 매핑은 최대 제한 시간이 14분인 함수만 지원합니다. 이 제약 조건에 따라 이벤트 소스 매핑에서 함수 오류 및 재시도를 적절히 처리할 수 있습니다.

Amazon CloudWatch의 ConcurrentExecutions 지표를 사용하여 지정된 함수의 동시성 사용량을 모니터링할 수 있습니다. 동시성에 대한 자세한 내용은 예약된 동시성 구성 단원을 참조하세요.

예 Amazon MQ 레코드 이벤트
ActiveMQ
{ "eventSource": "aws:mq", "eventSourceArn": "arn:aws:mq:us-west-2:111122223333:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 1, "correlationId": "myJMSCoID", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"QUJDOkFBQUE=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/bytes-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 2, "correlationId": "myJMSCoID1", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"LQaGQ82S48k=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } } ] }
RabbitMQ
{ "eventSource": "aws:rmq", "eventSourceArn": "arn:aws:mq:us-west-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8", "rmqMessagesByQueue": { "pizzaQueue::/": [ { "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 }, "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" } ] } }
참고

RabbitMQ 예제에서 pizzaQueue는 RabbitMQ 대기열의 이름이고 /는 가상 호스트의 이름입니다. 메시지를 받을 때 이벤트 소스는 pizzaQueue::/에 메시지를 나열합니다.

실행 역할 권한

Amazon MQ 브로커에서 레코드를 읽으려면 Lambda 함수의 실행 역할에 다음 권한이 추가되어야 합니다.

참고

암호화된 고객 관리형 키를 사용하는 경우 kms:Decrypt 권한도 추가합니다.

네트워크 구성

이벤트 소스 매핑을 통해 Lambda에 브로커에 대한 모든 액세스 권한을 부여하려면 브로커가 퍼블릭 엔드포인트(퍼블릭 IP 주소)를 사용하거나 브로커를 생성한 Amazon VPC에 대한 액세스 권한을 제공해야 합니다.

기본적으로 Amazon MQ 브로커를 생성하면 PubliclyAccessible 플래그가 false로 설정됩니다. 브로커가 퍼블릭 IP 주소를 수신하려면 PubliclyAccessible 플래그를 true로 설정해야 합니다.

Lambda와 함께 Amazon MQ를 사용하는 모범 사례는 AWS PrivateLink VPC 엔드포인트를 사용하고 Lambda 함수에 브로커의 VPC에 대한 액세스 권한을 부여하는 것입니다. Lambda용 엔드포인트를 배포하고 ActiveMQ의 경우에만 AWS Security Token Service(AWS STS)용 엔드포인트를 배포합니다. 브로커에서 인증을 사용하는 경우 AWS Secrets Manager용 엔드포인트도 배포합니다. 자세한 내용은 VPC 엔드포인트 작업을 참조하십시오.

또는 Amazon MQ 브로커가 포함된 VPC의 각 퍼블릭 서브넷에 NAT 게이트웨이를 구성합니다. 자세한 내용은 VPC 연결 Lambda 함수에 대한 인터넷 액세스 활성화 단원을 참조하십시오.

Amazon MQ 브로커에 대한 이벤트 소스 매핑을 생성하는 경우 Lambda는 브로커 VPC의 서브넷과 보안 그룹에 대해 탄력적 네트워크 인터페이스(ENI)가 이미 존재하는지 확인합니다. Lambda가 기존 ENI를 찾으면 이를 재사용하려고 시도합니다. 그렇지 않으면 Lambda가 이벤트 소스에 연결하고 함수를 호출하기 위해 새 ENI를 생성합니다.

참고

Lambda 함수는 항상 Lambda 서비스가 소유한 VPC 내에서 실행됩니다. 이러한 VPC는 서비스에 의해 자동으로 유지 관리되며 고객에게는 표시되지 않습니다. 또한 함수를 Amazon VPC에 연결할 수도 있습니다. 어느 경우든 함수의 VPC 구성은 이벤트 소스 매핑에 영향을 미치지 않습니다. 이벤트 소스의 VPC 구성에 따라 Lambda가 이벤트 소스에 연결되는 방식이 결정됩니다.

VPC 보안 그룹 규칙

최소한 다음 규칙을 사용하여 클러스터가 포함된 Amazon VPC의 보안 그룹을 구성합니다.

  • 인바운드 규칙 – 자체 보안 그룹 내에서 이벤트 소스에 대해 지정된 보안 그룹에 대한 브로커 포트의 모든 트래픽을 허용합니다. ActiveMQ는 기본적으로 포트 61617을 사용하고 RabbitMQ는 기본적으로 포트 5671을 사용합니다.

  • 아웃바운드 규칙 - 모든 대상에 대해 포트 443의 모든 트래픽을 허용합니다. 자체 보안 그룹 내에서 브로커 포트의 모든 트래픽을 허용합니다. ActiveMQ는 기본적으로 포트 61617을 사용하고 RabbitMQ는 기본적으로 포트 5671을 사용합니다.

  • NAT 게이트웨이 대신 VPC 엔드포인트를 사용하는 경우 VPC 엔드포인트와 연결된 보안 그룹은 이벤트 소스의 보안 그룹에서 포트 443의 모든 인바운드 트래픽을 허용해야 합니다.

VPC 엔드포인트 작업

VPC 엔드포인트를 사용하는 경우 함수를 호출하는 API 직접 호출은 ENI를 사용하여 이러한 엔드포인트를 통해 라우팅됩니다. Lambda 서비스 보안 주체는 해당 ENI를 사용하는 모든 함수에서 lambda:InvokeFunction을 호출해야 합니다. 또한 ActiveMQ의 경우 Lambda 서비스 보안 주체는 ENI를 사용하는 역할에서 sts:AssumeRole을 직접적으로 호출해야 합니다.

기본적으로 VPC 엔드포인트에는 열린 IAM 정책이 있습니다. 모범 사례는 특정 보안 주체만 해당 엔드포인트를 사용하여 필요한 작업을 수행할 수 있도록 이러한 정책을 제한하는 것입니다. 이벤트 소스 매핑이 Lambda 함수를 호출할 수 있도록 하려면 VPC 엔드포인트 정책에서 Lambda 서비스 원칙이 lambda:InvokeFunction을, ActiveMQ의 경우 sts:AssumeRole을 호출하도록 허용해야 합니다. 조직 내에서 발생하는 API 직접 호출만 허용하도록 VPC 엔드포인트 정책을 제한하면 이벤트 소스 매핑이 제대로 작동하지 않습니다.

다음 예제 VPC 엔드포인트 정책은 AWS STS 및 Lambda 엔드포인트에 필요한 액세스 권한을 부여하는 방법을 설명합니다.

예 VPC 엔드포인트 정책 - AWS STS 엔드포인트(ActiveMQ만 해당)
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
예 VPC 엔드포인트 정책 - Lambda 엔드포인트
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }

Amazon MQ 브로커 클러스터가 인증을 사용하는 경우 Secrets Manager 엔드포인트에 대한 VPC 엔드포인트 정책을 제한할 수도 있습니다. Secrets Manager API를 호출하기 위해 Lambda는 Lambda 서비스 보안 주체가 아닌 함수 역할을 사용합니다. 다음 예제는 Secrets Manager 엔드포인트 정책을 보여줍니다.

예 VPC 엔드포인트 정책 – Secrets Manager 엔드포인트
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "customer_function_execution_role_arn" ] }, "Resource": "customer_secret_arn" } ] }

권한 추가 및 이벤트 소스 매핑 생성

이벤트 소스 매핑을 생성하여 Lambda가 Amazon MQ 브로커의 레코드를 Lambda 함수로 전송하도록 지시합니다. 여러 이벤트 소스 매핑을 생성하여 여러 함수로 동일한 데이터를 처리하거나, 단일 함수로 여러 소스의 항목을 처리할 수 있습니다.

Amazon MQ에서 읽도록 함수를 구성하려면 필요한 권한을 추가하고 Lambda 콘솔에서 MQ 트리거를 생성합니다.

권한 추가 및 트리거 생성
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수의 이름을 선택합니다.

  3. 구성(Configuration) 탭을 선택한 다음, 권한(Permissions)을 선택합니다.

  4. 역할 이름에서 실행 역할에 대한 링크를 선택합니다. 이 링크를 클릭하면 IAM 콘솔에서 역할이 열립니다.

    
            실행 역할 링크
  5. 권한 추가를 선택하고 인라인 정책 생성을 선택합니다.

    
            IAM 콘솔에서 인라인 정책 생성
  6. 정책 편집기 섹션에서 JSON을 선택합니다. 다음 정책을 입력합니다. 함수가 Amazon MQ 브로커에서 읽으려면 이러한 권한이 필요합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mq:DescribeBroker", "secretsmanager:GetSecretValue", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
    참고

    암호화된 고객 관리형 키를 사용하는 경우 kms:Decrypt 권한도 추가해야 합니다.

  7. 다음을 선택합니다. 정책 이름을 입력한 후 정책 생성을 선택합니다.

  8. Lambda 콘솔에서 함수로 돌아갑니다. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.

    
            Lambda 콘솔의 함수 개요 섹션
  9. MQ 트리거 유형을 선택합니다.

  10. 필요한 옵션을 구성한 다음 추가를 선택합니다.

Lambda는 Amazon MQ 이벤트 소스에 대해 다음과 같은 옵션을 지원합니다.

  • 브로커 - Amazon MQ 브로커를 선택합니다.

  • 배치 크기(Batch size) - 단일 배치에서 검색할 최대 메시지 수를 설정합니다.

  • 대기열 이름(Queue name) - 사용할 Amazon MQ 대기열을 입력합니다.

  • 소스 액세스 구성 - 가상 호스트 정보 및 브로커 자격 증명을 저장하는 Secrets Manager 암호를 입력합니다.

  • 트리거 활성화 - 레코드 처리를 중지하려면 트리거를 비활성화합니다.

트리거를 활성화하거나 비활성화(또는 삭제)하려면 디자이너에서 MQ 트리거를 선택합니다. 트리거를 재구성하려면 이벤트 소스 매핑 API 작업을 사용합니다.

이벤트 소스 매핑 API

AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하여 이벤트 소스를 관리하려면 다음 API 작업을 사용할 수 있습니다.

AWS Command Line Interface(AWS CLI)를 사용하여 이벤트 소스 매핑을 생성하려면 create-event-source-mapping 명령을 사용합니다.

다음 예제 AWS CLI 명령은 ExampleMQBroker라는 Amazon MQ RabbitMQ 기반 브로커에 MQ-Example-Function이라는 Lambda 함수를 매핑하는 이벤트 소스를 생성합니다. 이 명령은 가상 호스트 이름과, 브로커 자격 증명을 저장하는 Secrets Manager 보안 암호를 제공합니다.

aws lambda create-event-source-mapping \ --event-source-arn arn:aws:mq:us-east-1:123456789012:broker:ExampleMQBroker:b-24cacbb4-b295-49b7-8543-7ce7ce9dfb98 \ --function-name arn:aws:lambda:us-east-1:123456789012:function:MQ-Example-Function \ --queues ExampleQueue \ --source-access-configuration Type=VIRTUAL_HOST,URI="/" Type=BASIC_AUTH,URI=arn:aws:secretsmanager:us-east-1:123456789012:secret:ExampleMQBrokerUserPassword-xPBMTt \

다음 결과가 표시됩니다:

{ "UUID": "91eaeb7e-c976-1234-9451-8709db01f137", "BatchSize": 100, "EventSourceArn": "arn:aws:mq:us-east-1:123456789012:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MQ-Example-Function", "LastModified": 1601927898.741, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "Queues": [ "ExampleQueue" ], "SourceAccessConfigurations": [ { "Type": "BASIC_AUTH", "URI": "arn:aws:secretsmanager:us-east-1:123456789012:secret:ExampleMQBrokerUserPassword-xPBMTt" } ] }

update-event-source-mapping 명령을 사용하여 Lambda가 배치를 처리되는 방법과 처리할 수 없는 레코드를 폐기하는 시기 같은 추가 옵션을 구성할 수 있습니다. 다음 예제 명령은 배치 크기가 2인 이벤트 소스 매핑을 업데이트합니다.

aws lambda update-event-source-mapping \ --uuid 91eaeb7e-c976-1234-9451-8709db01f137 \ --batch-size 2

다음 결과가 표시됩니다:

{ "UUID": "91eaeb7e-c976-1234-9451-8709db01f137", "BatchSize": 2, "EventSourceArn": "arn:aws:mq:us-east-1:123456789012:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MQ-Example-Function", "LastModified": 1601928393.531, "LastProcessingResult": "No records processed", "State": "Updating", "StateTransitionReason": "USER_INITIATED" }

Lambda는 이러한 설정을 비동기적으로 업데이트합니다. 이 프로세스가 완료될 때까지 출력에 변경 사항이 반영되지 않습니다. 리소스의 현재 상태를 보려면 get-event-source-mapping 명령을 사용합니다.

aws lambda get-event-source-mapping \ --uuid 91eaeb7e-c976-4939-9451-8709db01f137

다음 결과가 표시됩니다:

{ "UUID": "91eaeb7e-c976-4939-9451-8709db01f137", "BatchSize": 2, "EventSourceArn": "arn:aws:mq:us-east-1:123456789012:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MQ-Example-Function", "LastModified": 1601928393.531, "LastProcessingResult": "No records processed", "State": "Enabled", "StateTransitionReason": "USER_INITIATED" }

이벤트 소스 매핑 오류

Lambda 함수에 복구할 수 없는 오류가 발생하면 Amazon MQ 소비자가 레코드 처리를 중지합니다. 다른 소비자는 동일한 오류가 발생하지 않는 한 처리를 계속할 수 있습니다. 중지된 소비자의 잠재적 원인을 확인하려면 StateTransitionReason의 반환 세부 정보에서 다음 코드 중 하나에 대한 EventSourceMapping 필드를 확인하세요.

ESM_CONFIG_NOT_VALID

이벤트 소스 매핑 구성이 잘못되었습니다.

EVENT_SOURCE_AUTHN_ERROR

Lambda가 이벤트 소스를 인증하지 못했습니다.

EVENT_SOURCE_AUTHZ_ERROR

Lambda에게 이벤트 소스에 액세스하는 데 필요한 권한이 없습니다.

FUNCTION_CONFIG_NOT_VALID

함수의 구성이 유효하지 않습니다.

Lambda가 크기 때문에 레코드를 버리는 경우에도 레코드가 처리되지 않습니다. Lambda 레코드의 크기 제한은 6MB입니다. 함수 오류 시 메시지를 다시 전달하려면 배달 못한 편지 대기열(DLQ)을 사용할 수 있습니다. 자세한 내용은 Apache ActiveMQ 웹 사이트에서 Message Redelivery and DLQ Handling을, RabbitMQ에서 Reliability Guide를 참조하세요.

참고

Lambda는 사용자 정의 재전달 정책을 지원하지 않습니다. 그 대신 Lambda는 Apache ActiveMQ 웹사이트의 정책 재전달 페이지에 있는 기본값(maximumRedeliveries를 6으로 설정)을 사용한 정책을 사용합니다.

Amazon MQ 및 RabbitMQ 구성 파라미터

모든 Lambda 이벤트 소스 유형은 동일한 CreateEventSourceMappingUpdateEventSourceMapping API 작업을 공유합니다. 그러나 일부 파라미터만 Amazon MQ 및 RabbitMQ에 적용됩니다.

Amazon MQ 및 RabbitMQ에 적용되는 이벤트 소스 파라미터
파라미터 필수 기본값 참고

BatchSize

N

100

최대값: 10,000

활성

N

true

FunctionName

Y

FilterCriteria

N

Lambda 이벤트 필터링

MaximumBatchingWindowInSeconds

N

500ms

일괄 처리 동작

대기열

N

소비할 Amazon MQ 브로커 대상 대기열의 이름입니다.

SourceAccessConfigurations

N

ActiveMQ의 BASIC_AUTH 자격 증명입니다. RabbitMQ는 BASIC_AUTH 자격 증명과 VIRTUAL_HOST 정보를 모두 포함할 수 있습니다.