TerraformでCloudFront+S3をHTTPS化する
はじめに
前回はCloudFront+S3の構成を作りましたが、
CloudFrontデフォルトのドメインへHTTPS通信を行っていました。
今回は自身のドメイン・ACMの証明書を使用し、独自ドメインでのHTTPSアクセスを試します。
プロビジョニングはTerraformでおこないます。
環境
terraform 1.4.6
方針
- ACMで証明書を発行
- dataで証明書を外部参照(terraform)
- 代替ドメインの設定をcloudfrontへ追加
- 証明書の設定をcloudfrontへ追加
- cloudfrontへのAレコードを追加
の方針で進めます。
前提
- 以下はTerraformで管理しません。
- ACMで取得した証明書(dataで外部参照)
- CloudFrontを指定するAレコード
- 独自ドメイン取得済み
- パブリックホストゾーン作成済み
わたしはfreenom
で取得したドメインで検証しました。
よろしければ参考にして下さい。
検証
ACMで証明書を発行
過去ALBのHTTPS化手順の中で証明書を作成したため、
同じように作成します。
1点だけ違いがあり、
cloudfrontの場合米国東部 (バージニア北部) (us-east-1)
で発行する必要があります。
気をつけましょう。
dataで証明書を外部参照(terraform)
こんな感じです
provider "aws" {
alias = "virginia"
region = "us-east-1"
}
data "aws_acm_certificate" "acm" {
provider = aws.virginia
domain = "example.com"
}
証明書についてはドメインを指定してdataで参照すればOKです。
この証明書は先述の通り米国東部 (バージニア北部) (us-east-1)
に存在するため、
マルチリージョン対応のためにalias
を使用しました。
ap-northeast-1
とus-east-1
を使い分けるイメージです
こちら参考にさせていただきました。
代替ドメインの設定をcloudfrontへ追加
resource "aws_cloudfront_distribution" "hugo_cfront" {
enabled = true
aliases = ["${data.aws_acm_certificate.acm.domain}"] # これ
cloudfrontデフォルトのドメイン名を代替して、独自ドメインでアクセス可能にする
のようなイメージです。
この設定をしないとホストゾーンにAレコードを作成する際、cloudfrontディストリビューションが選択肢に出てきません。
証明書の設定をcloudfrontへ追加
証明書、プロトコルの指定などをします。
resource "aws_cloudfront_distribution" "hugo_cfront" {
// 略
viewer_certificate {
cloudfront_default_certificate = false
acm_certificate_arn = data.aws_acm_certificate.acm.arn
ssl_support_method = "sni-only"
minimum_protocol_version = "TLSv1"
}
cloudfrontへのAレコードを追加
最後にcloudfrontへのAレコードを追加します。
先述の通り、選択肢が出ない場合代替ドメインの設定が出来ていない可能性があります。
動作確認
terraform plan,apply
を行い、ディストリビューションのデプロイが完了したら
独自ドメインでアクセス出来ることを確認します。
終わりに
これで鉄板の構成がTerraformで作成できるようになりました。
これを活かして検証を進めていきたいですね。
Discussion