ECS Blue/ Green Update

Hoju·2022년 8월 25일
0
post-custom-banner

ECS Cluster를 생성하실 떄 Container Insights를 활성화하면 CPU, 메모리, 디스크 및 네트워크 같은 컴퓨팅 사용률과 컨테이너 다시 시작 실패 같은 진단 정보를 수집, 집계 및 요약하여 클러스터 관련 문제를 격리하고 빠르게 해결하는 데 도움을 주도록 ECS 클러스터 리소스 사용률이 Cloudwatch로 로그가 저장됩니다.

Fargate 유형은 awsvpc 밖에 지원하지 않습니다.

ECS Service에 IAM은 작업 정의를 생성할 때 아래 부분에서 설정한다는 것을 명심해야합니다. 즉, 예를 들어서 Task가 S3 Bucket에 대한 접근이 필요하면 Task Role에 S3 Bucket에 대한 접근 권한을 추가해줘야합니다.

Fargate ASG - https://aws.amazon.com/ko/premiumsupport/knowledge-center/ecs-fargate-service-auto-scaling/

Autoscaling은 Role을 신경씁니다. 해당 정책은 아래와 같습니다.
#신뢰 정책

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "application-autoscaling.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Attach Policy: AmazonEC2ContainerServiceAutoscaleRole

Task Definition Create

  1. 먼저 ECS 콘솔로 접근 후 작업 정의 부분을 선택합니다. 우측에 새 작업 정의 생성을 선택합니다.
  2. Fargate 시작 유형을 선택합니다. 다음 단계
  3. 작업 정의 이름을 입력한 후 테스크 역할을 선택합니다. 테스크 역할에 부여한 정책은 다음과 같습니다.
  4. 작업 실행 IAM 역할은 새역할 생성으로 선택한 후 넘어갑니다. 그럼 나중에 AWS 서비스에서는 ecsTaskExecutionRole을 생성해서 자동으로 연결해줍니다.
  5. 작업 크기를 설정합니다. memory: 1024(MiB) → 1GB, CPU: 0.5 vCPU → 512 CPU
  6. 컨테이너 추가를 선택한 후 아래와 같이 입력합니다. (전 단계에서 생성해준 ECR Image를 입력해야합니다.) 입력이 다 되면 선수는 추가를 선택합니다.
  7. 생성을 합니다.
  8. 생성한 작업 정의에 JSON 형식을 Blue/ Green 방식에서는 요구를 하기 때문에 taskdefinition에 JSON을 복사해서 taskdefinition.json 파일을 생성하셔도 되며, 제가 올린 Codebuild Files 부분을 수정하셔서 사용합니다.

ECS Cluster Create

  1. 이제 ECS 클러스터 부분에서 클러스터 생성을 선택합니다.
  2. 클러스터 템플릿은 네트워킹 전용을 선택합니다. 다음 단계
  3. 클러스터 이름을 입력 후 생성을 선택합니다.

만약 사용자가 container insights 활성화하고 싶다면 하시면 됩니다! container insights는 사용해 컨테이너화된 애플리케이션 및 마이크로서비스의 지표 및 로그를 수집하고 집계하며 요약할 수 있습니다

ECS Service Create

  1. 생성된 클러스터 부분에서 서비스 → 생성을 누릅니다.
  2. 시작 유형은 FARGATE를 선택합니다. 작업 정의, 클러스터 설정을 확인한 후 서비스 이름을 입력합니다.
  3. 작업 개수는 2개를 설정합니다.
  4. 배포부분에서 배포 유형은 블루/그린 배포를 선택합니다. 다음 단계
💡 CodeDeploy를 위한 서비스 역할은 아래와 같습니다.
#즉 역할을 생성하실 때 Codedeploy-ECS 용으로 생성하면 됩니다.
#신뢰 관계
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "codedeploy.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

#권한에 연결되어있는 Policy
AWSCodeDeployRoleForECS
  1. VPC를 선택합니다. 그런 다음 Private 영역에 Subnet을 선택하도록 합니다.

  2. 보안 그룹은 8080 Port가 열려 있도록 구성합니다. 즉, Container Port와 매칭 시킵니다.

    보안상 ECS Service가 생성되면, ALB로만 트래픽이 가도록 인 바운드 규칙을 편집합니다

  3. 로드 벨런싱 부분에서 Application Load Balancer를 선택합니다.

  4. 로드 벨런서 이름을 확인한 후 로드벨런서에 추가를 선택합니다.

  5. 프로덕션 리스너 포트 부분에서 80:HTTP를 선택합니다. 이것은 ALB에 기존 리스너를 말합니다. 그런다음 생성해둔 대상그룹을 선택하도록 합니다. 테스트 리스너를 추가해주도록 하겠습니다. 테스트 리스너 포트는 8080 Port로 설정합니다. 그런 다음 ALB 보안 그룹에 8080 Port를 주가해줍니다. 리스너는 자동으로 8080이 Attach 됩니다! 또한 보안을 고려하면 ALB에 아웃바운드를 80, 443, 8080을 열어주어야합니다.

  6. Blue/ Green 배포 특성상 대상 그룹이 2개가 필요합니다. 하나는 기존에 대상 그룹을 사용하며 하나는 새로 생성해줍니다.

  7. 다음 단계 → 다음 단계 → 서비스 생성을 합니다. Blue/ Green 특성상 자동으로 Codedeploy에 대한 Application이 생성됩니다.

  8. 이제 작업 부분에서 서비스에서 생성되는 Task에 상태가 Running이 될 때까지 기다립니다.

  9. 그리고 꼭 ALB Target그룹에서 Container에 상태를 확인합니다. 즉, Healthy를 확인합니다.

profile
Devops가 되고 싶은 청소년
post-custom-banner

0개의 댓글