제퍼넷 로고

교차 계정 Amazon Kinesis Data Streams에서 AWS Lambda 함수 호출 | 아마존 웹 서비스

시간

AWS의 다중 계정 아키텍처는 워크로드를 격리하고, 세분화된 비용 할당을 지원하고, 서로 다른 환경에서 협업을 촉진하여 보안, 규정 준수 및 리소스 관리를 강화하는 데 필수적입니다. 또한 위험을 완화하고 확장성을 개선하며 고급 네트워킹 구성을 허용합니다.

스트리밍 아키텍처에서는 비즈니스 및 IT 요구 사항에 따라 단일 계정에 이벤트 생산자, 스트림 저장소 및 이벤트 소비자가 있을 수도 있고 여러 계정에 분산될 수도 있습니다. 예를 들어, 회사는 여러 계정에 걸쳐 여러 생산자의 클릭스트림 데이터 또는 로그 데이터를 중앙 집중화하기를 원할 수 있습니다. 마케팅, 제품 엔지니어링 또는 분석의 데이터 소비자는 여러 계정에서 동일한 스트리밍 데이터에 액세스해야 하며, 이를 위해서는 다중 계정 스트리밍 아키텍처를 제공하는 기능이 필요합니다.

다중 계정 스트리밍 아키텍처를 구축하려면 다음을 사용할 수 있습니다. Amazon Kinesis 데이터 스트림 스트림 저장소로서 AWS 람다 이벤트 소비자로서. Amazon Kinesis Data Streams를 사용하면 대규모 스트리밍 데이터를 실시간으로 처리할 수 있습니다. Lambda와 통합하면 서버리스 데이터 처리가 가능해 인프라를 관리하지 않고도 실시간으로 데이터 스트림을 분석하고 대응할 수 있습니다. 이 통합은 실시간 분석, 로그 처리, 사물 인터넷(IoT) 데이터 수집 등을 포함한 다양한 사용 사례를 지원하므로 스트리밍 데이터에서 시기적절한 통찰력이 필요한 기업에 유용합니다. 이 게시물에서는 다른 계정의 Lambda 함수를 사용하여 한 계정의 스트림으로 수집된 데이터를 처리하는 방법을 보여줍니다.

최근 Kinesis Data Streams 지원이 출시되었습니다. 리소스 기반 정책 다른 계정에서 Lambda를 호출할 수 있습니다. 리소스 기반 정책을 사용하면 AWS 계정을 지정할 수 있습니다. AWS 자격 증명 및 액세스 관리 (IAM) 사용자 또는 IAM 역할 및 액세스 권한을 부여하려는 정확한 Kinesis Data Streams 작업. 액세스 권한이 부여되면 다른 계정에서 Lambda 함수를 구성하여 해당 계정에 속한 데이터 스트림 처리를 시작할 수 있습니다. 이렇게 하면 더 이상 두 계정 모두에서 Lambda 함수를 사용하여 스트리밍 데이터를 복사할 필요가 없으므로 비용이 절감되고 데이터 처리 파이프라인이 단순화됩니다. 데이터 스트림 또는 등록된 소비자에 대한 액세스를 공유해도 계정에 추가 비용이 발생하지 않습니다. Kinesis Data Streams 리소스의 교차 계정 사용 요금은 리소스 소유자에게 계속 청구됩니다.

이 게시물에서는 Kinesis Data Streams를 다음과 같이 사용합니다. 향상된 팬아웃 기능을 통해 소비자에게 애플리케이션에 맞춰진 전용 읽기 처리량을 제공합니다. 기본적으로 Kinesis Data Streams는 소비자 전체에 걸쳐 샤드당 2MB/초의 공유 읽기 처리량을 제공하지만 향상된 팬아웃을 통해 각 소비자는 샤드당 2MB/초의 전용 처리량을 누릴 수 있습니다. 이러한 유연성을 통해 Kinesis Data Streams를 특정 요구 사항에 맞게 원활하게 조정하고 필요에 따라 전용 처리량을 위한 향상된 팬아웃이나 공유 처리량 중에서 선택할 수 있습니다.

솔루션 개요

솔루션의 경우 계정 1에 Kinesis Data Streams를 배포하고 계정 2의 소비자로 Lambda를 배포하여 데이터 스트림에서 데이터를 수신합니다. 다음 다이어그램은 개략적인 아키텍처를 보여줍니다.

Amazon KDS-Lambda 교차 계정 솔루션 아키텍처

설정에는 다음과 같은 핵심 요소가 필요합니다.

  • 계정 1의 Kinesis 데이터 스트림과 계정 2의 Lambda 함수
  • 계정 1의 Kinesis Data Streams 리소스 정책을 통해 교차 계정 Lambda 실행 역할이 Kinesis 데이터 스트림에서 작업을 수행할 수 있습니다.
  • 계정 2의 Lambda 실행 역할과 계정 1의 향상된 팬아웃 소비자 리소스 정책을 통해 교차 계정 Lambda 실행 역할이 Kinesis 데이터 스트림에서 작업을 수행할 수 있습니다.

설정에는 세 가지를 사용합니다. AWS 클라우드 포메이션 주요 리소스를 생성하기 위한 템플릿:

  • CloudFormation 템플릿 1은 계정 1에 다음과 같은 주요 리소스를 생성합니다.
    • Kinesis 데이터 스트림
    • Kinesis 데이터 스트림 향상된 팬아웃 소비자
  • CloudFormation 템플릿 2은 계정 2에 다음과 같은 주요 리소스를 생성합니다.
    • 소비자 Lambda 함수
    • 소비자 Lambda 함수 실행 역할
  • CloudFormation 템플릿 3은 계정 2에 다음 리소스를 생성합니다.
    • 소비자 Lambda 함수 이벤트 소스 매핑

이 솔루션은 단일 지역 배포를 지원하며 CloudFormation 템플릿은 여러 AWS 계정의 동일한 지역에 배포되어야 합니다. 이 솔루션에서는 여러 소비자에 걸쳐 대규모 처리량이 필요한 아키텍처를 배포하기 위한 모범 사례인 Kinesis Data Streams의 향상된 팬아웃을 사용합니다. 이 솔루션을 배포하려면 다음 섹션의 단계를 완료하세요.

사전 조건

솔루션 아키텍처에 언급된 서비스를 생성하려면 CloudFormation 템플릿을 실행하는 데 필요한 권한과 두 개의 AWS 계정이 있어야 합니다. 당신은 또한 AWS 명령 줄 인터페이스 (AWS CLI) 버전 2.15 이상이 설치되었습니다.

CloudFormation 템플릿 1 실행

첫 번째 CloudFormation 템플릿을 시작하려면 다음 단계를 완료하십시오.

  1. 에 로그인 AWS 관리 콘솔 계정 1로 선택하고 적절한 AWS 리전을 선택합니다.
  2. 다운로드 및 시작 CloudFormation 템플릿 1 Kinesis 데이터 스트림을 배포하려는 위치.
  3. 럭셔리 Lambda소비자 계정 ID에서 Lambda 소비자 계정 ID를 입력하고 제출을 클릭하세요. CloudFormation 템플릿 배포를 완료하는 데 몇 분 정도 걸립니다.
  4. 스택이 완료되면 AWS CloudFormation 콘솔에서 스택으로 이동합니다. 출력 탭을 클릭하고 다음 매개변수 값을 복사합니다.
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

이후 단계에서 이러한 값이 필요합니다.

CloudFormation 템플릿 2 실행

두 번째 CloudFormation 템플릿을 시작하려면 다음 단계를 완료하십시오.

  1. 계정 2로 콘솔에 로그인하고 적절한 지역을 선택합니다.
  2. 다운로드 및 시작 CloudFormation 템플릿 2 Lambda 소비자를 호스팅하려는 위치.
  3. 이전 단계에서 캡처한 다음 입력 매개변수를 제공합니다.
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

CloudFormation 템플릿은 다음과 같은 주요 리소스를 생성합니다.

  • 람다 소비자
  • Lambda 실행 역할

Lambda 함수의 실행 역할은 AWS 서비스 및 리소스에 액세스할 수 있는 권한을 함수에 부여하는 IAM 역할입니다. 여기서는 필요한 Kinesis Data Streams 및 Lambda 호출 권한이 있는 Lambda 실행 역할을 생성합니다.

CloudFormation 템플릿 배포를 완료하는 데 몇 분 정도 걸립니다.

  1. 스택이 완료되면 AWS CloudFormation 콘솔에서 스택으로 이동합니다. 출력 탭을 클릭하고 다음 매개변수 값을 복사합니다.
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. 다음을 사용하여 계정 1에서 다음 AWS CLI 명령을 실행합니다. AWS 클라우드쉘. CloudShell은 최신 버전의 AWS CLI를 보유하고 모든 종류의 오류를 방지하므로 사용하는 것이 좋습니다.
    • KinesisStreamCreateResourcePolicy명령 – 그러면 Kinesis Data Stream에 대한 계정 1에 리소스 정책이 생성됩니다. 다음은 샘플 리소스 정책입니다.
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "StreamEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      "arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamSummary",
      "kinesis:ListShards",
      "kinesis:DescribeStream",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream"
      }
      ]
      }

    • KinesisStreamEFOConsumerCreateResourcePolicyCommand – 그러면 계정 1의 Kinesis 데이터 스트림에 대한 향상된 팬아웃 소비자에 대한 리소스 정책이 생성됩니다. 다음은 샘플 리소스 정책입니다.
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "ConsumerEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      " arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamConsumer",
      "kinesis:SubscribeToShard"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream/consumer/kds-cross-account-stream-efo-consumer:1706616477"
      }
      ]
      }

Kinesis Data Streams 콘솔의 아래에서 이 정책에 액세스할 수도 있습니다. 향상된 팬아웃, 소비자 이름소비자 공유 자원 기반 정책.

CloudFormation 템플릿 3 실행

이제 Kinesis 데이터 스트림 및 향상된 팬아웃 소비자에 대한 계정 1의 리소스 정책을 생성했으므로 계정 2의 소비자 Lambda 함수에 대한 Lambda 이벤트 소스 매핑을 생성할 수 있습니다. 다음 단계를 완료하십시오.

  1. 계정 2로 콘솔에 로그인하고 적절한 지역을 선택합니다.
  2. 다운로드 및 시작 CloudFormation 템플릿 3 CloudFormation 템플릿 2를 사용하여 생성한 스택을 업데이트합니다.

CloudFormation 템플릿은 Lambda 이벤트 소스 매핑을 생성합니다.

솔루션 검증

이 시점에서 배포가 완료됩니다. Kinesis 데이터 스트림을 사용하여 메시지를 사용할 수 있으며 Lambda 함수는 대상 계정에서 이러한 메시지를 수신합니다. 계정 1의 데이터 스트림으로 샘플 메시지를 보내려면 CloudShell을 사용하여 다음 AWS CLI 명령을 실행합니다.

aws kinesis put-record --stream-name kds-cross-account-stream --data sampledatarecord --partition-key samplepartitionkey3 --region <region id>

계정 2의 Lambda 함수는 메시지를 수신할 수 있으며 다음을 사용하여 동일한 내용을 확인할 수 있습니다. 아마존 클라우드 워치 로그 :

  1. CloudWatch 콘솔에서 다음을 선택합니다. 로그 그룹 탐색 창에서
  2. 로그 그룹 찾기 /aws/lambda/kds-교차 계정-스트림-efo-소비자.
  3. 왼쪽 메뉴에서 로그그룹 검색 관련 로그 메시지를 보려면 다음은 메시지 예시입니다.
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

정리

추가 비용을 피하기 위해 이 게시물의 일부로 생성한 모든 리소스를 정리하는 것이 항상 좋은 습관입니다.

리소스를 정리하려면 계정 1과 2에서 해당 CloudFormation 스택을 삭제하고 생산자가 Kinesis 데이터 스트림에 이벤트를 푸시하는 것을 중지합니다. 이렇게 하면 불필요하게 요금이 청구되지 않습니다.

요약

이 게시물에서는 AWS 리소스 기반 정책을 사용하여 Kinesis Data Streams와 교차 계정 Lambda 통합을 구성하는 방법을 시연했습니다. 이를 통해 다른 계정에 있는 Lambda 함수를 통해 하나의 AWS 계정 내의 스트림으로 수집된 데이터를 처리할 수 있습니다. 중앙 계정에서 Kinesis 데이터 스트림을 사용하고 여러 소비자가 여기에서 데이터를 읽는 고객을 지원하기 위해 우리는 Kinesis Data Streams의 향상된 팬아웃 기능을 사용했습니다.

시작하려면 Kinesis Data Streams 콘솔을 열거나 새 API를 사용하십시오. PutResource정책 데이터 스트림이나 소비자에 리소스 정책을 연결합니다.


저자 소개

프라 틱 파텔 선임 기술 계정 관리자이자 스트리밍 분석 전문가입니다. 그는 AWS 고객과 협력하며 모범 사례를 사용하여 솔루션을 계획 및 구축하고 고객의 AWS 환경을 사전에 정상 운영 상태로 유지하는 데 도움이 되는 지속적인 지원 및 기술 지침을 제공합니다.

사랑 영국 Amazon AWS의 수석 솔루션 아키텍트입니다. 그는 전략적 구현을 ​​위해 전력, 유틸리티, 제조 및 자동차 고객 전반에 걸쳐 작업하며, 전문적으로 AWS 스트리밍 및 고급 데이터 분석 솔루션을 사용하여 최적의 비즈니스 결과를 도출합니다.

spot_img

최신 인텔리전스

spot_img