세미나 & 교육 & Tech

[교육] DevOps Engineering on AWS 3일차

jih0ssang 2024. 6. 24. 10:55

소감

3일동안 진행한 교육은 단기간에 많은 지식을 넣으려니 힘들었다.

그래도 이해를 위한 교육자료와 경험을 해본 것으로 만족한다..ㅎㅎ

이론

AWS CodeDeploy 

∙ EC2 배포의 경우 AWSCodeDeployRole 정책을 해당 서비스 역할에 부여함

∙ ECS 배포의 경우 AWSCodeDeployForECS 정책을 부여함

∙ Lambda 배포의 경우 AWSCodeDeployForLambda 정책을 부여함

 

IAM Access Analyzer

∙ IAM에서 제공하는 도구

∙ AWS 리소스에 대한 액세스 정책을 분석하고 모니터링하여 잠재적인 과도한 권한 부여나 보안 위험을 식별

 

AWS Parameter Store

∙ AWS Systems Manager의 구성 요소

∙ 애플리케이션과 시스템 설정, 비밀, 환경 변수 등 다양한 설정 정보를 중앙에서 안전하게 저장하고 관리할 수 있도록 지원하는 서비스

 

Source Artifact

∙ 소스 코드, 설정 파일, 스크립트 등 빌드 프로세스를 시작하는 데 필요한 모든 파일들을 의미한다.

∙ 주요 사용처: 소스 코드 관리 시스템(GitHub, CodeCommit, S3) 등에서 가져온 코드

 

 

Build Artifact

∙ 빌드 프로세스가 끝난 후 생성된 아티팩트. 배포 단계로 전달됨

 

로그

∙ 이벤트의 타임스탬프가 지정된 변경 불가능한 레코드

∙ 긴급하고 예측할 수 없는 동작을 파악하는 데 사용

 

트레이스(Trace)

∙ End to End 요청 흐름을 인코딩하는 일련의 분산 이벤트의 표현

∙ 요청의 경로 및 구조 모두에 대한 가시화를 제공하는 데 사용

 

AWS X-Ray

∙ 분산된 애플리케이션의 성능 모니터링 및 디버깅을 위한 서비스

∙ 트레이스 부분 커버

 

Standard metric

∙ CPUU

 

Amazon DevOps Guru

개발자 운영자가 자동으로 문제를 탐지할 있게 해주는 기계 학습 기반 서비스

 


실습

실습 5: CI/CD 파이프라인 Amazon Elastic Container Service 사용하여 블루/그린 배포 수행

 

과제 1: 소스 파일 설정

이 과제에서는 애플리케이션 Docker 파일을 참조하도록 빌드 사양 파일을 구성하고 새 이미지를 빌드하며 해당 AWS CodeCommit 소스 리포지토리에 코드를 푸시합니다. 이후에는 CI/CD 파이프라인을 설정할 때 출력 빌드 아티팩트를 사용합니다.

 

과제 1.2: 웹 애플리케이션 이미지 BUILDSPEC 파일 구성

이 과제에서는 AWS CodeBuild와 Docker를 사용하여 웹 애플리케이션 이미지를 빌드하고 이미지를 Amazon ECR에 푸시합니다. 빌드된 Docker 이미지는 제공된 Dockerfile을 기반으로 하며, 이는 사용 중인 애플리케이션이 파란 배경색의 간단한 웹 페이지를 호스팅하는 데 필요한 모든 기본 종속성을 설치합니다. 이 실습의 일부로 Dockerfile 종속성을 apache2로 제한합니다.

      • 빌드 단계:
        • Amazon ECR 로그인
        • ECR 리포지토리 URI 빌드 단계에서 빌드된 이미지의 대상으로 설정
        • Git 커밋 ID 외에 latest 사용하여 빌드된 이미지의 태그 형식을 설정
  • 빌드 단계:
    • Docker 이미지를 빌드한 다음, 빌드 단계에서 정의된 형식을 사용하여 빌드된 이미지에 태그를 지정
  • 빌드 단계:
    • 태그가 지정된 이미지를 ECR 리포지토리로 푸시

 

먼저 소스 리포지토리에 추가하기 전에 빌드 사양 파일을 실습 설정과 일치하도록 구성해야 합니다.

  1. AWS Cloud9 Environment 창에서 local_repo 폴더를 확장한 다음 my-webapp-repo 폴더를 확장합니다.
  2. buildspec.yml 파일을 찾습니다buildspec.yml 파일의 컨텍스트 메뉴를 열고 Open 선택합니다.
  3. 실습 지침 왼쪽에 있는 Resources 창에서 URIwebappECRrepo 변수를 찾고 복사 아이콘을 선택합니다.
  4. AWS Cloud9 편집기 창의 9에서 REPOSITORY_URI= 뒤에 있는 텍스트를 Amazon ECR(Amazon Elastic Container Registry) my-webapp-repo 리포지토리에 대한 값인 URIwebappECRrepo 실습 가이드의 왼쪽에서 복사하여 변경합니다.

 

 

 

과제 1.3: 애플리케이션 이미지 BUILDSPEC 파일을 CODECOMMIT 리포지토리로 푸시

 

 

 

과제 2: 지속적 전달 파이프라인 만들기

이 과제에서는 빌드 사양 파일을 기반으로 애플리케이션 이미지를 자동으로 생성하기 위해 my-webapp-pipeline이라는 CI/CD 파이프라인을 만듭니다. 소스 코드가 업데이트되면 my-webapp-pipeline이 시작됩니다.

 

과제 2.1: 애플리케이션 이미지를 빌드하기 위한 지속적 전달 파이프라인 생성

AWS CodePipeline 마법사를 사용하여 애플리케이션 이미지의 지속적 전달에 필요한 파이프라인 단계를 생성합니다. 이 과제를 위해 AWS Management Console 브라우저 탭으로 돌아가서 다음 단계를 완료하십시오.

 

파이프라인 생성

 

과제 2.2: 애플리케이션 소스 코드를 참조하기 위한 단계 추가

과제에서는 애플리케이션 소스 코드를 참조하기 위해 파이프라인에 단계를 추가합니다. 애플리케이션 소스 코드는 AWS CodeCommit 리포지토리에서 호스팅됩니다. 단계를 추가하면 소스 코드에 대한 모든 변경 사항이 자동으로 탐지되며 파이프라인 워크플로에 지속적으로 통합됩니다my-webapp-repo 리포지토리와 main 브랜치를 추가합니다. 이전 과제에서 이미 변경 사항을 커밋했습니다.

프로젝트 생성 버튼을 누르면 CodeBuild 페이지가 열린다.

빌드 생성 완료 하면 다시 페이지가 돌아온다.

 

 

배포 스테이지는 건너 뛴다.

 

과제 3: 애플리케이션 배포를 지원하도록 ECS 클러스터 준비

이 과제에서는 my-webapp이라는 데모 애플리케이션의 배포를 지원하도록 ECS 클러스터를 구성합니다. 필요한 구성 세부 정보와 함께 ECR 리포지토리에서 호스팅되는 애플리케이션 컨테이너 이미지를 참조하도록 ECS 과제를 정의합니다. 그런 다음, 블루/그린 배포가 활성화되면 태스크 정의에 따라 실행되는 컨테이너에 대한 트래픽 분산을 지원하기 위해 로드밸런서 뒤에서 실행하도록 ECS 서비스를 정의합니다.

 

 

과제 3.1: AMAZON ECS 태스크 정의 생성

이 과제에서는 클러스터의 컨테이너 인스턴스에서 실행할 my-webapp에 대해 my-webapp이라는 이름의 ECS 태스크를 생성합니다. 처음에는 AWS CLI 명령을 실행하여 이미 사용 가능한 컨테이너 이미지를 이용해 태스크를 수동으로 생성합니다. 이후에 파이프라인 워크플로 중에 생성된 최신 이미지를 참조하기 위해 자리 표시자 변수 IMAGE1_NAME 변수를 사용하도록 태스크 정의 파일을 변경합니다.

 

태스크 정의는 태스크에 대한 블루프린트이며 이미지 리포지토리에서 호스팅되는 컨테이너 이미지를 참조합니다. 여기에는 태스크 이름, 개정, 컨테이너 정의, 역할 볼륨 세부 정보와 같은 블루/그린 롤아웃을 수행하는 필요한 최소한의 구성 정보가 포함되어 있습니다.

Lab5 - AWS Cloud9 웹 브라우저 탭으로 돌아갑니다.

AWS Cloud9 Environment 창의 my-webapp-repo 폴더에서 taskdef.json 파일을 찾고 파일의 컨텍스트 메뉴를 연 다음, Open을 선택합니다.

실습 가이드의 왼쪽에서 ecsTaskDefinitionRoleARN 변수를 찾은 후 복사 아이콘을 선택합니다.

AWS Cloud9 IDE environment의 2행에서 executionRoleArn: 다음에 오는 텍스트를 실습 가이드에서 복사한 ecsTaskDefinitionRoleARN 값으로 바꿉니다.

실습 가이드의 왼쪽에서 URIwebappECRrepo 변수를 찾은 후 복사 아이콘을 선택합니다.

AWS Cloud9 IDE 환경의 6행에서 image: 다음에 오는 텍스트를 실습 가이드에서 복사한 URIwebappECRrepo 값으로 바꿉니다.

 주의: executionRoleArn: 또는 image: 를 삭제하지 말고 값을 큰따옴표로 묶어야 합니다. 예를 들면 "arn:aws:iam::000000000000:role/Task_Definition_Role"로 표시합니다.

이렇게 변경하면 taskdef.json이 다음과 비슷하게 표시될 것입니다.

 

 

클러스터에 대한 태스크 정의 생성

$ aws ecs register-task-definition --cli-input-json file://taskdef.json

 

 

taskdef.json

6행에서 이미지 필드 『image』: 다음의 전체 텍스트를  "<IMAGE1_NAME>" 이미지 자리 표시자로 바꿉니다

 

 

과제 3.2: AMAZON ECS 서비스 생성

이 과제에서는 이전 과제에서 정의한 태스크를 기반으로 ECS 서비스 MyApp-Web-service를 생성합니다.

Amazon ECS를 사용하면 Amazon ECS 클러스터에서 지정된 수의 태스크 정의 인스턴스를 동시에 실행하고 유지 관리할 수 있습니다. 이를 일컬어 서비스 스케줄러라고 합니다. 어떤 이유로든 태스크가 실패하거나 중지하는 경우 Amazon ECS 서비스 스케줄러는 다른 태스크 정의 인스턴스를 시작하여 이를 대체하고 사용된 예약 전략에 따라 서비스에서 원하는 수의 태스크를 유지합니다.

서비스에서 원하는 수의 태스크를 유지하는 외에도 로드 밸런서 배후에서 서비스를 선택적으로 실행할 있습니다. 로드 밸런서는 서비스와 연결된 블루/그린 태스크에서 트래픽을 분산합니다.

이미지는 create-service.json 파일이 업데이트될 targetGroupArn, subnets securityGroup 속성이 어떻게 표시되는지를 보여주는 예를 강조 표시합니다.

 

ECS 클러스터에 대한 서비스를 생성

$ aws ecs create-service --service-name MyApp-Web-service --cli-input-json file://create-service.json