쿠키 기본 설정 선택

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

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

예:를 사용하여 AWS Fargate 서비스 생성 AWS CDK

포커스 모드
예:를 사용하여 AWS Fargate 서비스 생성 AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

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

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 코드를 저장하는 디렉터리입니다.

TypeScript
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language typescript
JavaScript
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language javascript
Python
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language python source .venv/bin/activate # On Windows, run '.\venv\Scripts\activate' instead pip install -r requirements.txt
Java
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language java

이제 Maven 프로젝트를 IDE로 가져올 수 있습니다.

C#
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language csharp

이제 Visual Studio에서 src/MyEcsConstruct.sln을 열 수 있습니다.

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 모듈 가져오기를 추가합니다.

TypeScript

파일: 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";
JavaScript

파일: lib/my_ecs_construct-stack.js

const ec2 = require("aws-cdk-lib/aws-ec2"); const ecs = require("aws-cdk-lib/aws-ecs"); const ecs_patterns = require("aws-cdk-lib/aws-ecs-patterns");
Python

파일: my_ecs_construct/my_ecs_construct_stack.py

from aws_cdk import (aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns)
Java

파일: src/main/java/com/myorg/MyEcsConstructStack.java

import software.amazon.awscdk.services.ec2.*; import software.amazon.awscdk.services.ecs.*; import software.amazon.awscdk.services.ecs.patterns.*;
C#

파일: src/MyEcsConstruct/MyEcsConstructStack.cs

using Amazon.CDK.AWS.EC2; using Amazon.CDK.AWS.ECS; using Amazon.CDK.AWS.ECS.Patterns;

파일: 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";

스택 내에 다음 코드를 추가합니다.

TypeScript
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 });
JavaScript
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 });
Python
vpc = ec2.Vpc(self, "MyVpc", max_azs=3) # default is all AZs in region cluster = ecs.Cluster(self, "MyCluster", vpc=vpc) ecs_patterns.ApplicationLoadBalancedFargateService(self, "MyFargateService", cluster=cluster, # Required cpu=512, # Default is 256 desired_count=6, # Default is 1 task_image_options=ecs_patterns.ApplicationLoadBalancedTaskImageOptions( image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")), memory_limit_mib=2048, # Default is 512 public_load_balancer=True) # Default is True
Java
Vpc vpc = Vpc.Builder.create(this, "MyVpc") .maxAzs(3) // Default is all AZs in region .build(); Cluster cluster = Cluster.Builder.create(this, "MyCluster") .vpc(vpc).build(); // Create a load-balanced Fargate service and make it public ApplicationLoadBalancedFargateService.Builder.create(this, "MyFargateService") .cluster(cluster) // Required .cpu(512) // Default is 256 .desiredCount(6) // Default is 1 .taskImageOptions( ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage.fromRegistry("amazon/amazon-ecs-sample")) .build()) .memoryLimitMiB(2048) // Default is 512 .publicLoadBalancer(true) // Default is true .build();
C#
var vpc = new Vpc(this, "MyVpc", new VpcProps { MaxAzs = 3 // Default is all AZs in region }); var cluster = new Cluster(this, "MyCluster", new ClusterProps { Vpc = vpc }); // Create a load-balanced Fargate service and make it public new ApplicationLoadBalancedFargateService(this, "MyFargateService", new ApplicationLoadBalancedFargateServiceProps { Cluster = cluster, // Required DesiredCount = 6, // Default is 1 TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, MemoryLimitMiB = 2048, // Default is 256 PublicLoadBalancer = true // Default is true } );
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

이 페이지에서

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