Passa al contenuto principale
Versione: Next

modules/network

Modulo Terraform condiviso usato da tutti gli esempi ArubaCloud. Crea il livello di rete fondamentale: VPC, subnet, security group per la VM con regole di ingresso configurabili, Elastic IP per la VM e (opzionalmente) security group ed Elastic IP per il DBaaS.

Perché un modulo condiviso?​

Ogni esempio necessita delle stesse 6–10 risorse di rete. Senza un modulo, quel codice verrebbe duplicato in ogni directory di esempio. Il modulo mantiene gli esempi concentrati sulla loro logica applicativa.

Decisioni di design​

  • Le regole di sicurezza specifiche per l'app NON sono in questo modulo. Ad esempio, l'esempio WordPress crea la regola MySQL 3306 nel proprio main.tf per poter limitare il CIDR sorgente a ${module.network.vm_elastic_ip_address}/32. Il modulo crea solo regole generiche egress-all e le regole di ingresso VM configurabili.
  • Il networking DBaaS è opzionale. Imposta create_dbaas_network = true negli esempi che usano un database gestito. Il security group DBaaS viene creato senza regole di ingresso — il chiamante le aggiunge.
  • Una subnet per VPC. Tutti gli esempi usano una singola subnet Basic. Le topologie multi-subnet esulano dall'ambito di questa raccolta.

Utilizzo​

module "network" {
source = "../modules/network"

name_prefix = "wp-prod"
location = var.location
project_id = arubacloud_project.this.id
tags = ["wordpress", "prod"]
billing_period = "Hour"

vm_ingress_ports = {
ssh = { port = "22", cidr = var.ssh_cidr }
http = { port = "80", cidr = "0.0.0.0/0" }
https = { port = "443", cidr = "0.0.0.0/0" }
}

create_dbaas_network = true
}

# Regola di ingresso MySQL specifica per DBaaS (creata fuori dal modulo così
# il CIDR sorgente può referenziare module.network.vm_elastic_ip_address)
resource "arubacloud_securityrule" "dbaas_mysql" {
name = "wp-prod-db-mysql"
location = var.location
project_id = arubacloud_project.this.id
vpc_id = module.network.vpc_id
security_group_id = module.network.dbaas_security_group_id

properties = {
direction = "Ingress"
protocol = "TCP"
port = "3306"
target = {
kind = "Ip"
value = "${module.network.vm_elastic_ip_address}/32"
}
}
}

Requisiti​

NomeVersione
terraform>= 1.9
arubacloud/arubacloud~> 1.0

Input​

NomeDescrizioneTipoDefaultObbligatorio
name_prefixPrefisso breve per tutti i nomi delle risorse. 2–15 caratteri.string—sì
locationRegione ArubaCloud (es. ITBG-Bergamo)string"ITBG-Bergamo"no
project_idID progetto ArubaCloudstring—sì
tagsTag da allegare a tutte le risorselist(string)[]no
billing_periodPeriodo di fatturazione Elastic IP (Hour o Month)string"Hour"no
vm_ingress_portsMappa di regole di ingresso TCP per il security group VMmap(object({port=string, cidr=string})){ssh, http, https}no
create_dbaas_networkCrea security group ed Elastic IP per il DBaaSboolfalseno

Output​

NomeDescrizione
vpc_idID VPC
vpc_uriURI VPC (per vpc_uri_ref)
subnet_idID Subnet
subnet_uriURI Subnet (per subnet_uri_refs)
vm_security_group_idID security group VM
vm_security_group_uriURI security group VM (per securitygroup_uri_refs)
vm_elastic_ip_addressIndirizzo IP pubblico della VM
vm_elastic_ip_uriURI Elastic IP VM (per elastic_ip_uri_ref)
dbaas_security_group_idID security group DBaaS (null se create_dbaas_network=false)
dbaas_security_group_uriURI security group DBaaS (null se create_dbaas_network=false)
dbaas_elastic_ip_addressIndirizzo IP pubblico DBaaS (null se create_dbaas_network=false)
dbaas_elastic_ip_uriURI Elastic IP DBaaS (null se create_dbaas_network=false)