GitHubActions

GitHub Actions と AWS Amplify で OIDC を活用した自動デプロイパイプライン構築

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

はじめにと全体概要

GitHub へのコードプッシュをトリガーに、Amplify の本番環境・ステージング環境・プレビュー環境へ即座にデプロイできる仕組みを構築します。本記事では GitHub OIDC による安全な認証、Amplify CLI のノンインタラクティブ化、不要リソースの自動削除までをハンズオン形式で解説するので、セットアップだけでなく運用フェーズでも役立ちます。


前提条件と環境準備

このセクションでは、作業開始前に必ず用意すべき AWS アカウント・Amplify アプリ・GitHub リポジトリの概要を説明します。各リソースは最小限の権限で作成し、後続の CI/CD でシークレットとして参照できる状態にすることがポイントです。

AWS アカウントと Amplify アプリの作成

  1. AWS アカウントをまだお持ちでない場合は https://aws.amazon.com/jp/ から新規登録してください。
  2. コンソール上部のリージョンセレクタで ap-northeast-1(東京)など利用したいリージョンに切り替え、Amplify コンソールへ移動します。
  3. 「アプリの作成」ボタンをクリックし、Git リポジトリは後ほど接続という形で空の Amplify アプリを作ります。作成完了画面に表示される Amplify App IDデフォルトブランチ名(通常 main)は必ずメモしておき、GitHub シークレット登録時に使用します。

GitHub リポジトリの用意

  1. GitHub にログインし、本プロジェクト用のリポジトリを作成します。
  2. ブランチ戦略の例として以下を推奨します(必要に応じて変更可)
  3. main → 本番デプロイ
  4. develop または staging → ステージング環境
  5. feature/* → プレビュー環境(プルリクエスト単位)

ポイント:ブランチ名は後続の OIDC 条件式や Amplify 環境名に直接マッピングできるよう、シンプルかつ一意に保ちます。


Amplify と GitHub OIDC の連携設定

この章では、GitHub Actions が AWS に対して 長期的なアクセスキーを持たずに操作できるよう、OIDC 信頼関係と最小権限 IAM ロールを作成する手順を解説します。

IAM ロール・ポリシーの作成

  1. コンソール → IAM → ロール → ロールを作成 を選択。
  2. 「信頼されたエンティティ」画面で OpenID Connect (OIDC) プロバイダーを選び、以下の JSON を入力します(GitHub が提供する OIDC URL と Audience は固定です)。

  • StringLike*全ブランチ を許可するワイルドカードです。複数の特定ブランチだけを許可したい場合は "repo:<Org>/<Repo>:ref:refs/heads/main""repo:<Org>/<Repo>:ref:refs/heads/develop" などカンマ区切りで列挙できます(JSON 配列はサポートされませんので、複数条件は StringLike の配列にせず個別に書くか、正規表現的に "*/main" といった形で記述します)。

  • 次の インラインポリシー をロールに添付し、Amplify に必要な最小権限だけを許可します。

注意* のリソースは Amplify が App ID を内部で判定するため許容されていますが、さらに絞り込みたい場合は arn:aws:amplify::<account-id>:apps/<app-id>/branches/* と指定できます。

OIDC プロバイダーの登録手順

  1. IAM コンソール左側メニューから ID プロバイダー → プロバイダーを追加 を選択。
  2. 種類は OpenID Connect (OIDC)、プロバイダー URL に https://token.actions.githubusercontent.com、Audience は sts.amazonaws.com と入力し、作成ボタンをクリックします。

GitHub リポジトリへのシークレット登録

シークレット名 用途
AWS_REGION デプロイ先リージョン(例:ap-northeast-1
AMPLIFY_APP_ID 前節で取得した Amplify App ID
AWS_ROLE_ARN 先ほど作成した IAM ロールの ARN
GITHUB_REPO <Org>/<Repo>(サブスクリプション条件に使用)

リポジトリ → Settings → Secrets and variables → Actions から上表のシークレットを 暗号化保存 してください。


GitHub Actions ワークフロー構築

本章では、実際に動作する 2 つのワークフロー(ci-cd.ymlpreview.yml)を紹介します。すべての Amplify CLI コマンドは 非対話モード (--yes) を付与し、CI 環境でもプロンプトが出ないようにしています。

共通前提:Ubuntu ランナーに jq をインストール

jq はデフォルトでインストールされていないことがあります。以下のステップを各ジョブの最初に追加してください。


1. 本番・ステージング向けワークフロー ci-cd.yml

ワークフロー全体像(概要)

このファイルは push イベントをトリガーに、maindevelop ブランチへ自動デプロイします。ブランチ名から Amplify 環境名 (prod / staging) を導出し、環境が未作成の場合は安全に作成・チェックアウトします。

ポイントまとめ

ステップ 主な目的
Determine Amplify environment ブランチ名 → 環境名のマッピングを一元化
Ensure Amplify environment exists 同名環境が既にある場合は checkout、無ければ add で作成(エラーハンドリング)
Deploy with retry ネットワーク障害等で失敗した際の自動再試行(最大 3 回)

2. プレビュー環境向けワークフロー preview.yml

ワークフロー概要(導入文)

プルリクエストが作成・更新されるたびに、一時的な Amplify 環境 を自動生成し、マージ後または PR が閉じられたときに安全に削除します。環境名は preview-<PR番号> でユニーク化しています。

重要ポイント

項目 内容
--yes の徹底使用 CI 環境でプロンプトがブロックしないようにする
環境重複チェック amplify env list --json | jq … で事前に存在を確認、エラー回避
削除コマンドの正しい形 amplify env remove <env> --yesamplify delete はアプリ全体削除用)

運用のベストプラクティスとまとめ

エラーハンドリングとログ可視化

  • 各ステップはデフォルトで continue-on-error: false です。失敗時はジョブが即座に停止し、GitHub の UI に赤字で表示されます。
  • Amplify のビルドログは amplify logs コマンドで取得でき、以下のように GitHub のサマリへ出力するとトラブルシューティングが楽になります。

コスト最適化:プレビュー環境の定期クリーンアップ

jq がインストール済みである前提で、30 日以上更新が無いプレビュー環境を一括削除するスケジュールジョブ例です。

セキュリティベストプラクティス

項目 推奨設定
OIDC 権限 permissions.id-token: write のみ付与し、長期キーは作成しない
IAM ポリシー 必要アクションだけを列挙(上記 JSON 参照)
シークレット管理 GitHub Secrets に暗号化保存し、Workflow から ${{ secrets.<NAME> }} の形で参照。コードベースにハードコーディングしない
環境名のサニタイズ PR 番号やブランチ名をそのまま使用せず、preview-${PR_NUMBER} のようにプレフィックスを付与し衝突リスクを低減

まとめ

  1. 前提:AWS アカウント・Amplify アプリ・GitHub リポジトリを用意し、OIDC 用 IAM ロールとシークレットを設定。
  2. 非対話化--yes オプションと事前の環境存在チェックで CI 環境でもスムーズに動作させる。
  3. ワークフロー構成:本番・ステージングは ci-cd.yml、プレビューは preview.yml、定期クリーンアップはスケジュールジョブで実装。
  4. 運用ポイント:エラーハンドリング、ログ出力、再試行ロジックを組み込み、不要環境の自動削除でコスト最適化。

以上の手順とベストプラクティスに従えば、GitHub Actions と AWS Amplify(Gen 2)による 安全・高速・低コスト な CI/CD パイプラインが構築できます。ぜひ本稿をリファレンスに、プロジェクト固有の要件に合わせてカスタマイズしてみてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-GitHubActions