v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 예제에서는 Amazon ECR의 이미지에서 인터넷 경계 Application Load Balancer가 앞에 있는 Amazon Elastic Container Service(Amazon ECS) 클러스터에서 실행되는 AWS Fargate 서비스를 생성하는 방법을 보여줍니다.
Amazon ECS는 클러스터에서 Docker 컨테이너를 손쉽게 실행, 중지 및 관리할 수 있게 하는 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. Fargate 시작 유형을 사용하는 서비스 또는 태스크를 시작하여 Amazon ECS에서 관리하는 서버를 사용하지 않는 인프라에서 클러스터를 호스팅할 수 있습니다. 더 세부적인 제어를 위해 Amazon Elastic Compute Cloud(Amazon EC2) 시작 유형을 사용하여 관리하는 Amazon EC2 인스턴스 클러스터에서 태스크를 호스팅할 수 있습니다.
이 예에서는 Fargate 시작 유형을 사용하여 일부 서비스를 시작합니다. AWS Management Console 를 사용하여 Fargate 서비스를 생성한 경우 해당 작업을 수행하기 위해 따라야 할 여러 단계가 있습니다. AWS 에는 Fargate 서비스 생성을 안내하는 다음과 같은 몇 가지 자습서 및 설명서 주제가 있습니다.
이 예에서는 AWS CDK를 사용하여 유사한 Fargate 서비스를 생성합니다.
이 예제에서 사용하는 Amazon ECS 구문은 다음과 같은 이점을 제공하여 AWS 서비스를 사용하는 데 도움이 됩니다.
-
로드 밸런서를 자동으로 구성합니다.
-
로드 밸런서에 대한 보안 그룹을 자동으로 엽니다. 이를 통해 로드 밸런서는 보안 그룹을 명시적으로 생성하지 않고도 인스턴스와 통신할 수 있습니다.
-
서비스와 대상 그룹에 연결하는 로드 밸런서 간의 종속성을 자동으로 주문합니다. 여기서 AWS CDK 는 인스턴스가 생성되기 전에 리스너를 생성하는 올바른 순서를 시행합니다.
-
Auto Scaling 그룹에 대한 사용자 데이터를 자동으로 구성합니다. 이렇게 하면 클러스터를 AMI 연결하기 위한 올바른 구성이 생성됩니다.
-
파라미터 조합을 조기에 검증합니다. 이렇게 하면 이전에 AWS CloudFormation 문제가 노출되어 배포 시간이 절약됩니다. 예를 들어 태스크에 따라 메모리 설정을 잘못 구성하는 것이 쉽습니다. 이전에는 앱을 배포할 때까지 오류가 발생하지 않았습니다. 하지만 이제는 잘못된 구성을 감지하고 앱을 합성할 때 오류를 내보낼 AWS CDK 수 있습니다.
-
Amazon ECR의 이미지를 사용하는 경우 Amazon Elastic Container Registry(Amazon ECR)에 대한 권한을 자동으로 추가합니다.
-
자동으로 확장됩니다. 는 Amazon EC2 클러스터를 사용할 때 인스턴스를 자동으로 확장할 수 있는 메서드를 AWS CDK 제공합니다. 이는 Fargate 클러스터에서 인스턴스를 사용할 때 자동으로 발생합니다.
또한는 자동 조정이 인스턴스를 중지하려고 하지만 작업이 실행 중이거나 해당 인스턴스에서 예약되어 있을 때 인스턴스가 삭제되지 AWS CDK 않도록 합니다.
이전에는 이 기능을 사용하려면 Lambda 함수를 생성해야 했습니다.
-
자산 지원을 제공하므로 한 번에 시스템에서 Amazon ECS로 소스를 배포할 수 있습니다. 이전에는 애플리케이션 소스를 사용하기 위해 Amazon ECR에 업로드 및 Docker 이미지 생성과 같은 몇 가지 수동 단계를 수행해야 했습니다.
중요
사용할 ApplicationLoadBalancedFargateService
구문에는 수많은 AWS 구성 요소가 포함되며, 일부 구성 요소는 사용하지 않더라도 AWS 계정에 프로비저닝된 상태로 두면 사소한 비용이 발생하지 않습니다. 이 예와 함께 를 따르는 경우 정리(cdk destroy)해야 합니다.
CDK 프로젝트 만들기
먼저 CDK 프로젝트를 생성합니다. CDK 앱을 포함하여 AWS CDK 코드를 저장하는 디렉터리입니다.
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language typescript
다음으로 앱을 실행하고 빈 스택을 생성하는지 확인합니다.
cdk synth
Fargate 서비스 생성
Amazon ECS를 사용하여 컨테이너 태스크를 실행할 수 있는 두 가지 방법이 있습니다.
-
Amazon ECS가 정시 컨테이너가 실행 중인 물리적 시스템을 관리하는
Fargate
시작 유형을 사용합니다. -
자동 크기 조정 지정과 같은 관리를 수행하는
EC2
시작 유형을 사용합니다.
이 예에서는 인터넷에 연결된 Application Load Balancer가 앞에 있는 Amazon ECS 클러스터에서 실행되는 Fargate 서비스를 생성합니다.
스택 파일에 다음 AWS Construct Library 모듈 가져오기를 추가합니다.
파일: lib/my_ecs_construct-stack.ts
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecs_patterns from "aws-cdk-lib/aws-ecs-patterns";
스택 내에 다음 코드를 추가합니다.
const vpc = new ec2.Vpc(this, "MyVpc", {
maxAzs: 3 // Default is all AZs in region
});
const cluster = new ecs.Cluster(this, "MyCluster", {
vpc: vpc
});
// Create a load-balanced Fargate service and make it public
new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", {
cluster: cluster, // Required
cpu: 512, // Default is 256
desiredCount: 6, // Default is 1
taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") },
memoryLimitMiB: 2048, // Default is 512
publicLoadBalancer: true // Default is true
});
다음으로 스택을 합성하기 위해 다음을 실행하여 코드를 검증합니다.
cdk synth
스택은 수백 줄이므로 여기에 표시하지 않습니다. 스택에는 기본 인스턴스 1개, 3개의 가용 영역에 대한 프라이빗 서브넷 및 퍼블릭 서브넷과 보안 그룹이 포함되어야 합니다.
스택을 배포하려면 다음을 실행하세요.
cdk deploy
AWS CloudFormation 는 앱을 배포할 때 수행하는 수십 가지 단계에 대한 정보를 표시합니다.
배포가 완료되면 Fargate 기반 Amazon ECS 서비스를 성공적으로 생성하여 Docker 이미지를 실행합니다.
정리
일반적인 유지 관리 모범 사례로 불필요한 비용을 최소화하기 위해 완료 시 스택을 삭제합니다.
cdk destroy