BLOG
Amazon CodePipeLine 사용하기 (Codedeploy + S3)
작성 : 메가존 SA팀
AWS Codepipeline은 안정적으로 어플리케이션을 배포, 빌드, 릴리즈하며 업데이트 할수 있는 도구이며, 매우 빠르다는 장점이 있습니다. Amazon S3에 소스를 업로드와 함께 즉시 자동으로 전송 배포가 이루어지므로 개발자에게 소스를 배포하는데 장점이 많습니다.
선택 가능한 것들
1) 현재 사용가능한 리전 (2016년 8월 11일 기준) : US Virginia, Oregon, Ireland
2) Source Repo : GitHub, Amazon S3, Amazon CodeCommit
3) Build 방법 : Jenkins, Solano CI, No Build
4) Deploy 방법 : Amazon CodeDeploy
기본적인 프로세스는 Source로 Amazon S3나 GitHub의 소스가 변경상태를 확인하고 변경이 되면 소스를 Build단에서 다운받고, Build가 없다면 패스되며, 바로 Deploy 프로세스를 실행하게 됩니다. Deploy는 Amazon CodeDeploy를 사용하면 됩니다.
설정방법
- CodeDeploy 설정
먼저 CodeDeploy에서 Application을 생성합니다. CodeDeploy 에서 생성한 CodeDeploy를 먼저 생성하고, EC2인스턴스에 CodeDeploy Agent를 설치해야합니다. EC2 인스턴스에는 S3에 있는 Bucket에 대한 리소스를 GetList 와 GetObject Policy가 주어져야합니다.
EC2에 부여할 Role
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "*" } ] }
CodeDeployPolicy 생성하여 CodeDeployRole에 Attach할 Policy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "autoscaling:PutLifecycleHook", "autoscaling:DeleteLifecycleHook", "autoscaling:RecordLifecycleAction", "autoscaling:CompleteLifecycleAction", "autoscaling:DescribeAutoscalingGroups", "autoscaling:PutInstanceInstandby", "autoscaling:PutInstanceInService", "ec2:Describe*" ], "Effect": "Allow", "Resource": "*" } ] }
CodeDeployRole의 Trust Relationship 추가 (사용할 리전을 추가해야합니다.)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.us-east-1.amazonaws.com", "codedeploy.ap-northeast-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
인스턴스 생성시 User Data추가하기
#!/bin/bash yum -y update yum install -y aws-cli cd /home/ec2-user aws s3 cp s3://aws-codedeploy-us-west-2/latest/install . --region us-west-2 chmod +x ./install ./install auto yum -y install httpd* yum -y install php-* --skip-broken yum -y install php-mysql service httpd start chkconfig httpd on
배포할 소스의 appspec.yml은 적당히 작성합니다. 아래는 예제입니다.
version: 0.0 os: linux files: - source: / destination: /var/www/html permissions: - object: /var/www/html pattern: "**" owner: apache group: apache type: - directory hooks: ApplicationStop: - location: scripts/stop timeout: 30 runas: root AfterInstall: - location: scripts/install timeout: 50 runas: root ApplicationStart: - location: scripts/start timeout: 30 runas: root
CodeDeloy Application은 아래와같이 만들었습니다.
아마존 웹콘솔로 이동하여 [CodeDeploy]로 이동합니다. [Get Started Now]를 클릭하고
[Custom Deployment]를 클릭합니다.
[Skip Walkthrough]를 클릭합니다. [Application Name]에는 “CodeDeploy”라고 입력하고 [Deployment Group Name]에는 “CodeDeployGroup”을 입력합니다.
[Search by Tags]에는 Amazon EC2 이나 Auto Scaling Group중 사용할 것을 선택하시면 됩니다. 여기서는 EC2로 테스트 해 보겠습니다.
Half는 절반, All은 99% 배포를 합니다. [Service Role]은 위에서 만든 CodeDeployRole을 선택해서 넣습니다.
[Create Application]을 클릭하면 생성이 됩니다. 아래는 생성된 화면입니다.
S3로 이동하여 소스를 업로드 할 버킷을 만들고 버저닝을 enable 합니다.
[Create Bucket]을 클릭하고 사용할 리전을 선택한 후 아래와 같이 버킷을 생성합니다.
돋보기를 클릭하여 속성을 확인합니다. 오른쪽 화면에서 [Versioning]을 클릭하고 [Enable Versioning]을 클릭합니다.
해당 버킷에 소스를 압축하여 Upload를 시킵니다.
- CodePipeLine 설정하기
[Services]에서 [CodePipeLine]으로 이동합니다. [Get started]를 클릭합니다.
먼저 [PipeLine Name]을 입력하고 [Next Step]을 클릭합니다.
Source Location은 Amazon S3, GitHub, AWS CodeCommit 를 선택할수 있습니다. 여기서는 S3를 선택하면 됩니다. Amazon S3 Location은 만든 버킷과 업로드한 소스를 적어주면 됩니다. [Next Step]을 클릭합니다.
Build는 빌드에 사용할 프로그램을 선택하면 됩니다.
No Build, Add Jenkins, Solano CI중 선택하면 되며, 여기서는 php를 업로드 테스트하므로 No Build를 선택합니다. [Next Step]을 클릭합니다.
Beta는 배포방식을 선택하면 됩니다. Beanstalk, OpsWorks, CodeDeploy중 하나를 선택합니다. 여기서는 CodeDeploy를 선택합니다. 아까 CodeDeploy 에서 생성한 Application Name을 입력합니다. Deployment Group 또한 같이 넣어줍니다. 아래와 같습니다. [Next Step]을 클릭합니다.
Service Role네임을 만드시면 됩니다. [Create Role]로 생성하거나 존재한다면 해당 롤을 적어주면 됩니다. [Next Step]을 클릭합니다.
마지막 화면은 지금까지 이력한 사항을 요약한 화면입니다. [Create PipeLine]을 클릭하면 Pipeline이 생성됩니다.
생성 이후 아래와 같은 화면에서 일괄적인 배포상태를 보실수 있으며, S3에 소스를 업로드시에 자동으로 배포되는 화면을 볼수가 있습니다.
Beta가 Succeeded 되면 웹사이트를 확인해보시면 됩니다.
에러가 나면 “Details”를 클릭하여 에러 내용을 확인하고 수정하면 됩니다.
읽어주셔서 감사합니다.