Chapter4 AWS CodeDeploy
Last updated
Last updated
AWS CodeDeploy는 Amazon EC2, AWS Fargate, AWS Lambda 및 온프레미스 서비스와 같은 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전 관리형 배포 서비스입니다. AWS CodeDeploy를 사용하여 소프트웨어 배포를 자동화할 수 있으므로 오류가 발생하기 쉬운 수동 작업이 필요하지 않습니다.
이 실습에서는 CodeDeploy를 사용하여 Apache Tomcat을 실행하는 Amazon EC2 인스턴스에 Java WAR 패키지를 설치합니다.
시나리오 단순성을 위해 이 실습에서는 단일 가용 영역(AZ)에 단일 EC2 인스턴스를 사용합니다. 실제 프로덕션 환경에서는 Elastic Load Balancer(ELB) 뒤의 여러 AZ에 분산된 인스턴스를 사용해야 합니다.
AWS CloudFormation을 사용하여 애플리케이션을 배포할 VPC와 EC2 인스턴스를 프로비저닝할 것입니다.
AWS 콘솔에 로그인하고 CloudFormation 을 검색합니다.
CloudFormation 콘솔에서 스택 생성 > 새 리소스 사용(표준)을 클릭 합니다.
템플릿 파일 업로드를 선택 하고 파일 선택을 클릭 합니다 . 2단계에서 다운로드한 yaml 파일을 선택하고 다음을 클릭 합니다.
5. 스택 이름을 UnicornStack으로 지정하고 http://checkip.amazonaws.com/에서 나의IP 주소를 확인합니다. 그리고 MyIP에 IP주소와 CIDR를 입력하고 , 다음을 클릭합니다. ex)1.2.3.4/32
6. 나머지는 모두 기본값으로 설정하고 다음 버튼을 클릭합니다.
7. 마지막에 AWS CloudFormation에서 IAM 리소스를 생성할 수 있는 옵션을 선택하고 전송 버튼을 클릭합니다.
8. 스택이 완료될 때까지 기다립니다. 이 작업은 5분 정도 소요됩니다.
9. 성공하면 AWS 콘솔에서 "EC2"를 검색하고 UnicornStack::WebServer라는 인스턴스가 있는지 확인합니다.
다음으로 Git 리포지토리에 몇 가지 bash 스크립트를 만들어야 합니다. CodeDeploy는 이러한 스크립트를 사용하여 대상 EC2 인스턴스에서 애플리케이션을 설정하고 배포합니다.
Cloud9 IDE에 로그인합니다.
~/environment/unicorn-web-project/ 아래에 scripts라는 새 폴더를 만듭니다.
3. scripts 폴더에 install_dependencies.sh 파일을 만들고 아래의 내용을 복사 붙여넣기 하고 저장합니다.
4. scripts 폴더에 start_server.sh 파일을 만들고 아래의 내용을 복사 붙여넣기 하고 저장합니다.
5. scripts 폴더에 stop_server.sh 파일을 만들고 아래의 내용을 복사 붙여넣기 하고 저장합니다.
6. scripts 폴더 하위에는 아래와 같이 3개의 sh파일이 있어야 합니다.
7. CodeDeploy는 애플리케이션 사양(AppSpec.yml) 파일을 사용하여 배포 중에 수행할 작업을 지정하고 소스의 어떤 파일이 대상에 배치되는지 정의합니다. AppSpec 파일의 이름은 appspec.yml로 지정 하고 소스 코드의 루트 디렉터리에 배치해야 합니다.
8. ~/environment/unicorn-web-project/ 폴더에서 New File을 생성하고 파일의 이름을 appspec.yml으로 설정하고 아래의 내용을 추가하고 저장합니다.
9. 새로 추가된 스크립트 폴더와 appspec.yml 파일을 CodeDeploy에서 사용할 수 있도록 하려면 CodeBuild가 생성하는 zip 파일에 추가해야 합니다. buildspec.yml 파일에 들어가 아티팩트 섹션을 아래와 같이 수정합니다.
10. 이제 CodeCommit에 대한 모든 변경 사항을 커밋합니다.
11. CodeBuild 콘솔에서 unicorn-web-build 프로젝트를 선택하고 빌드 시작을 클릭합니다. zip 패키지에 새로 추가된 아티팩트를 포함하는 프로젝트를 다시 실행합니다.
CodeDeploy에는 원하는 컴퓨팅 플랫폼에 대한 권한을 부여하는 서비스 역할이 필요합니다. EC2/온프레미스 배포의 경우 AWS Managed AWSCodeDeployRole 정책을 사용할 수 있습니다 .
AWS 콘솔에 IAM 콘솔을 엽니다 .
역할을 선택한 다음 역할 만들기를 클릭 합니다.
다른 AWS 서비스의 사용사례에서 CodeDeploy를 선택하고 다음을 클릭합니다.
4. AWSCodeDeployRole 이 있는 것을 확인하고 다음 버튼을 클릭합니다.
5. 역할 이름을 UnicornCodeDeployRole로 지정 합니다. 나머지는 기본값으로 두고 역할 생성을 클릭 하여 완료합니다.
이제 필요한 파일이 준비되었으므로 CodeDeploy 애플리케이션을 생성해 보겠습니다.
AWS 콘솔에 CodeDeploy를 검색합니다 .
왼쪽 메뉴 에서 애플리케이션을 클릭하고 애플리케이션 생성을 선택합니다 .
애플리케이션 이름을 unicorn-web-deploy로 지정 하고 EC2/온프레미스를 컴퓨팅 플랫폼으로 선택합니다. 애플리케이션 생성을 클릭 합니다 .
다음으로 배포 중에 사용된 설정 및 구성이 포함된 배포 그룹을 생성해 보겠습니다. 예를 들어 배포가 특정 태그가 있는 모든 EC2 인스턴스를 대상으로 한다고 정의합니다.
unicorn-web-deploy 배포 그룹 생성을 클릭합니다 .
다음 옵션을 구성합니다.
이름 = unicorn-web-deploy-group
서비스 역할 = arn:aws:iam::<aws-account-id>:role/UnicornCodeDeployRole
배포 유형 = 현재 위치
환경 구성 = Amazon EC2 인스턴스
태그 그룹 1 키 = role
태그 그룹 1 값 = webserver
AWS CodeDeploy 에이전트 설치 = 지금 및 업데이트 예약(14일)
배포 설정 = CodeDeployDefault.AllAtOnce
로드 밸런서 = 로드 밸런싱 활성화 선택을 취소합니다(서버가 하나만 있음).
3. 배포 그룹 생성을 클릭 합니다 .
배포 그룹을 만든 후(즉, 배포할 리소스를 정의한 후) 이제 배포를 만들 수 있습니다!
unicorn-web-deploy-group에서 배포 생성을 클릭 합니다 .
개정 위치의 경우 이전에 생성한 S3 버킷을 사용합니다. (my-artifact-bucket-name은 본인의 버킷이름으로 변경합니다.)
개정 파일 유형을 .zip으로 선택하십시오 .
4. 다른 설정은 기본값으로 두고 배포만들기를 클릭합니다 .
5. 이제 배포가 시작됩니다. 배포 수명 주기 이벤트를 주시하고 성공적으로 완료되었는지 확인합니다.
6. 이제 EC2 인스턴스 콘솔로 이동해서 WebServer 인스턴스의 IP를 복사해서 URL에 붙여넣기 합니다.
이제 애플리케이션을 빌드하고 배포할 수 있습니다. 하지만 현재 두 작업 모두 수동으로 트리거됩니다. CodeCommit의 변경으로 인해 트리거되는 전체 프로세스를 자동화하면 훨씬 더 좋을 것입니다. AWS CodePipeline을 소개합니다.