ab41d2d3f8 | ||
---|---|---|
.. | ||
README.md | ||
instance_group.tf | ||
main.tf | ||
outputs.tf | ||
variables.tf |
README.md
Google Compute Engine VM module
This module allows creating one or multiple instances or an instance template for a specific configuration. A service account is optionally created and assigned if not specified.
Examples
Instance leveraging defaults
The simplest example leverages defaults for the boot disk image and size, and uses a service account created by the module. Multiple instances can be managed via the instance_count
variable.
module "simple-vm-example" {
source = "../modules/compute-vm"
project_id = "my-project"
region = "europe-west1"
zone = "europe-west1-b"
name = "test"
network_interfaces = [{
network = local.network_self_link,
subnetwork = local.subnet_self_link,
nat = false,
addresses = null
}]
service_account_create = true
instance_count = 1
}
Instance template
This example shows how to use the module to manage an instance template that defines an additional attached disk for each instance, and overrides defaults for the boot disk image and service account.
module "debian-test" {
source = "../modules/compute-vm"
project_id = "my-project"
region = "europe-west1"
zone = "europe-west1-b"
name = "test"
network_interfaces = [{
network = local.network_self_link,
subnetwork = local.subnet_self_link,
nat = false,
addresses = null
}]
instance_count = 1
boot_disk = {
image = "projects/cos-cloud/global/images/family/cos-stable"
type = "pd-ssd"
size = 10
}
attached_disks = [
{ name = "disk-1", size = 10, image = null, options = null }
]
service_account = "vm-default@my-project.iam.gserviceaccount.com"
use_instance_template = true
}
Managed instance group
This example shows a basic instance where the module is used to create an instance template, and the template is associated to a basic managed instance group with no autohealing or autoscaling configuration. Instance group support is meant for prototyping, or in those situations where there's no need to manage multiple application versions.
module "instance-group" {
source = "../../cloud-foundation-fabric/modules/compute-vm"
project_id = "my-project"
region = "europe-west1"
zone = "europe-west1-b"
name = "ilb-test"
network_interfaces = [{
network = local.network_self_link,
subnetwork = local.subnetwork_self_link,
nat = false,
addresses = null
}]
boot_disk = {
image = "projects/cos-cloud/global/images/family/cos-stable"
type = "pd-ssd"
size = 10
}
service_account = local.service_account_email
service_account_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
use_instance_template = true
metadata = {
user-data = local.cloud_config
}
group_manager = {
auto_healing_policies = null
options = null
update_policy = null
named_ports = {}
regional = false
target_size = 2
versions = []
default = module.instance-group.template.self_link
}
}
Variables
name | description | type | required | default |
---|---|---|---|---|
name | Instances base name. | string |
✓ | |
network_interfaces | Network interfaces configuration. Use self links for Shared VPC, set addresses to null if not needed. | list(object({...})) |
✓ | |
project_id | Project id. | string |
✓ | |
region | Compute region. | string |
✓ | |
zone | Compute zone. | string |
✓ | |
attached_disk_defaults | Defaults for attached disks options. | object({...}) |
... |
|
attached_disks | Additional disks, if options is null defaults will be used in its place. | list(object({...})) |
[] |
|
boot_disk | Boot disk properties. | object({...}) |
... |
|
group | Instance group (for instance use). | object({...}) |
null |
|
group_manager | Instance group manager (for template use). | object({...}) |
null |
|
hostname | Instance FQDN name. | string |
null |
|
instance_count | Number of instances to create (only for non-template usage). | number |
1 |
|
instance_type | Instance type. | string |
f1-micro |
|
labels | Instance labels. | map(string) |
{} |
|
metadata | Instance metadata. | map(string) |
{} |
|
min_cpu_platform | Minimum CPU platform. | string |
null |
|
options | Instance options. | object({...}) |
... |
|
scratch_disks | Scratch disks configuration. | object({...}) |
... |
|
service_account | Service account email. Unused if service account is auto-created. | string |
null |
|
service_account_create | Auto-create service account. | bool |
false |
|
service_account_scopes | Scopes applied to service account. | list(string) |
[] |
|
tags | Instance tags. | list(string) |
[] |
|
use_instance_template | Create instance template instead of instances. | bool |
false |
Outputs
name | description | sensitive |
---|---|---|
external_ips | Instance main interface external IP addresses. | |
group | Instance group resource. | |
group_manager | Instance group resource. | |
instances | Instance resources. | |
internal_ips | Instance main interface internal IP addresses. | |
names | Instance names. | |
self_links | Instance self links. | |
service_account | Service account resource. | |
service_account_email | Service account email. | |
service_account_iam_email | Service account email. | |
template | Template resource. | |
template_name | Template name. |
TODO
- add support for instance groups