시리즈 순서
1. CodeCommit 사용하기
2. CodeBuild 사용하기
3. CodeDeploy 사용하기
4.CodePipeline 사용하기
즉 AWS 서비스를 이용해서 CICD를 구축하는 것이 이번 시리즈의 목표이다.
CodeDeploy란 무엇인가?
CodeDeploy는 Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스입니다.
다음을 포함하여 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있습니다.
- 코드
- 서버리스 AWS Lambda 함수
- 웹 및 구성 파일
- Executables
- 패키지
- 스크립트
- 멀티미디어 파일
CodeDeploy는 서버에서 실행되고 Amazon S3 버킷, GitHub 리포지토리 또는 Bitbucket 리포지토리에 저장되는 애플리케이션 콘텐츠를 배포할 수 있습니다. 또한 CodeDeploy는 서버리스 Lambda 함수를 배포할 수 있습니다. CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없습니다.
1. IAM 역할 생성하기
그 다음 EC2를 생성하기 전 EC2에 적용할 역할을 생성해 줘야 한다.
역할 만들기를 클릭한다.
AWS 서비스의 EC2를 선택하고 다음을 클릭한다.
그 이후 권한을 추가해준다.
추가할 권한들 목록이다
먼저 CodeDeploy의 FullAccess를 지정해준다. 그 이후 CodeDeployRole을 추가한다.
CodeDeploy는 AutoScaling을 통해 늘어난 EC2에도 배포가 가능하다. 그러기 위해서는 CodeDeployRole을 설치 해야 한다.
AmazonEC2RoleforAWSCodeDeploy 역시 추가해 준다.
그 이후 S3FullAccess를 지정하고 로그를 위해서 CloudWatch의 권한도 준다.
그리고 나는 윈도우 서버에 CodeDeploy를 설치할 것이기 때문에 SSM FullAccess를 준다.
Amazon에서 윈도우 서버에 CodeDeployagent를 깔기 위해서 권장하는 방법이기 때문에 SSM 역시 설치해 준다.
그 이후 역할 이름을 작성한 후 생성을 완료 시킨다.
2. 윈도우 서버 EC2 생성하기
윈도우 서버로 생성한 이후 IAM 역할을 방금 생성했던 역할을 선택한다. 그 이후 스토리지 선택 및 보안그룹과 pem키를 선택한 후 생성한다.
3. CodeDeployAgent 설치하기
먼저 AWS Systems Manager로 들어온 후 분산자를 클릭한다.
그 이후 우리는 AWSCodeDeployAgent를 설치할 것이기 때문에 AWSCodeDeployAgent를 클릭한다.
그 이후 한 번 설치를 클릭한다.
다른 값들은 다 기본 값으로 유지한 후 대상을 수동으로 선택해 방금 생성한 EC2 인스턴스를 클릭 해 준다.
그럼 잠시 뒤 성공적으로 AWSCodeDeployAgent가 성공적으로 설치되었다는 것을 알 수 있다.
4. CodeDeploy 역할 만들기
역할을 들어간 후 신뢰할 수 있는 유형을 AWS 서비스라고 놔둔 후 사용 사례를 CodeDeploy로 놓은 후 다음을 클릭한다.
다음을 누르면 권한정책이 자동으로 선택되어 있다. 그 이후 다음을 누른다.
그 이후 이름을 작성한 후 역할을 생성한다.
이 역할은 위에서 만든 EC2용과는 용도가 다른 CodeDeploy 용도로 사용 할 것이다.
5. CodeDeploy 어플리케이션생성
CodeDeploy로 들어온 후 애플리케이션 생성을 누른다.
그 후 이름을 작성하고 컴퓨팅 플랫폼을 선택한다.
나는 S3에 있는 파일 및 폴더를 EC2로 옮기려고 하기 때문에 EC2/온프레미스로 선택하였다.
6. Codedeploy 배포 그룹 생성
위에서 생성한 애플리케이션을 클릭한 후 배포 그룹 생성을 클릭한다.
그 후 배포그룹 이름을 작성한다.
서비스 역할에는 위에서 생성했던 CodeDeploy 전용 IAM 역할을 집어 넣으면 된다.
배포 유형에는 두가지가 있다. 현재 위치 및 블루/그린이다.
우리는 현재 위치로 할 것이다.
블루 그린의 경우 두개의 그룹으로 나눠 무중단으로 배포를 가능하게 한다. 주로 AutoScaling을 하는 인스턴스의 로드밸런서를 선택해서 진행할 수 있다.
하지만 우리는 하나의 EC2 인스턴스를 통해서 CodeDeploy를 진행할 것이므로 현재위치를 클릭한다.
그 후 Amazon EC2 인스턴스를 선택한다.
그 후 내 인스턴스의 이름이나 태그를 통해서 인스턴스를 지정해 준다.
그 후 우리는 위에서 에이전트 구성을 완료했기 때문에 안함을 누르고 넘어간다. 그 후 배포 설정에서는
CodeDeployDefaul.AllAtOnce를 지정한다.
배포 설정에 관한 정확한 설명은 여기로 들어가면 된다.
그 후 우리는 로드밸런서를 따로 설정하지 않았으므로 로드 밸런싱 활성화를 풀어준 후 배포 그룹 생성을 눌러준다.
7. appspec.yml 작성
version: 0.0
os: operating-system-name
files:
source-destination-files-mappings
permissions:
permissions-specifications
hooks:
deployment-lifecycle-event-mappings
위는 Amazon Docs에서 제공하는 EC2 배포용 appspec.yml에 대한 구조이다.
EC2 배포용 appspec.yml 파일의 구조에 대한 설명은 다음과 같다.
versions
맨 위에 기재된 버전은 현재 유일하게 허용되는 값이 0.0이므로 값을 변동시키면 안된다.
OS
두번째는 OS로 두가지로 나뉜다.
- Linux – Amazon Linux, Ubuntu Server 또는 RHEL 인스턴스입니다.
- Windows – Windows Server 인스턴스입니다.
files
이 섹션에서는 배포의 설치 이벤트 중 인스턴스에 복사해야 하는 파일의 이름을 지정합니다.
permissions
이 섹션은 files 섹션의 파일이 인스턴스에 복사되는 경우 이러한 파일에 특수 권한(있는 경우)이 어떻게 적용되어야 하는지를 지정합니다. 이 섹션은 Amazon Linux, Ubuntu Server 및 Red Hat Enterprise Linux(RHEL) 인스턴스에만 적용됩니다.
hooks
이 섹션은 배포 중 특정 배포 수명 주기 이벤트에서 실행되는 스크립트를 지정합니다.
version: 0.0
os: windows
files:
- source: /
destination: C:\cicd
내가 작성한 appspec.yml이다. 되게 기본적이고 단순한 스크립트이다.
나는 windows 서버를 많이 사용해서 os는 windows로 지정했다.
source에서 /는 모든 디렉토리를 다 옮기고 싶을 때 작성하면 된다.
destination은 내 s3에 있는 파일들이 EC2의 어디에 위치할 것인지에 대해 지정하는 것이다.
그 후 파일 위치를 buildspec.yml과 같은 루트 폴더 최상위 위치로 지정하면 된다.
8. CodeBuild 수정
저번 시리즈에서 생성했던 CodeBuild를 수정해야 한다.
왜냐하면 배포하는 과정 때문이다.
CodeDeploy는 zip과 같은 압축된 파일을 EC2로 옮긴 후 압축을 해제하고 그 후 스크립트들을 실행하는 구조이다.
하지만 그 전 시리즈에서 나는 그냥 파일 및 폴더들로만 생성했기 때문에 CodeDeploy에서 배포를 할 수 없다. 그러므로 CodeBuild를 수정해야 한다.
내가 작성한 CodeBuild에 들어간 후 편집을 클릭하고 아티팩트를 누른다.
그 후 아티팩트 추가를 누른 후 AmazonS3를 선택하고 버킷을 선택한다.
그 후 아티팩트에 대한 이름을 지정하고 아티팩트를 패키징을 진행한다.
나머지에 대한 사항은 그냥 놔둔 후 편집을 완료한다.
그 이후 다시 CodeBuild를 진행하면 이런식으로 codebuild-example이라는 아티팩트가 생성된다. 이는 ZIP 파일이며 이 안에는 내가 CodeCommit한 파일들이 압축되어 있다.
8. 배포 생성
이제 배포에 관한 사전 작업은 모두 끝났으므로 배포를 진행해야 한다.
CodeDeploy로 돌아온 후 내가 생성한 어플리케이션 클릭 -> 배포그룹을 클릭한다.
그 후 배포 생성을 클릭한다.
그 후 배포 그룹을 지정하고
우리는 S3에 저장이 되어있기 때문에 방금 생성한 아티팩트를바라볼 수 있게 지정해준다.
그 후 개정 파일 형식은 zip 형태이기 때문에 .zip을 선택해 준다.
나머지는 기본값으로 유지한 후 배포 만들기를 클릭한다.
그 이후 결과를 지켜보면 성공이 뜨는 것을 확인할 수 있다. 이후 View events를 클릭해 보면
이런식으로 결과가 나오는 것을 확인할 수 있다.
나는 지금 매우 단순한 방법으로 구현했지만 만약 서비스를 띄우거나 자동화 시킨다고 한다면 Install 하기 전 작업부터 Install 후 작업 및 애플리케이션의 상태검사까지 완료할 수 있다.
마지막으로 EC2에 가보면 내가 CodeDeploy를 통해 옮긴 파일및 폴더들을 확인할 수 있었다.
다음 시리즈는 마지막으로 지금까지 진행했던 CodeCommit, CodeBuild, CodeDeploy를 하나의 Pipeline에 담아 진행하는 작업을 할 것이다.
'[AWS] > CICD' 카테고리의 다른 글
[AWS] CI/CD, Pipeline 세미나 실습 (1) | 2022.10.13 |
---|---|
[AWS] CICD 시작하기 (0) | 2022.10.06 |
[AWS][CICD] 4. CodePipeline 사용하기 (0) | 2022.08.19 |
[AWS][CICD] 2. CodeBuild 사용하기 (0) | 2022.08.16 |
[AWS][CICD] 1. AWS CodeCommit 사용하기 (0) | 2022.08.09 |
댓글