쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Amazon API Gateway, Amazon SQS 및 AWS Fargate와 비동기식으로 이벤트 처리 - 권장 가이드

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

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

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) DockerNode.js와 함께 예제 아키텍처를 대상에 배포하는 데 사용됩니다. Projen은 사전 커밋과 코드 품질 보증, 보안 스캔 및 단위 테스트에 사용되는 도구를 사용하여 Python 가상 환경을 자동으로 설정합니다. 자세한 내용은 도구 섹션을 참조하세요.

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • 동시 작업은 분당 500개의 작업으로 제한되며, 이는 Fargate가 프로비저닝할 수 있는 최대 작업 수입니다.

아키텍처

다음 다이어그램은 작업 API와 jobs Amazon DynamoDB 테이블, 이벤트 처리 Fargate 서비스 및 오류 처리 AWS Lambda 함수의 상호 작용을 보여줍니다. 이벤트는 Amazon EventBridge 이벤트 아카이브에 저장됩니다.

일반적인 워크플로에는 다음 단계가 포함됩니다.

다이어그램 다음에 설명이 있는 아키텍처 다이어그램입니다.
  1. AWS Identity and Access Management (IAM)에 대해 인증하고 보안 자격 증명을 얻습니다.

  2. POST 요청 본문에서 /jobs 작업 파라미터를 지정하여 작업 API 엔드포인트에 HTTP 요청을 보냅니다.

  3. API Gateway REST API인 작업 API는 작업 식별자가 포함된 HTTP 응답을 반환합니다.

  4. 작업 API는 SQS 대기열로 메시지를 보냅니다.

  5. Fargate는 SQS 대기열에서 메시지를 가져와 이벤트를 처리한 다음 jobs DynamoDB 테이블에 작업 결과를 넣습니다.

  6. 3단계의 /jobs/{jobId} 작업 식별자를 로 사용하여 작업 API 엔드포인트에 HTTP GET 요청을 보냅니다{jobId}.

  7. 작업 API는 jobs DynamoDB 테이블을 쿼리하여 작업 결과를 검색합니다.

  8. 작업 API는 작업 결과가 포함된 HTTP 응답을 반환합니다.

  9. 이벤트 처리가 실패하면 SQS 대기열은 이벤트를 DLQ(Dead Letter Queue)로 보냅니다.

  10. EventBridge 이벤트는 오류 처리 함수를 시작합니다.

  11. 오류 처리 함수는 jobs DynamoDB 테이블에 작업 파라미터를 넣습니다.

  12. 작업 API 엔드포인트에 HTTP GET 요청을 전송하여 /jobs/{jobId} 작업 파라미터를 검색할 수 있습니다.

  13. 오류 처리가 실패하면 오류 처리 함수가 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 엔드포인트에 HTTP POST 요청을 보내면 입력 데이터가 두 가지 수준에서 검증됩니다.

    • API Gateway는 첫 번째 요청 검증을 담당합니다.

    • 이벤트 처리 함수는 두 번째 요청을 수행합니다.

      사용자가 /jobs/{jobId} 작업 API 엔드포인트에 대한 HTTP GET 요청을 수행할 때는 검증이 수행되지 않습니다. 사용 사례에 추가 입력 검증과 보안 수준 증가가 필요한 경우를 사용하여 API를 보호 AWS WAF 하십시오.

에픽

작업설명필요한 기술

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

리포지토리를 로컬로 복제하려면 다음 명령을 실행합니다.

git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git
DevOps 엔지니어

프로젝트를 설정합니다.

디렉터리를 리포지토리 루트로 변경하고 Projen을 사용하여 Python 가상 환경과 모든 도구를 설정합니다.

cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk npx projen
DevOps 엔지니어

커밋 전 후크를 설치합니다.

커밋 전 후크를 설치하려면 다음을 수행합니다.

  1. Python 가상 환경을 활성화합니다.

    source .env/bin/activate
  2. 커밋 전 후크를 설치합니다.

    pre-commit install pre-commit install --hook-type commit-msg
DevOps 엔지니어

환경 설정

작업설명필요한 기술

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

리포지토리를 로컬로 복제하려면 다음 명령을 실행합니다.

git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git
DevOps 엔지니어

프로젝트를 설정합니다.

디렉터리를 리포지토리 루트로 변경하고 Projen을 사용하여 Python 가상 환경과 모든 도구를 설정합니다.

cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk npx projen
DevOps 엔지니어

커밋 전 후크를 설치합니다.

커밋 전 후크를 설치하려면 다음을 수행합니다.

  1. Python 가상 환경을 활성화합니다.

    source .env/bin/activate
  2. 커밋 전 후크를 설치합니다.

    pre-commit install pre-commit install --hook-type commit-msg
DevOps 엔지니어
작업설명필요한 기술

부트스트랩 AWS CDK.

AWS CDK에서 부트스트랩하려면 다음 명령을 AWS 계정실행합니다.

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap
DevOps

예제 아키텍처를 배포합니다.

에 예제 아키텍처를 배포하려면 다음 명령을 AWS 계정실행합니다.

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy
DevOps

예제 아키텍처 배포

작업설명필요한 기술

부트스트랩 AWS CDK.

AWS CDK에서 부트스트랩하려면 다음 명령을 AWS 계정실행합니다.

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap
DevOps

예제 아키텍처를 배포합니다.

에 예제 아키텍처를 배포하려면 다음 명령을 AWS 계정실행합니다.

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy
DevOps
작업설명필요한 기술

테스트 사전 조건을 설치합니다.

워크스테이션에 AWS Command Line Interface (AWS CLI), Postmanjq를 설치합니다.

Postman을 사용하여이 예제 아키텍처를 테스트하는 것이 좋지만 필수는 아닙니다. 대체 API 테스트 도구를 선택하는 경우 서명 AWS 버전 4 인증을 지원하는지 확인하고 REST API를 내보내 검사할 수 있는 노출된 API 엔드포인트를 참조하세요.

DevOps 엔지니어

를 가정합니다JobsAPIInvokeRole.

deploy 명령에서 출력으로 JobsAPIInvokeRole 인쇄된 를 가정합니다.

CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \ --no-cli-pager \ --role-arn $<JOBS_API_INVOKE_ROLE_ARN> \ --role-session-name JobsAPIInvoke) export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’) export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’) export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)
DevOps

Postman을 구성합니다.

  • 리포지토리에 포함된 Postman 컬렉션을 가져오려면 Postman 설명서의 지침을 따르세요.

  • 다음 값으로 JobsAPI 변수를 설정합니다.

    • accessKeyassume-role 명령의 Credentials.AccessKeyId 속성 값입니다.

    • baseUrl ‒ 후행 슬래시가 없는 deploy 명령의 JobsApiJobsAPIEndpoint 출력 값입니다.

    • region ‒ 예제 아키텍처를 배포 AWS 리전 한의 값입니다.

    • seconds ‒ 예제 작업에 대한 입력 파라미터의 값입니다. 양의 정수여야 합니다.

    • secretKeyassume-role 명령의 Credentials.SecretAccessKey 속성 값입니다.

    • sessionTokenassume-role 명령의 Credentials.SessionToken 속성 값입니다.

DevOps

예제 아키텍처를 테스트합니다.

예제 아키텍처를 테스트하려면 작업 API로 요청을 보냅니다. 자세한 내용은 Postman 설명서를 참조하세요.

DevOps 엔지니어

아키텍처 테스트

작업설명필요한 기술

테스트 사전 조건을 설치합니다.

워크스테이션에 AWS Command Line Interface (AWS CLI), Postmanjq를 설치합니다.

Postman을 사용하여이 예제 아키텍처를 테스트하는 것이 좋지만 필수는 아닙니다. 대체 API 테스트 도구를 선택하는 경우 서명 AWS 버전 4 인증을 지원하는지 확인하고 REST API를 내보내 검사할 수 있는 노출된 API 엔드포인트를 참조하세요.

DevOps 엔지니어

를 가정합니다JobsAPIInvokeRole.

deploy 명령에서 출력으로 JobsAPIInvokeRole 인쇄된 를 가정합니다.

CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \ --no-cli-pager \ --role-arn $<JOBS_API_INVOKE_ROLE_ARN> \ --role-session-name JobsAPIInvoke) export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’) export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’) export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)
DevOps

Postman을 구성합니다.

  • 리포지토리에 포함된 Postman 컬렉션을 가져오려면 Postman 설명서의 지침을 따르세요.

  • 다음 값으로 JobsAPI 변수를 설정합니다.

    • accessKeyassume-role 명령의 Credentials.AccessKeyId 속성 값입니다.

    • baseUrl ‒ 후행 슬래시가 없는 deploy 명령의 JobsApiJobsAPIEndpoint 출력 값입니다.

    • region ‒ 예제 아키텍처를 배포 AWS 리전 한의 값입니다.

    • seconds ‒ 예제 작업에 대한 입력 파라미터의 값입니다. 양의 정수여야 합니다.

    • secretKeyassume-role 명령의 Credentials.SecretAccessKey 속성 값입니다.

    • sessionTokenassume-role 명령의 Credentials.SessionToken 속성 값입니다.

DevOps

예제 아키텍처를 테스트합니다.

예제 아키텍처를 테스트하려면 작업 API로 요청을 보냅니다. 자세한 내용은 Postman 설명서를 참조하세요.

DevOps 엔지니어

문제 해결

문제Solution

Amazon CloudWatch Logs 로그 그룹이 이미 존재하므로 예제 아키텍처의 폐기 및 후속 재배포가 실패합니다. /aws/apigateway/JobsAPIAccessLogs

  1. 필요한 경우 로그 데이터를 Amazon Simple Storage Service(Amazon S3)로 내보냅니다.

  2. CloudWatch Logs 로그 그룹를 삭제합니다/aws/apigateway/JobsAPIAccessLogs.

  3. 예제 아키텍처를 재배포합니다.

CloudWatch Logs 로그 그룹이 이미 존재하므로 예제 아키텍처의 폐기 및 후속 재배포가 실패합니다. /aws/ecs/EventProcessingServiceLogs

  1. 필요한 경우 로그 데이터를 Amazon S3로 내보냅니다.

  2. CloudWatch Logs 로그 그룹 삭제 /aws/ecs/EventProcessingServiceLogs.

  3. 예제 아키텍처를 재배포합니다.

관련 리소스

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.