CircleCIからAWS Elastic Beanstalkにpush(Deploy)

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

こっちのほうがスマートなのでおすすめする。 > 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を取り込むので、プロジェクトの設定に1つ追加しておきます。

AWS_CREDENTIAL_FILE=/home/ubuntu/.aws/eb_credentials.txt

git aws.push

この場合、デフォルトではignoreされる./.elasticbeanstalk/configはGitリポジトリに含めています。

含めたくない場合でもブランチ名とEnvironmentの対応があればいいので、CircleCI上で生成してもかまいません。

参考: Git ブランチを特定の環境にデプロイする - AWS Elastic Beanstalk

これで任意のブランチがすぐEBにpushされるようになりました。

circleci_eb_png.png