GitHub Actionsを使っていて、少しハマったのでメモを残しておきます。
やりたいこと
- Github Actions を使って ElasticBeanstalk へデプロイする
困ったこと
- AWS CLI だと ElasticBeanstalk の操作が難しい
- EB CLI を使うことを推奨されている
- マーケットプレイスの EB actions は自由度が低い
- マーケットプレイスの actionsは GitHub Actions OIDC との親和性が低い
やったこと
Github ActionsにEB コマンドをインストール
pipで手動インストールします。
... - name: SetUp python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install awsebcli run: | pip install awsebcli echo "~/.local/bin" >> $GITHUB_PATH ...
eb cliはOIDCとの親和性もOK。
EB CLIの初期化
EB CLI自体はインストール可能になりましたが、eb init
を実行しない限り環境設定がされていないため、エラーが出てまだebコマンドは使えません。
eb init
コマンドはインタラクティブな設定方法であるため、自動化環境上での実行は難しいです。
eb init実行時には、コマンドを実行したディレクトリで .elasticbeanstalk/config.yml
が生成されます。これをあらかじめ用意しておくことで、eb init
を実行しなくても eb cli を初期化できます。
config.yml
branch-defaults: default: environment: test-environment environment-defaults: test-environment: branch: null repository: null global: application_name: test-application default_platform: XXXXX default_region: ap-northeast-1 profile: null sc: null
これでebコマンドが実行できるようになりました。 GitHub Actions OIDC を利用したデプロイは最終的に下記のようになりました。
name: eb-deploy on: [ workflow_dispatch ] env: AWS_ROLE_ARN: "XXXXX" AWS_REGION : "XXXXX" ELASTIC_BEANSTALK_NAME: "XXXXX" APPLICATION_NAME: "XXXXX" permissions: id-token: write contents: read jobs: aws-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: SetUp python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install awsebcli run: | pip install awsebcli echo "~/.local/bin" >> $GITHUB_PATH - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-region: ${{ env.AWS_REGION }} role-to-assume: ${{ env.AWS_ROLE_ARN }} role-session-name: preDeploySession - name: Deploy env: F_TIME: "${{ steps.current-time.outputs.formattedTime }}" run: | eb deploy ${{ env.ELASTIC_BEANSTALK_NAME }} --timeout 30 aws elasticbeanstalk describe-environments --environment-names ${{ env.ELASTIC_BEANSTALK_NAME }}