💡

Vue.jsアプリケーションをS3 + CloudFrontでデプロイ

2024/10/30に公開

はじめに

キャッチアップとして推奨していただいたAWS S3とCloudFrontを使用したVue.jsのデプロイをしてみましたのでメモとして残し共有させていただきます!

前提条件

AWSアカウントを持っていること
Vue.jsプロジェクトが作成済みであること
Node.jsがインストールされていること

デプロイ手順

  1. S3バケットの作成
    AWSマネジメントコンソールからS3を選択
    「バケットを作成」をクリック
    バケット名を入力(例:vuetutorial)
    リージョンを選択
    パブリックアクセスのブロック設定を行う
  2. Vue.jsプロジェクトのビルド
bash
プロジェクトのビルド
npm run build

distフォルダが生成される
  1. S3バケットへのアップロード
    生成されたdistフォルダの内容をS3バケットにアップロード
    index.htmlが正しくアップロードされていることを確認
  2. CloudFrontディストリビューションの作成
    CloudFrontコンソールから「ディストリビューションを作成」を選択
    以下の設定を行う:
    オリジンドメイン:作成したS3バケットを選択
    オリジンパス:/dist(重要)
    オリジンアクセス:「Origin Access Control settings (recommended)」を選択
    新しいOACを作成
  3. S3バケットポリシーの設定
json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::vuetutorial/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::[ACCOUNT-ID]:distribution/[DISTRIBUTION-ID]"
                }
            }
        }
    ]
}
  1. CloudFrontの設定確認
    デフォルトルートオブジェクトをindex.htmlに設定
    ディストリビューションのデプロイ完了を待つ
    重要なポイント

トラブルシューティング

Access Deniedエラーが表示される場合

S3バケットポリシーが正しく設定されているか確認
CloudFrontのOAC設定が正しいか確認
オリジンパスが/distになっているか確認

デプロイ完了後の確認
CloudFrontのドメイン名(例:d1qs4d8vsioks7.cloudfront.net)にアクセスし、アプリケーションが正しく表示されることを確認します。

まとめ

S3とCloudFrontを使用したデプロイは、初回設定こそ複雑ですが、一度設定が完了すれば、その後のデプロイはnpm run buildとS3へのアップロードだけで完了します。
この構成のメリット
グローバルな高速配信
セキュアなコンテンツ配信
コスト効率の良いホスティング

参考にした記事
https://qiita.com/leomaro7/items/0e3c09216cf864744391
https://qiita.com/kmmz/items/2b8e4643664505776289

Discussion