기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon API Gateway, Amazon SQS 및 AWS Fargate와 비동기식으로 이벤트 처리
작성자: Andrea Meroni(AWS), Alessandro Trisolini(AWS), Nadim Majed(AWS), Mariem Kthiri(AWS) 및 Michael Wallner(AWS)
요약
Amazon API Gateway는 개발자가 규모에 관계없이 APIs를 생성, 게시, 유지 관리, 모니터링 및 보호하는 데 사용할 수 있는 완전 관리형 서비스입니다. 최대 수십만 개의 동시 API 호출을 수락하고 처리하는 데 관련된 작업을 처리합니다.
API Gateway의 중요한 서비스 할당량은 통합 제한 시간입니다. 제한 시간은 REST API가 오류를 반환하기 전에 백엔드 서비스가 응답을 반환해야 하는 최대 시간입니다. 동기식 워크로드에는 일반적으로 29초의 하드 제한이 허용됩니다. 그러나이 제한은 API Gateway를 비동기 워크로드와 함께 사용하려는 개발자에게 어려운 점을 나타냅니다.
이 패턴은 API Gateway, Amazon Simple Queue Service(Amazon SQS) 및를 사용하여 이벤트를 비동기적으로 처리하는 예제 아키텍처를 보여줍니다 AWS Fargate. 아키텍처는 기간 제한 없이 처리 작업 실행을 지원하며 기본 REST API를 인터페이스로 사용합니다.
Projen
사전 조건 및 제한 사항
사전 조건
활성 AWS 계정
워크스테이션에 설치된 다음 도구:
AWS Cloud Development Kit (AWS CDK) 도구 키트 버전 2.85.0 이상
Docker
버전 20.10.21 이상 Node.js
버전 18 이상 Projen
버전 0.71.111 이상 Python
버전 3.9.16 이상
제한 사항
동시 작업은 분당 500개의 작업으로 제한되며, 이는 Fargate가 프로비저닝할 수 있는 최대 작업 수입니다.
아키텍처
다음 다이어그램은 작업 API와 jobs
Amazon DynamoDB 테이블, 이벤트 처리 Fargate 서비스 및 오류 처리 AWS Lambda 함수의 상호 작용을 보여줍니다. 이벤트는 Amazon EventBridge 이벤트 아카이브에 저장됩니다.
일반적인 워크플로에는 다음 단계가 포함됩니다.

AWS Identity and Access Management (IAM)에 대해 인증하고 보안 자격 증명을 얻습니다.
POST
요청 본문에서/jobs
작업 파라미터를 지정하여 작업 API 엔드포인트에 HTTP 요청을 보냅니다.API Gateway REST API인 작업 API는 작업 식별자가 포함된 HTTP 응답을 반환합니다.
작업 API는 SQS 대기열로 메시지를 보냅니다.
Fargate는 SQS 대기열에서 메시지를 가져와 이벤트를 처리한 다음
jobs
DynamoDB 테이블에 작업 결과를 넣습니다.3단계의
/jobs/{jobId}
작업 식별자를 로 사용하여 작업 API 엔드포인트에 HTTPGET
요청을 보냅니다{jobId}
.작업 API는
jobs
DynamoDB 테이블을 쿼리하여 작업 결과를 검색합니다.작업 API는 작업 결과가 포함된 HTTP 응답을 반환합니다.
이벤트 처리가 실패하면 SQS 대기열은 이벤트를 DLQ(Dead Letter Queue)로 보냅니다.
EventBridge 이벤트는 오류 처리 함수를 시작합니다.
오류 처리 함수는
jobs
DynamoDB 테이블에 작업 파라미터를 넣습니다.작업 API 엔드포인트에 HTTP
GET
요청을 전송하여/jobs/{jobId}
작업 파라미터를 검색할 수 있습니다.오류 처리가 실패하면 오류 처리 함수가 EventBridge 아카이브로 이벤트를 보냅니다.
EventBridge를 사용하여 아카이브된 이벤트를 재생할 수 있습니다.
도구
서비스
AWS Cloud Development Kit (AWS CDK)는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
AWS Fargate는 서버 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 관리할 필요 없이 컨테이너를 실행하는 데 도움이 됩니다. Amazon Elastic Container Service(Amazon ECS)와 함께 사용합니다.
Amazon EventBridge는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. 예를 들어 Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른의 이벤트 버스 등이 있습니다 AWS 계정.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Simple Queue Service(Amazon SQS)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.
기타 도구
autopep8
은 Python 향상 제안(PEP) 8 스타일 가이드를 기반으로 Python 코드의 형식을 자동으로 지정합니다. Bandit
은 Python 코드를 스캔하여 일반적인 보안 문제를 찾습니다. Commitizen
은 Git 커밋 검사기 및 CHANGELOG
생성기입니다.cfn-lint
는 AWS CloudFormation 린터입니다. Checkov
는 보안 및 규정 준수 구성 오류에 대해 코드형 인프라(IaC)를 확인하는 정적 코드 분석 도구입니다. jq
는 JSON을 구문 분석하기 위한 명령줄 도구입니다. Postman
은 API 플랫폼입니다. 사전 커밋
은 Git 후크 관리자입니다. Projen
은 프로젝트 생성기입니다. pytest
는 작고 읽기 쉬운 테스트를 작성하기 위한 Python 프레임워크입니다.
코드 리포지토리
이 예제 아키텍처 코드는 API Gateway 및 SQS 리포지토리를 사용한 GitHub 비동기 처리에서 찾을 수 있습니다. https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk
모범 사례
이 예제 아키텍처에는 배포된 인프라에 대한 모니터링이 포함되지 않습니다. 사용 사례에 모니터링이 필요한 경우 CDK Monitoring Constructs
또는 다른 모니터링 솔루션 추가를 평가합니다. 이 예제 아키텍처는 IAM 권한을 사용하여 작업 API에 대한 액세스를 제어합니다. 를 수임할 권한이 있는 사람은 누구나 작업 API를 호출할
JobsAPIInvokeRole
수 있습니다. 따라서 액세스 제어 메커니즘은 바이너리입니다. 사용 사례에 더 복잡한 권한 부여 모델이 필요한 경우 다른 액세스 제어 메커니즘을 사용하여를 평가합니다.사용자가
/jobs
작업 API 엔드포인트에 HTTPPOST
요청을 보내면 입력 데이터가 두 가지 수준에서 검증됩니다.API Gateway는 첫 번째 요청 검증을 담당합니다.
이벤트 처리 함수는 두 번째 요청을 수행합니다.
사용자가
/jobs/{jobId}
작업 API 엔드포인트에 대한 HTTPGET
요청을 수행할 때는 검증이 수행되지 않습니다. 사용 사례에 추가 입력 검증과 보안 수준 증가가 필요한 경우를 사용하여 API를 보호 AWS WAF 하십시오.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 복제합니다. | 리포지토리를 로컬로 복제하려면 다음 명령을 실행합니다.
| DevOps 엔지니어 |
프로젝트를 설정합니다. | 디렉터리를 리포지토리 루트로 변경하고 Projen
| DevOps 엔지니어 |
커밋 전 후크를 설치합니다. | 커밋 전 후크를 설치하려면 다음을 수행합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
부트스트랩 AWS CDK. | AWS CDK
| DevOps |
예제 아키텍처를 배포합니다. | 에 예제 아키텍처를 배포하려면 다음 명령을 AWS 계정실행합니다.
| DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
테스트 사전 조건을 설치합니다. | 워크스테이션에 AWS Command Line Interface (AWS CLI), Postman Postman | DevOps 엔지니어 |
를 가정합니다 |
| DevOps |
Postman을 구성합니다. |
| DevOps |
예제 아키텍처를 테스트합니다. | 예제 아키텍처를 테스트하려면 작업 API로 요청을 보냅니다. 자세한 내용은 Postman 설명서를 | DevOps 엔지니어 |
문제 해결
문제 | Solution |
---|---|
Amazon CloudWatch Logs 로그 그룹이 이미 존재하므로 예제 아키텍처의 폐기 및 후속 재배포가 실패합니다. |
|
CloudWatch Logs 로그 그룹이 이미 존재하므로 예제 아키텍처의 폐기 및 후속 재배포가 실패합니다. |
|