AWS CICD

jisoolee·2023년 5월 16일
0

AWS CodeCommit

Version control: 시간이 지남에 따라 코드에 발생하는 다양한 변경 사항을 이해하고 롤백 할 수 있는 기능

  • AWS CodeCommit은 프라이빗 Git 리포지토리를 호스팅하는 안전하고 확장성이 뛰어난 관리형 소스 제어 서비스이다. GitLab 및 GitHub의 대안이다.

Security

Authentication

  • SSH Keys
  • HTTPS

Authorization

: IAM 정책을 이용해서 사용자와 특정 리포지토리에 대한 역할 권한 관리

Encryption

  • KMS

Cross-account Access

: SSH 키 또는 자격 증명을 다른 사용자와 공유해서는 안 된다.

  • 대신 계정에 IAM 역할을 생성해서 STS 또는 AssumeRoleAPI를 이용하여 CodeCommit 리포지토리에 액세스하도록 한다.

AWS CodePipeline

: 외부 도구에서도 소스나 도커 이미지를 가져올 수 있다.

  • Source

  • Build

  • Test

  • Deploy

  • AWS CodePipeline은 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위해 릴리스 파이프라인을 자동화하는 데 도움이 되는 완전관리형 지속적 전달(CD) 서비스이다. 코드가 변경될 때마다 릴리스 프로세스의 빌드, 테스트 및 배포 단계를 자동화한다. Elastic Beanstalk와 직접 통합된다.

Troubleshooting

  • CloudWatch Event를 사용

CloudFormation Integration

: AWS에서 API를 사용하여 복잡한 인프라를 배포하는 데 사용된다.

CodeBuild

  • Source
  • Build instructions: buildspec.yml
  • CodePipeline은 CodeBuild의 기존 프로젝트 빌드도 불러올 수 있다.
  • AWS CodeBuild는 소스 코드를 컴파일하고 테스트를 실행하며 배포 준비가 된 소프트웨어 패키지를 생성하는 완전관리형 CI(지속적 통합) 서비스이다. Jenkins의 대안
  • CodeBuild 컨테이너는 실행이 끝나면 삭제된다(성공 또는 실패). 실행 중이더라도 SSH로 연결할 수 없다.
  • CodeBuild는 모든 명령을 실행할 수 있으므로 이를 사용하여 static 웹 사이트 구축 및 static 웹 파일을 S3 버킷에 복사하는 등의 명령을 실행할 수 있다.
  • VPC에서 빌드 컨테이너를 실행하도록 CodeBuild를 구성하여 데이터베이스, 내부 로드 밸런서 등과 같은 VPC의 프라이빗 리소스에 액세스할 수 있다.

buildspec.yml

  • 무조건 코드의 루트에 위치한다.
  • env: 환경 변수를 정의할 수 있다.
  • phases: codebuild의 역할을 정의한다.
  • artifacts: 어떤 파일을 추출하고 S3에 보낼지 정한다.
  • cache: 어떤 파일을의 종속성을 S3에 캐시 저장하면 이후의 빌드 속도를 높일 수 있을지 결정한다.

Local Build

: 로그를 넘는 심각한 문제 해결이 필요한 경우, 데스크돕에서 codebuild를 로컬로 실행할 수 있다.

Inside VPC

CodeDeploy

: 애플리케이션을 시간이 지남에 따라 많은 인스턴스에 자동으로 배포한다.

  • 이곳의 EC2 인스턴스들은 elastic beanstalk에 의해 관리되지 않는다.
  • AWS CodeDeploy는 EC2, Fargate, Lambda 및 온프레미스 서버와 같은 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전 관리형 배포 서비스이다. 인플레이스 또는 블루/그린 배포와 같이 실행하려는 전략을 정의할 수 있다.

Steps To Make it Work

  • EC2 인스턴스와 온프레미스 서버는 CodeDDeploy Agent를 실행해야 한다.

Primary Components

  • Application
  • Compute Platform
  • Deployment Configuration
  • Deployment Group
  • Deployment Type
  • IAM Instance Profile
  • Applilcation Revision
  • Service Role
  • Target Revision

appspec.yml

  • files
  • hooks
    - ValidateService: 인스턴스에 서비스가 올바르게 배포되었는지 확인하는 용도

Deployment Configuration

Configurations

One At A Time

Half At A Time

All At Once

Custom

Failures

In-Place Deployment

Blue-Green Deployment

Deployment to EC2

Deploy to an ASG

In-Place Deployment

Blue-Green Deployment

Redeploy & Rollbacks

  • 자동으로 롤백하는 방법(CloudWatch)
  • 수동으로 롤백하는 방법
  • 롤백을 하면 CodeDeploy는 마지막으로 감지한 성공한 리비전을 새로 배포하는데 이전으로 돌아가진 않는다.(새로운 배포를 할 때 가장 나중에 성공한 배포를 사용한다)

Troubleshooting

  • Deployment Error: "InvalidSiignatureException": EC2 인스턴스를 AWS와 동기화된 올바른 시간 서버에 연결되도록 한다.

AWS CodeStar

: 모든 서비스를 그룹화하는 통합 솔루션

AWS CodeArtifact

: 개발자와 CodeBuild가 모두 클라우드 내 CodeArtifact에서 바로 종속성을 검색할 수 있다.

EventBridge Integration

: CodeArtifact 변경사항이 AWS의 다운스트림엣 일부 항목을 트리거

Resource Policy

: 다른 계정이나 해당 계정의 사용자와 역할이 CodeArtifact에 액세스하도록 권한을 부여하려면 리소스 정책을 사용한다.

  • 패키지 읽기 권한의 부여는 리소스 정책이 없으면 할 수 없다.

Upstream Repositories

  • 리포지토리당 업스트림 리포지토리는 최대 10개를 보유할 수 있다. 즉, 리포지토리 트리를 검색햇 올바른 종속성을 찾을 수 있다.
  • 리포지토리를 정의할 때는 외부 연결이라는 것을 가질 수 있고 리포지토리당 하나만 있을 수 있다.

External Connection

Retention

Domain

  • Deduplicated Storage
  • Fast Copying
  • Easy Sharinng Across Repositories and Teams
  • Apply Poicy Across Multiple Repositories

Amazon CodeGuru

: 머신러닝 기반의 서비스

  • 자동화된 코드 검토
  • 애플리케이션 성능 권장 사항

Amazon CodeGuru Profiler

: 애플리케이션이 프로덕션 또는 사전 프로덕션 중일 때 애플리케이션의 런타임을 이해하도록 한다.

  • 코드 비효율성을 식별 및 삭제하고 애플리케이션 성능을 향상시킨다.

Agent Configuration

  • MaxStackDepth
  • MemoryUsageLimitPercent
  • MinimumTimeForReportingInMilliseconds
  • ReportingIntervallnMilliseconds
  • SamplingIntervallnMilliseconds: 샘플을 프로파일링하는 데 사용되는 샘플링 간격으로 이 값을 낮게 설정하면 더 많은 샘플링을 얻게 된다.

AWS Cloud9

: IDE가 클라우드에 있는 경우 인터넷으로 Cloud9에 연결할 수 있기만 하면 세계 어느 곳에서나 프로젝트를 작업할 수 있다.(클라우드 기반 코드 편집기)

0개의 댓글