برنامه نویسی

نحوه عیب‌یابی ایجاد مجدد ناموفق منابع مدیر گواهینامه Google Cloud با Terraform

این یادداشت نحوه رسیدگی به خطای رخ داده در هنگام تلاش برای ایجاد مجدد گواهی در مدیر گواهی Google Cloud را که از طریق Terraform مدیریت می‌شود، توضیح می‌دهد.

توجه داشته باشید

این عملیات در یک محیط توسعه انجام شد، بنابراین خرابی در طول فرآیند عیب یابی در نظر گرفته نشد.

نسخه ها

  • Terraform: 1.9.8
  • hashicorp/google: 6.16.0

هدف

ما می خواستیم دامنه را در گواهی از تغییر دهیم before.com به after.com، همانطور که در زیر نشان داده شده است:

locals {
-  domain_name = "before.com"
+  domain_name = "after.com"
}

resource "google_certificate_manager_dns_authorization" "example" {
  name   = "example-dns-authorization"
  domain = local.domain_name
}

resource "google_certificate_manager_certificate_map" "example" {
  name = "example-certificate-map"
}

resource "google_certificate_manager_certificate" "example" {
  name = var.prefix
  managed {
    domains = [
      local.domain_name,
      "*.${local.domain_name}"
    ]
    dns_authorizations = [google_certificate_manager_dns_authorization.example.id]
  }
}

resource "google_certificate_manager_certificate_map_entry" "example" {
  name         = "example-certificate-map-entry"
  map          = google_certificate_manager_certificate_map.example.name
  matcher      = "PRIMARY"
  certificates = [google_certificate_manager_certificate.example.id]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جزئیات خطا

با خطای زیر مواجه شدیم:

Error: Error when reading or editing Certificate: googleapi: Error 400: can't delete certificate that is referenced by a CertificateMapEntry or other resources
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از آنجایی که تغییر نام دامنه نیاز به حذف و ایجاد مجدد گواهی دارد و گواهی با ورودی نقشه گواهی ارجاع داده می شود، نمی توان آن را همانطور که هست حذف کرد.

راه حل

در زیر روش مورد استفاده برای حل این مشکل آورده شده است.

  1. هنگام تغییر دامنه، منابع google_certificate_manager_certificate و google_certificate_manager_certificate_map_entry را نظر دهید:
locals {
-  domain_name = "before.com"
+  domain_name = "after.com"
}

resource "google_certificate_manager_dns_authorization" "example" {
  name   = "example-dns-authorization"
  domain = local.domain_name
}

resource "google_certificate_manager_certificate_map" "example" {
  name = "example-certificate-map"
}

- resource "google_certificate_manager_certificate" "example" {
-   name = var.prefix
-   managed {
-     domains = [
-       local.domain_name,
-       "*.${local.domain_name}"
-     ]
-     dns_authorizations = [google_certificate_manager_dns_authorization.example.id]
-   }
- }

- resource "google_certificate_manager_certificate_map_entry" "example" {
-   name         = "example-certificate-map-entry"
-   map          = google_certificate_manager_certificate_map.example.name
-   matcher      = "PRIMARY"
-   certificates = [google_certificate_manager_certificate.example.id]
- }
+ # resource "google_certificate_manager_certificate" "example" {
+ #   name = var.prefix
+ #   managed {
+ #     domains = [
+ #       local.domain_name,
+ #       "*.${local.domain_name}"
+ #     ]
+ #     dns_authorizations = [google_certificate_manager_dns_authorization.example.id]
+ #   }
+ # }
+
+ # resource "google_certificate_manager_certificate_map_entry" "example" {
+ #   name         = "example-certificate-map-entry"
+ #   map          = google_certificate_manager_certificate_map.example.name
+ #   matcher      = "PRIMARY"
+ #   certificates = [google_certificate_manager_certificate.example.id]
+ # }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از انجام این تغییرات، اجرا کنید:

terraform apply
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. دو منبع را از نظر خارج کنید:
locals {
  domain_name = "after.com"
}

resource "google_certificate_manager_dns_authorization" "example" {
  name   = "example-dns-authorization"
  domain = local.domain_name
}

resource "google_certificate_manager_certificate_map" "example" {
  name = "example-certificate-map"
}

- # resource "google_certificate_manager_certificate" "example" {
- #   name = var.prefix
- #   managed {
- #     domains = [
- #       local.domain_name,
- #       "*.${local.domain_name}"
- #     ]
- #     dns_authorizations = [google_certificate_manager_dns_authorization.example.id]
- #   }
- # }
-
- # resource "google_certificate_manager_certificate_map_entry" "example" {
- #   name         = "example-certificate-map-entry"
- #   map          = google_certificate_manager_certificate_map.example.name
- #   matcher      = "PRIMARY"
- #   certificates = [google_certificate_manager_certificate.example.id]
- # }
+ resource "google_certificate_manager_certificate" "example" {
+   name = var.prefix
+   managed {
+     domains = [
+       local.domain_name,
+       "*.${local.domain_name}"
+     ]
+     dns_authorizations = [google_certificate_manager_dns_authorization.example.id]
+   }
+ }

+ resource "google_certificate_manager_certificate_map_entry" "example" {
+   name         = "example-certificate-map-entry"
+   map          = google_certificate_manager_certificate_map.example.name
+   matcher      = "PRIMARY"
+   certificates = [google_certificate_manager_certificate.example.id]
+ }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نهایت اجرا کنید:

terraform apply
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این روش دامنه گواهی را با موفقیت به روز می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا