AWSのElastic BeanstalkアプリケーションをGitHub Actions経由で自動デプロイする設定と実施の記録です。
前提条件
- Elastic Beanstalkのアプリケーションを初回デプロイ済
- 自動デプロイ用のAWSユーザーは未作成
- GitHubリポジトリ作成済
AWSの自動デプロイ用のユーザー作成
AWSのサイトにログインし、IAMのコントロールパネルを開きます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github01.png)
メニューから「ユーザー」を選択します。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github02.png)
「ユーザーの作成」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github03.png)
わかりやすいユーザー名を入力して「次へ」ボタンをクリックします。
今回はユーザー名を「eb_deploy_github」としておきます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github04.png)
「許可のオプション」で「ポリシーを直接アタッチする」を選択します。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github05.png)
「許可ポリシー」では、次の2つを選択してから「次へ」ボタンをクリックします。
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
確認画面の内容を確認してから「ユーザーの作成」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github06.png)
ユーザー一覧に表示されたユーザー名をクリックして詳細を開きます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github07.png)
「アクセスキーを作成」のリンクをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github08.png)
「ユースケース」の箇所で「コマンドラインインターフェイス(CLI)」にチェックをします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github09.png)
「上記のレコメンデーションを理解し、アクセスキーを作成します。」にチェックをしてから「次へ」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github10.png)
説明を入力してから「アクセスキーを作成」ボタンをクリックします。
※UTF-8とか言われてますが、Windowsの入力はShift-JISで面倒なので英語にします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github11-1.png)
アクセスキー作成直後の画面はすぐには閉じないでください。
ここで必ず「アクセスキー」と「シークレットアクセスキー」をコピーして控えておきましょう。
ここでコピーし損ねると二度とコピーできず、新しいアクセスキーを作成し直すことになります。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github12-1024x478.png)
GitHubリポジトリのシークレット登録
先程作成したAWSのデプロイ用ユーザーのアクセスキーとシークレットアクセスキーをGitHubリポジトリのシークレットとして登録していきます。
GitHubリポジトリを開き、「Settings」タブを開きます。
サイドメニューの「Secrets and variables」から「Actions」を選択します。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github13.png)
「New repository secret」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github14.png)
「Name」欄には「AWS_ACCESS_KEY_ID」を入力し、
「Secret」欄には、先程AWSで作成した「アクセスキー」を入力して
「Add secret」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github15.png)
再度、「New repository secret」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github16.png)
「Name」欄には「AWS_SECRET_ACCESS_KEY」を入力し、
「Secret」欄には、先程AWSで作成した「シークレットアクセスキー」を入力して
「Add secret」ボタンをクリックします。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github17.png)
「AWS_ACCESS_KEY_ID」と「AWS_SECRET_ACCESS_KEY」の2つが登録されました。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github18-1.png)
GitHubワークフローの作成
ローカルでリポジトリのコンテンツを更新したら、
プロジェクトトップに「.github/workflows/」フォルダを作成し、
その中にGitHubワークフローのファイルを作成します。
名前は適当で良いですが、ここでは「aws_eb_deploy.yml」としておきます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github19.png)
ワークフローの内容は、以下のサイトからのコピペを修正していきます。
▼修正後の内容:
※注:ブランチ名は「main」に修正
※注:「actions/checkout」は「v4」に修正
※注:バージョン名はpackage.jsonから取得
※注:デプロイ用ZIPは親ディレクトリに作成
※注:「application_name」を修正
※注:「environment_name」を修正
※注:「region」を修正
name: Deploy main
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Get Version From Package JSON
id: new-version
run: |
echo version=$(cat package.json | grep version | head -1 | grep -Po '\d+\.\d+\.\d+') >> $GITHUB_OUTPUT
- name: Show New Version
run: echo "version=${{ steps.new-version.outputs.version}}"
- name: Generate deployment package
run: zip -r ../deploy${{ steps.new-version.outputs.version}}.zip . -x '*.git*'
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: getting-started-app2
environment_name: Getting-started-app2-env
version_label: ${{ steps.new-version.outputs.version}}
region: ap-northeast-1
deployment_package: ../deploy${{ steps.new-version.outputs.version}}.zip
アプリケーション名、環境名、リージョン、バージョンラベル等は適宜修正してください。
この内容で保存したら、コミットしてGitHubリポジトリにプッシュし、プルリクエストを作成します。
プルリクエストをマージしてみる
作成されたプルリクエストをmainブランチへマージしてGitHub Actionsを自動実行させます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github20-1024x646.png)
エラー無く、無事デプロイ完了したようです。
トータル51秒ですね。
AWS Elastic Beanstalk側の環境パネルでイベントの確認もしてみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github21.png)
エラーや警告は見られませんね。
一応、本番のコンテンツ表示も確認してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/eb_deploy_github22.png)
AWSデフォルトのnode.jsサンプルアプリを少しだけ修正したものです。左側のメッセージが更新されています。
というわけで、GitHub経由でElastic Beanstalkアプリの自動更新ができました。
以降の更新作業
上記は初回設定と疎通確認でした。
以降、アプリの更新と自動デプロイの手順は、
- GitHubリポジトリをローカルにプル
- ローカルでアプリ更新、テスト、コミット
- GitHubリポジトリにプッシュ
- GitHubリポジトリでプルリクエスト作成
- GitHubリポジトリでプルリクエストをマージ
- GitHub Actionsの結果を確認
- AWS Elastic Beanstalkのイベントとヘルスを確認
- 本番サイトの表示を確認
といったところでしょうかね。
以上、お疲れさまでした。
コメント