TerraformでACMのSSL証明書を作成しました。
SANsにワイルドカードを指定したところエラーになりました。
今後もハマりそうなのでまとめておきます
やりたかったこと
- TerraformでACMのSSL証明書を作成
- 証明書はSANsにワイルドカードを含む
⇒つまり、証明書はexample.comと*.example.comのドメインを含む - Route53でDNS認証する
エラー
terraform applyした際に以下のエラーが出ました
1 2 3 4 5 6 |
│ Error: creating Route 53 Record: InvalidChangeBatch: [Tried to create resource record set [name='_c8a4d1c796965d52314cf626cb2f04f5.example.com.', type='CNAME'] but it already exists] │ status code: 400, request id: 16f72747-91fd-4deb-900d-9c548d3acbd2 │ │ with module.route53.aws_route53_record.cert["*.example.com"], │ on ../../modules/route53/main.tf line 35, in resource "aws_route53_record" "cert": │ 35: resource "aws_route53_record" "cert" { |
Route53でDNS検証用のレコードを作成しようとしたけど、すでにそのレコードあります
みたいなエラーかなと
原因調査
TerraformでAWS上にHTTPS化したサブドメインを定義する - My External Storage
個人のAWS環境でTerraformを使ってHTTPS化したサブドメインを定義した。
普段なかなかしないことで忘れてしまうので手順をまとめおく。
こちらの記事によると、ルートドメインとワイルドカードの検証用レコードが一緒の内容みたい。
ルートドメインとワイルドカードドメインで検証用レコードを別々に作成しようとするため、
同じ内容のレコードを2つ作成することになりすでにレコードがありますになっていました。
対処法としては、
検証用レコードを作成するaws_route53_recordにてレコードの上書きを許容する
allow_overwriteをtrueにすればOKです!
コード修正
検証用のレコードに allow_overwrite = true を追加します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
resource "aws_route53_zone" "hostzone" { name = "example.com" } # ACMでSSL証明書を作成 resource "aws_acm_certificate" "cert" { domain_name = "example.com" validation_method = "DNS" subject_alternative_names = ["*.example.com"] lifecycle { create_before_destroy = true } } # SSL証明書の検証 resource "aws_acm_certificate_validation" "cert" { certificate_arn = aws_acm_certificate.cert.arn validation_record_fqdns = flatten([values(aws_route53_record.cert)[*].fqdn]) } # SSL証明書のDNS検証用レコード resource "aws_route53_record" "cert" { for_each = { for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => { name = dvo.resource_record_name record = dvo.resource_record_value type = dvo.resource_record_type } } name = each.value.name type = each.value.type records = [each.value.record] zone_id = aws_route53_zone.hostzone.zone_id ttl = 60 allow_overwrite = true } |
再度apply
再度Applyしたら通りました!
よかったーー
参考
Terraform Registry
Terraform Registry
TerraformでAWS上にHTTPS化したサブドメインを定義する - My External Storage
個人のAWS環境でTerraformを使ってHTTPS化したサブドメインを定義した。
普段なかなかしないことで忘れてしまうので手順をまとめおく。
コメント