Trasy Terraform Client VPN s více CIDR než podsítí
Přidružení, trasa a autorizace jsou samostatné objekty. Namapujte každý cílový CIDR na přidruženou podsíť místo indexování kratšího seznamu podsítí.
Notebook se připojí ke koncovému bodu Client VPN a terraform apply stále selhává u prostředku trasy. Konfigurace obvykle obsahuje více cílových CIDR než přidružených podsítí a blok trasy volí cíl pomocí indexu. To předpokládá, že obě kolekce jsou paralelní. Nejsou a selhání se projeví při aplikaci, ne při revizi.
Pojmenujte objekt, který selhává
Zúčastňují se tři prostředky a každý odpovídá na jinou otázku. Přidružení umísťuje síťové rozhraní koncového bodu do podsítě. Trasa říká, který cílový prefix se doručuje cílové podsíti. Pravidlo autorizace říká, kteří uživatelé mohou dosáhnout kterého prefixu. Trasa ukazující na podsíť, která nebyla nikdy přidružena, selže, i když oba objekty existují, protože cíl musí patřit tomuto koncovému bodu.
Nejprve vypište přidružení: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
Pamatujte na lokální trasu VPC
První přidružení přidá lokální trasu pro celé VPC, takže každá podsíť v tomto VPC je již dostupná bez prostředku trasy. Další trasy existují pro propojená VPC, připojení Transit Gateway a on-premises prefixy, které VPC nevlastní. Proto koncový bod se třemi přidruženími může legitimně nést sedm cílových položek.
Před přidáním tras spočítejte cíle, které leží mimo VPC. Pokud je tento počet menší než seznam CIDR, seznam popisuje podsítě, které žádnou trasu nepotřebují.
Nahraďte index mapou
Zabalení indexu do operátoru modulo utiší chybu a zachová chybu modelování. Cíl, ke kterému se nelze dostat přes zvolený cíl, stále nenese žádný provoz, ať se plán aplikuje jakkoli čistě. Místo toho vztah uložte a nechte Terraform, aby jej zkontroloval dřív, než cokoli vytvoří. Blok níže je ilustrativní a používá argumenty trasy koncového bodu od poskytovatele.
variable "client_vpn_destinations" {
description = "Destination CIDR mapped to an associated subnet key"
type = map(string)
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_destinations
client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
destination_cidr_block = each.key
target_vpc_subnet_id = aws_subnet.private[each.value].id
lifecycle {
precondition {
condition = contains(keys(aws_subnet.private), each.value)
error_message = "Route target must be a subnet key in the associated map."
}
}
}
Když je mapa vedle seznamu přidružení, přidání cíle vynutí rozhodnutí, která podsíť jej ponese. To je rozhovor, který index skrýval.
Jiná závada vytváří nesmyslné hodnoty místo chyby indexu. Předání nízkoúrovňové konstrukce tam, kde se očekává rozhraní vyšší úrovně, nechá pole, která API čte, nevyplněná a výsledný CIDR je nepoužitelný. Terraform ukazuje stejný tvar, když řetězec dorazí tam, kde se očekává objekt. Zkontrolujte schéma poskytovatele pro typ argumentu.
Dokažte to z klienta
Před aplikací spusťte terraform validate a plán proti skutečnému stavu. Poté porovnejte seznam cílových sítí koncového bodu s mapou, místo abyste věřili úspěšnému apply.
Přejímací test je připojený klient, který dosáhne každého zamýšleného prefixu.
Pravidlo autorizace je místo, kde mnoho nastavení končí brzy. Je omezeno na cílový CIDR a skupinu a trasa bez odpovídající autorizace vytvoří připojeného klienta, který se k prefixu nedostane. U každého prefixu zkontrolujte oba objekty, protože apply, který vytvoří trasu a zapomene pravidlo, vypadá hotový. Otestujte to s jedním uživatelem ve skupině a jedním mimo ni.
Když jeden prefix selže, porovnejte jeho položku trasy s pravidlem autorizace. Chybějící autorizace a chybějící trasa vypadají v klientském logu podobně a opravují se v různých prostředcích.