我正在使用Google与Pulumi一起运行(类似于Terraform)。云运行域映射的设置是:
new gcp.cloudrun.DomainMapping(
`${prefix}-domain-mapping`,
{
location,
name: 'xxx',
metadata: {
namespace: projectId,
},
spec: {
routeName: appService.name,
},
},
{
dependsOn: [appService],
},
)其中appService指向Cloud服务的实例。这成功地创建了到云运行服务的域映射。
接下来,我将设置一个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,
},
)上面的代码起作用。我有一个DNS区域,有四个A记录指向4个不同的IP地址,指向一个云运行服务。我的问题是:如何使is自动化,而我在上面已经进行了硬编码?我希望为A记录动态设置云的IP地址。ips变量必须指向云运行实例的I,但我找不到这样的方法。
或者我做错了,还有另外一种方法吗?我的目标是,如果Cloud服务被更新并接收新的is,那么DNS记录也应该自动更新。我不想手动更新地址。
由于普利米或多或少等同于Terraform,所以无论是Terraform还是Pulumi的答案都是非常感谢的!
发布于 2020-03-02 20:48:53
我还没有尝试运行这个程序,但至少这段代码编译了:
const mapping = new gcp.cloudrun.DomainMapping(...);
const records = mapping.status.resourceRecords?.apply(rs => rs ?? []) ?? pulumi.output([]);
new gcp.dns.RecordSet(`${prefix}-a-records`, {
name: 'xxx.',
managedZone: zone.name,
type: 'A',
ttl: 3600,
rrdatas: records.apply(rs => rs.map(r => r.rrdata)),
}, {
dependsOn: [zone, mapping],
deleteBeforeReplace: true,
});与records共舞是为了在两个层次上摆脱undefined .不确定它是否可以简化。
发布于 2020-03-04 00:49:00
由于这个问题同时带有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
}https://stackoverflow.com/questions/60479206
复制相似问题