EventBridge Pipes의 소스로 사용되는 Amazon Managed Streaming for Apache Kafka 주제
EventBridge 파이프를 사용하여 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 주제에서 레코드를 수신할 수 있습니다. 그런 다음, 해당 레코드를 처리를 위해 사용 가능한 대상 중 하나로 보내기 전에 선택적으로 필터링하거나 개선할 수 있습니다. 파이프를 설정할 때 선택할 수 있는 Amazon MSK 관련 설정이 있습니다. EventBridge 파이프는 메시지 브로커의 레코드 순서를 유지하여 데이터를 대상으로 보냅니다.
Amazon MSK는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션을 구축하고 실행하는 데 사용할 수 있는 완전관리형 서비스입니다. Amazon MSK는 Apache Kafka를 실행하는 클러스터의 설정, 크기 조정, 관리를 간소화합니다. Amazon MSK를 사용하면 여러 가용 영역 및 AWS Identity and Access Management(IAM)를 통한 보안을 위해 애플리케이션을 구성할 수 있습니다. Amazon MSK는 Kafka의 여러 오픈 소스 버전을 지원합니다.
소스로서 Amazon MSK는 Amazon Simple Queue Service(Amazon SQS) 또는 Amazon Kinesis를 사용하는 것과 유사하게 작동합니다. EventBridge는 소스의 새 메시지를 내부적으로 폴링한 다음, 대상을 동기식으로 간접 호출합니다. EventBridge는 메시지를 배치 단위로 읽고 이를 함수에 이벤트 페이로드로 제공합니다. 최대 배치 크기는 구성 가능합니다. (기본값은 100개의 메시지입니다.)
Apache Kafka 기반 소스의 경우 EventBridge는 일괄 처리 기간 및 배치 크기와 같은 처리 제어 파라미터를 지원합니다.
EventBridge는 각 파티션에 대해 순차적으로 메시지를 읽습니다. EventBridge는 각 배치를 처리한 후 해당 배치에 있는 메시지의 오프셋을 커밋합니다. 파이프의 대상이 배치의 어떤 메시지에 대해 오류를 반환하면 EventBridge는 처리가 성공하거나 메시지가 만료될 때까지 전체 메시지 배치를 다시 시도합니다.
EventBridge는 대상을 간접 호출할 때 이벤트에 메시지 배치를 보냅니다. 이벤트 페이로드에는 메시지 배열이 포함됩니다. 각 배열 항목에는 Amazon MSK 주제 및 파티션 식별자에 대한 세부 정보와 함께 타임스탬프 및 base64로 인코딩된 메시지가 포함됩니다.
이벤트 예제
다음 샘플 이벤트는 파이프가 수신한 정보를 보여줍니다. 이 이벤트를 사용하여 이벤트 패턴을 생성 및 필터링하거나 입력 변환을 정의할 수 있습니다. 모든 필드를 필터링할 수 있는 것은 아닙니다. 필터링할 수 있는 필드에 대한 자세한 내용은 Amazon EventBridge Pipes의 이벤트 필터링 섹션을 참조하세요.
[ { "eventSource": "aws:kafka", "eventSourceArn": "arn:aws:kafka:sa-east-1:123456789012:cluster/vpc-2priv-2pub/751d2973-a626-431c-9d4e-d7975eb44dd7-2", "eventSourceKey": "mytopic-0", "topic": "mytopic", "partition": "0", "offset": 15, "timestamp": 1545084650987, "timestampType": "CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers": [ { "headerKey": [ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ]
폴링 및 스트리밍 시작 위치
파이프 생성 및 업데이트 중 스트림 소스 폴링은 최종적으로 일관됩니다.
파이프 생성 중 스트림에서 이벤트 폴링을 시작하는 데 몇 분 정도 걸릴 수 있습니다.
소스 폴링 구성에 대한 파이프 업데이트 중 스트림에서 이벤트 폴링을 중지했다가 다시 시작하는 데 몇 분 정도 걸릴 수 있습니다.
즉, 스트림의 시작 위치로 LATEST
를 지정하면 파이프 생성 또는 업데이트 중에 전송된 이벤트가 파이프에서 누락될 수 있습니다. 누락된 이벤트가 없도록 하기 위해서는 스트림 시작 위치를 TRIM_HORIZON
으로 지정하세요.
MSK 클러스터 인증
EventBridge는 Amazon MSK 클러스터에 액세스하고 레코드를 검색하고 다른 태스크를 수행할 수 있는 권한이 필요합니다. Amazon MSK는 MSK 클러스터에 대한 클라이언트 액세스를 제어하는 몇 가지 옵션을 지원합니다. 어떤 인증 방법이 사용되는지에 대한 자세한 내용은 EventBridge가 부트스트랩 브로커를 선택하는 방법 단원을 참조하세요.
인증되지 않은 액세스
개발에는 인증되지 않은 액세스만 사용하는 것이 좋습니다. 클러스터에 대해 IAM 역할 기반 인증이 비활성화된 경우에만 인증되지 않은 액세스가 가능합니다.
SASL/SCRAM 인증
Amazon MSK는 전송 계층 보안(TLS) 암호화를 통해 Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism(SASL/SCRAM) 인증을 지원합니다. EventBridge가 클러스터에 연결하려면 인증 자격 증명(로그인 자격 증명)을 AWS Secrets Manager 암호에 저장합니다.
Secrets Manager 사용에 대한 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 AWS Secrets Manager를 사용한 사용자 이름 및 암호 인증을 참조하세요.
Amazon MSK는 SASL/PLAIN 인증을 지원하지 않습니다.
IAM 역할 기반 인증
IAM을 사용하여 MSK 클러스터에 연결하는 클라이언트의 자격 증명을 인증할 수 있습니다. IAM 인증이 MSK 클러스터에서 활성 상태이고 인증을 위한 암호를 제공하지 않으면 EventBridge는 자동으로 IAM 인증을 사용하도록 기본 설정됩니다. IAM 사용자 또는 역할 기반 정책을 생성하고 배포하려면 IAM 콘솔 또는 API를 사용합니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 IAM 액세스 제어를 참조하세요.
EventBridge가 MSK 클러스터에 연결하고 레코드를 읽고 기타 필수 작업을 수행할 수 있도록 하려면 파이프의 실행 역할에 다음 권한을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:DescribeGroup", "kafka-cluster:AlterGroup", "kafka-cluster:DescribeTopic", "kafka-cluster:ReadData", "kafka-cluster:DescribeClusterDynamicConfiguration" ], "Resource": [ "arn:aws:kafka:
region
:account-id
:cluster/cluster-name
/cluster-uuid
", "arn:aws:kafka:region
:account-id
:topic/cluster-name
/cluster-uuid
/topic-name
", "arn:aws:kafka:region
:account-id
:group/cluster-name
/cluster-uuid
/consumer-group-id
" ] } ] }
이러한 권한의 범위를 특정 클러스터, 주제 및 그룹으로 설정할 수 있습니다. 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 Amazon MSK Kafka 작업을 참조하세요.
상호 TLS 인증
상호 TLS(mTLS)는 클라이언트와 서버 간의 양방향 인증을 제공합니다. 클라이언트는 서버가 클라이언트를 확인할 수 있도록 서버에 인증서를 보내고, 서버는 클라이언트가 서버를 확인할 수 있도록 클라이언트에 인증서를 보냅니다.
Amazon MSK의 경우 EventBridge가 클라이언트 역할을 합니다. 클라이언트 인증서(Secrets Manager의 비밀 정보)를 구성하여 MSK 클러스터의 브로커로 EventBridge를 인증합니다. 클라이언트 인증서는 서버의 신뢰 저장소에 있는 인증 기관(CA)에서 서명해야 합니다. MSK 클러스터는 서버 인증서를 EventBridge로 전송하여 EventBridge로 브로커를 인증합니다. 서버 인증서는 AWS 신뢰 저장소에 있는 인증 기관(CA)에서 서명해야 합니다.
Amazon MSK는 자체 서명된 서버 인증서를 지원하지 않습니다. Amazon MSK의 모든 브로커는 기본적으로 EventBridge가 신뢰하는 Amazon Trust Services CA
Amazon MSK용 mTLS에 대한 자세한 내용은 Amazon Managed Streaming for Apache Kafka 개발자 안내서의 상호 TLS 인증을 참조하세요.
mTLS 암호 구성
CLIENT_CERTIFICATE_TLS_AUTH 비밀 정보에 인증서 필드와 프라이빗 키 필드가 필요합니다. 암호화된 프라이빗 키의 경우 비밀 정보에 프라이빗 키 암호가 필요합니다. 인증서와 프라이빗 키는 모두 PEM 형식이어야 합니다.
참고
EventBridge는 PBES1
인증서 필드에는 클라이언트 인증서부터 시작하여 중간 인증서가 이어지고 루트 인증서로 끝나는 인증서 목록이 포함되어야 합니다. 각 인증서는 다음 구조의 새 줄에서 시작해야 합니다.
-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----
Secrets Manager는 최대 65,536바이트의 보안 정보를 지원하므로 긴 인증서 체인을 위한 충분한 공간입니다.
프라이빗 키는 다음 구조의 PKCS #8
-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----
암호화된 프라이빗 키의 경우 다음 구조를 사용합니다.
-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----
다음 예제에서는 암호화된 프라이빗 키를 사용한 mTLS 인증용 비밀 정보 콘텐츠를 표시합니다. 암호화된 개인 키의 경우 비밀 정보에 프라이빗 키 암호를 포함합니다.
{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }
EventBridge가 부트스트랩 브로커를 선택하는 방법
EventBridge는 클러스터에서 사용할 수 있는 인증 방법 및 인증을 위한 암호 제공 여부를 기반으로 부트스트랩 브로커를 선택합니다. mTLS 또는 SASL/SCRAM에 대한 암호를 제공하면 EventBridge가 자동으로 해당 인증 방법을 선택합니다. 비밀 정보를 제공하지 않으면 EventBridge가 클러스터에서 활성화된 가장 강력한 인증 방법을 선택합니다. 다음은 EventBridge가 가장 강력한 인증부터 가장 약한 인증까지 브로커를 선택하는 우선 순위입니다.
-
mTLS(MTL에 제공되는 암호)
-
SASL/SCRAM(SASL/SCRAM에 대해 제공되는 암호)
-
SASL IAM(암호가 제공되지 않았으며 IAM 인증이 활성화됨)
-
인증되지 않은 TLS(암호가 제공되지 않고 IAM 인증이 활성화되지 않음)
-
일반 텍스트(암호가 제공되지 않고 IAM 인증 및 인증되지 않은 TLS가 모두 활성화되지 않음)
참고
EventBridge가 가장 안전한 브로커 유형에 연결할 수 없는 경우 EventBridge는 다른 (약한) 브로커 유형에 연결을 시도하지 않습니다. EventBridge가 더 약한 브로커 유형을 선택하게 하려면 클러스터에서 더 강력한 인증 방법을 모두 비활성화하세요.
네트워크 구성
EventBridge는 Amazon MSK 클러스터와 관련된 Amazon Virtual Private Cloud(VPC) 리소스에 액세스할 수 있어야 합니다.
-
Amazon MSK 클러스터의 VPC에 액세스하기 위해, EventBridge는 소스의 서브넷에 대한 아웃바운드 인터넷 액세스를 사용할 수 있습니다. 프라이빗 서브넷의 경우 이는 NAT 게이트웨이 또는 자체 NAT일 수 있습니다. NAT에 퍼블릭 IP 주소가 있고 인터넷에 연결할 수 있는지 확인합니다. 퍼블릭 서브넷의 경우는 VPC 엔드포인트(아래 설명 참조)를 사용해야 합니다.
-
EventBridge Pipes는 AWS PrivateLink
를 통한 이벤트 전송도 지원하므로, 퍼블릭 인터넷을 경유하지 않고도 Amazon Virtual Private Cloud(Amazon VPC)에 있는 이벤트 소스에서 Pipes 대상으로 이벤트를 전송할 수 있습니다. 인터넷 게이트웨이를 배포하거나 방화벽 규칙을 구성하거나 프록시 서버를 설정할 필요 없이, 프라이빗 서브넷에 있는 Amazon Managed Streaming for Apache Kafka(Amazon MSK), 자체 관리형 Apache Kafka 및 Amazon MQ 소스에서 폴링하는 데 Pipes를 사용할 수 있습니다. 또한 VPC 엔드포인트를 사용하여 퍼블릭 서브넷의 Kafka 클러스터로부터 전송을 지원할 수도 있습니다. VPC 엔드포인트를 설정하려면 AWS PrivateLink 사용 설명서의 VPC 엔드포인트 생성을 참조하세요. 서비스 이름의 경우
com.amazonaws.
를 선택합니다.region
.pipes-data
다음 규칙(최소)으로 Amazon VPC 보안 그룹을 구성합니다.
-
인바운드 규칙 – 소스에 대해 지정된 보안 그룹에 대해 Amazon MSK 브로커 포트의 모든 트래픽을 허용합니다.
-
아웃바운드 규칙 - 모든 대상에 대해 포트 443의 모든 트래픽을 허용합니다. 소스에 대해 지정된 보안 그룹에 대해 Amazon MSK 브로커 포트의 모든 트래픽을 허용합니다.
브로커 포트에는 다음이 포함됩니다.
일반 텍스트의 경우 9092
TLS의 경우 9094
SASL의 경우 9096
IAM의 경우 9098
참고
Amazon VPC 구성은 Amazon MSK API를 통해 검색할 수 있습니다. 설정하는 동안 이 옵션을 구성할 필요가 없습니다.
사용자 지정이 가능한 소비자 그룹 ID
Apache Kafka를 소스로 설정할 때 소비자 그룹 ID를 지정할 수 있습니다. 이 소비자 그룹 ID는 파이프를 조인하려는 Apache Kafka 소비자 그룹의 기존 식별자입니다. 이 기능을 사용하면 진행 중인 Apache Kafka 레코드 처리 설정을 다른 소비자에서 EventBridge로 마이그레이션할 수 있습니다.
소비자 그룹 ID를 지정하고 해당 소비자 그룹 내에 다른 활성 폴러가 있는 경우 Apache Kafka는 모든 소비자에게 메시지를 배포합니다. 즉, EventBridge는 Apache Kafka 주제에 대한 모든 메시지를 수신하지 않습니다. EventBridge가 주제의 모든 메시지를 처리하도록 하려면 해당 소비자 그룹의 다른 모든 폴러를 모두 끄세요.
또한 소비자 그룹 ID를 지정했는데 Apache Kafka가 동일한 ID를 가진 유효한 기존 소비자 그룹을 찾으면 EventBridge는 파이프를 위한 StartingPosition
파라미터를 무시합니다. 대신 EventBridge는 소비자 그룹의 커밋된 오프셋에 따라 레코드 처리를 시작합니다. 소비자 그룹 ID를 지정했는데 Apache Kafka가 기존 소비자 그룹을 찾을 수 없는 경우 EventBridge는 지정된 StartingPosition
으로 소스를 구성합니다.
지정하는 소비자 그룹 ID는 모든 Apache Kafka 이벤트 소스 중에서 고유해야 합니다. 지정된 소비자 그룹 ID로 파이프를 생성한 후에는 이 값을 업데이트할 수 없습니다.
Amazon MSK 소스의 Auto Scaling
Amazon MSK 소스를 처음 생성하면 EventBridge는 Apache Kafka 주제의 모든 파티션을 처리할 한 명의 소비자를 할당합니다. 각 소비자는 증가한 워크로드를 처리하기 위해 여러 프로세서를 병렬로 실행합니다. 그뿐 아니라 EventBridge는 워크로드에 따라 소비자 수를 자동으로 늘리거나 줄입니다. 각 파티션에서 메시지 순서를 유지하기 위해 최대 소비자 수는 주제의 파티션당 하나의 소비자입니다.
EventBridge는 1분 간격으로 주제의 모든 파티션의 소비자 오프셋 지연을 평가합니다. 지연이 너무 높으면 파티션은 EventBridge가 메시지를 처리할 수 있는 것보다 더 빠르게 메시지를 수신합니다. 필요에 따라 EventBridge는 주제에 소비자를 추가하거나 제거합니다. 소비자를 추가 또는 제거하는 크기 조정 프로세스는 평가 후 3분 이내에 진행됩니다.
대상이 오버로드되면 EventBridge는 소비자 수를 줄입니다. 이 동작은 소비자가 검색하고 파이프에 보낼 수 있는 메시지 수를 줄임으로써 파이프의 워크로드를 줄입니다.