あらすじ
「うぇーん助けてドラ◯もん〜!GitHub Enterprise ServerでもCI/CDパイプラインでAmplifyにデプロイできる道具出してよ〜!」
「しょうがないなぁ〜、はい、GitHub Actions〜!(テッテレー)」
背景
最近Amplifyに入門しているのですが、GitHubとAmplifyを接続することで簡単にCI/CDパイプラインが構築できます。
ところがGitHub Enterprise Server(オンプレミスまたは自社管理環境にデプロイできるGitHub製品)はソースコードプロバイダーとして対応していないので、コード管理にGitHub Enterprise Serverを使っている場合は別の方法でCI/CDパイプラインを構築する必要があります。
要望は出ていますが、2026/2/20現在機能実装されていません。
前提
あらかじめ、GitHub上にリポジトリが作成されているものとします。また、Amplify Gen2環境となります。
今回、ビルド環境としてAWS CodeBuildを利用しています。他の方法でビルド環境を用意している場合はワークフローの内容で一部差分があると思いますのでご注意ください(yaml中のruns-onで差分が出ると思います)。
また、デプロイ先のリージョンはCodeBuild環境があるリージョンと同一になります。
手順
デプロイ用のフロントエンド作成
Amplifyにデプロイする用のフロントエンドのコードを用意します。
テンプレートからVite + React作成
npm create vite@latest amplify_gha_deploy -- --template react-ts
すべてデフォルトの選択肢を使用しています。作成完了後、ローカルの画面でVite+Reactの画面が表示されます。
Amplifyにデプロイするための準備
その後、Amplifyを使えるようにします。上記で作成されたディレクトリ内でnpm create amplify@latestを実行するとamplifyディレクトリが作成されます。バックエンドの定義も含めて作成されます。
cd amplify_gha_deploy
npm create amplify@latest
GitHub Actionsワークフローの作成
先にGitHub Actionsのワークフローを作成します。まず全体像がこちら。
name: deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: codebuild-<$CodeBuild環境の名前>-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: read
env:
AMPLIFY_APP_ID: ${{ vars.AMPLIFY_APP_ID }}
AMPLIFY_ENV_NAME: "main"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install npm packages
run: npm ci
- name: Backend deploy
run: |
npx ampx pipeline-deploy \
--branch ${{ env.AMPLIFY_ENV_NAME }} \
--app-id ${{ env.AMPLIFY_APP_ID }}
- name: Frontend build and zip
run: |
npm run build
cd dist && zip -r ../dist.zip . && cd -
- name: Frontend deploy
run: |
RESPONSE=$(aws amplify create-deployment \
--app-id ${{ env.AMPLIFY_APP_ID }} \
--branch-name ${{ env.AMPLIFY_ENV_NAME }})
JOB_ID=$(echo $RESPONSE | jq -r '.jobId')
ZIP_URL=$(echo $RESPONSE | jq -r '.zipUploadUrl')
curl -X PUT -T "./dist.zip" -H "Content-Type: application/zip" "$ZIP_URL"
aws amplify start-deployment \
--app-id ${{ env.AMPLIFY_APP_ID }} \
--branch-name ${{ env.AMPLIFY_ENV_NAME }} \
--job-id $JOB_ID
以下コードの内容解説です。
name: deploy
on:
push:
branches:
- main
workflow_dispatch:
nameはワークフローの名前です。省略も可能ですが、基本記載した方が良いです。
onはワークフロー実行のトリガーとなるイベントを示すもので、今回はmainブランチにpushされた時と手動実行時(workflow_dispatch)に実行できるようしています。
jobs:
deploy:
runs-on: codebuild-<$CodeBuild環境の名前>-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: read
env:
AMPLIFY_APP_ID: ${{ vars.AMPLIFY_APP_ID }}
AMPLIFY_ENV_NAME: "main"
jobsでは各ジョブがruns-onで指定された環境で実行されます。permissionsはcontents: readだけで十分でした。envは環境変数で、この後利用する変数を記載しています。
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install npm packages
run: npm ci
以降は実際にGitHub Actionsで実行される処理です。まず、フロントエンドで利用している依存パッケージをインストールします。
- name: Backend deploy
run: |
npx ampx pipeline-deploy \
--branch ${{ env.AMPLIFY_ENV_NAME }} \
--app-id ${{ env.AMPLIFY_APP_ID }}
その後、後述するAmplifyアプリとブランチの組み合わせに対してバックエンドをデプロイします。npm create amplify@latestでデフォルトテンプレートとしてauthリソースが定義されているため、Amazon Cognitoユーザープールが作成されます。
- name: Frontend build and zip
run: |
npm run build
cd dist && zip -r ../dist.zip . && cd -
フロントエンドのビルドとzip化をしています。この手順はローカルでビルドして、マネコン上でアップロードするときのものと同等です。
- name: Frontend deploy
run: |
RESPONSE=$(aws amplify create-deployment \
--app-id ${{ env.AMPLIFY_APP_ID }} \
--branch-name ${{ env.AMPLIFY_ENV_NAME }})
JOB_ID=$(echo $RESPONSE | jq -r '.jobId')
ZIP_URL=$(echo $RESPONSE | jq -r '.zipUploadUrl')
curl -X PUT -T "./dist.zip" -H "Content-Type: application/zip" "$ZIP_URL"
aws amplify start-deployment \
--app-id ${{ env.AMPLIFY_APP_ID }} \
--branch-name ${{ env.AMPLIFY_ENV_NAME }} \
--job-id $JOB_ID
最後に、zip化されたビルド成果物をデプロイします。
アプリ作成
既存のAmplifyアプリ/ブランチがある場合、本手順は不要です。コンソールからデプロイする場合、ビルドされた生成物のアップロードが必須のため、今回はAWS CLIで実施します。
Amplifyアプリの作成
aws amplify create-app --name amplify_gha_deploy --platform WEB --region ap-northeast-1
ブランチの作成
任意のブランチ名でブランチを作成します。
aws amplify create-branch --app-id <appId> --branch-name main --region ap-northeast-1
CodeBuildのサービスロールに権限追加
CodeBuildでデプロイする際、今回は下記権限が必要になるため、CodeBuildで使われているロールに追加します。
- amplify:CreateDeployment
- amplify:StartDeployment
- AmplifyBackendDeployFullAccess(バックエンドリソースをデプロイする場合)
GitHubのパラメータを設定
ワークフローの中のenvでAMPLIFY_APP_ID: ${{ vars.AMPLIFY_APP_ID }}という記載があったと思いますが、これはGitHub上で設定した変数を参照しています。AMPLIFY_APP_IDはaws amplify create-appコマンドのレスポンスの値、もしくはAmplifyコンソールから確認できるアプリIDのことです。

この値をGitHubの画面で設定します。
GitHub上のリポジトリにある、「Settings」から「Secrets and variables > Actions」を選択します。SecretsとVariablesの項目がありますが、Variablesを選択し、「Manage environment variables」から新しくNameを「AMPLIFY_APP_ID」、Valueを先ほど確認したアプリIDで設定します。

動作確認
ここまでで設定は完了したので、mainブランチにpushして動作を確認します。

無事にワークフローが完了し、Amplifyコンソールからもデプロイされていることが確認できました。
実際にURLアクセスすると、Vite+Reactの初期画面が表示され、うまく行っていることが確認できます。

Cognitoのユーザープールも作成されていることを確認しました。
補足
さて、今回はAMPLIFY_ENV_NAMEをmainに固定したワークフローを実行しました。実際の開発では、商用環境以外にもステージング環境や開発環境を用意することがあると思います。Amplifyでは追加のブランチ(環境)を用意することで商用にデプロイする前に動作確認等を行うことができます。もちろん、GitHub Actionsでも実現できるのでやってみました。
Amplifyのブランチを用意
作成したAmplifyアプリのIDを含めて新規ブランチを作成します。今回はdevという名前で作りました。
aws amplify create-branch --app-id <作成済みのアプリID> --branch-name dev --region ap-northeast-1
ワークフローの書き換え
ワークフローのyamlファイルを一部修正します。
ワークフローの実行トリガーに、GitHubのdevブランチにpushを追加します。また、AMPLIFY_ENV_NAMEで対応する環境を取得できるようにしています。(${{ github.ref_name }}でブランチ名が取得できるんですね)
name: deploy
on:
push:
branches:
- main
+ - dev
workflow_dispatch:
jobs:
deploy:
runs-on: codebuild-snoopy-runner-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: read
env:
AMPLIFY_APP_ID: ${{ vars.AMPLIFY_APP_ID }}
- AMPLIFY_ENV_NAME: "main"
+ AMPLIFY_ENV_NAME: ${{ github.ref_name }}
このワークフローでdevブランチに同じコードをpushしました。
まとめ
今回はGitHub Enterprise環境下でAmplifyを活用するGitHub Actionsを紹介しました。様々な制約があっても何とかなるのでAmplifyを活用したいですね!
参考


