121 lines
6.0 KiB
Markdown
121 lines
6.0 KiB
Markdown
# Google Cloud DNS Module
|
|
|
|
This module allows simple management of Google Cloud DNS zones and records. It supports creating public, private, forwarding, peering and service directory based zones.
|
|
|
|
For DNSSEC configuration, refer to the [`dns_managed_zone` documentation](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/dns_managed_zone#dnssec_config).
|
|
|
|
## Examples
|
|
|
|
### Private Zone
|
|
|
|
```hcl
|
|
module "private-dns" {
|
|
source = "./fabric/modules/dns"
|
|
project_id = "myproject"
|
|
type = "private"
|
|
name = "test-example"
|
|
domain = "test.example."
|
|
client_networks = [var.vpc.self_link]
|
|
recordsets = {
|
|
"A localhost" = { records = ["127.0.0.1"] }
|
|
"A myhost" = { ttl = 600, records = ["10.0.0.120"] }
|
|
}
|
|
}
|
|
# tftest modules=1 resources=3
|
|
```
|
|
|
|
### Forwarding Zone
|
|
|
|
```hcl
|
|
module "private-dns" {
|
|
source = "./fabric/modules/dns"
|
|
project_id = "myproject"
|
|
type = "forwarding"
|
|
name = "test-example"
|
|
domain = "test.example."
|
|
client_networks = [var.vpc.self_link]
|
|
forwarders = { "10.0.1.1" = null, "1.2.3.4" = "private" }
|
|
}
|
|
# tftest modules=1 resources=1
|
|
```
|
|
|
|
### Peering Zone
|
|
|
|
```hcl
|
|
module "private-dns" {
|
|
source = "./fabric/modules/dns"
|
|
project_id = "myproject"
|
|
type = "peering"
|
|
name = "test-example"
|
|
domain = "test.example."
|
|
client_networks = [var.vpc.self_link]
|
|
peer_network = var.vpc2.self_link
|
|
}
|
|
# tftest modules=1 resources=1
|
|
```
|
|
|
|
### Routing Policies
|
|
|
|
```hcl
|
|
module "private-dns" {
|
|
source = "./fabric/modules/dns"
|
|
project_id = "myproject"
|
|
type = "private"
|
|
name = "test-example"
|
|
domain = "test.example."
|
|
client_networks = [var.vpc.self_link]
|
|
recordsets = {
|
|
"A regular" = { records = ["10.20.0.1"] }
|
|
"A geo" = {
|
|
geo_routing = [
|
|
{ location = "europe-west1", records = ["10.0.0.1"] },
|
|
{ location = "europe-west2", records = ["10.0.0.2"] },
|
|
{ location = "europe-west3", records = ["10.0.0.3"] }
|
|
]
|
|
}
|
|
|
|
"A wrr" = {
|
|
ttl = 600
|
|
wrr_routing = [
|
|
{ weight = 0.6, records = ["10.10.0.1"] },
|
|
{ weight = 0.2, records = ["10.10.0.2"] },
|
|
{ weight = 0.2, records = ["10.10.0.3"] }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=4
|
|
```
|
|
<!-- BEGIN TFDOC -->
|
|
|
|
## Variables
|
|
|
|
| name | description | type | required | default |
|
|
|---|---|:---:|:---:|:---:|
|
|
| [domain](variables.tf#L54) | Zone domain, must end with a period. | <code>string</code> | ✓ | |
|
|
| [name](variables.tf#L72) | Zone name, must be unique within the project. | <code>string</code> | ✓ | |
|
|
| [project_id](variables.tf#L83) | Project id for the zone. | <code>string</code> | ✓ | |
|
|
| [client_networks](variables.tf#L21) | List of VPC self links that can see this zone. | <code>list(string)</code> | | <code>[]</code> |
|
|
| [description](variables.tf#L28) | Domain description. | <code>string</code> | | <code>"Terraform managed."</code> |
|
|
| [dnssec_config](variables.tf#L34) | DNSSEC configuration for this zone. | <code title="object({ non_existence = optional(string, "nsec3") state = string key_signing_key = optional(object( { algorithm = string, key_length = number }), { algorithm = "rsasha256", key_length = 2048 } ) zone_signing_key = optional(object( { algorithm = string, key_length = number }), { algorithm = "rsasha256", key_length = 1024 } ) })">object({…})</code> | | <code title="{ state = "off" }">{…}</code> |
|
|
| [enable_logging](variables.tf#L65) | Enable query logging for this zone. Only valid for public zones. | <code>bool</code> | | <code>false</code> |
|
|
| [forwarders](variables.tf#L59) | Map of {IPV4_ADDRESS => FORWARDING_PATH} for 'forwarding' zone types. Path can be 'default', 'private', or null for provider default. | <code>map(string)</code> | | <code>{}</code> |
|
|
| [peer_network](variables.tf#L77) | Peering network self link, only valid for 'peering' zone types. | <code>string</code> | | <code>null</code> |
|
|
| [recordsets](variables.tf#L88) | Map of DNS recordsets in \"type name\" => {ttl, [records]} format. | <code title="map(object({ ttl = optional(number, 300) records = optional(list(string)) geo_routing = optional(list(object({ location = string records = list(string) }))) wrr_routing = optional(list(object({ weight = number records = list(string) }))) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [service_directory_namespace](variables.tf#L123) | Service directory namespace id (URL), only valid for 'service-directory' zone types. | <code>string</code> | | <code>null</code> |
|
|
| [type](variables.tf#L129) | Type of zone to create, valid values are 'public', 'private', 'forwarding', 'peering', 'service-directory'. | <code>string</code> | | <code>"private"</code> |
|
|
| [zone_create](variables.tf#L139) | Create zone. When set to false, uses a data source to reference existing zone. | <code>bool</code> | | <code>true</code> |
|
|
|
|
## Outputs
|
|
|
|
| name | description | sensitive |
|
|
|---|---|:---:|
|
|
| [dns_keys](outputs.tf#L17) | DNSKEY and DS records of DNSSEC-signed managed zones. | |
|
|
| [domain](outputs.tf#L22) | The DNS zone domain. | |
|
|
| [name](outputs.tf#L27) | The DNS zone name. | |
|
|
| [name_servers](outputs.tf#L32) | The DNS zone name servers. | |
|
|
| [type](outputs.tf#L37) | The DNS zone type. | |
|
|
| [zone](outputs.tf#L42) | DNS zone resource. | |
|
|
|
|
<!-- END TFDOC -->
|