서버리스 접근 방식을 사용하여 AWS 서비스를 함께 연결 - AWS 권장 가이드

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

서버리스 접근 방식을 사용하여 AWS 서비스를 함께 연결

작성자: Aniket Braganza(AWS)

환경: 프로덕션

기술: 서버리스;;; 현대화, 인프라 CloudNative DevelopmentAndTesting DevOps

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

요약

이 패턴은 Amazon Simple Storage Service(S3), Amazon Simple Notification Service(SNS), Amazon Simple Queue Service(Amazon SQS), AWS Lambda를 함께 연결하여 업로드된 파일을 처리하는 확장 가능한 서버리스 접근 방식을 설명합니다. 업로드된 파일 예제는 데모용입니다. 서버리스 접근 방식을 사용하면 비즈니스 목표를 달성하는 데 필요한 AWS 서비스를 결합하여 다른 작업을 완료할 수 있습니다. 서버리스 접근 방식은 이벤트 기반 알림, 복원력이 뛰어난 스토리지, 서비스형 기능(FaaS) 컴퓨팅 등을 기반으로 요청을 처리하는 비동기 워크플로를 사용합니다. 서버리스 접근 방식을 사용하면 비용을 최소화하면서 수요에 맞게 확장할 수 있습니다.

참고: 서버리스 접근 방식을 통해 AWS 서비스를 결합하는 몇 가지 옵션이 있습니다. 예를 들어 Amazon SNS와 Amazon SQS 대신 Lambda와 Amazon S3를 결합하는 접근 방식을 사용할 수 있습니다. 하지만 이 패턴은 Amazon SNS와 Amazon SQS를 사용합니다. 이 접근 방식을 사용하면 이벤트 알림 중에 Lambda 호출 프로세스에 여러 통합 지점을 추가하고 처리 오버헤드를 최소화하면서 서버리스 오케스트레이션에 여러 리스너를 포함하도록 구현을 확장할 수 있기 때문입니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정

  • AWS 계정에 대한 프로그래밍 방식 액세스 자세한 내용은 다음을 참조하세요.

  • AWS CDK, 설치됨

  • AWS CLI, 설치구성됨

  • Python 3.9

제품 버전

  • AWS CDK 2.x

  • Python 3.9

아키텍처

다음 다이어그램은 체인으로 연결된 AWS 서비스를 통해 사용자가 S3 버킷에 파일을 업로드하여 처리하는 방법을 보여줍니다.

체인으로 연결된 AWS 서비스를 사용하여 S3 버킷에 파일을 업로드하는 워크플로.

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

  1. 사용자가 S3 버킷에 파일을 업로드합니다.

  2. 해당 업로드는 SNS 주제에 메시지를 게시하는 S3 이벤트를 시작합니다. 이 메시지는 S3 이벤트의 세부 정보를 포함합니다.

  3. SNS 주제에 게시된 메시지는 SQS 대기열에 삽입되며, SQS 대기열은 해당 주제에 대한 알림을 구독하고 수신합니다.

  4. Lambda 함수는 SQS 대기열(이벤트 소스)을 폴링하고 메시지가 처리되기를 기다립니다.

  5. Lambda 함수가 SQS 대기열에서 메시지를 수신하면 메시지를 처리하고 해당 메시지의 수신을 확인합니다.

  6. Lambda에서 메시지를 처리하지 않는 경우 해당 메시지는 SQS 대기열로 반환되고 최종적으로 SQS DLQ(Dead Letter Queue)로 전송됩니다.

기술 스택

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

  • Lambda

도구

AWS 서비스

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

  • Amazon Simple Notification Service(Amazon SNS)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.

  • Amazon Simple Queue Service(Amazon SQS)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.

  • AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

기타 도구

  • AWS Cloud Development Kit(AWS CDK)는 AWS CDK 앱과 상호 작용하기 위한 기본 도구입니다. 앱을 실행하고, 정의한 애플리케이션 모델을 조사하고, AWS CDK에서 생성된 CloudFormation AWS 템플릿을 생성 및 배포합니다.

  • AWS Command Line Interface(AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

  • Python은 높은 수준의 해석된 범용 프로그래밍 언어입니다.

코드

이 패턴의 코드는 S3에서 SNS로, SQS, Lambda 리포지토리로 연결되는 GitHub 체인에서 사용할 수 있습니다.

에픽

작업설명필요한 기술

리포지토리를 복제합니다.

리포지토리를 복제하고 해당 python/s3-sns-sqs-lambda-chain 폴더로 이동합니다.

앱 개발자

가상 환경을 설정합니다.

  1. AWS CDK에서 python3 -m venv .venv 명령을 실행합니다.

  2. MacOS/Linux에서 source .venv/bin/activate 명령을 실행하거나 Windows에서 .venv\Scripts\activate.bat 명령을 실행합니다.

앱 개발자

종속 항목 설치

pip install -r requirements.txt 명령을 실행합니다.

앱 개발자
작업설명필요한 기술

유닛 테스트를 실행합니다.

  1. pip install -r requirements-dev.txt 명령을 실행합니다.

  2. (선택 사항) cdk synth --no-staging > template.yml 명령을 실행하여 CloudFormation 스택을 생성합니다. 중요: 스택을 검사할 수 있지만 스테이징된 리소스 및 아티팩트는 생성하지 마세요.

  3. pytest 명령을 실행하여 모든 유닛 테스트를 실행합니다.

  4. (선택 사항) pytest tests/unit/<test_filename> 명령을 실행하여 특정 파일에 대한 테스트를 실행합니다.

앱 개발자, 테스트 엔지니어
작업설명필요한 기술

부트스트랩 환경을 설정합니다.

AWS 설명서의 부트스트래핑 지침에 따라 CloudFormation 스택이 배포될 각 AWS 지역에서 AWS CDK 배포 환경을 부트스트랩하십시오.

참고: 이 단계를 수행하려면 프로그래밍 방식으로 액세스할 수 있는 보안 인증 정보가 필요합니다.

앱 개발자, 엔지니어, 데이터 엔지니어 DevOps

CloudFormation 스택 배포.

cdk deploy 명령을 실행하여 스택을 빌드하고 AWS 계정에 배포합니다.

앱 개발자, DevOps 엔지니어, AWS DevOps
작업설명필요한 기술

CloudFormation 스택을 삭제하고 관련 리소스를 제거합니다.

생성된 CloudFormation 스택을 삭제하고 관련 리소스를 모두 제거하려면 run cdk destroy 명령을 실행합니다.

앱 개발자