概要
Vue.jsによるサーバーレスSPAをCloudFront(AWSのCDNサービス)を用いて、独自ドメインで公開する方法です。
※必要最低限しか書いてないので、後日追加するかもしれません。
※2019/7/29 画像&一部説明を追加しました。
前提条件
- Vue.jsのサービスをデプロイできる状態にしておく。
- ドメインの取得を行っておく
※ここではこれらには(あまり)触れません
参考サイト
やること
最低限、下記のことが必要になります(多分)。
※下記事項は、別記事で触れる予定
S3バケットのWebホスティング
Vue.jsサービスのデプロイ用S3バケットをパブリックに公開して、Webホスティングする必要があります。
手順は下記のとおりです。
- Vue.jsサービスデプロイ用のS3バケットを作成する
- [プロパティ]タブ - [Static Website Hosting]で、
- 「このバケットを使用してウェブサイトをホストする」を選択する。
- 「インデックスドキュメント」に「index.html」を指定する。
- [アクセス権限]タブ - [アクセスコントロールリスト]で、
- 「Everyone」の「オブジェクトの一覧」を許可する。
SSL証明書の発行
独自ドメイン(≒CNAME)で公開するには、先にそのドメインのSSL証明書の発行が必要です。
手順は以下の通りです。
- 「Certificate Manager」にて、「証明書のプロビショニング」の「今すぐ始める」をクリック。
- 「証明書のリクエスト」で、「パブリック証明書のリクエスト」を選択。
- 「ドメイン名の追加」で、ドメイン名を入力。
- ワイルドカード指定も可能なので、例えば「*.makky12.com」みたいな指定もできる。
- 「検証方法の選択」では「DNS検証」と「Eメール検証」、いずれかを選択。
- 「証明書」画面で「状況」が「認証完了」になればOK。
※なお、SSL証明書は必ず「リージョン:北バージニア(us-east-1)」で作成しないとCloudFront設定できないので注意!!!
CloudFrontの設定
で、やってCloudFrontの設定になります。やり方ですが、まず「CloudFront」で「Create Distribution」-「[Web]のGet Started」をクリックします。
設定画面での設定値は、下表を参照。
項目名 | 設定値 | 説明 | 備考 |
---|---|---|---|
Original Domain Name | S3バケットのWebホスティング」でWebホスティングをしたバケット名 | CloudFrontで制御を行うAWSリソース | これを選ぶと「Origin ID」が自動で設定される |
Viewer Protocol Policy | Redirect HTTP to HTTPS | ブラウザなどからアクセスされた際に適用するプロトコル | 厳密には何でもよいが、セキュリティを考えると、HTTPは避けたほうが。 |
Object Caching | Customoize | キャッシュの設定 | 個別設定を適用するならCustomize |
TTL関連の3つ(Maximum, Minimum,Default) | すべて0 | キャッシュの保存期間(秒) | 1以上だと、デプロイしたコンテンツの反映に時間がかかる(らしい) |
Alternate Domain Names(CNAMES) | 公開するドメイン名 | ここで設定したデストリビューションの別名 | 証明書で証明を受けないと、設定できない |
SSL Certificate | 「Custom SSL Certificate」を選択し、「SSL証明書の発行」で作成したSSL証明書を選択 | 使用するSSL証明書名 | 証明書を「北バージニア」で作成しないと、ここでリストに表示されない。 |
Default Root Object | index.html | デフォルトで表示するコンテンツ名 | Vue.jsの場合、ルートのindex.htmlを表示する(はず) |
で、「Create Distribution」をクリックし、該当のデストリビューションの「Status」が「Deployed」になればOK。
ただし5~15分程度かかるので、気長に待ちましょう。(In Progressの場合、デプロイ処理中です。)
また、以下の設定もデプロイ処理中に行っておきます。
- 該当のデストリビューションの「ID」をクリック。
- 「Error Pages」タブの「Create Custom Error Response」をクリック。
- 「HTTP Error Code」の403、404について、下記設定で「Create」を行う。
項目名 | 設定値 | 説明 | 備考 |
---|---|---|---|
Customize Error Response | Yes | レスポンスのカスタマイズを行うか | |
Response Page Path | /index.html | エラー発生時に表示するコンテンツ | 詳細は下記参照 |
HTTP Response Code | 200 OK | 設定したレスポンスに設定するステータスコード |
※Vue.jsだと、本来どのURLを参照してもルートのindex.html(/index.html)が表示されないといけませんが、例えば「/hoge」というパスを指定した場合も、
/hoge/index.htmlを参照します。
当然そんなページはないので404 Not Foundが返されますが、その際に代わりに表示するページです。(Vue.jsのRouter側で適切な処理を実施する必要があります)
Route53によるエイリアス設定
最後はRoute53によるエイリアス設定です。
下記手順で行います。
- Route53の「DNS管理」を選択。
- 「ホストゾーンの作成」で、サブドメイン名を含まないドメイン名(「makky12.com」など)を入力。
- 「タイプ」は「パブリックゾーン」
- 作成したホストゾーンの「ドメイン名」をクリックし、「レコードセットの作成」をクリックする。
- 「名前」に、サブドメイン名を入力する。(「hogehohe.(makky12.com)」など)
- 「エイリアス」を「はい」に設定し、「エイリアス先」に「CloudFrontの設定」で作成したデストリビューションの「Domain Name」を入力する。
長々と記載してしまいましたが、あとは「S3バケットのWebホスティング」で作成したバケットにVue.jsをデプロイすれば、これで独自ドメインでSPAを起動できるはずです。