Prenosnik se poveže s končno točko Client VPN, terraform apply pa še vedno ne uspe na viru poti. Konfiguracija običajno vsebuje več ciljnih CIDR kot povezanih podomrežij, blok poti pa izbere cilj z indeksom. To predpostavlja, da sta obe zbirki vzporedni. Nista, in napaka se pokaže pri uporabi, ne pri pregledu.

Poimenujte objekt, ki ne uspe

Vključeni so trije viri in vsak odgovarja na drugo vprašanje. Povezava postavi omrežni vmesnik končne točke v podomrežje. Pot pove, katera ciljna predpona se dostavi ciljnemu podomrežju. Pravilo avtorizacije pove, kateri uporabniki lahko dosežejo katero predpono. Pot, ki kaže na podomrežje, ki ni bilo nikoli povezano, ne uspe tudi kadar oba objekta obstajata, ker mora cilj pripadati tej končni točki.

Najprej naštejte povezave: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

Zapomnite si lokalno pot VPC

Prva povezava doda lokalno pot za celoten VPC, zato je vsako podomrežje v tem VPC že dosegljivo brez vira poti. Dodatne poti obstajajo za povezane VPC, priključke Transit Gateway in on-premises predpone, ki jih VPC ne poseduje. Zato lahko končna točka s tremi povezavami zakonito nosi sedem ciljnih vnosov.

Pred dodajanjem poti preštejte cilje, ki ležijo zunaj VPC. Če je to število manjše od seznama CIDR, seznam opisuje podomrežja, ki ne potrebujejo nobene poti.

Zamenjajte indeks z zemljevidom

Ovijanje indeksa v operator modulo utiša napako in ohrani napako modeliranja. Cilj, do katerega ni mogoče priti prek izbranega cilja, še vedno ne prenaša prometa, ne glede na to, kako čisto se načrt uporabi. Namesto tega shranite razmerje in pustite Terraform, da ga preveri, preden se karkoli ustvari. Spodnji blok je ilustrativen in uporablja argumente poti končne točke ponudnika.

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

Ko je zemljevid ob seznamu povezav, dodajanje cilja vsili odločitev, katero podomrežje ga nosi. To je pogovor, ki ga je indeks skrival.

Druga napaka ustvari nesmiselne vrednosti namesto napake indeksa. Posredovanje nizkonivojske konstrukcije tja, kjer se pričakuje vmesnik višje ravni, pusti polja, ki jih bere API, nepopolna, in nastali CIDR je neuporaben. Terraform pokaže enako obliko, ko niz prispe tja, kjer se pričakuje objekt. Preverite shemo ponudnika za vrsto argumenta.

Dokažite to s klienta

Pred uporabo zaženite terraform validate in načrt proti dejanskemu stanju. Nato primerjajte seznam ciljnih omrežij končne točke z zemljevidom, namesto da zaupate uspešnemu apply.

Sprejemni test je povezan klient, ki doseže vsako predvideno predpono.

Pravilo avtorizacije je mesto, kjer se veliko nastavitev ustavi zgodaj. Omejeno je na ciljni CIDR in skupino, pot brez ustrezne avtorizacije pa ustvari povezanega klienta, ki ne more doseči predpone. Za vsako predpono preverite oba objekta, ker apply, ki ustvari pot in pozabi pravilo, izgleda popoln. Preizkusite z enim uporabnikom v skupini in enim zunaj nje.

Ko ena predpona ne uspe, primerjajte njen vnos poti s pravilom avtorizacije. Manjkajoča avtorizacija in manjkajoča pot sta v dnevniku klienta videti podobno in se popravljata v različnih virih.

Sorodni članki