AWS Fargate WaitCondition 후크 구성을 사용하여 리소스 종속성과 작업 실행을 조정합니다. - 권장 가이드

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

AWS Fargate WaitCondition 후크 구성을 사용하여 리소스 종속성과 작업 실행을 조정합니다.

작성자: Stan Fan(AWS)

요약

이 패턴은 Amazon Elastic Container Service(Amazon ECSwaitcondition-hook-for-aws-fargate-task) 클러스터에서 AWS Fargate 작업을 오케스트레이션하기 위해 설계된 클라우드 네이티브 솔루션인 WaitCondition 후크() npm 패키지를 설명합니다.

WaitCondition 후크는 통합에 맞게 특별히 조정된 AWS Cloud Development Kit (AWS CDK) 구문입니다 AWS CloudFormation. WaitCondition 후크는 다음과 같은 주요 기능을 제공합니다.

  • 대기 조건 메커니즘으로 작동하여 지정된 Fargate 작업이 완료될 때까지 CloudFormation 스택 실행을 일시 중지하므로 정렬된 배포 및 리소스 프로비저닝에 도움이 됩니다.

  • TypeScript 및 Python을 지원하므로 AWS CDK 프로젝트에 적합합니다.

  • 개발자와 아키텍트가 컨테이너화된 애플리케이션의 작업 완료 및 리소스 관리를 조정하여 배포를 오케스트레이션할 수 있습니다 AWS.

  • CloudFormation 수명 주기에 포함된 하나 이상의 컨테이너를 사용하여 Fargate 작업을 실행할 수 있습니다. 및는 작업 실패를 처리하고 작업 실패 후 CloudFormation 스택을 롤백할 수 있습니다.

  • 리소스와 Fargate 작업 실행 결과 간에 종속성을 추가할 수 있는 유연성을 제공하여 사용자 지정 작업을 활성화하거나 다른 엔드포인트를 호출합니다. 예를 들어 CloudFormation 스택을 일시 중지하고 데이터베이스 마이그레이션(Fargate 작업으로 완료)을 기다리고 데이터베이스 마이그레이션의 성공에 의존할 수 있는 다른 리소스를 프로비저닝할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성. AWS 계정

  • AWS Cloud Development Kit (AWS CDK) 로컬 워크스테이션에 설치된 명령줄 인터페이스(CLI)입니다. 자세한 내용은 AWS CDK 설명서의 AWS CDK CLI 참조를 참조하세요.

  • 로컬 워크스테이션에 설치되고 AWS CDK TypeScript에서에 대해 구성된 노드 패키지 관리자(npm). 자세한 내용은 npm 설명서의 Node.js 및 npm 다운로드 및 설치를 참조합니다.

  • 로컬 워크스테이션에 설치된 Yarn입니다. 자세한 내용은 Yarn 설명서의Installation을 참조하세요.

제한 사항

  • 이 솔루션은 단일에 배포됩니다 AWS 계정.

  • 컨테이너의 예상 반환 코드는 성공을 0 위한 것입니다. 다른 모든 반환 코드는 실패를 나타내며 CloudFormation 스택이 롤백됩니다.

  • 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별 섹션을 참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.

아키텍처

다음 다이어그램은 구문 아키텍처를 보여줍니다.

waitcondition-hook-for-aws-fargate-task 구문의 AWS Step Functions 워크플로입니다.

다이어그램은의 워크플로를 보여줍니다waitcondition-hook-for-aws-fargate-task.

  1. WaitConditionWaitConditionHandler는 AWS Lambda 함수의 응답을 수신하도록 프로비저닝됩니다.

  2. 작업 결과에 따라 CallbackFunction 또는 ErrorHandlerFunction가 Fargate 작업 완료에 의해 트리거됩니다.

  3. Lambda 함수는 SUCCEED 또는 FAILURE 신호를에 전송합니다WaitConditionHandler.

  4. WaitConditionHandler Fargate 작업의 실행 결과가 성공하면가 리소스를 계속 프로비저닝하고, 작업이 실패하면 스택을 롤백합니다.

다음 다이어그램은 데이터베이스 마이그레이션을 수행하는 워크플로의 예를 보여줍니다.

WaitCondition 후크 구성을 사용한 Amazon RDS 데이터베이스 마이그레이션 워크플로입니다.

예제 워크플로는 다음과 같이 waitcondition-hook-for-aws-fargate-task 구문을 사용하여 데이터베이스 마이그레이션을 수행합니다.

  1. Amazon Relational Database Service(RDS) 인스턴스가 프로비저닝됩니다.

  2. waitcondition-hook-for-aws-fargate-task 구문은 데이터베이스 마이그레이션 작업을 실행하고 스택을 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 일시 중지합니다.

  3. 마이그레이션 작업이 성공적으로 완료되면 CloudFormation에 성공 신호를 보냅니다. 그렇지 않으면 CloudFormation에 실패 신호를 보내고 스택을 롤백합니다.

도구

서비스

  • AWS Cloud Development Kit (AWS CDK)는 코드에서 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다 AWS CloudFormation.

  • AWS CloudFormation는 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 전체 수명 주기 동안 리소스를 관리할 수 있도록 지원합니다 AWS 리전.

  • Amazon CloudWatch를 사용하면 AWS 리소스 및에서 실행되는 애플리케이션의 지표를 실시간으로 모니터링할 AWS 수 있습니다.

  • Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.

  • AWS Fargate를 사용하면 서버 또는 Amazon EC2 인스턴스를 관리할 필요 없이 컨테이너를 실행할 수 있습니다. Amazon ECS와 함께 사용됩니다.

  • AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

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

  • AWS Step Functions는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.

  • Amazon Virtual Private Cloud(Amazon VPC)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 확장 가능한 인프라를 사용하는 이점과 함께 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다 AWS.

기타 도구

  • npm은 Node.js 환경에서 실행되는 소프트웨어 레지스트리로, 패키지를 공유 또는 대여하고 개인 패키지의 배포를 관리하는 데 사용됩니다.

  • Yarn은 JavaScript 프로젝트의 종속성을 관리하는 데 사용할 수 있는 오픈 소스 패키지 관리자입니다. Yarn은 패키지 종속성을 설치, 업데이트, 구성 및 제거하는 데 도움이 될 수 있습니다.

코드 리포지토리

이 패턴의 코드는 GitHub waitcondition-hook-for-aws-fargate-task 리포지토리에서 사용할 수 있습니다.

모범 사례

에픽

작업설명필요한 기술

를 설치합니다 AWS CDK.

로컬 시스템 또는 기타 환경에 AWS CDK 를 설치하려면 다음 명령을 실행합니다.

npm install -g aws-cdk@latest
클라우드 아키텍트, 앱 개발자

를 부트스트랩합니다 AWS CDK.

부트스트래핑은 배포를 위한 환경을 준비하는 프로세스입니다. 대상 AWS 계정 및에 대한 AWS CDK 도구 키트를 부트스트랩하려면 다음 명령을 AWS 리전실행합니다.

cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1

이 명령은 라는 CloudFormation 스택을 생성합니다CDKToolkit.

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

CDK 프로젝트를 생성합니다.

원하는 언어를 사용하여 CDK 프로젝트를 생성합니다. 이 패턴은 TypeScript를 사용합니다. TypeScript를 사용하여 CDK 프로젝트를 생성하려면 다음 명령을 실행합니다.

cdk init app —language typescript

클라우드 아키텍트

패키지를 설치합니다.

CDK 프로젝트의 루트 경로npm install에서를 실행합니다. CDK 라이브러리를 설치한 후 다음 명령을 실행하여를 설치합니다. waitcondition-hook-for-aws-fargate-task

yarn add waitcondition-hook-for-aws-fargate-task

클라우드 아키텍트

CDK 애플리케이션 및 Amazon ECS 구성 요소를 빌드합니다.

CDK 프로젝트를 빌드합니다. Amazon ECS 작업 정의 리소스가 필요합니다. 작업 정의 생성에 대한 자세한 내용은 Amazon ECS 설명서의 Amazon ECS 작업 정의를 참조하세요.

다음 예제에서는이 구문을 사용합니다.

import * as cdk from 'aws-cdk-lib'; import { Vpc } from 'aws-cdk-lib/aws-ec2'; import * as ecr from 'aws-cdk-lib/aws-ecr'; import * as ecs from 'aws-cdk-lib/aws-ecs'; import { Construct } from 'constructs'; import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task'; import { Queue } from 'aws-cdk-lib/aws-sqs'; export class FargateRunnerStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define the VPC const vpc = new Vpc(this, 'MyVpc') // Define the Fargate Task const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {}); // Import exiting ecr repo const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName'); // Add a container to the task taskDefinition.addContainer('MyContainer', { image: ecs.ContainerImage.fromEcrRepository(repo), }); // Create the Fargate runner const myFargateRunner = new FargateRunner(this, 'MyRunner', { fargateTaskDef: taskDefinition, timeout: `${60 * 5}`, vpc: vpc, }); // Create the SQS queue const myQueue = new Queue(this, 'MyQueue', {}); // Add dependency myQueue.node.addDependency(myFargateRunner); } }
클라우드 아키텍트

CDK 애플리케이션을 동기화하고 시작합니다.

  1. 자산 및 CloudFormation 템플릿을 생성하려면 CDK 루트 경로에서 다음 명령을 실행합니다.

    cdk synth

  2. synth 명령이 성공하면 다음 명령을 실행하여 리소스를 배포합니다.

    cdk deploy

waitcondition-hook-for-aws-fargate-task 구문은 Fargate 작업을 실행합니다.

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

리소스를 정리하십시오.

이전 단계에서 프로비저닝된 리소스를 정리하려면 다음 명령을 실행합니다.

cdk destroy
클라우드 아키텍트

문제 해결

문제Solution

일반 CloudFormation 스택 실패

일반적인 CloudFormation 스택 실패 문제를 해결하려면 다음 예제와 같이 --no-rollback 플래그를 추가합니다.

cdk deploy --no-rollback

이 명령은 CloudFormation 스택이 롤백되지 않도록 일시 중지하여 문제를 해결할 리소스를 제공합니다. 자세한 내용은 AWS CloudFormation 설명서의 리소스 프로비저닝 시 실패를 처리하는 방법 선택을 참조하세요.

AWS Step Functions 실패

AWS Step Functions 상태 시스템은 여러 가지 이유로 실행되지 않을 수 있습니다. 가 —disable-rollback 구성된 경우 다음 단계를 사용하여 문제를 해결합니다.

  1. 에 로그인하고 검색 필드에 Step Functions를 AWS Management Console입력한 다음 Step Functions 서비스를 선택합니다.

  2. 왼쪽 탐색 창에서 상태 시스템을 선택한 다음 CloudFormation 스택에서 프로비저닝한 상태 시스템을 선택합니다.

  3. 실행에서 예기치 않게 실패한 실행의 이름을 선택합니다.

  4. 이벤트 보기에서 실패한 단계를 선택합니다.

자세한 내용은 AWS Step Functions 설명서의 Step Functions에서 문제 해결Step Functions 콘솔에서 실행 세부 정보 보기를 참조하세요.

AWS Lambda 함수 실패

이 구문은 CallbackFunction 및 라는 두 가지 Lambda 함수를 프로비저닝합니다ErrorhandlerFunction. 처리되지 않은 예외와 같은 다양한 이유로 실패할 수 있습니다. 다음 단계를 사용하여 문제를 해결합니다.

  1. 에 로그인하고 검색 필드에 CloudWatch를 AWS Management Console입력한 다음 CloudWatch 서비스를 선택합니다.

  2. 탐색 창에서 로그 그룹(Log groups)을 선택합니다.

  3. 검색 필드에 Lambda 함수의 이름을 입력합니다.

  4. Lambda 함수와 연결된 로그 그룹 이름을 선택합니다.

  5. Lambda 함수 실행 결과로 이동하려면 최신 로그 스트림을 선택합니다.

자세한 내용은 AWS Lambda 설명서의 Lambda 문제 해결을 참조하세요.

관련 리소스

AWS 설명서

기타 리소스