Kai*_*ren 4 google-cloud-platform terraform pulumi google-cloud-run
我正在使用 Google Cloud Run 和 Pulumi(类似于 Terraform)。我的 Cloud Run 域映射设置是:
new gcp.cloudrun.DomainMapping(
`${prefix}-domain-mapping`,
{
location,
name: 'xxx',
metadata: {
namespace: projectId,
},
spec: {
routeName: appService.name,
},
},
{
dependsOn: [appService],
},
)
Run Code Online (Sandbox Code Playgroud)
其中appService指向 Cloud Run 服务的实例。这成功创建了到 Cloud Run 服务的域映射。
接下来我将设置一个包含记录的 DNS 区域:
const zone = new gcp.dns.ManagedZone(`${prefix}-zone`, {
name: `${prefix}-zone`,
dnsName: 'xxx.',
visibility: 'public',
})
const ips = ['xxx', 'xxx', 'xxx', 'xxx']
new gcp.dns.RecordSet(
`${prefix}-a-records`,
{
name: 'xxx.',
managedZone: zone.name,
type: 'A',
ttl: 3600,
rrdatas: ips,
},
{
dependsOn: [zone],
deleteBeforeReplace: true,
},
)
Run Code Online (Sandbox Code Playgroud)
上面的代码有效。我有一个 DNS 区域,其中有 4 个 A 记录,分别指向 4 个不同的 IP 地址,这些 IP 地址指向 Cloud Run 服务。我的问题是:如何自动化上面硬编码的 IP?我希望为 A 记录动态设置 Cloud Run 的 IP 地址。该ips变量必须指向 Cloud Run 实例的 IP,但我找不到方法来做到这一点。
或者也许我做错了,应该有另一种方法来完成?我的目标是,如果 Cloud Run 服务更新并收到新的 IP,DNS 记录也应该自动更新。我不想手动更新地址。
由于 Pulumi 或多或少相当于 Terraform,因此非常感谢 Terraform 或 Pulumi 中的答案!
由于这个问题同时带有 Pulumi和Terraform 标签,因此这里有一个可能的 Terraform 解决方案:
resource "google_cloud_run_domain_mapping" "example" {
location = "us-central1"
name = "xxx"
metadata {
namespace = local.project_name
}
spec {
route_name = google_cloud_run_service.app.name
}
}
resource "google_dns_managed_zone" "example" {
name = "${local.prefix}-zone"
dns_name = "xxx."
visibility = "public"
}
locals {
dns_records = {
"A" = [
for rr in google_cloud_run_domain_mapping.example.resource_records :
rr.rrdata if rr.type == "A"
]
"AAAA" = [
for rr in google_cloud_run_domain_mapping.example.resource_records :
rr.rrdata if rr.type == "AAAA"
]
}
}
resource "google_dns_record_set" "example" {
for_each = local.dns_records
managed_zone = google_dns_managed_zone.example.name
name = "xxx."
type = each.key
ttl = 3600
rrdatas = each.value
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |