'n Skootrekenaar maak aan die Client VPN-endoppunt vas, en terraform apply faal steeds op 'n roetehulpbron. Die konfigurasie het gewoonlik meer bestemming-CIDR's as geassosieerde subnetten, en die roeteblok kies 'n teiken met 'n indeks. Dit veronderstel dat die twee versamelings parallel is. Hulle is nie, en die fout kom by apply-tyd na vore eerder as by hersiening.

Benoem die objek wat faal

Drie hulpbronne is betrokke en elkeen beantwoord 'n ander vraag. Die assosiasie plaas die endoppunt se netwerkkoppelvlak in 'n subnet. Die roete sê watter bestemmingsprefiks aan 'n teikensubnet afgelewer word. Die magtigingsreël sê watter gebruikers watter prefiks mag bereik. 'n Roete wat na 'n subnet wys wat nooit geassosieer is nie, faal selfs al bestaan albei objekte, want die teiken moet aan hierdie endoppunt behoort.

Lys die assosiasies eerste: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

Onthou die VPC se plaaslike roete

Die eerste assosiasie voeg 'n plaaslike roete vir die hele VPC by, so elke subnet in daardie VPC is reeds bereikbaar sonder 'n roetehulpbron. Ekstra roetes bestaan vir peered VPC's, Transit Gateway-aanhegsels en on-premises prefikse wat nie aan die VPC behoort nie. Dit is hoekom 'n endoppunt met drie assosiasies wettiglik sewe bestemmingsinskrywings kan dra.

Tel die bestemmings wat buite die VPC val voordat jy roetes byvoeg. As daardie telling kleiner is as die CIDR-lys, beskryf die lys subnetten wat glad geen roete nodig het nie.

Vervang die indeks met 'n kaart

Om die indeks in 'n modulo-operateur te draai, maak die fout stil en behou die modelleringsfout. 'n Bestemming wat nie deur die gekose teiken bereik kan word nie, dra steeds geen verkeer nie, maak nie saak hoe skoon die plan toegepas word nie. Stoor eerder die verhouding, en laat Terraform dit nagaan voordat enigiets geskep word. Die blok hieronder is illustratief en gebruik die verskaffer se endoppunt-roete-argumente.

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."
    }
  }
}

Met die kaart langs die assosiasielys dwing die byvoeg van 'n bestemming 'n besluit oor watter subnet dit dra. Dit is die gesprek wat die indeks verberg het.

'n Ander fout lewer onsinwaardes eerder as 'n indeksfout. Om 'n laevlak-konstruk te gee waar 'n hoërvlak-koppelvlak verwag word, laat die velde wat die API lees, ongevul, en die resulterende CIDR is onbruikbaar. Terraform wys dieselfde vorm wanneer 'n string opdaag waar 'n objek verwag word. Gaan die verskaffer se skema na vir die argumenttipe.

Bewys dit vanaf 'n kliënt

Voer terraform validate uit en 'n plan teen werklike toestand voordat jy toepas. Vergelyk daarna die endoppunt se teikennetwerklys met die kaart eerder as om 'n geslaagde apply te vertrou.

Die aanvaardingstoets is 'n gekoppelde kliënt wat elke beoogde prefiks bereik.

Die magtigingsreël is waar baie opstellings vroeg stop. Dit is beperk tot 'n bestemming-CIDR en 'n groep, en 'n roete sonder 'n passende magtiging lewer 'n gekoppelde kliënt wat die prefiks nie kan bereik nie. Gaan albei objekte vir elke prefiks na, want 'n apply wat die roete skep en die reël vergeet, lyk volledig. Toets met een gebruiker binne die groep en een daarbuite.

Wanneer een prefiks faal, vergelyk sy roete-inskrywing met die magtigingsreël. 'n Ontbrekende magtiging en 'n ontbrekende roete lyk soortgelyk in die kliëntlog en word in verskillende hulpbronne reggestel.

Verwante artikels