관리 메뉴

HAMA 블로그

Play2 를 AWS Elastic Beanstalk 에서 사용해보자. 본문

PlayFramework2

Play2 를 AWS Elastic Beanstalk 에서 사용해보자.

[하마] 이승현 (wowlsh93@gmail.com) 2016. 7. 31. 14:35

* 역주 :  완벽한 전체 내용이 포함되어 있지 않습니다.
             저도 잘 아는게 아니라서 ㅜㅜ  잘 알게되면 추가 / 수정 하겠습니다.


Deploy Playframework (Play!) to AWS Elastic Beanstalk with Jenkins (번역) 

플레이프레임워크는 가볍고 높은 성능을 가진 웹어플리케이션 플랫폼으로써 상태를 갖지 않는 웹 티어에서 완벽하게 작동한다. AWS Elastic Beanstalk 에서도 환상적으로 작동되는데 이 포스트는 플레이프레임워크를 AWS Beanstalk 에서 작동시키기 위해 젠킨스를 이용하는 방법에 대해 말한다.  

플레이프레임워크 버전 2.3+ 과 2.3,2.4,2.5에서 테스팅 되었다.

Step 1: 플레이프레임워크 프로젝트를 준비하라

새로운  "Java SE" container types 타입을 이용하여 Elastic Beanstalk 상에 디플로이 하기 위해 우리는 우리의 플레이 프레임워크에 약간의 변경을 할 것이다. 먼저 dist 라는 이름의 디렉토리를 최상위에 만들어라. .ebextension 과 Procfile를 통해서 ElasticBeanstalk 에게 프로젝트를 런치하는 방법에 대해 알려줄것이다. 

https://github.com/Enalmada/play-beanstalk  (만들어져있는 프로젝트) 


IntelliJ directory structure example for Playframework ElasticBeanstalk

Procfile파일을 만들어서 넣고./bin/ajmoss 의 ajmoss 자리에 build.sbt  에 정의되어있는 네 프로젝트 이름을 넣고-Dconfig.file=conf/live.application.conf를 추가하라 아래처럼 ~

web: ./bin/ajmoss -Dhttp.port=5000 -Dconfig.file=conf/live.application.conf

좋다. 이제 ElasticBeanstalk 에 Deploy 하기위한 준비는 끝났다. Java SE containers 는  nginx  를  reverse proxy 역할로 사용하는데 기본 프록시는 5000번 포트를 사용한다. 만약 커스텀 설정이 필요하면 가능하고 다음을 살펴보라  customize the reverse proxy using these instructions.

Step 2: 젠킨스 만들고 설정하기 

만약 AWS 안에 젠킨스 인스턴스가 없다면 이것을 참고해서 설치하자. install jenkins as outlined in this article.   Oracle JDK 8  젠킨스는 이것도 필요하다. OpenJDK 버전은 지원하지 않는다. 

다음으로 Playframework 프로젝트를 빌드하기위해 아래 처럼   Typesafe Activator 를 인스톨하자:

sudo cd /opt/
sudo wget https://downloads.typesafe.com/typesafe-activator/1.3.7/typesafe-activator-1.3.7-minimal.zip
sudo unzip typesafe-activator-1.3.7-minimal.zip
sudo ln -s activator-1.3.7-minimal activator
sudo touch /etc/profile.d/activator.sh
sudo chmod +x /etc/profile.d/activator.sh
sudo echo 'export PATH=$PATH:/opt/activator/' >> /etc/profile.d/activator.sh
sudo source /etc/profile.d/activator.sh
sudo chown jenkins /opt/activator/activator
sudo chgrp jenkins /opt/activator/activator

이제 activator 는 인스톨되었고  AWS Elastic Beanstalk Deployment Plugin. 를 인스톨 한다.

이제 젠킨스 job 을 만들 준비가 되었다. 당신의 리포지토리에 접속하기위한 소스코드 매니지먼트를 셋업한다. 나는 github +  Git Plugin 을 체크아웃하기위해 사용한다.

다음으로 빌드 스텝을 만드는데 프로젝트 분산을 위해 .zip 파일로  프로젝트를 만든다.  
"Execute Shell" bash 커맨드로 아래와 같이 한다 : 

/opt/activator/activator clean dist
mv target/universal/*.zip target/elasticbeanstalk.zip

이제 우린 AWS Elastic Benastalk 를 위한 추가 빌드 스텝을 추가 할 것이다.  작은 전처리 작업이 필요하다 

Step 3: AWS  권한 을 만들라 

AWS 상에 젠킨스를 접근하고 Elastic Beanstalk 리소스를 제어할 수 있는  key/secret key 페어가 필요하다. S3 버킷을 프로비전해야하고 버킷에 우리의 빌드/리소스를 업로드할 것이다.  가장 간단한 방법은  S3 Bucket 에 직접적으로 권한을 주는것이다 다음 예와 같이 :

{
    "Version": "2008-10-17",
    "Id": "Policy1400141113811",
    "Statement": [
        {
            "Sid": "Stmt1400141111261",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::603736890550:user/jenkins"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::ajmoss-artifacts/*"
        }
    ]
}

노트 : 이 예제는 나의  S3 bucket 이다 이름은 'ajmoss-artifacts'.

Step 4:  AWS Elastic Beanstalk 빌드 스텝을 설정한다.

Jenkins 를 설정하며   "AWS Elastic Beanstalk"  을 위한 빌드 스텝으로 각 섹션을 설정할 것이다.

Example of configuring AWS Elastic Beanstalk build step for jenkins

"AWS Credentials and Region" 에  access key / secret key 를 넣자.

"Application and Environment" 에 EB 리소스의 이름을 넣자. 

"Packaging" 은 root object 를 설정한다 다음과 같이  target/elasticbeanstalk.zip

"Uploading"  업로드 하기위한 S3 bucket 를 설정하며  "S3 Key Prefix"  는 젠킨스를 위한  디렉토리이다. 

"Version and Deployment" 각 빌드의 이름을 설정한다.

나는 
${GIT_COMMIT}-${BUILD_TAG} 를 사용하는데  git commit hash plus the build tag from Jenkins 를 사용한다

Step 5: Kick Ass

이제 Elastic Beanstalk applications 을 손쉽게 할 수 있게 됬다.

Comments