AppSyncで作ったGraphQL APIに独自ドメインとSSL証明を設定するためにCloudFrontを設定する
AppSyncでGraphQL APIを簡単に作れます。ただ、発行されたドメインをそのまま利用するよりも、独自ドメインを割り当てておいたほうが諸々便利です。 独自ドメインをつけるメリット 個人的には「リソース入れ替えが簡 […]
広告ここから
広告ここまで
目次
AppSyncでGraphQL APIを簡単に作れます。ただ、発行されたドメインをそのまま利用するよりも、独自ドメインを割り当てておいたほうが諸々便利です。
独自ドメインをつけるメリット
個人的には「リソース入れ替えが簡単にできる」がもっとも大きいかなと思ってます。
devでテストしてからprodに反映させるワークフローにしてますが、たまーに「これスタックごと作り直さないと詰むやんけ」とか「破壊的変更入れないとだなぁ」というときがでてきます。
そういう時にドメインレベルで差し替えれるようにしておくと、スタックごと入れ替えできますし、最悪事故ってもレコード戻すだけでロールバックできます。いわゆるBlue Green Deploymentですね。
AppSyncに独自ドメイン・SSL証明書をつけるためのCloudFront (terraform)
AWSサービス恒例ですが、前にCloudFront置きます。ACMで発行した証明書を設定し、R53でCNAMEかAレコードエイリアスをはりましょう。
ちなみに今使っているterraformはこんな感じです。
resource "aws_cloudfront_distribution" "appsync-development" {
origin {
domain_name = "xxxxxxxxxxx.appsync-api.us-east-1.amazonaws.com"
origin_id = "appsync-root"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1","TLSv1.1","TLSv1.2"]
origin_keepalive_timeout = 5
origin_read_timeout = 30
}
}
enabled = true
is_ipv6_enabled = true
comment = "For AppSync Development"
default_root_object = "index.html"
aliases = ["graph-dev.getshifter.io"]
default_cache_behavior {
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "appsync-root"
forwarded_values {
query_string = false
cookies {
forward = "all"
}
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 3600
max_ttl = 86400
}
price_class = "PriceClass_All"
restrictions {
geo_restriction {
restriction_type = "none"
}
}
tags = {
Environment = "development"
}
viewer_certificate {
acm_certificate_arn = "arn:aws:acm:us-east-1:0xxxxxxxxxxx:certificate/0xxxxxxxxxxx"
minimum_protocol_version = "TLSv1.1_2016"
ssl_support_method = "sni-only"
}
}
output "cf_domain_name.dev" {
value = "${aws_cloudfront_distribution.appsync-development.domain_name}"
description = "Domain name corresponding to the distribution"
}
output "cf_id.dev" {
value = "${aws_cloudfront_distribution.appsync-development.id}"
description = "ID of AWS CloudFront distribution"
}
CloudFrontからオリジンへのリクエストもHTTPSで流す必要があります。AppSyncのAPIがHTTPS Onlyだからということでしょう。httpで流すと403エラーがでますので、そこだけ要注意です。
ちなみにAPI GatewayよろしくちょいちょいCloudFrontが出すのと同じエラー画面を出します。そのうちAPI GatewayのようにCloudFrontなしで操作できる日も来るのでしょう。きっと。