1
Help us understand the problem. What are the problem?

posted at

updated at

Github Actionsでeb cliを使いたい

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を利用。

github/workflows/deploy.yml
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_IDAWS_SECRET_ACCESS_KEYを勝手に見にいく(こちら参照)ので、envで設定しておけばOK。

setup-pythonはインストールするライブラリをrequirements.txtから読み取るので、こちらもアプリケーションのルートに追加。今回はeb cliさえ入ればいいのでそれだけ追加。

requirements.txt
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されてることが多いかも)

elasticbeanstalk/config.yml
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。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?