Nuxt.jsで作成したSSRなサービスをServerlessでAmazon API Gawaway(AWS Lambda)デプロイする際に、独自ドメインを設定する方法です。
デプロイするソースはGitHubにアップしているものを利用します。
https://github.com/kai-kou/nuxt-serverless/tree/feature/no-use-s3
基本的には下記を参考に設定をすすめました。
Serverless(node.js)で独自ドメインSSLの適用方法 - Qiita
https://qiita.com/koshilife/items/bb7edb12f0285a241294
ドメインの取得
下記を参考にドメインを取得します。.com
ドメインだと千数百円/年で取得が可能です。
Amazon Route53 でドメインを取得する - Qiita
https://qiita.com/NaokiIshimura/items/89e104dd2d8dd950780e
httpsを利用するのにSSL/TLS証明書が必要になりますので、下記を参考に証明書を取得します。この際、リージョンはus-east-1
で取得します。ap-northeast-1
で取得しても、Serverlessで設定する際にus-east-1
をみにいくので、証明書がみつからないとエラーになります。
Certificate Manager (ACM) がDNSの検証をサポートしました | DevelopersIO
https://dev.classmethod.jp/cloud/aws/certificate-manager-dns-validation-support/
serverless.ymlの設定
custom.customDomain
でドメインの設定をします。
service: [サービス名]
provider:
name: aws
stage: ${opt:stage, 'dev'}
region: ap-northeast-1
runtime: nodejs8.10
package:
exclude:
- src/**
- .vscode/**
- package.json
- package-lock.json
- tsconfig.json
- tslint.json
- yarn.lock
include:
- serverless.yml
environment:
NODE_ENV: production
custom:
customDomain:
domainName: "${self:provider.stage}.[ドメイン名]"
stage: ${opt:stage, 'dev'}
certificateName: "*.[ドメイン名]"
createRoute53Record: true
apigwBinary:
types:
- '*/*'
functions:
nuxt-renderer:
handler: handler.render
memorySize: 512
timeout: 30
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy+}
method: ANY
cors: true
plugins:
- serverless-apigw-binary
- serverless-domain-manager
デプロイする
Serverlessのプラグインserverless-domain-managerを利用しますので、インストールしてからserverless create_domain
でドメインの設定をしてからserverless deploy
します。
serverless create_domain
後、数十分待つと設定が完了してアクセスできるようになりました。
> npm install serverless-domain-manager --save-dev
> npm run build
> serverless create_domain
Serverless: 'dev.xxxxx.com' was created/updated. New domains may take up to 40 minutes to be initialized.
> serverless deploy
Amazon API Gatewayの「カスタムドメイン名」で確認すると設定がされていることが確認できました。
やったぜ。
注意点
Amazon API Gatewayでデプロイして、そのまま利用する場合、エンドポイントのURLがhttps://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/
となりdev
が含まれるため、Nuxt.jsでベースURLの設定をする必要がありますが、カスタムドメインを利用する場合は不要になります。
なので、ベースURLを変更する必要があります。
参考
Serverless(node.js)で独自ドメインSSLの適用方法 - Qiita
https://qiita.com/koshilife/items/bb7edb12f0285a241294
Amazon Route53 でドメインを取得する - Qiita
https://qiita.com/NaokiIshimura/items/89e104dd2d8dd950780e
Certificate Manager (ACM) がDNSの検証をサポートしました | DevelopersIO
https://dev.classmethod.jp/cloud/aws/certificate-manager-dns-validation-support/