AWSのElastic BeanstalkアプリケーションをGitHub Actions経由で自動デプロイする設定と実施の記録です。
前提条件
- Elastic Beanstalkのアプリケーションを初回デプロイ済
- 自動デプロイ用のAWSユーザーは未作成
- GitHubリポジトリ作成済
AWSの自動デプロイ用のユーザー作成
AWSのサイトにログインし、IAMのコントロールパネルを開きます。

メニューから「ユーザー」を選択します。

「ユーザーの作成」ボタンをクリックします。

わかりやすいユーザー名を入力して「次へ」ボタンをクリックします。
今回はユーザー名を「eb_deploy_github」としておきます。

「許可のオプション」で「ポリシーを直接アタッチする」を選択します。

「許可ポリシー」では、次の2つを選択してから「次へ」ボタンをクリックします。
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
確認画面の内容を確認してから「ユーザーの作成」ボタンをクリックします。

ユーザー一覧に表示されたユーザー名をクリックして詳細を開きます。

「アクセスキーを作成」のリンクをクリックします。

「ユースケース」の箇所で「コマンドラインインターフェイス(CLI)」にチェックをします。

「上記のレコメンデーションを理解し、アクセスキーを作成します。」にチェックをしてから「次へ」ボタンをクリックします。

説明を入力してから「アクセスキーを作成」ボタンをクリックします。
※UTF-8とか言われてますが、Windowsの入力はShift-JISで面倒なので英語にします。

アクセスキー作成直後の画面はすぐには閉じないでください。
ここで必ず「アクセスキー」と「シークレットアクセスキー」をコピーして控えておきましょう。
ここでコピーし損ねると二度とコピーできず、新しいアクセスキーを作成し直すことになります。

GitHubリポジトリのシークレット登録
先程作成したAWSのデプロイ用ユーザーのアクセスキーとシークレットアクセスキーをGitHubリポジトリのシークレットとして登録していきます。
GitHubリポジトリを開き、「Settings」タブを開きます。
サイドメニューの「Secrets and variables」から「Actions」を選択します。

「New repository secret」ボタンをクリックします。

「Name」欄には「AWS_ACCESS_KEY_ID」を入力し、
「Secret」欄には、先程AWSで作成した「アクセスキー」を入力して
「Add secret」ボタンをクリックします。

再度、「New repository secret」ボタンをクリックします。

「Name」欄には「AWS_SECRET_ACCESS_KEY」を入力し、
「Secret」欄には、先程AWSで作成した「シークレットアクセスキー」を入力して
「Add secret」ボタンをクリックします。

「AWS_ACCESS_KEY_ID」と「AWS_SECRET_ACCESS_KEY」の2つが登録されました。

GitHubワークフローの作成
ローカルでリポジトリのコンテンツを更新したら、
プロジェクトトップに「.github/workflows/」フォルダを作成し、
その中にGitHubワークフローのファイルを作成します。
名前は適当で良いですが、ここでは「aws_eb_deploy.yml」としておきます。

ワークフローの内容は、以下のサイトからのコピペを修正していきます。
▼修正後の内容:
※注:ブランチ名は「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を自動実行させます。

エラー無く、無事デプロイ完了したようです。
トータル51秒ですね。
AWS Elastic Beanstalk側の環境パネルでイベントの確認もしてみます。

エラーや警告は見られませんね。
一応、本番のコンテンツ表示も確認してみます。

AWSデフォルトのnode.jsサンプルアプリを少しだけ修正したものです。左側のメッセージが更新されています。
というわけで、GitHub経由でElastic Beanstalkアプリの自動更新ができました。
以降の更新作業
上記は初回設定と疎通確認でした。
以降、アプリの更新と自動デプロイの手順は、
- GitHubリポジトリをローカルにプル
- ローカルでアプリ更新、テスト、コミット
- GitHubリポジトリにプッシュ
- GitHubリポジトリでプルリクエスト作成
- GitHubリポジトリでプルリクエストをマージ
- GitHub Actionsの結果を確認
- AWS Elastic Beanstalkのイベントとヘルスを確認
- 本番サイトの表示を確認
といったところでしょうかね。
以上、お疲れさまでした。
- 0
- 0
- 0
- 0


コメント