참고 자료: https://youtu.be/F5ZPD3Z53so?si=DOOXLH6oAMIRY1yp
여러 Account 및 VPC에서 여러 CodePipeline 구성
Account 및 VPC 갯수가 많은 대규모 시스템일 경우,
환경별 CodePipeline을 구성하고 Sync하는 방식으로 진행하는 것이 옳을 것 같다.
하지만 비용 및 공수가 환경별로 들며, 푸시를 환경별로 해야하는 부담이 있다.
여러 Account 및 VPC에서 하나의 CodePipeline 구성
Account 및 VPC 갯수가 많지 않은 시스템을 구성하고 있을 경우,
하나의 코드파이프라인을 환경별 계정에서 공유하는 방식을 권장한다.
Cloud A 계정에 CodePipeline을 구성하고, 환경별 Account(Dev, Product) 및 VPC가 해당 파이프라인을 공유하는 방식으로 구성하겠다. 해당 구성은 환경별 배포 파이프라인을 구축하는 것보다 비용 및 공수가 적으며, 소스코드들을 한번에 관리하기 용이하다.
CodePipeline(CodeCommit → CodeBuild) Flow ( → : 트리거)
- 사용자가 소스 Push → CodeCommit
- CodeCommit → CodePipeline에서 CodeBuild에게 빌드시작 요청(명령)
- CodeBuild가 미리 정의된 빌드 인스턴스(CodeBuild instance) 생성
- CodeBuild instance는 CodeCommit에 접근해서 소스코드 가져와 빌드와 유닛테스트 진행.
- 결과물을 S3에 업로드
403 Error! CodeBuild가 가지고 있는 권한 중 KMS과 S3 접근권한 있는지 확인 !!
CodePipeline(CodeBuild → CodeDeploy) Flow ( → : 트리거)
사전환경: 배포 그룹(Deploy Target) 내 CodeDeploy-agent가 깔려있는 상태
- Cloud A 계정의 CodePipeline이 Cloud Dev 계정의 EC2 내 CodeDeploy-agent에게 배포 요청(명령)
이때, 다른 환경의 EC2는 보이지 않을 것이다. 왜냐하면 콘솔환경에서는 지원하지 않고, CLI 환경에서만 지원한다.
파이프라인 config 파일(json 파일 형태) 다운받은 후, 가장 하단부에 CodeDeploy의 arn을 박으면
환경별 CodeDeploy-agent가 CodePipeline을 바라보게 된다.
2. 환경별 CodeDeploy-agent는 Cloud A 계정의 S3 에 접근해 빌드된 파일을 가져와 ELB를 통해 배포
Cloud A 및 환경별 계정(Cloud Dev, Product)이 필요한 권한
CodePipeline
Role1. 각 환경별(Cloud Dev, Product) 계정 접근 권한
A 계정의 CodePipeline에게 Dev, Product 계정의 접근 권한(AdministratorAccess) 부여
→ 임시로 Admin 권한 주었으나, 이후 범위 축소 요망
환경별 CodeDeploy-agent에게 명령을 내리기 위해 환경별 계정 접근 권한을 부여한다.
Role2. CodeDeploy 실행 권한
환경별 CodeDeploy-agent에게 명령을 내리기 위한 CodeDeploy 실행 권한을 부여한다.
CodeBuild
Role1. S3 접근 권한
Codebuild에게 S3 접근 권한(AmazonS3FullAccess) 부여
CodeBuild에서 빌드 프로젝트 생성시 활용
CodeBuild에서 빌드 및 테스트 완료한 파일을 S3에 업로드하기 위해 S3 접근 권한을 부여한다.
Role2. KMS Key
S3에 파일을 올릴 때, KMS Key가 필요하다.
여러 계정으로 쪼개져있는 경우, 고객 관리형 키로 발급받아서 계정별로 공유해야한다.
EC2
Role1. S3 접근 권한
모든 EC2에 IAM 프로파일(역할)을 연결하여 권한 적용
환경별 EC2들이 A 계정의 S3 내 아티팩트를 가져오기 위해 S3 접근 권한을 부여한다.
Role2. KMS Key 복호화 및 암호화
KMS Key를 가지고 있어야 S3 내 암호화된 아티팩트를 가져와 읽을 수 있다.
CodeDeploy
Role1. Cloud A 계정의 S3 접근 권한
환경별 EC2 내 설치된 CodeDeploy-agent들이 Cloud A 계정의 S3 접근하기 위해 권한을 부여한다.
Role2. CodeDeploy 실행 권한(AWSCodeDeployRole)
CodeDeploy-agent가 S3에서 다운로드한 config 파일에서 역할 부여 설정
EC2 내 CodeDeploy-Agent 설치
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/getting-started-codedeploy.html
1단계: 설치 방식(2가지)
- SSM을 통해 Agent 설치 (CodeDeploy 생성시 선택 가능)
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ssm.html - CLI 통해 Agent 설치 (직접 수동 설치)
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-cli.html
IAM 권한 설정
- IAM User의 Access Key 및 Secret Key
- IAM Role (임시보안 자격증명 Secuirty Token Service:STS)
https://blog.hbsmith.io/%EC%A1%B0%EA%B8%88%EC%9D%80-%ED%8A%B9%EC%9D%B4%ED%95%9C-%EC%98%A8%ED%94%84%EB%A0%88%EB%AF%B8%EC%8A%A4%EC%99%80-aws-codedeploy-%EC%97%B0%EB%8F%99%EA%B8%B0-3-sts-%EC%84%B8%EC%85%98-%EC%A0%84%EC%B2%B4-%EB%B0%B0%ED%8F%AC%EC%99%80-%EB%B6%80%EB%B6%84-%EB%B0%B0%ED%8F%AC-d511e631e613
2단계: CodeDeploy에 대한 서비스 역할 생성
3단계: CodeDeploy 사용자 권한 제한
4단계: Amazon EC2 인스턴스에 대한 IAM 인스턴스 프로파일 만들기
이미 필요한 권한 인스턴스에 연결해두었다면 VM 내부에서 json 형식의 텍스트 파일 생성해서 진행하면 된다.
'AWS > Project' 카테고리의 다른 글
AWS SSM 을 활용한 Private EC2 접근 (1) | 2024.07.28 |
---|---|
Stress Tool을 활용한 부하테스트 (0) | 2024.07.16 |
CodeSeries를 활용한 CI/CD - TroubleShooting (1) | 2024.07.01 |
CodeSeries를 활용한 CI/CD 환경 구성 (0) | 2024.07.01 |
CodeSeries를 활용한 CI/CD 구성 (Backend Pipeline) (0) | 2024.06.28 |