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なしで操作できる日も来るのでしょう。きっと。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark