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.아래의 명령으로 ALB의 DNS 이름을 [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을 사용하여 지속적인 통합 및 배포를 위한 파이프라인 생성
'프로젝트 (Project)' 카테고리의 다른 글
[AI 막차 탑승 : HyperCLOVA X] HCX J 팀 프로젝트 산출물 및 후기 (1) | 2024.07.03 |
---|---|
[AWS] Cats and Dogs Workshop - Using ECS with CI/CD [1] (0) | 2023.05.13 |
[CI/CD] SSH into my VM - Using git action & docker-compose 시연 영상 (1) | 2023.05.01 |
[CI/CD] SSH into my VM - Using git action & docker-compose (0) | 2023.05.01 |
[Woodpecker] Secure & Open-source CI/CD tool 구축 (1) | 2023.04.11 |
댓글