AWS S3とCloudFrontへのデプロイ

GitHub Actionsを使用して静的ウェブサイトをAWS S3にデプロイし、CloudFrontキャッシュを無効化。OIDC認証、sync、無効化を解説。

Deployment

詳細な説明

AWS S3 + CloudFrontデプロイメント

CloudFront CDN無効化を伴うAWS S3へのデプロイは、静的ウェブサイトとシングルページアプリケーションの一般的なパターンです。このワークフローはOIDCベースの認証を使用し、長期間有効なAWS認証情報の保存を回避する推奨アプローチです。

ワークフローYAML

name: Deploy to AWS

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: us-east-1

      - name: Sync to S3
        run: aws s3 sync ./dist s3://my-website-bucket --delete

      - name: Invalidate CloudFront
        run: aws cloudfront create-invalidation --distribution-id E1234567890 --paths "/*"

OIDC認証(推奨)

AWSアクセスキーをシークレットとして保存する代わりに、このワークフローはOpenID Connect(OIDC)を使用してIAMロールを直接引き受けます。

主要ステップの説明

  • aws s3 sync --delete: ビルドディレクトリをS3に同期し、新しい/変更されたファイルをアップロードし、ローカルに存在しなくなったファイルを削除します。
  • CloudFront無効化: CDNキャッシュをクリアして、訪問者がすぐに最新バージョンを見られるようにします。

コスト最適化

CloudFront無効化は月間最初の1,000パスまで無料です。/*は1つのパス無効化としてカウントされます。

ユースケース

グローバルCDN配信を伴うAWS上での静的ウェブサイト、シングルページアプリケーション、またはドキュメントサイトのホスティング。コンプライアンス、既存アーキテクチャ、または高度なキャッシュ設定のためにAWSインフラを必要とするチームが使用します。

試してみる — GitHub Actions Workflow Builder

フルツールを開く