다른 AWS 리전의 S3 버킷에서 이벤트 알림을 수신하도록 Lambda 함수 구독 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

다른 AWS 리전의 S3 버킷에서 이벤트 알림을 수신하도록 Lambda 함수 구독

작성자: Suresh Konathala, Andrew Preston, Arindom Sarkar

환경: 프로덕션

기술: 분석

AWS 서비스: AWS Lambda, Amazon S3, Amazon SNS, Amazon SQS

요약

Amazon Simple Storage Service(S3) 이벤트 알림은 S3 버킷의 특정 이벤트(예: 객체 생성 이벤트, 객체 제거 이벤트 또는 객체 복원 이벤트)에 대한 알림을 게시합니다. AWS Lambda 함수를 사용하여 애플리케이션의 요구 사항에 따라 이러한 알림을 처리할 수 있습니다. 그러나 Lambda 함수는 다른 AWS 리전에서 호스팅되는 S3 버킷의 알림을 직접 구독할 수 없습니다.

이 패턴의 접근 방식은 각 리전에 대해 Amazon S3 Simple Notification Service(Amazon SNS) 주제를 사용하여 리전 간 S3 버킷에서 Amazon S3 알림을 처리하는 팬아웃 시나리오를 배포합니다. 이러한 리전 SNS 주제는 Lambda 함수도 포함된 중앙 리전의 Amazon Simple Queue Service(AmazonSQS) 대기열로 Amazon S3 이벤트 알림을 전송합니다. Lambda 함수는 이 SQS 대기열을 구독하고 조직의 요구 사항에 따라 이벤트 알림을 처리합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정.

  • Amazon SQS 대기열 및 Lambda 함수를 호스팅하기 위한 중앙 리전을 포함하여 여러 리전의 기존 S3 버킷입니다.

  • AWS 명령줄 인터페이스(AWS CLI), 설치 및 구성됨. 이에 대한 자세한 내용은 AWS CLI 설명서AWSCLI의 설치, 업데이트 및 제거를 참조하세요. 

  • Amazon 의 팬아웃 시나리오에 익숙합니다SNS. 이에 대한 자세한 내용은 Amazon 설명서의 일반적인 Amazon SNS 시나리오를 참조하세요. SNS

아키텍처

다음 다이어그램은 이 패턴 접근 방식의 아키텍처를 보여줍니다. 

워크플로는 Amazon SNS, S3 및 SQS를 사용하여 리전 간 S3 버킷의 이벤트 알림을 처리합니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. Amazon S3는 S3 버킷(예: 객체 생성, 객체 제거 또는 객체 복원)에 대한 이벤트 알림을 동일한 리전의 SNS 주제로 보냅니다.

  2. SNS 주제는 이벤트를 중앙 리전의 SQS 대기열에 게시합니다.

  3. SQS 대기열은 Lambda 함수의 이벤트 소스로 구성되고 Lambda 함수의 이벤트 메시지를 버퍼링합니다. 

  4. Lambda 함수는 SQS 대기열에서 메시지를 폴링하고 애플리케이션의 요구 사항에 따라 Amazon S3 이벤트 알림을 처리합니다.

기술 스택  

  • Lambda

  • Amazon SNS

  • Amazon SQS

  • Amazon S3

도구

  • AWS CLI- AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하기 위한 오픈 소스 도구입니다. 최소한의 구성으로 AWS CLI 명령 프롬프트에서 브라우저 기반 AWS Management Console에서 제공하는 것과 동등한 기능을 구현하는 명령을 실행할 수 있습니다.

  • AWS CloudFormation - AWS CloudFormation 는 AWS 리소스를 모델링 및 설정하고, 빠르고 일관되게 프로비저닝하고, 수명 주기 내내 관리할 수 있도록 지원합니다. 템플릿을 사용하여 리소스와 해당 종속성을 설명하고 리소스를 개별적으로 관리하는 대신 스택으로 함께 시작 및 구성할 수 있습니다. 여러 AWS 계정 및 AWS 리전에서 스택을 관리하고 프로비저닝할 수 있습니다.

  • AWS Lambda - AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 실행 중인 코드를 지원하는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.

  • Amazon SNS – Amazon Simple Notification Service(Amazon SNS)는 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 전송 또는 전송을 조정하고 관리합니다. 구독자는 구독하는 주제에 게시된 모든 메시지를 수신하며 주제에 대한 모든 구독자는 동일한 메시지를 수신합니다.

  • Amazon SQS– Amazon Simple Queue Service(Amazon SQS)는 분산 소프트웨어 시스템 및 구성 요소를 통합하고 분리할 수 있는 안전하고 내구성이 뛰어나며 사용 가능한 호스팅 대기열을 제공합니다. Amazon은 표준 및 FIFO 대기열을 모두 SQS 지원합니다.

에픽

작업설명필요한 기술

Lambda 트리거로 SQS 대기열을 생성합니다.

AWS 관리 콘솔에 로그인하고 Lambda 설명서에서 Amazon과 함께 Lambda를 사용하여 SQS 자습서의 지침을 사용하여 중앙 리전에서 다음 리소스를 생성합니다. AWS

  • Lambda 실행 역할

  • Amazon S3 이벤트를 처리하는 Lambda 함수

  • SQS 대기열

참고: SQS 대기열을 Lambda 함수의 이벤트 소스로 구성해야 합니다.

AWS DevOps, 클라우드 아키텍트
작업설명필요한 기술

Amazon S3 이벤트 알림을 수신할 SNS 주제를 생성합니다.

Amazon S3 이벤트 알림을 수신하려는 리전에서 SNS 주제를 생성합니다. 이에 대한 자세한 내용은 Amazon SNS 설명서의 SNS 주제 생성을 참조하세요. 

중요 : SNS 주제의 Amazon 리소스 이름()을 기록해야 합니다ARN. 

AWS DevOps, 클라우드 아키텍트

SNS 주제를 중앙 SQS 대기열에 구독합니다.

중앙 리전에서 호스팅하는 SQS 대기열에 SNS 주제를 구독합니다. 이에 대한 자세한 내용은 Amazon SNS 설명서의 SNS 주제 구독을 참조하세요.

AWS DevOps, 클라우드 아키텍트

SNS 주제의 액세스 정책을 업데이트합니다.

  1. Amazon SNS 콘솔을 열고 주제 를 선택한 다음 이전에 생성한 SNS 주제를 선택합니다.

  2. 편집을 선택한 다음 액세스 정책 - 선택 사항 섹션을 펼칩니다.

  3. SNS 주제에 다음 액세스 정책을 연결하여 Amazon S3에 대한 sns:publish 권한을 허용한 다음 저장을 선택합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "0", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2::s3Events-SNSTopic-us-west-2" } ] }
AWS DevOps, 클라우드 아키텍트

리전의 각 S3 버킷에 대한 알림을 설정합니다.

리전의 각 S3 버킷에 대한 이벤트 알림을 설정합니다. 이에 대한 자세한 내용은 Amazon S3 설명서에서 Amazon S3 콘솔을 사용하여 이벤트 알림 활성화 및 구성을 참조하십시오.

참고: 대상 섹션에서 SNS 주제를 선택하고 이전에 생성한 SNS 주제ARN의 를 지정합니다.

AWS DevOps, 클라우드 아키텍트

모든 필수 리전에 대해 이 에픽을 반복하십시오.

중요: 중앙 리전을 포함하여 Amazon S3 이벤트 알림을 수신하려는 각 리전에 대해 이 에픽의 작업을 반복합니다.

AWS DevOps, 클라우드 아키텍트

관련 리소스