CodeBuild 및 이벤트를 사용하여 에서 Amazon S3 CodeCommit 로 CloudWatch 이벤트 기반 백업 자동화 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CodeBuild 및 이벤트를 사용하여 에서 Amazon S3 CodeCommit 로 CloudWatch 이벤트 기반 백업 자동화

작성자: Kirankumar Chandrashekar(AWS)

환경: 프로덕션

기술: DevOps, 스토리지 및 백업

워크로드: 기타 모든 워크로드

AWS 서비스: Amazon S3, Amazon CloudWatch, AWS CodeBuild, AWS CodeCommit

요약

Amazon Web Services(AWS) 클라우드에서 AWS CodeCommit 를 사용하여 보안 Git 기반 리포지토리를 호스팅할 수 있습니다. CodeCommit 는 완전 관리형 소스 제어 서비스입니다. 그러나 CodeCommit 리포지토리가 실수로 삭제된 경우 해당 콘텐츠도 삭제되며 복원할 수 없습니다

이 패턴은 CodeCommit 리포지토리를 변경한 후 Amazon Simple Storage Service(Amazon S3) 버킷에 리포지토리를 자동으로 백업하는 방법을 설명합니다. CodeCommit 리포지토리가 나중에 삭제되면 이 백업 전략은 point-in-time 복구 옵션을 제공합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정.

  • 요구 사항에 따라 사용자 액세스가 구성된 기존 CodeCommit 리포지토리입니다. 자세한 내용은 CodeCommit 설명서의 용 설정을 AWS CodeCommit 참조하세요. 

  • CodeCommit 백업을 업로드하기 위한 S3 버킷입니다. 

제한 사항

  • 이 패턴은 모든 CodeCommit 리포지토리를 자동으로 백업합니다. 개별 CodeCommit 리포지토리를 백업하려면 Amazon CloudWatch Events 규칙을 수정해야 합니다.

아키텍처

이 다이어그램은 이 패턴의 워크플로우를 보여줍니다.

AWS 클라우드 architecture showing Git push workflow from Users to S3 bucket via CodeCommit and CodeBuild.

이 워크플로우는 다음 단계로 구성됩니다.

  1. 코드가 리 CodeCommit 포지토리로 푸시됩니다.

  2. CodeCommit 리포지토리는 리포지토리 변경 사항(예: git push 명령)을 CloudWatch Events에 알립니다.

  3. CloudWatch 이벤트는 CodeCommit 리포지토리 정보를 호출AWS CodeBuild 하고 전송합니다.

  4. CodeBuild 는 전체 CodeCommit 리포지토리를 복제하여 .zip 파일로 패키징합니다.

  5. CodeBuild 는 .zip 파일을 S3 버킷에 업로드합니다.

기술 스택

  • CloudWatch 이벤트

  • CodeBuild

  • CodeCommit

  • Amazon S3

도구

  • Amazon CloudWatch Events – CloudWatch Events는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 거의 실시간 스트림을 제공합니다.

  • AWS CodeBuild 는 소스 코드를 컴파일하고, 테스트를 실행하고, 배포할 준비가 된 소프트웨어 패키지를 생성하는 완전 관리형 지속적 통합 서비스 CodeBuild 입니다. 

  • AWS CodeCommit –보안 Git 기반 리포지토리 CodeCommit 를 호스팅하는 완전 관리형 소스 제어 서비스입니다. 

  • AWS 자격 증명 및 액세스 관리(IAM) - AWS 리소스에 대한 액세스를 안전하게 제어하는 데 도움이 되는 웹 서비스IAM입니다.

  • Amazon S3 – Amazon Simple Storage Service(S3)는 인터넷 스토리지 서비스입니다.

에픽

작업설명필요한 기술
CodeBuild 서비스 역할을 생성합니다.

AWS 관리 콘솔에 로그인하고 IAM 콘솔을 엽니다. 역할을 선택하고 역할 생성을 선택합니다. 에 대한 서비스 역할을 생성 CodeBuild 하여 CodeCommit 리포지토리를 복제하고, S3 버킷에 파일을 업로드하고, Amazon 에 로그를 전송합니다 CloudWatch. 자세한 내용은 CodeBuild 설명서의 CodeBuild 서비스 역할 생성을 참조하세요.

클라우드 관리자
CodeBuild 프로젝트를 생성합니다.

CodeBuild 콘솔에서 CodeBuild 프로젝트 생성을 선택합니다. 추가 정보 섹션의 buildspec.yml 템플릿을 사용하여 CodeBuild 프로젝트를 생성합니다. 이 스토리에 대한 도움말은 CodeBuild 설명서의 빌드 프로젝트 생성을 참조하세요. 

클라우드 관리자
작업설명필요한 기술
CloudWatch 이벤트에 대한 IAM 역할을 생성합니다.

IAM 콘솔에서 역할을 선택하고 CloudWatch 이벤트에 대한 IAM 역할을 생성합니다. 이에 대한 자세한 내용은 IAM 설명서의 CloudWatch 이벤트 IAM 역할을 참조하세요.

중요 : CloudWatch 이벤트에 대한 IAM 역할에 codebuild:StartBuild 권한을 추가해야 합니다.

클라우드 관리자
CloudWatch 이벤트 규칙을 생성합니다.
  1. CloudWatch 콘솔에서 이벤트를 선택한 다음 규칙 을 선택합니다. 규칙 생성을 선택하고 추가 정보 섹션의 CloudWatch 이벤트 규칙을 사용합니다. 이렇게 하면 CodeCommit 리포지토리에서 이벤트 변경(예: git push 또는 git commit 명령)을 수신하는 규칙이 생성됩니다. 자세한 내용은 AWS CodePipeline 설명서의 CodeCommit 소스에 대한 CloudWatch 이벤트 규칙 생성을 참조하세요.

  2. 대상을 선택하고 주제를 선택한 다음 입력 구성을 선택합니다. 입력 변환기를 선택하고 추가 정보 섹션의 입력 경로와 입력 템플릿을 사용합니다. 이렇게 하면 CodeCommit 리포지토리 세부 정보가 구문 분석되어 환경 변수로 CodeBuild 프로젝트로 전송됩니다. 자세한 내용은 CloudWatch 설명서의 입력 변환기 자습서를 참조하세요. 

  3. 세부 정보 구성을 선택하고 규칙에 대한 이름과 설명을 입력합니다. Create rule을 선택합니다.

중요 : 이 CloudWatch 이벤트 규칙은 모든 CodeCommit 리포지토리의 변경 사항을 설명합니다. 개별 리 CodeCommit 포지토리를 백업하거나 다른 리포지토리 백업에 별도의 S3 버킷을 사용하려면 CloudWatch 이벤트 규칙을 수정해야 합니다.

클라우드 관리자

관련 리소스

CodeBuild 프로젝트 생성

CloudWatch 이벤트 규칙 생성 및 구성

추가 정보

CodeBuild buildspec.yml 템플릿

version: 0.2 phases: install: commands: - pip install git-remote-codecommit build: commands: - env - git clone -b $REFERENCE_NAME codecommit::$REPO_REGION://$REPOSITORY_NAME - dt=$(date '+%d-%m-%Y-%H:%M:%S'); - echo "$dt" - zip -yr $dt-$REPOSITORY_NAME-backup.zip ./ - aws s3 cp $dt-$REPOSITORY_NAME-backup.zip s3:// #substitute a valid S3 Bucket Name here

CloudWatch 이벤트 규칙

{ "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ] } }

CloudWatch 이벤트 규칙 대상의 샘플 입력 변환기

입력 경로:

{"referenceType":"$.detail.referenceType","region":"$.region","repositoryName":"$.detail.repositoryName","account":"$.account","referenceName":"$.detail.referenceName"}

입력 템플릿(값을 적절히 입력하세요):

{ "environmentVariablesOverride": [ { "name": "REFERENCE_NAME", "value": "" }, { "name": "REFERENCE_TYPE", "value": "" }, { "name": "REPOSITORY_NAME", "value": "" }, { "name": "REPO_REGION", "value": "" }, { "name": "ACCOUNT_ID", "value": "" } ] }