본문 바로가기
프로젝트 (Project)

[AWS] Cats and Dogs Workshop - Using ECS with CI/CD [2]

by moveho 2023. 5. 13.

13.Auto Scaling 그룹 구성

[ECS 용량공급자 탐색]

1.ECS 이동해서 클러스터를 선택합니다. 인프라 탭을 클릭한 다음 용량 공급자 블록에 3개의 용량 공급자가 이미 있음을 확인합니다.

2. 용랼 공급자 변경 업데이트를 클릭합니다.

다음 관리형 크기 조정 켜기를 체크를 해제합니다.

 

[Auto Scaling 그룹 구성]

1.EC2 AutoScaling 그룹으로 이동합니다. 동적 조정 정책 생성을 클릭합니다.

 

이름을 클릭하여 들어간 후 자동 크기 조정 만들기 버튼을 클릭합니다.

조정정책을 다음과 같이 구성합니다. 그 후 생성합니다.

 

2. Infra-ECS-Cluster-DEMOGO-ECS Auto Scaling Group을 클릭 하고 Details 탭으로 이동하여 Edit를 클릭 합니다.

최소 값을 2 최대 값을 4로 설정합니다.

 

3. 고급 구성 탭에서 아래로 스크롤하고 고급 구성에서 편집을 클릭합니다. 그리고 기본 쿨다운 값 (휴지시간)10으로 수정합니다.

업데이트를 클릭합니다.

 

[클러스터 부하 테스트]

1.AWS C9 으로 이동하여 ecsworkshop IDE를 엽니다.

2.아래의 명령으로 ALBDNS 이름을 [Your ALB DNS name] 에 복사합니다.

siege -c 500 -i [Your ALB DNS name]

다음과 같이 실행시킵니다.

 

 

13.모니터링

1. cloudwatch로 이동합니다. 다른 브라우저 탭에서 콘솔을 클릭하고 왼쪽 탐색 표시줄에서 모든 알림을 클릭합니다.

2. 이름이 TargetTracking-EC2ContainerService/DEMOGO-ECS/web-AlarmHigh-RANDOMSTRING 이고 조건이  NetworkIn > 50000 경보를 3 이내에 3개의 데이터 포인트에 대해 클릭합니다.

 

3. 경보 상태에 있음을 확인합니다. 그렇지 않을 경우 경보 상태가 변경될 때 까지 기다립니다.

4. ECS 콘솔로 이동합니다. DEMOGO-ECS 클러스터를 엽니다.

5. ECS 인스턴스 수가 4개 또는 5개가 된 것을 볼 수 있습니다.

6. EC2 수가 늘어난 것을 직접 확인해 봅니다. 모두 RUNNING 상태입니다.

7. 인프라 탭을 선택 하고 아래로 스크롤하여 새 컨테이너 인스턴스를 확인합니다.

8. 지표 탭을 선택합니다. 기본 정보를 찾을 수 있으며 View Container Insights를 클리갛여 더 많은 정보를 찾을 수 있습니다.

9. c9으로 돌아와 부하를 멈춥니다.

 

14.CI/CD

[Architecture]

이 섹션에서는 CI/CD 파이프라인을 생성합니다. CodeCommit repo를 생성하고 소스가 수정 될 떄 마다 AWS CodeBuild가 새 컨테이너 이미지를 빌드하여 Amazon ECS에 배포합니다. 이 프로세스는 AWS CodePipeline에서 관리합니다.

[AWS CodeCommit 생성]

1.CodeCommit으로 이동합니다.

2.리포지토리 생성을 선택하고 리포지토리 이름 dogs를 입력합니다.

3. 생성을 클릭합니다.

 

[AWS CodeCommit IAM 사용자 생성]

1.AWS IAM으로 이동하여 사용자를 클릭합니다.

2 .오른쪽 상단 모서리에서 사용자 추가를 클릭합니다.

3. catsdogs IAM 사용자를 생성합니다.

 

4. catsdogs 사용자에게 AWS CodeCommit에 대한 고급 사용자 권한을 부여합니다.

5. 보안자격증명 탭에서 액세스 키를 만듭니다. 액세스 키 만들기를 클릭합니다.

생성후 csv 파일을 다운로드 받습니다.

 

6. 방금 생성한 catsdogs 사용자를 클릭하고 보안자격증명 탭의 AWS CodeCommit에 대한 HTTPS Git 자격증명 생성을 클릭합니다.

자격증명을 다운로드 받습니다.

 

[C9 터미널에서 AWS CodeCommit 리포지토리와 상호작용 하도록 자격증명 설정]

moveho:~/environment/ecsworkshop (main) $ aws configure
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: *****************
Default region name [ap-northeast-2]: 
Default output format [None]:

1.dogs repo를 복제합니다.

moveho:~/environment $ git clone codecommit://dogs

2. dogs의 서비스 소스코드를 푸쉬하려면 /environment/dogs 경로에 파일을 복사하세요.

commit && push 합니다.

 

cd ~/environment/dogs
cp ~/environment/ecsworkshop/dogs/* ./
git add .
git commit -m "initial commit"
git push

5. 소스코드가 codecommit 리포지토리에 성공적으로 푸쉬되었는지 확인합니다.

[AWS Code Pipeline 설정]

1.C9에서 buildspec.yaml 파일을 생성합니다.

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - export AWS_REGION="ap-northeast-2" 
      - export AWS_ACCOUNT_ID="594682333406"
      - export IMAGE_REPO_NAME="dogs"
      - aws --version
      - $(aws ecr get-login --region $AWS_REGION --no-include-email)
      - export REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$IMAGE_REPO_NAME
      - export COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - export IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"dogs","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
    files: imagedefinitions.json

 

<YOUR REGION>  <YOUR ACCOUNT ID>를 알맞게 변경합니다.

 

[AWS Code Pipeline 생성]

1.AWS-CodePipeline으로 이동합니다. 파이프라인 만들기를 클릭합니다.

2.파이프라인 이름: dogs-cicd

3. 소스 단계를 추가합니다.

 

4.build 단계를 추가합니다. aws codebuild를 클릭하고 프로젝트 생성을 클릭합니다.

5. 프로젝트를 구성합니다. 프로젝트 이름은 dog-build 입니다. Privileged를 활성화하여 Docker 이미지를 빌드합니다.

다음과같이 설정을 완료합니다.

다음과 같이 프로젝트를 설정하면 다음을 눌러줍니다.

 

6. 배포단계를 추가합니다.

 

설정을 검토하고 파이프라인을 생성합니다.

 

[AWS CodeBuild 서비스 역할에 대한 권한 추가]

1.IAM- role으로 이동합니다.

2.codebuild 서비스 역할을 검색합니다.

3. 권한 추가를 클릭하고 AmazonEC2ContainerRegistryFullAccess  추가합니다.

 

[테스트 배포]

1.C9에서 /environment/dogs 아래의 index.html 파일 열기

moveho:~/environment/dogs (master) $ vi index.html

다음과 같이 index.html 파일에 version2문구를 추가 하고 저장합니다.

 

2. 수정된 코드를 commit하고 CodeCommit push 합니다.

moveho:~/environment/dogs (master) $ git add .
moveho:~/environment/dogs (master) $ git commit -m "add buildspec and dogs-version2"
moveho:~/environment/dogs (master) $ git push

3. CodePipeline으로 이동해서 배포단계까지 완료 때까지 기다립니다.

 

빌드 배포가 완료되었습니다.

 

4. 실제로 서비스에 배포 되었는지 확인합니다.

 

  • Amazon ECS에서 컨테이너화된 간단한 애플리케이션 ECS Cats and Dogs 생성
  • EC2 기반 및 Fargate 기반 서비스
  • Amazon ECR을 사용하여 고양이  개의 도커 이미지를 생성, 푸시 및 관리했습니다 .
  • Amazon CloudWatch 사용하여 컨테이너 로깅을 중앙 집중화하고 라우팅했습니다 .
  • Amazon CloudWatch Container Insights  ECS 클러스터, 서비스 및 작업을 모니터링했습니다 .
  • 가장 비용 최적화된 방식으로 예측 가능한 성능을 보장하도록 리소스를 자동으로 조정하도록 ECS 서비스 및 클러스터 Auto Scaling 설정
  • AWS CodePipepline 사용하여 지속적인 통합 및 배포를 위한 파이프라인 생성

댓글