안녕하세요 😊
ElasticBeanStalk 콘솔에서 직접 사용할수도 있지만, 이번 포스팅에서는 ElasticBeanstalk CLI를 사용하는 실습을 해보겠습니다.
ElasticBeanStalk 이란, 인프라에 대한 고민없이 쉽게 환경을 배포하고 사용할 수 있도록 하는 서비스 입니다.
go, java, ,php, python, Nodejs, Rudy 등 다양한 애플리케이션을 지원합니다.
또한, ElasticBeanstalk을 사용한다고 해서 추가비용이 발생하는것도 아닙니다. ! (무료🙌🏻/ 단, 다른 리소스는 비용 발생)
ElasticBeanStalk은 어떤경우에 사용하기 좋을까요?
EC2를 사용하여 웹서비스를 제공하는 거의 모든 경우에 ElasticBeanStalk 사용이 적합합니다.
ElasticBeanStalk을 이용한다면 인프라에 대한 네트워크 토폴로지 구성, 어플리케이션 로깅, 보안, OS 업데이트, 서비스 배포, 장애감지와 자동복구, 백업 그리고 Auto-Scaling 구성까지 모든 인프라를 자동으로 생성/실행/관리한다고 볼 수 있습니다.
ElasticBeanStalk 참 좋은데, 형용할 표현이 없네요 :)
일단 한번 사용해봅시다!
● 개발 환경 구성 - cloud9 생성
저는 개인적으로 😁 최근에 가장 많이 쓰는 서비스중 하나가 Cloud9인것같아요.
세상에서 제일 어려운게 환경 구성인데, cloud9을 사용하면 환경 구성이 매우 쉬워집니다.
사용하고 계시는 컴퓨터에 이미 eb cli를 설치 하셨다면, cloud9 부분은 보지 않고 넘어가셔도 무방합니다.
자, 먼저 Cloud9 콘솔에 접속합니다.
Create environment를 클릭하여 새로운 환경을 생성합니다.
cloud9 이름을 입력 후 "Next step"을 클릭합니다.
두번째 스탭, 환경의 구성을 세팅합니다. 아래와 같이 입력하고 "Next Step"을 클릭합니다.
* 네트워크 VPC 설정의경우, 잘 모른다면, Default로 두고 시작하세요!
저는 Public Subnet과 Private Subnet이 나뉘어져 있어서 별도로 Public Subnet을 지정해줬습니다.
세번째 스탭, 잘 설정 되었는지 확인합니다. 이후 "Create envirenment"를 클릭하여 환경을 생성합니다.
Cloud9 환경이 정상적으로 배포되고 나면, 이렇게 뜹니다 :)
이제 다음단계로 넘어갑니다.
● 개발 환경 구성 - eb cli 설치
이번 단계에서는 Cloud9 개발 환경에 eb cli를 설치합니다. (링크)
아주 간단합니다 :)
순서대로 따라 해주세요 😁
명령어를 순서대로 복사 붙여넣기 하시고, 결과는 아래 캡쳐와 같은지 확인하시면 됩니다.
먼저, git 저장소를 복사해옵니다.
ec2-user:~/environment $ git clone https://github.com/aws/aws-elastic-beanstalk-cli-setup.git
이후에 인스톨러를 실행합니다.
ec2-user:~/environment $ ./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer
이렇게 쭉 진행되다가 마지막에 Success!를 확인하면 됩니다.
eb cli를 사용하기 위해 환경변수 등록 커멘드가 출력되는데, 이부분도 복사 붙여넣기 하시면 됩니다.
ec2-user:~/environment $ echo 'export PATH="/home/ec2-user/.ebcli-virtual-env/executables:$PATH"' >> ~/.bash_profile && source ~/.bash_profile
ec2-user:~/environment $ echo 'export PATH=/home/ec2-user/.pyenv/versions/3.7.2/bin:$PATH' >> /home/ec2-user/.bash_profile && source /home/ec2-user/.bash_profile
eb --help 명령어로 잘 설치되었는지 확인해봅니다.
ec2-user:~/environment $ eb --help
여기까지 완료 되었다면 다음 단계로 넘어갑니다 :)
● ElasticBeanStalk 애플리케이션 구성 (eb init)
여기에서 많은 샘플 코드를 만나실 수 있습니다 :)
저는 php 샘플 코드를 이용해서 실습을 이어나가도록 하겠습니다.
먼저 샘플코드를 다운받습니다.
ec2-user:~/environment $ wget https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/samples/php.zip
다운받은 파일의 압축을 해제합니다.
ec2-user:~/environment $ unzip php.zip -d ./php_sample
tree 명령어로 내부 구조를 살펴보겠습니다. (-a 옵션으로 숨김파일까지 모두 출력합니다)
ec2-user:~/environment $ tree -a php_sample/
php_sample/
├── cron.yaml
├── .ebextensions
│ └── logging.config
├── EBSampleApp-PHP.iml
├── index.php
├── logo_aws_reduced.gif
├── scheduled.php
└── styles.css
1 directory, 7 files
eb cli를 이용하여 ElasticBeanStalk을 구성하겠습니다.
php_sample 디렉토리로 경로를 이동한 후, eb init 명령어를 통해 elasticBeanstalk의 애플리케이션을 구성하게됩니다.
ec2-user:~/environment $ cd php_sample/
ec2-user:~/environment/php_sample $ eb init
eb init 구성은 다음과 같이 진행합니다.
먼저 리전을 선택해야 합니다. 저는 서울리전을 사용하므로 10) ap-northast-2 를 선택합니다.
어플리케이션 이름을 입력하라고 하네요.
기본설정은 디렉터리 이름을 사용하지만 저는 my-php-application 으로 이름을 입력했습니다.
어떤 플렛폼을 사용하는지 물어봅니다.
저는 php 7.3 (amazon linux) 인 4번 옵션을 골랐습니다.
SSH 설정을 할건지 물어봅니다.
저희는 이따가 SSH로 접속해서 EFS 마운트를 확인할 예정이므로, Y로 설정합니다.
키페어 선택에서 3번으로(create new Keypair) 선택하여, 키도 새로 하나 생성하겠습니다.
이제 여기서는 엔터를 계속 눌러서 Default 값으로 두고 설정을 끝냈습니다!
자! 여기까지 진행됐다면 ElasticBeanstalk 콘솔에서 어플리케이션이 생성된것을 확인할 수 있습니다!
다시 돌아와서 cloud9에서 tree 명령어로 php_sample 디렉토리 내부 구조를 살펴보겠습니다.
(-a 옵션으로 숨김파일까지 모두 출력합니다)
아까는 보이지 않던 .elasticbeanstalk 디렉터리가 생성되었고, 그 안에 config.yml이 생성되었네요.
이 config.yml파일에 환경에 대한 설정이 들어가 있습니다 :)
ec2-user:~/environment/php_sample $ tree -a .
├── cron.yaml
├── .ebextensions
│ └── logging.config
├── EBSampleApp-PHP.iml
├── .elasticbeanstalk
│ └── config.yml
├── .gitignore
├── index.php
├── logo_aws_reduced.gif
├── scheduled.php
└── styles.css
2 directories, 9 files
● ElasticBeanStalk 환경 구성 (eb create)
이제 환경을 생성하겠습니다.
명령어는 아주 간단합니다. eb init을 했던 php_sample 디렉토리에서 eb create 명령어를 실행합니다.
ec2-user:~/environment/php_sample $ eb create
자, 이제 단계별로 진행해봅시다.
환경의 이름을 입력합니다. 저는 my-php-app-1로 만들었습니다.
DNS CNAME을 물어보는데, 저는 Default 값으로 두고 다음으로 넘어갑니다.
이제는 이 환경에 application 로드벨런서를 사용합니다 :)
최근에 application Share 기능이 추가되었습니다. 이미 있는 Application Load Balancer를 Share하여 사용할거냐 물어보네요.
저는 N을 입력하여 새로 만들겠습니다.
마지막 질문은 Spot인스턴스를 환경에 추가할거냐는 질문인데, 저는 N을 입력했습니다.
이제 환경이 생성됩니다. ;)
※ 주의사항 (오류가 난다면 참고해주세요 )
이 설정으로 생성하는 ElasticBeanStalk은 Default VPC에 생성됩니다.
만약 Default VPC가 없다면 여기에서 오류가 발생할 수 있습니다.
해결 방법은 1. DefaultVPC 생성 2. eb create시 VPC 지정 입니다. 별도로 설명하지 않지만 링크 걸어놓겠습니다.
이제 ElasticBeanStalk에 들어가서 잘 생성되었는지 확인해봅니다.
my-php-app-1 환경이 생성되었습니다.
my-php-app-1 환경을 클릭하고, 상단의 URL을 클릭합니다.
테스트 페이지가 잘 뜨네요!
여기까지 완료 하셨다면 이제 다음 단계로 넘어갑니다.
● ElasticBeanStalk 환경 구성 (eb deploy)
개발 소스가 바뀔때 간편하게 eb deploy 명령어로 새로 배포 가능합니다 :)
먼저, cloud9d에 접속하고 index.php를 수정합니다.
ec2-user:~/environment/php_sample $ echo "This is my Deploy Test <br> version 1" > index.php
cat 명령어로 내용을 확인해볼수 있습니다.
수정한 내용으로 잘 들어가있네요!
이제 eb deploy로 새로 만든 index.php을 포함한 개발 소스를 배포하도록 하겠습니다.
ec2-user:~/environment/php_sample $ eb deploy
이렇게 간단하게 배포가 완료되었습니다!
ElasticBeanstalk 콘솔로 이동해서 실제로 배포가 잘 되었는지 확인해봅니다.
로그를 확인해보니, 새로운 어플리케이션 버전이 성공적으로 디플로이 되었다고 나오네요,
이제 상단 URL을 클릭하여 페이지를 확인해봅시다.
위에서 작성한 내용처럼 잘 나오네요!
이렇게 새로 배포된 버전은 콘솔 "어플리케이션 버전"에서 관리할 수 있습니다.
zip 파일로 다운받을수도 있습니다.
자, 여기까지 마무리 되었다면, 이번 실습은 종료합니다.
이번 실습과 연결되는 다음 포스팅이 있으니, 이왕 하신김에 다음 포스팅도 진행합시다!
여기까지만 진행하신다면, cloud9 과 ElasticBeanStalk 을 모두 잘 삭제해주세요 :)
고생하셨습니다 :)