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

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

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

작성자: Aniket Braganza(AWS)

환경: 프로덕션

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

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

요약

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

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

사전 조건 및 제한 사항

사전 조건 

  • 활성 AWS 계정

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

    • AWS 클라우드 개발 키트(AWS CDK) 설명서의 사전 조건

    • AWS 명령줄 인터페이스(AWS CLI) 설명서의 사전 조건

  • 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 대기열에 삽입되어 해당 주제에 대한 알림을 수신합니다.

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

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

  6. Lambda에서 메시지를 처리하지 않으면 해당 메시지가 SQS 대기열로 반환되고 결국 데SQS드 레터 대기열로 전송됩니다.

기술 스택

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

  • AWS Lambda

도구

AWS 서비스

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

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

  • Amazon Simple Queue Service(Amazon SQS)는 분산 소프트웨어 시스템 및 구성 요소를 통합하고 분리하는 데 도움이 되는 안전하고 내구성이 뛰어나며 사용 가능한 호스팅 대기열을 제공합니다.

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

기타 도구

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

  • AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.

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

코드

이 패턴에 대한 코드는 GitHub Lambda 리포지토리에 대한 S3 SNS - - 연결에서 사용할 SQS 수 있습니다.

에픽

작업설명필요한 기술

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

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

앱 개발자

가상 환경을 설정합니다.

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

  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 설명서의 Bootstrapping의 지침에 따라 CloudFormation 스택이 AWS CDK 배포될 각 AWS 리전에서 배포 환경을 부트스트랩합니다.

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

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

CloudFormation 스택을 배포합니다.

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

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

CloudFormation 스택을 삭제하고 연결된 리소스를 제거합니다.

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

앱 개발자