Klēpjdators pieslēdzas Client VPN galapunktam, un terraform apply joprojām neizdodas maršruta resursā. Konfigurācijā parasti ir vairāk galamērķa CIDR nekā saistītu apakštīklu, un maršruta bloks izvēlas mērķi ar indeksu. Tas pieņem, ka abas kolekcijas ir paralēlas. Tās nav, un kļūda parādās piemērošanas laikā, nevis pārskatīšanas laikā.

Nosauciet objektu, kas neizdodas

Iesaistīti trīs resursi, un katrs atbild uz citu jautājumu. Saistīšana ievieto galapunkta tīkla saskarni apakštīklā. Maršruts norāda, kurš galamērķa prefikss tiek piegādāts mērķa apakštīklam. Autorizācijas noteikums norāda, kuri lietotāji var sasniegt kuru prefiksu. Maršruts, kas norāda uz apakštīklu, kurš nekad nav saistīts, neizdodas pat tad, ja abi objekti pastāv, jo mērķim jāpieder šim galapunktam.

Vispirms uzskaitiet saistīšanas: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

Atcerieties VPC vietējo maršrutu

Pirmā saistīšana pievieno vietējo maršrutu visam VPC, tāpēc katrs apakštīkls šajā VPC jau ir sasniedzams bez maršruta resursa. Papildu maršruti pastāv savienotiem VPC, Transit Gateway pievienojumiem un on-premises prefiksiem, kas VPC nepieder. Tāpēc galapunkts ar trim saistīšanām var likumīgi nest septiņus galamērķa ierakstus.

Pirms maršrutu pievienošanas saskaitiet galamērķus, kas atrodas ārpus VPC. Ja šis skaits ir mazāks par CIDR sarakstu, saraksts apraksta apakštīklus, kuriem maršruts nemaz nav vajadzīgs.

Aizstājiet indeksu ar karti

Indeksa ietīšana modulo operatorā apklusina kļūdu un saglabā modelēšanas kļūdu. Galamērķis, ko nevar sasniegt caur izvēlēto mērķi, joprojām nenes satiksmi, lai cik tīri plāns tiktu piemērots. Tā vietā saglabājiet attiecības un ļaujiet Terraform tās pārbaudīt pirms kaut kā izveides. Tālāk esošais bloks ir ilustratīvs un izmanto pakalpojumu sniedzēja galapunkta maršruta argumentus.

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

Kad karte atrodas blakus saistīšanu sarakstam, galamērķa pievienošana liek izlemt, kurš apakštīkls to nes. Tā ir saruna, ko indekss slēpa.

Cita kļūda rada bezjēdzīgas vērtības, nevis indeksa kļūdu. Zema līmeņa konstrukcijas nodošana tur, kur tiek gaidīta augstāka līmeņa saskarne, atstāj API lasītos laukus neaizpildītus, un iegūtais CIDR ir nelietojams. Terraform parāda tādu pašu formu, kad virkne nonāk tur, kur tiek gaidīts objekts. Pārbaudiet pakalpojumu sniedzēja shēmu argumenta tipam.

Pierādiet to no klienta

Pirms piemērošanas palaidiet terraform validate un plānu pret reālo stāvokli. Pēc tam salīdziniet galapunkta mērķa tīklu sarakstu ar karti, nevis paļaujieties uz veiksmīgu apply.

Pieņemšanas tests ir pievienots klients, kas sasniedz katru paredzēto prefiksu.

Autorizācijas noteikums ir vieta, kur daudzas konfigurācijas apstājas agri. Tas ir ierobežots ar galamērķa CIDR un grupu, un maršruts bez atbilstošas autorizācijas rada pievienotu klientu, kas nevar sasniegt prefiksu. Pārbaudiet abus objektus katram prefiksam, jo apply, kas izveido maršrutu un aizmirst noteikumu, izskatās pabeigts. Pārbaudiet ar vienu lietotāju grupā un vienu ārpus tās.

Kad viens prefikss neizdodas, salīdziniet tā maršruta ierakstu ar autorizācijas noteikumu. Trūkstoša autorizācija un trūkstošs maršruts klienta žurnālā izskatās līdzīgi un tiek laboti dažādos resursos.

Saistītie raksti