【发布时间】:2020-06-14 04:19:18
【问题描述】:
我正在使用带有 Pulumi 的 Google Cloud Run(类似于 Terraform)。我对 Cloud Run 的域映射的设置是:
new gcp.cloudrun.DomainMapping(
`${prefix}-domain-mapping`,
{
location,
name: 'xxx',
metadata: {
namespace: projectId,
},
spec: {
routeName: appService.name,
},
},
{
dependsOn: [appService],
},
)
其中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,
},
)
上面的代码有效。我有一个 DNS 区域,其中有四个 A 记录指向 4 个不同的 IP 地址,这些 IP 地址指向 Cloud Run 服务。我的问题是:如何自动化上面硬编码的 IP?我希望为 A 记录动态设置 Cloud Run 的 IP 地址。 ips 变量必须指向 Cloud Run 实例的 IP,但我找不到这样做的方法。
或者也许我做错了,应该有另一种方法吗?我的目标是,如果 Cloud Run 服务更新并接收到新 IP,DNS 记录也应该自动更新。我不想手动更新地址。
由于 Pulumi 或多或少等同于 Terraform,因此非常感谢 Terraform 或 Pulumi 中的答案!
【问题讨论】:
-
您是在映射 DNS 区域(根域)还是 DNS 区域的子域?对于第一种情况,Cloud Run 为 A 记录提供 IP 地址。对于第二种情况,Cloud Run 为 CNAME 记录提供 DNS 名称。
-
我正在映射一个根域。我可以从 Cloud Run 域映射表中获取 IP,但我希望它是自动化的。
-
如果您将
DomainMapping分配给mapping变量,mapping.resourceRecords不会包含您需要的内容吗? -
它有一个记录列表,其中包含 rrdatas 字段。但是,这些记录在运行 Pulumi 自动化时将不可用。并且 API 不会接受 RecordSet 中 rrdatas 字段的 resourceRecords。
-
它们将在 Pulumi 运行期间可用 - 在创建
DomainMapping资源之后但在创建RecordSet之前 - 你可以分配它,这就是为什么rrdatas有 @987654331 @ 类型,而不仅仅是字符串数组。
标签: google-cloud-platform terraform google-cloud-run pulumi