🙌

【Terraform】ACMの作成

に公開

はじめに

TerraformでACMを設定していきます。

aws_acm_certificate

  1. domain_name : string : ドメイン名
  2. validation_method : enum : DNS,EMAIL,NONE
  3. tags : object : タグ
  4. lifecycle : string : リソース操作の詳細制御を指定
    • create_before_destroy : bool : 削除前に生成を行うかどうか(ELBで証明書を利用している場合、trueが推奨)
acm.tf
#------------------
#Certificate
#------------------
resource "aws_acm_certificate" "tokyo_cert" {
  domain_name       = "*.${var.domain}"
  validation_method = "DNS"

  tags = {
    Name    = "${var.project}-${var.environment}-wildcard-sslcert"
    Project = var.project
    Env     = var.environment
  }

  lifecycle {
    create_before_destroy = true
  }

  depends_on = [aws_route53_zone.route53_zone]
}

DNS検証

acm.tf
#------------------
#DNS検証
#------------------
resource "aws_route53_record" "route53_acm_dns_resolve" {
  for_each = {
    for dvo in aws_acm_certificate.tokyo_cert.domain_validation_options : dvo.domain_name => {
      name   = dvo.resource_record_name
      type   = dvo.resource_record_type
      record = dvo.resource_record_value
    }
  }

  allow_overwrite = true
  zone_id         = aws_route53_zone.route53_zone.id
  name            = each.value.name
  type            = each.value.type
  ttl             = 600
  records         = [each.value.record]
}
resource "aws_acm_certificate_validation" "cert_valid" {
  certificate_arn         = aws_acm_certificate.tokyo_cert.arn
  validation_record_fqdns = [for record in aws_route53_record.route53_acm_dns_resolve : record.fqdn]

}
  • applyしている途中にマネジメントコンソールにいき、CNAMEの設定が出ているか確認(ステータスは検証保留中)
  • お名前.comの管理画面でDNS関連機能の設定>DNSレコード設定に反映
  • マネジメントコンソールに戻り、ステータスが発行済みになっていればOK

複数リージョンに証明書を発行する

main.tf
provider "aws" {
  profile = "udemy_terraform"
  region  = "ap-northeast-1"
}

###バージニアリージョン追加
provider "aws" {
  alias = "virginia"
  profile  = "udemy_terraform"
  region   = "us-east-1"
}
acm.tf
###バージニアリージョン追加
resource "aws_acm_certificate" "virginia_cert" {
  provider          = aws.virginia
  domain_name       = "*.${var.domain}"
  validation_method = "DNS"

  tags = {
    Name    = "${var.project}-${var.environment}-wildcard-sslcert"
    Project = var.project
    Env     = var.environment
  }

  lifecycle {
    create_before_destroy = true
  }

  depends_on = [aws_route53_zone.route53_zone]
}
GitHubで編集を提案

Discussion