An open API service indexing awesome lists of open source software.

https://github.com/googlecloudplatform/terraform-google-alloy-db

Creates an Alloy DB instance
https://github.com/googlecloudplatform/terraform-google-alloy-db

cft-terraform databases

Last synced: 4 months ago
JSON representation

Creates an Alloy DB instance

Awesome Lists containing this project

README

        

# terraform-google-alloy-db

##
This module handles Google Cloud Platform [AlloyDB](https://cloud.google.com/alloydb) cluster creation and configuration with Automated Backup Policy, Primary node instance and Read Node Pools.
The resource/resources that this module will create are:

- Creates an AlloyDB Cluster with/without automated backup policy
- Creates a Primary Instance
- Creates a pool of Read Instances

You can also create Cross Region Replica using this module. See example in [cross_region_replica](./examples/simple_example/)

## Compatibility

This module is meant for use with Terraform 1.3+ and tested using Terraform 1.3+. If you find incompatibilities using Terraform >=1.3, please open an issue.

## Version

Current version is 2.X. Upgrade guides:

- [0.1 -> 0.2](/docs/upgrading_to_v0.2.md)
- [0.2 -> 1.0](/docs/upgrading_to_v1.0.md)
- [1.X -> 2.0](/docs/upgrading_to_v2.0.md)
- [2.X -> 3.0](/docs/upgrading_to_v3.0.md)

## Usage

- Functional examples are included in the [examples](./examples/) directory.
- If you want to create a cluster with failover replicas and manage complete lifecycle (including failover and switchover) of primary and DR clusters using this module, follow the example in [simple_example](./examples/simple_example/) folder.
- If you are planning to create cluster/instance with private service connect follow example in [private_service_connect](./examples/example_with_private_service_connect/).

Basic usage of this module is as follows:

```hcl
module "alloy-db" {
source = "GoogleCloudPlatform/alloy-db/google"
version = "~> 3.0"

cluster_id = "alloydb-cluster"
cluster_location = "us-central1"
project_id = <"PROJECT_ID">
cluster_labels = {}
cluster_display_name = ""
cluster_initial_user = {
user = "",
password = ""
}
network_self_link = "projects/${project_id}/global/networks/${network_name}"

automated_backup_policy = {
location = "us-central1"
backup_window = "1800s",
enabled = true,
weekly_schedule = {
days_of_week = ["FRIDAY"],
start_times = ["2:00:00:00", ]
}
quantity_based_retention_count = 1,
time_based_retention_count = null,
labels = {
test = "alloydb-cluster"
},
}
primary_instance = null

read_pool_instance = null

}
```

- Usage of this module for creating a AlloyDB Cluster with a primary instance and a read replica instance

```hcl
module "alloy-db" {
source = "GoogleCloudPlatform/alloy-db/google"
version = "~> 3.0"
project_id =
cluster_id = "alloydb-cluster-with-primary-instance"
cluster_location = "us-central1"
cluster_labels = {}
cluster_display_name = ""
cluster_initial_user = {
user = "",
password = ""
}
network_self_link = "projects/${project_id}/global/networks/${network_name}"

automated_backup_policy = null

primary_instance = {
instance_id = "primary-instance",
instance_type = "PRIMARY",
machine_cpu_count = 2,
database_flags = {},
display_name = "alloydb-primary-instance"
}

read_pool_instance = [
{
instance_id = "cluster-1-rr-1"
display_name = "cluster-1-rr-1"
require_connectors = false
ssl_mode = "ALLOW_UNENCRYPTED_AND_ENCRYPTED"
}
]

}
```

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| allocated\_ip\_range | The name of the allocated IP range for the private IP AlloyDB cluster. For example: google-managed-services-default. If set, the instance IPs for this cluster will be created in the allocated range | `string` | `null` | no |
| automated\_backup\_policy | The automated backup policy for this cluster. If no policy is provided then the default policy will be used. The default policy takes one backup a day, has a backup window of 1 hour, and retains backups for 14 days |

object({
location = optional(string)
backup_window = optional(string)
enabled = optional(bool)

weekly_schedule = optional(object({
days_of_week = optional(list(string))
start_times = list(string)
})),

quantity_based_retention_count = optional(number)
time_based_retention_count = optional(string)
labels = optional(map(string))
backup_encryption_key_name = optional(string)
})
| `null` | no |
| cluster\_display\_name | Human readable display name for the Alloy DB Cluster | `string` | `null` | no |
| cluster\_encryption\_key\_name | The fully-qualified resource name of the KMS key for cluster encryption. Each Cloud KMS key is regionalized and has the following format: projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY\_NAME] | `string` | `null` | no |
| cluster\_id | The ID of the alloydb cluster | `string` | n/a | yes |
| cluster\_initial\_user | Alloy DB Cluster Initial User Credentials |
object({
user = optional(string),
password = string
})
| `null` | no |
| cluster\_labels | User-defined labels for the alloydb cluster | `map(string)` | `{}` | no |
| cluster\_location | Location where AlloyDb cluster will be deployed | `string` | n/a | yes |
| cluster\_type | The type of cluster. If not set, defaults to PRIMARY. Default value is PRIMARY. Possible values are: PRIMARY, SECONDARY | `string` | `"PRIMARY"` | no |
| continuous\_backup\_enable | Whether continuous backup recovery is enabled. If not set, defaults to true | `bool` | `true` | no |
| continuous\_backup\_encryption\_key\_name | The fully-qualified resource name of the KMS key. Cloud KMS key should be in same region as Cluster and has the following format: projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY\_NAME] | `string` | `null` | no |
| continuous\_backup\_recovery\_window\_days | The numbers of days that are eligible to restore from using PITR (point-in-time-recovery). Defaults to 14 days. The value must be between 1 and 35 | `number` | `14` | no |
| database\_version | The database engine major version. This is an optional field and it's populated at the Cluster creation time. This field cannot be changed after cluster creation. Possible valus: POSTGRES\_14, POSTGRES\_15 | `string` | `null` | no |
| deletion\_policy | Policy to determine if the cluster should be deleted forcefully. Deleting a cluster forcefully, deletes the cluster and all its associated instances within the cluster | `string` | `null` | no |
| network\_self\_link | Network ID where the AlloyDb cluster will be deployed. If network\_self\_link is set then psc\_enabled should be set to false | `string` | `null` | no |
| primary\_cluster\_name | Primary cluster name. Required for creating cross region secondary cluster. Not needed for primary cluster | `string` | `null` | no |
| primary\_instance | Primary cluster configuration that supports read and write operations. |
object({
instance_id = string,
display_name = optional(string),
database_flags = optional(map(string))
labels = optional(map(string))
annotations = optional(map(string))
gce_zone = optional(string)
availability_type = optional(string)
machine_cpu_count = optional(number, 2)
ssl_mode = optional(string)
require_connectors = optional(bool)
query_insights_config = optional(object({
query_string_length = optional(number)
record_application_tags = optional(bool)
record_client_address = optional(bool)
query_plans_per_minute = optional(number)
}))
enable_public_ip = optional(bool, false)
cidr_range = optional(list(string))
})
| n/a | yes |
| project\_id | The ID of the project in which to provision resources. | `string` | n/a | yes |
| psc\_allowed\_consumer\_projects | List of consumer projects that are allowed to create PSC endpoints to service-attachments to this instance. These should be specified as project numbers only. | `list(string)` | `[]` | no |
| psc\_enabled | Create an instance that allows connections from Private Service Connect endpoints to the instance. If psc\_enabled is set to true, then network\_self\_link should be set to null | `bool` | `false` | no |
| read\_pool\_instance | List of Read Pool Instances to be created |
list(object({
instance_id = string
display_name = string
node_count = optional(number, 1)
database_flags = optional(map(string))
availability_type = optional(string)
gce_zone = optional(string)
machine_cpu_count = optional(number, 2)
ssl_mode = optional(string)
require_connectors = optional(bool)
query_insights_config = optional(object({
query_string_length = optional(number)
record_application_tags = optional(bool)
record_client_address = optional(bool)
query_plans_per_minute = optional(number)
}))
enable_public_ip = optional(bool, false)
cidr_range = optional(list(string))
}))
| `[]` | no |

## Outputs

| Name | Description |
|------|-------------|
| cluster | Cluster created |
| cluster\_id | ID of the Alloy DB Cluster created |
| cluster\_name | ID of the Alloy DB Cluster created |
| primary\_instance | Primary instance created |
| primary\_instance\_id | ID of the primary instance created |
| primary\_psc\_attachment\_link | The private service connect (psc) attachment created for primary instance |
| primary\_psc\_dns\_name | The DNS name of the instance for PSC connectivity created for primary instance |
| read\_instance\_ids | IDs of the read instances created |
| read\_psc\_attachment\_links | The private service connect (psc) attachment created read replica instances |
| read\_psc\_dns\_names | The DNS names of the instances for PSC connectivity created for replica instances |
| replica\_instances | Replica instances created |

## Requirements

These sections describe requirements for using this module.

### Software

The following dependencies must be available:

- [Terraform][terraform] v1.3
- [Terraform Provider for GCP][terraform-provider-gcp] plugin >= v5.32+

### Service Account

A service account with the following roles must be used to provision
the resources of this module:

- Cloud AlloyDB Admin: `roles/alloydb.admin`

### APIs

A project with the following APIs enabled must be used to host the
resources of this module:

- `alloydb.googleapis.com`

## Contributing

Refer to the [contribution guidelines](./CONTRIBUTING.md) for
information on contributing to this module.

[iam-module]: https://registry.terraform.io/modules/terraform-google-modules/iam/google
[project-factory-module]: https://registry.terraform.io/modules/terraform-google-modules/project-factory/google
[terraform-provider-gcp]: https://www.terraform.io/docs/providers/google/index.html
[terraform]: https://www.terraform.io/downloads.html

## Security Disclosures

Please see our [security disclosure process](./SECURITY.md).