ElasticBeanstalkへのデプロイをGithub Actionsで行おうとした際のメモ。
マーケットプレイスにBeanstalk関連のactionsで自由度高く使えそうなものがなかった。
この辺はある程度星の数がついているが、eb deploy
くらいはできるけどクローンしたりスワップしたりといったことがしづらそう。
そこで、ワークフローの中で直接eb cliをインストールすることにした。
Github Actionsにeb コマンドをインストール
eb cliはAWS公式にある通りセットアップスクリプトを利用する方法とpipで手動インストールする方法がある。
セットアップスクリプトをActionsのホスト上に落としてきて実行することもできるのだが、この方法だとActionsのキャッシュを使えず毎回一からインストールすることになるため、eb cliのインストールだけで3分くらいかかってしまう。
パッケージマネージャーを使ったライブラリインストールならActionsのキャッシュを使えるため、pipでインストールする方がいい。(Caching dependencies to speed up workflows)
pipでのパッケージインストールはsetup-pythonを利用。
jobs:
build:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
cache: 'pip'
- name: Install awsebcli
run: |
pip install -r requirements.txt
echo "~/.local/bin" >> $GITHUB_PATH
- name: eb version
run: eb --version
eb cliは環境変数のAWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
を勝手に見にいく(こちら参照)ので、env
で設定しておけばOK。
setup-pythonはインストールするライブラリをrequirements.txt
から読み取るので、こちらもアプリケーションのルートに追加。今回はeb cliさえ入ればいいのでそれだけ追加。
awsebcli
これで上記yamlでactionsを実行し、最後にcliバージョンが表示されればeb cli自体のインストールは成功。
eb cliのセットアップ
ここまででeb cli自体はインストールできるが、eb init
を実行しない限り環境設定がされていないため、エラーが出てまだebコマンドは使えない。
You must first run "eb init"
eb init
コマンドはインタラクティブな設定方法であるため、CI上での実行には向かない。
eb init
実行時には、裏側ではコマンドを実行したディレクトリで.elasticbeanstalk/config.yml
が作られる。これをあらかじめ用意しておくことで、eb init
を実行しなくてもeb cliをセットアップできた。(環境を作成する前に設定オプションを設定する
/ EB CLI 設定)
アプリケーションのルートディレクトリに.elasticbeanstalk/config.yml
を追加。(通常は.elasticbeanstalkディレクトリはgitignoreされてることが多いかも)
branch-defaults:
default:
environment: my-environment
environment-defaults:
my-environment:
branch: null
repository: null
global:
application_name: my-application
default_ec2_keyname: my-ec2-key
default_platform: xxxxxxxxxxxxxxxx
default_region: ap-northeast-1
profile: null
sc: null
これでebコマンドが実行できるようになる。
あとはeb deploy
eb clone
eb swap
等実行したいことをactionsで書けはOK。