AWSInfrastructureterraform

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

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts