Elastic Beanstalk便利ですよね、初めて使ったときは感動した。
ただ、eb deploy
これがイケてない...!
デプロイの方法がイケてない気がしてずっとモヤモヤしていたため、CircleCI2.0経由でデプロイする方法を検討しました。
唯一、CircleCIは1.0の情報が多くて、2.0の情報と混同してしまって少し手こずりました。
改めて下記、情報を参考にさせていただきながらまとめました。
-
「まだ間に合う!CircleCI 2.0へ移行する」
- CircleCI 1.0 ➞ 2.0の変更点を解説してくれています。
-
CircleCI 2.0 Beanstalk Deployment example
- 英語ですが、同じ課題に対してのソリューションを解説してくれています。
前提
- Ruby:2.5.3
- Rails:5.1.5
※ ElasticBeanstalkへデプロイ済みの状況を想定しているため、ElasticBeanstalkなどの環境構築関連は割愛します。
目次
- AWS IAM にてCircleCIからBeanstalkを操作する用のユーザーを作成
- GitHub / BitBucketをCircleCIに接続
- 1で作成したIAMユーザー情報をCircleCI内で設定
- デプロイ
1. AWS IAM にてCircleCIからBeanstalkを操作する用のユーザーを作成
まずデプロイ操作用のIAMを作成します。
「IAM」➞ 「ユーザー」➞ 「ユーザーを追加」で作成画面へ。
「アクセスの種類」はプログラムによるアクセスを選択。ユーザー名は認識しやすいものを適当につけます。
アクセス許可では、「AWSElasticBeanstalkFullAccess」をアタッチし、ユーザー作成。
ユーザー作成後にできるcredentialsは後ほどCircleCI上で設定するため、保管しておきましょう。
2. GitHub / BitBucketをCircleCIに接続
CicleCIへ行き、Github or Bitbucketアカウントで、サインアップします。
Add Projectをするとステップが表示されるので基本的にその通りにやればうまくワークしますが、configファイルの中身だけ設定をいじる必要があります。
下記のように書きましたが、さくっと解説します。
各タスクの概念は下記記事を参照してください。
「[Qiita]まだ間に合う!CircleCI 2.0へ移行する」
version: 2
jobs:
deploy:
docker:
- image: circleci/python:2.7
working_directory: ~/repo
steps:
- checkout
- run:
name: Install awscli
command: |
sudo pip install awsebcli --upgrade
- run:
name: Create AWS credentials manually
command: |
mkdir ~/.aws
touch ~/.aws/config
chmod 600 ~/.aws/config
echo "[profile eb-cli]" > ~/.aws/config
echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config
echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config
- run:
name: Deploy to EB if branch is Master
command: |
eb use [your app name] --profile eb-cli
eb deploy -v --staged --profile eb-cli
workflows:
version: 2
build-deploy:
jobs:
- deploy:
filters:
branches:
only:
- master
- develop
dockerをベースに構築。pipで awscliをinstall
jobs:
deploy:
docker:
- image: circleci/python:2.7
working_directory: ~/repo
steps:
- checkout
- run:
name: Install awscli
command: |
sudo pip install awsebcli --upgrade
docker imageを使って、pythonをインストールしていきます。
run
のところでコマンドが走っています。
AWS credentialsを設定
- run:
name: Create AWS credentials manually
command: |
mkdir ~/.aws
touch ~/.aws/config
chmod 600 ~/.aws/config
echo "[profile eb-cli]" > ~/.aws/config
echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config
echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config
現在作っているこの環境に先程作成したCredentialsを適用するコマンドを書いていきます。
デプロイコマンドの設定
- run:
name: Deploy to EB if branch is Master
command: |
eb use [your app name] --profile eb-cli
eb deploy -v --staged --profile eb-cli
ここでは、デプロイコマンドを記述しています。
[your app name]
は各々のElastic Beanstalkの環境でセッティングしたapplication nameを適用してください。
デプロイworkflowの設定
workflows:
version: 2
build-deploy:
jobs:
- deploy:
filters:
branches:
only:
- master
workflow以下は、定義したジョブの発動条件を明記しています。
各々の開発フローに合わせてbranchを設定してください。
ここでは、masterにマージされた時に発動するよう記述しています。
リポジトリへpush
これで設定ファイルはおしまいです。忘れずに連携したリポジトリにpushしてください。
3. 1で作成したIAMユーザー情報をCircleCI内で設定
CicleCIへ行き、「project」➞ 「作成したproject」➞ 「右上にある歯車設定ボタン」でプロジェクトの設定画面に移ります。
「BUILD SETTINGS」内の「Environment Variables」➞ 「Add valuable」で、
・AWS_ACCESS_KEY_ID
・AWS_SECRET_ACCESS_KEY
を追加します。
値は1でIAMを作成した際にできたcredentialsの内容です。
4. デプロイ
いよいよデプロイです。指定したbranchにmergeされたら自動にデプロイが走ります。
ここでエラーが出たら beanstalkとCicleCIの連携ができてないことがほとんどです。
ERROR: This directory has not been set up with the EB CLI
You must first run "eb init".
自分も**eb initしてね〜**というエラーに遭遇しました。
これはローカルで eb init
した際に作られた .elasticbeanstalk/config.yml
が git ignoreされていたことが原因です。
これを修正して、再度pushしたらうまくいきました。
自動デプロイは気持ちいいですね、これにtestを加えたり、buildを加えたりしたらまた追記していこうと思います。終わり。