PR

GitHub FlowとActionsをざっくり理解する | AWSデプロイまでの流れ

GitHub クラウドニュース

AWSでアプリケーションをデプロイするとき、

という仕組みを作るのに GitHub Actions がよく使われます。

CodePipelineよりも設定が直感的で、GitHubリポジトリとの親和性が高いのが理由のひとつではないでしょうか。

この記事では、GitHub Flow(ブランチ戦略)とGitHub Actions(CI/CDツール)のそれぞれの役割を整理したうえで、AWSのパイプラインと組み合わせるとどう動くのかをざっくり解説します。

GitHub Flowって何?

GitHub Flowは、GitHubが提唱するシンプルなブランチ戦略です。

ブランチの運用ルールをできるだけ単純にして、頻繁にデプロイできる状態を保つことを目的にしています。

基本的な流れはこうです。

  • mainブランチは常にデプロイ可能な状態を保つ
  • 新しい作業はfeatureブランチを切って進める(例:feature/add-login
  • 作業が終わったらPull Request(PR)を作成してレビューを依頼する
  • レビューが通ったらmainブランチにマージする
  • マージと同時にデプロイが走る(GitHub Actionsと連携)

Gitflowのようにdevelopブランチやreleaseブランチを持たないため、ブランチ管理がシンプルです。

「小さく作って頻繁にリリース」というスタイルと相性が良く、SaaS開発やマイクロサービス構成でよく採用されているようです。

GitHub Actionsって何?

GitHub Actionsは、GitHubに組み込まれたCI/CDの自動化ツールです。

リポジトリの .github/workflows/ ディレクトリにYAMLファイルを置くだけで、さまざまなイベント(push・PR作成・スケジュールなど)をトリガーに自動でジョブを実行できます。

実行できる処理の例としては、以下のようなものがあります。

  • テストの自動実行(pytest・Jest・RSpecなど)
  • コードのビルド・パッケージング
  • AWSへのデプロイ(Lambda・ECS・S3・Elastic Beanstalkなど)
  • Slack通知やIssueの自動クローズなど

処理の単位はワークフローで、ワークフローの中に複数のジョブがあり、ジョブの中に複数のステップがあるという構造になっています。

ワークフロー -> ジョブ -> ステップ

ステップでは公開されている Action(再利用可能な処理の単位)を使うことができます。

AWSも公式のActionを複数公開しており、これを利用することによりAWS認証やECRへのプッシュなどをすぐに組み込むことができます。

AWSパイプラインとの組み合わせ方

今回は詳細な設定内容までは記載しませんが、ざっくりとした流れを記載します。
GitHub ActionsからAWSを操作するには、まずAWSの認証情報をGitHubに渡す必要があります。

方法は大まかに2つあります。

方法A:OIDC認証(推奨)

GitHub ActionsとAWSの間でOIDC(OpenID Connect)を使った認証を設定すると、アクセスキーをGitHubに保存せずに済みます。

IAMにGitHub用のIDプロバイダを登録し、ロールを引き受ける形になるため、アクセスキーの漏洩リスクがありません。

セキュリティ面で推奨される方法です。

方法B:アクセスキーをGitHub Secretsに保存

IAMユーザーのアクセスキーとシークレットキーを、GitHubリポジトリの「Settings → Secrets」に登録しておく方法です。

設定が簡単ですが、アクセスキーの定期ローテーションが必要です。
個人プロジェクトや小規模な検証環境で手軽に使う場合に有用でしょう。

S3へのデプロイ例(YAMLサンプル)

例えば、mainブランチにコードがpushされたとき、静的ファイルをS3にデプロイしたいとしましょう。

以下のようなYAMLファイルを作成することで、フローが可能になります。

name: Deploy to S3

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: リポジトリをチェックアウト
        uses: actions/checkout@v4

      - name: AWS認証
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: ap-northeast-1

      - name: S3にデプロイ
        run: |
          aws s3 sync ./dist s3://my-bucket/ --delete

usesの中にある

aws-actions/configure-aws-credentials

がAWS公式のActionで、OIDC認証やアクセスキー認証の両方に対応しています。

このAction一行だけでAWSの認証が完了し、以降のステップでAWS CLIやSDKが使えるようになります。

料金はどのくらいかかるの?

内容料金
パブリックリポジトリ無料(無制限)
プライベートリポジトリ(無料枠)月2,000分まで無料
プライベートリポジトリ(超過分)$0.008 / 分(Linuxランナー)

上記はGitHub Actionsの料金となり、プライベートリポジトリを使用している場合はGitHub側の費用がかかる場合があります。

AWS側はデプロイ先のサービス(Lambda・S3・ECSなど)の通常料金のみです。
個人プロジェクトやオープンソースであれば実質無料で使えるのはありがたいですね。

pushしたら、AWSに届く

GitHub FlowとGitHub Actionsを組み合わせると、

  • featureブランチでコードを書いてPRを出す
  • レビューが通ったらmainにマージ
  • 自動でAWSにデプロイ」

という流れを作ることができます。

コードを書いた後の作業をGitHubが引き受けてくれるので、デプロイの手作業ミスがなくなり、リリースのハードルも下がりますね。

AWS CodePipelineと比べると、GitHubとの親和性が高く設定もシンプルです。
もしGitHubをすでに使っていて、GitHub Actionsがまだの場合は、一度試してみてはいかがでしょうか?


タイトルとURLをコピーしました