CircleCI에서 AWS Elastic Beanstalk로 푸시 (Deploy)

이쪽이 스마트하기 때문에 추천한다. > CircleCI를 통해 ElasticBeanstalk에 배포하는 방법 - Qiita
여기의 기사는 참고 정도로.

배경은 제쳐두고, PR을 병합하면 빨리 Elastic Beanstalk를 갱신해 두어도 좋은 앱도 있을 것입니다.
그럼 CircleCI에서 push 해 두자.

circle.yml



circle.yml은 이런 느낌.
관련 도구 설정 및 캐시, 배포 명령의 조합입니다.

circle.yml
---
dependencies:
  pre:
    - ci/01_eb_command.sh
    - ci/02_credencial_for_eb.sh
  cache_directories:
    - ~/awstools
deployment:
  my_environment:
    branch: master
    commands:
      - git aws.push

eb 명령 설치 (01_eb_command.sh)



[업데이트]
sudo pip install awsebcli에서 좋은 패턴. 이것은 나이스.
참고: CircleCI를 통해 ElasticBeanstalk에 배포하는 방법 - Qiita

도구 설정 그, eb 명령. 흔히 있는 외부 툴의 도입이군요.
Elastic Beanstalk적으로는 RepositorySetup가 중요합니다.
이 근처, 빌드로 매회 하는 것과 캐쉬 해 두고 싶은 것, 환경 변수로부터 취하고 싶은 것의 구별로 여러가지 궁리의 여지는 있습니다.

ci/01_eb_command.sh
#!/usr/bin/env bash
set -ex

EB_VERSION="2.6.4"
EB_BASE="AWS-ElasticBeanstalk-CLI-${EB_VERSION}"
HOME=${HOME:-/home/ubuntu}

## botoがいるので入れておく
sudo pip install boto

mkdir -p ${HOME}/awstools
cd $HOME/awstools

## ebダウンロード済みならスキップ
if ! [ -d ${HOME}/awstools/${EB_BASE} ]; then
  wget https://s3.amazonaws.com/elasticbeanstalk/cli/${EB_BASE}.zip
  unzip ${EB_BASE}.zip
fi

## ebコマンドをパスが通っている場所にリンク
sudo ln -fs ${HOME}/awstools/${EB_BASE}/eb/linux/python2.7/eb ${HOME}/bin/

## gitのプラグインを`.git/AWSDevTools/`に入れる(eb init相当)
cd $HOME/${CIRCLE_PROJECT_REPONAME}
bash -ex ${HOME}/awstools/${EB_BASE}/AWSDevTools/Linux/AWSDevTools-RepositorySetup.sh

eb 용 credentials 파일 생성 ( 02_credencial_for_eb.sh )



CircleCI의 프로젝트 설정에는 AWS 키를 넣는 곳이 있으며 ~/.aws/config, ~/.aws/credentials를 자동으로 넣어준다.
하지만, eb 커멘드로부터는 직접 읽을 수 없고(..은), 환경 변수에도 들어가지 않는다.

이번에는 있는 것(~/.aws/credentials )을 유용, 성형하기로 했습니다.

ci/02_credencial_for_eb.sh
#!/usr/bin/env bash
set -ex

if [ -f ~/.aws/credentials ]; then
  sed -e 's/\[default\]//' -e 's/aws_access_key_id = /AWSAccessKeyId=/' -e 's/aws_secret_access_key = /AWSSecretKey=/' ~/.aws/credentials | sed ':loop; N; $!b loop; ;s/^\s*\n//' > ~/.aws/eb_credentials.txt
  chmod 0600 ~/.aws/eb_credentials.txt
fi

키 측면을 변경, 여분의 개행과 공백을 지우고 있습니다.

환경 변수 AWS_CREDENTIAL_FILE을 설정하십시오.



eb는 환경 변수 AWS_CREDENTIAL_FILE가 있으면 해당 파일에서 credentials를 캡처하므로 프로젝트 설정에 하나를 추가합니다.
AWS_CREDENTIAL_FILE=/home/ubuntu/.aws/eb_credentials.txt

git aws.push



이 경우 기본적으로 ignore./.elasticbeanstalk/config는 Git 저장소에 포함되어 있습니다.

포함하고 싶지 않은 경우에도 브랜치 이름과 Environment의 대응이 있으면 좋기 때문에, CircleCI상에서 생성해도 괜찮습니다.

참고: Git 브랜치를 특정 환경에 배포 - AWS Elastic Beanstalk

이제 모든 브랜치가 바로 EB에 푸시됩니다.

좋은 웹페이지 즐겨찾기