

# 블루/그린, 선형, 카나리 배포에 대한 Application Load Balancer 리소스
<a name="alb-resources-for-blue-green"></a>

Amazon ECS 블루/그린 배포에서 Application Load Balancer를 사용하려면 블루 및 그린 서비스 개정 간 트래픽 라우팅을 허용하는 특정 리소스를 구성해야 합니다.

## 대상 그룹
<a name="alb-target-groups"></a>

Elastic Load Balancing을 사용하는 블루/그린 배포의 경우 두 개의 대상 그룹을 생성해야 합니다.
+ 블루 서비스 개정의 기본 대상 그룹(현재 프로덕션 트래픽)
+ 그린 서비스 개정(새 버전)의 대체 대상 그룹

두 대상 그룹 모두 다음 설정으로 구성해야 합니다.
+ 대상 유형: `IP`(`awsvpc` 네트워크 모드를 사용하는 Fargate 또는 EC2의 경우)
+ 프로토콜: `HTTP`(또는 애플리케이션이 사용하는 프로토콜)
+ 포트: 애플리케이션이 수신 대기하는 포트(일반적으로 HTTP의 경우 `80`)
+ VPC: Amazon ECS 태스크와 동일한 VPC
+ 상태 확인 설정: 애플리케이션 상태를 올바르게 확인하도록 구성됨

블루/그린 배포 중에 Amazon ECS는 배포 단계에 따라 적절한 대상 그룹에 태스크를 자동으로 등록합니다.

**Example Application Load Balancer 대상 그룹 생성**  
다음 CLI 명령은 블루/그린 배포에서 Application Load Balancer와 함께 사용할 두 개의 대상 그룹을 생성합니다.  

```
aws elbv2 create-target-group \
    --name blue-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2

aws elbv2 create-target-group \
    --name green-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2
```

## Application Load Balancer
<a name="alb-load-balancer"></a>

다음 구성을 사용하여 Application Load Balancer를 생성해야 합니다.
+ 스키마: 요구 사항에 따라 인터넷 연결 또는 내부
+ IP 주소 유형: IPv4
+ VPC: Amazon ECS 태스크와 동일한 VPC
+ 서브넷: 서로 다른 가용 영역에서 두 개 이상의 서브넷
+ 보안 그룹: 리스너 포트에서 트래픽을 허용하는 보안 그룹

Application Load Balancer에 연결된 보안 그룹에는 Amazon ECS 태스크에 연결된 보안 그룹으로 트래픽을 허용하는 아웃바운드 규칙이 있어야 합니다.

**Example Application Load Balancer 생성**  
다음 CLI 명령은 블루/그린 배포에 사용할 Application Load Balancer를 생성합니다.  

```
aws elbv2 create-load-balancer \
    --name my-application-load-balancer \
    --type application \
    --security-groups sg-abcd1234 \
    --subnets subnet-12345678 subnet-87654321
```

## 리스너 및 규칙
<a name="alb-listeners"></a>

블루/그린 배포의 경우 Application Load Balancer에서 다음과 같이 리스너를 구성해야 합니다.
+ 프로덕션 리스너: 프로덕션 트래픽 처리(일반적으로 포트 80 또는 443)
  + 처음에 기본 대상 그룹으로 트래픽 전달(블루 서비스 개정)
  + 배포 후 대체 대상 그룹으로 트래픽 전달(그린 서비스 개정)
+ 테스트 리스너(선택 사항): 프로덕션 트래픽을 전환하기 전에 테스트 트래픽을 처리하여 그린 서비스 개정 검증
  + 다른 포트(예: 8080 또는 8443)에서 구성 가능
  + 테스트 중에 대체 대상 그룹(그린 서비스 개정)으로 트래픽 전달

블루/그린 배포 중에 Amazon ECS는 배포 단계에 따라 적절한 대상 그룹으로 트래픽을 라우팅하도록 리스너 규칙을 자동으로 업데이트합니다.

**Example 프로덕션 리스너 생성**  
다음 CLI 명령은 기본(블루) 대상 그룹으로 트래픽을 전달하는 프로덕션 리스너를 포트 80에서 생성합니다.  

```
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 80 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/abcdef123456
```

**Example 테스트 리스너 생성**  
다음 CLI 명령은 대체(그린) 대상 그룹으로 트래픽을 전달하는 테스트 리스너를 포트 8080에서 생성합니다.  

```
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 8080 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

**Example 경로 기반 라우팅에 대한 리스너 규칙 생성**  
다음 CLI 명령은 테스트를 위해 특정 경로에 대한 트래픽을 그린 대상 그룹으로 전달하는 규칙을 생성합니다.  

```
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 10 \
    --conditions Field=path-pattern,Values='/test/*' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

**Example 헤더 기반 라우팅에 대한 리스너 규칙 생성**  
다음 CLI 명령은 테스트를 위해 특정 헤더를 포함한 트래픽을 그린 대상 그룹으로 전달하는 규칙을 생성합니다.  

```
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 20 \
    --conditions Field=http-header,HttpHeaderConfig='{Name=X-Environment,Values=[test]}' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

## 서비스 구성
<a name="alb-service-configuration"></a>

Amazon ECS에서 사용자를 대신해 클러스터의 로드 밸런서 리소스를 관리하도록 허용할 권한이 있어야 합니다. 자세한 내용은 [로드 밸런서에 대한 Amazon ECS 인프라 IAM 역할](AmazonECSInfrastructureRolePolicyForLoadBalancers.md) 섹션을 참조하세요.

Elastic Load Balancing을 사용하여 블루/그린 배포에 대한 Amazon ECS 서비스를 생성하거나 업데이트하는 경우 다음 구성을 지정해야 합니다.

모든 *사용자 입력*을 사용자의 값으로 바꿉니다.

이 구성의 주요 구성 요소는 다음과 같습니다.
+ `targetGroupArn`: 기본 대상 그룹 ARN(블루 서비스 개정).
+ `alternateTargetGroupArn`: 대체 대상 그룹 ARN(그린 서비스 개정).
+ `productionListenerRule`: 프로덕션 트래픽에 대한 리스너 규칙 ARN.
+ `roleArn`: Amazon ECS에서 Elastic Load Balancing 리소스를 관리하도록 허용하는 역할의 ARN.
+ `strategy`: 블루/그린 배포를 활성화하려면 `BLUE_GREEN`으로 설정합니다.
+ `bakeTimeInMinutes`: 프로덕션 트래픽이 이동한 후 블루 및 그린 서비스 개정이 모두 동시에 실행되는 기간.
+ `TestListenerRule`: 테스트 트래픽에 대한 리스너 규칙 ARN. 이는 선택 가능한 파라미터입니다.

```
{
    "loadBalancers": [
        {
            "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/primary-target-group/abcdef123456",
            "containerName": "container-name",
            "containerPort": 80,
            "advancedConfiguration": {
                "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:account-id:targetgroup/alternate-target-group/ghijkl789012",
                "productionListenerRule": "arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/abcdef123456/listener/ghijkl789012/rule/mnopqr345678",
                "roleArn": "arn:aws:iam::123456789012:role/ecs-elb-role"
            }
        }
    ],
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "maximumPercent": 200,
        "minimumHealthyPercent": 100,
        "bakeTimeInMinutes": 5
    }
}
```

## 배포 중 트래픽 흐름
<a name="alb-traffic-flow"></a>

Elastic Load Balancing을 사용하는 블루/그린 배포 중에 트래픽은 다음과 같이 시스템을 통해 흐릅니다.

1. *초기 상태*: 모든 프로덕션 트래픽이 기본 대상 그룹(블루 서비스 개정)으로 라우팅됩니다.

1. *그린 서비스 개정 배포*: Amazon ECS는 새 태스크를 배포하고 대체 대상 그룹에 등록합니다.

1. *트래픽 테스트*: 테스트 리스너가 구성된 경우 테스트 트래픽이 대체 대상 그룹으로 라우팅되어 그린 서비스 개정을 검증합니다.

1. *프로덕션 트래픽 전환*: Amazon ECS는 트래픽을 대체 대상 그룹(그린 서비스 개정)으로 라우팅하도록 프로덕션 리스너 규칙을 업데이트합니다.

1. *베이크 소요 시간*: 프로덕션 트래픽이 이동한 후 블루 및 그린 서비스 개정이 모두 동시에 실행되는 기간.

1. *완료*: 배포에 성공하면 블루 서비스 개정이 종료됩니다.

배포 중에 문제가 감지되면 Amazon ECS는 트래픽을 기본 대상 그룹(블루 서비스 개정)으로 다시 라우팅하여 자동으로 롤백할 수 있습니다.