github ActionsとElasticBeanstalkで自動デプロイ環境を作る

github ActionsとElasticBeanstalkで自動デプロイ環境を作る

githubActionsを使ってテストが成功するとAWS上のElasticBeanstalkに自動的にデプロイしてくれるタスクを作ります。
SpringBootで生成したjarをデプロイしていきます。

AWS上での設定

デプロイ用のIAMユーザを作る

IAMからCICD用のユーザを追加していきます。
この時、アクセスの種類は「プログラムによるアクセス」を選択します。

ElasticBeansTalkへのデプロイのために必要な権限をアタッチする

アクセス権限の設定では、「既存のポリシーを直接アタッチ」を選択し、以下の2つの項目をアタッチします。

  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

確認画面

タグは特に指定してないです。

githubでの設定に必要な情報を取得する

ユーザの作成が完了すると、以下のような画面に移ります。
csvファイルをダウンロードして保存しておきます。
※このタイミングでしかcsvファイルやシークレットアクセスキーは確認できません。紛失した場合はアクセスキーを再発行します。

デプロイ対象となるElasticBeansTalkの情報を取得する

github Actionsの設定に使います。

  • 環境名
  • アプリケーション名

github上での設定

Secretsにアクセスキーとシークレットキーを登録する

githubのproject -> Settings -> Secrets
今回は
CICD_DEVELOP_AWS_ACCESS_KEY_ID・・・アクセスキー
CICD_DEVELOP_AWS_SECRET_ACCESS_KEY・・・シークレットキー
で登録しました。

Actionsでworkflowを作成する

name: Java CI

# Controls when the action will run. 
on:
  # mainブランチにpush,margeされたタイミングで発火する
  push:
    branches: [ main ]
  # 手動で実行する
  workflow_dispatch:
  
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      # テスト実行
      - name: Build with Gradle
        run: ./gradlew clean test -i

      # ビルド
      - name: Build
        run: ./gradlew build

      # デプロイversionを一意にするためにtimestampを利用する
      - name: Get timestamp
        uses: gerred/actions/current-time@master
        id: current-time

      # timestampのフォーマットを整形する
      - name: Run string replace
        uses: frabert/replace-string-action@master
        id: format-time
        with:
          pattern: '[:\.]+'
          string: "${{ steps.current-time.outputs.time }}"
          replace-with: "-"
          flags: "g"

      # ElasticBeansTalkへのデプロイ
      - name: Deploy to ElasticBeansTalk
        uses: einaregilsson/beanstalk-deploy@v16
        with:
          # Secretsで登録したキーを設定
          aws_access_key: ${{ secrets.CICD_DEVELOP_AWS_ACCESS_KEY_ID }}
          aws_secret_key: ${{ secrets.CICD_DEVELOP_AWS_SECRET_ACCESS_KEY }}
          # ElasticBeanstalkのアプリケーション名
          application_name: your_application_name
          # ElasticBeanstalkの環境名
          environment_name: your_environment_name
          # timestamp付きのversionでデプロイする
          version_label: "batch-ver-${{ steps.format-time.outputs.replaced }}"
          # ElasticBeanstalkのリージョン
          region: us-east-2
          # デプロイ資材
          deployment_package: ./build/libs/backend-base-0.0.1-SNAPSHOT.jar

デプロイ結果

ElasticBeanstalk上でtimestampのversionでデプロイされたことが確認できます。

関連

github ActionsとAWS S3で自動デプロイ環境を作る

参考

Laravel + AWS Elastic Beanstalk環境をGithub Actionsでデプロイする

Beanstalk Deploy

AWSカテゴリの最新記事