Amazon ECS 플랫폼 브랜치 사용 - AWS Elastic Beanstalk

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

Amazon ECS 플랫폼 브랜치 사용

이 주제는 Amazon Linux 2의 Amazon ECS 플랫폼 브랜치 및 이를 대체하는 플랫폼 브랜치, AL1의 멀티컨테이너 도커(또한 ECS 관리형) 모두를 다룹니다. 달리 명시되지 않는 한, 이 주제의 모든 정보는 두 플랫폼 브랜치에 모두 적용됩니다.

참고

2022년 7월 18일 Elastic Beanstalk는 Amazon Linux AMI(AL1) 에 기반한 모든 플랫폼 브랜치의 상태를 사용 중지로 설정했습니다.

AL1 멀티 컨테이너 도커에서 마이그레이션

현재 AL1 플랫폼 브랜치에서 실행되는 멀티 컨테이너 도커를 사용하는 경우 AL2023에서 플랫폼 브랜치를 기반으로 실행되는 ECS의 플랫폼 브랜치로 마이그레이션을 권장합니다. 최신 플랫폼 브랜치는 이 단종된 플랫폼 브랜치의 모든 기능을 지원합니다. 소스 코드를 변경할 필요가 없습니다. 자세한 내용은 Amazon Linux에서 실행되는 멀티컨테이너 Docker를 Amazon Linux 2023의 ECS로 마이그레이션 섹션을 참조하세요.

ECS 관리형 도커 플랫폼

Elastic Beanstalk는 Amazon Elastic Container Service(Amazon ECS)를 사용하여 ECS 관리형 도커환경에 맞게 컨테이너 배포를 조정합니다. Amazon ECS는 도커 컨테이너를 실행하는 인스턴스 클러스터를 관리하기 위한 도구를 제공합니다. Elastic Beanstalk는 클러스터 생성, 작업 정의 및 실행을 비롯한 Amazon ECS 작업을 처리합니다. 환경의 각 인스턴스는 동일한 컨테이너 세트를 실행하며, 이는 Dockerrun.aws.json v2 파일에 정의되어 있습니다. 도커를 최대한 활용하기 위해, Elastic Beanstalk를 통해 Amazon EC2 인스턴스가 여러 도커 컨테이너를 나란히 실행하는 환경을 생성할 수 있습니다.

다음 다이어그램은 Auto Scaling 그룹의 각 Amazon EC2 인스턴스에서 실행되는 도커 컨테이너 세 개로 구성된 Elastic Beanstalk 환경 예를 보여 줍니다:

참고

Elastic Beanstalk는 애플리케이션의 배포 및 실행을 사용자 지정하는 데 사용할 수 있는 모든 플랫폼에 대한 확장성 기능을 제공합니다. Amazon Linux 2에서 실행되는 ECS 플랫폼 브랜치의 경우, 이러한 기능의 인스턴스 배포 워크플로 구현은 다른 플랫폼과 다릅니다. 자세한 내용은 Amazon Linux 2 이상에서 실행되는 ECS의 인스턴스 배포 워크플로 섹션을 참조하세요.

Dockerrun.aws.json 파일

컨테이너 인스턴스(Elastic Beanstalk 환경에서 ECS 관리형 Docker를 실행하는 Amazon EC2 인스턴스)에는 Dockerrun.aws.json(이)라는 구성 파일이 필요합니다. 이 파일은 Elastic Beanstalk에 고유하며 단독으로 사용하거나 소스 번들의 내용 및 소스 코드와 함께 사용하여 도커 플랫폼에서 환경을 생성할 수 있습니다.

참고

버전 1 Dockerrun.aws.json 형식은 Amazon Linux AMI에서 실행되는 Elastic Beanstalk 환경(이전 Amazon Linux 2 버전)에 단일 도커 컨테이너를 시작하는 데 사용됩니다. 64비트 Amazon Linux에서 실행되는 도커 플랫폼 브랜치를 기반으로 하는 환경은 2022년 7월 18일에 만료됩니다. Dockerrun.aws.json v1 형식에 관한 자세한 정보는 도커 플랫폼 구성 - 도커 구성 미사용을(를) 참조하세요.

Dockerrun.aws.json의 버전 2 형식은 Amazon EC2 인스턴스당 여러 개의 컨테이너를 추가로 지원하며, ECS 관리형 도커 플랫폼에서만 사용할 수 있습니다. 형식은 이전 버전과 상당히 다릅니다

업데이트된 형식에 대한 세부 정보 및 파일 예제는 Dockerrun.aws.json v2을 참조하세요.

도커 이미지

Elastic Beanstalk의 ECS 관리형 Docker 플랫폼에서는 이미지를 미리 빌드하고 퍼블릭 또는 프라이빗 온라인 이미지 리포지토리에 저장해야 합니다.

참고

Elastic Beanstalk의 ECS 관리형 Docker 플랫폼에서는 Dockerfile을(를) 사용하여 배포 중에 사용자 지정 이미지를 빌드할 수 없습니다. Elastic Beanstalk 환경을 생성하기 전에 이미지를 빌드한 후 이를 온라인 리포지토리에 배포하십시오.

Dockerrun.aws.json v2에 이미지를 이름으로 지정합니다. 다음 규칙에 유의하십시오.

  • Docker Hub 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: ubuntu 또는 mongo).

  • Docker Hub의 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: amazon/amazon-ecs-agent).

  • 다른 온라인 레지스트리 안의 이미지는 도메인 이름을 기반으로 추가로 제한됩니다(예: quay.io/assemblyline/ubuntu).

프라이빗 리포지토리를 인증하도록 Elastic Beanstalk를 구성하려면 authentication v2 파일에 Dockerrun.aws.json 파라미터를 포함시킵니다.

컨테이너 인스턴스 역할

Elastic Beanstalk는 도커 컨테이너에서 실행되는 Amazon ECS 컨테이너 에이전트에 Amazon ECS에 최적화된 AMI를 사용합니다. 에이전트는 Amazon ECS와 통신하여 컨테이너 배포를 조정합니다. Amazon ECS와 통신하려면 각 Amazon EC2 인스턴스는 IAM에 해당 권한이 있어야 합니다. Elastic Beanstalk 콘솔에서 환경을 생성할 때 기본 인스턴스 프로파일에 이러한 권한이 연결됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

자체 인스턴스 프로파일을 생성하는 경우, 권한이 최신으로 유지되도록 AWSElasticBeanstalkMulticontainerDocker 관리형 정책을 연결할 수 있습니다. IAM에서 정책과 역할을 만드는 방법에 대한 자세한 내용은 IAM 사용 설명서의 IAM 역할 생성을 참조하십시오.

Elastic Beanstalk에서 생성한 Amazon ECS 리소스

ECS 관리형 Docker 플랫폼을 사용하여 환경을 생성하면 Elastic Beanstalk가 여러 Amazon Elastic Container Service 리소스를 자동으로 생성하고 구성하는 동시에 환경을 구축합니다. 이렇게 하면 각 Amazon EC2 인스턴스에 필요한 컨테이너가 생성됩니다.

  • Amazon ECS 클러스터 – Amazon ECS의 컨테이너 인스턴스는 클러스터로 구성되어 있습니다. Elastic Beanstalk에서 사용할 경우 각 ECS 관리형 Docker 환경마다 항상 클러스터 하나가 생성됩니다.

  • Amazon ECS 작업 정의 - Elastic Beanstalk는 프로젝트의 Dockerrun.aws.json v2를 사용하여 환경의 컨테이너 인스턴스를 구성하는 데 사용되는 Amazon ECS 작업 정의를 생성합니다.

  • Amazon ECS 작업 – Elastic Beanstalk는 Amazon ECS와 통신하여 환경의 모든 인스턴스에서 작업을 실행하여 컨테이너 배포를 조정합니다. 확장 가능 환경에서 Elastic Beanstalk는 인스턴스가 클러스터에 추가될 때마다 새 작업을 시작합니다. 드문 경우지만 컨테이너와 이미지를 위해 예약된 공간의 양을 늘려야 할 수 있습니다. Docker 환경 구성 단원에서 자세히 알아보십시오.

  • Amazon ECS 컨테이너 에이전트 – 이 에이전트는 환경에 있는 인스턴스의 도커 컨테이너에서 실행됩니다. 이 에이전트는 Amazon ECS 서비스를 폴링하고 작업이 실행되기를 기다립니다.

  • Amazon ECS 데이터 볼륨 – Elastic Beanstalk는 (Dockerrun.aws.json v2에서 정의한 볼륨 외에도) 볼륨 정의를 작업 정의에 삽입하여 로그 수집을 용이하게 합니다.

    Elastic Beanstalk는 /var/log/containers/containername의 각 컨테이너의 컨테이너 인스턴스에 로그 볼륨을 생성합니다. 이러한 볼륨의 이름은 awseb-logs-containername이고, 컨테이너를 탑재하기 위해 제공됩니다. 탑재 방법에 대한 세부 정보는 컨테이너 정의 형식 단원을 참조하세요.

여러 Elastic 로드 밸런서 리스너 사용

기본 HTTP 포트에서 실행되지 않는 프록시 또는 다른 서비스에 대한 인바운드 트래픽을 지원하도록 ECS 관리형 Docker 환경에서 여러 개의 Elastic Load Balancing 리스너를 구성할 수 있습니다.

소스 번들에 .ebextensions 폴더를 생성하고 파일 확장명이 .config인 파일을 추가합니다. 다음 예제에서는 포트 8080에서 Elastic Load Balancing 리스너를 생성하는 구성 파일을 보여 줍니다.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

환경이 사용자가 생성한 사용자 지정 Amazon Virtual Private Cloud(Amazon VPC)에서 실행 중인 경우 Elastic Beanstalk가 나머지를 처리합니다. 기본 VPC에서 로드 밸런서로부터의 수신을 허용하도록 인스턴스의 보안 그룹을 구성해야 합니다. 보안 그룹에 수신 규칙을 추가하는 두 번째 구성 파일을 추가합니다.

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

구성 파일 형식에 대한 자세한 내용은 Elastic Beanstalk 환경 리소스 추가 및 사용자 지정옵션 설정을 참조하세요.

Elastic 로드 밸런서 구성에 리스너를 추가하고 보안 그룹에서 포트를 여는 것 외에도, containerDefinitions v2 파일의 Dockerrun.aws.json 섹션에서 호스트 인스턴스의 포트를 도커 컨테이너의 포트에 매핑해야 합니다. 다음 발췌문은 한 가지 예를 보여줍니다:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Dockerrun.aws.json v2 파일 형식에 대한 세부 정보는 Dockerrun.aws.json v2을(를) 참조하세요.

실패한 컨테이너 배포

Amazon ECS 작업에 실패하면 Elastic Beanstalk 환경의 하나 이상의 컨테이너가 시작되지 않습니다. Elastic Beanstalk는 실패한 Amazon ECS 작업으로 인해 멀티컨테이너 환경을 롤백하지 않습니다. 컨테이너가 환경에서 시작되지 않는 경우 Elastic Beanstalk 콘솔에서 현재 버전 또는 이전 작업 버전을 재 배포합니다.

기존 버전을 배포하려면
  1. 환경의 리전에서 Elastic Beanstalk 콘솔을 엽니다.

  2. 애플리케이션 이름 오른쪽의 작업을 클릭한 후 View application versions(애플리케이션 버전 보기)를 클릭합니다.

  3. 애플리케이션 버전을 선택하고 배포를 클릭합니다.