Bir dizüstü bilgisayar Client VPN uç noktasına bağlanır ve terraform apply hâlâ bir rota kaynağında başarısız olur. Yapılandırmada genellikle ilişkili alt ağlardan daha fazla hedef CIDR bulunur ve rota bloğu hedefi bir indeksle seçer. Bu, iki koleksiyonun paralel olduğunu varsayar. Değiller ve hata inceleme sırasında değil uygulama sırasında ortaya çıkar.

Başarısız olan nesneyi adlandırın

Üç kaynak söz konusudur ve her biri farklı bir soruyu yanıtlar. İlişkilendirme, uç noktanın ağ arayüzünü bir alt ağa yerleştirir. Rota, hangi hedef önekinin hedef alt ağa teslim edildiğini söyler. Yetkilendirme kuralı, hangi kullanıcıların hangi öneke ulaşabileceğini söyler. Hiç ilişkilendirilmemiş bir alt ağa işaret eden rota, her iki nesne de var olsa bile başarısız olur, çünkü hedef bu uç noktaya ait olmalıdır.

Önce ilişkilendirmeleri listeleyin: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

VPC'nin yerel rotasını unutmayın

İlk ilişkilendirme tüm VPC için yerel bir rota ekler, bu nedenle o VPC'deki her alt ağ rota kaynağı olmadan zaten erişilebilir. Eşlenmiş VPC'ler, Transit Gateway bağlantıları ve VPC'nin sahip olmadığı on-premises önekleri için ek rotalar vardır. Bu yüzden üç ilişkilendirmesi olan bir uç nokta meşru olarak yedi hedef girdisi taşıyabilir.

Rota eklemeden önce VPC dışında kalan hedefleri sayın. Bu sayı CIDR listesinden küçükse, liste hiç rota gerektirmeyen alt ağları tanımlıyor demektir.

İndeksi bir haritayla değiştirin

İndeksi bir modulo operatörüne sarmak hatayı susturur ve modelleme hatasını korur. Seçilen hedef üzerinden ulaşılamayan bir hedef, plan ne kadar temiz uygulanırsa uygulansın yine de trafik taşımaz. Bunun yerine ilişkiyi saklayın ve herhangi bir şey oluşturmadan önce Terraform'un bunu denetlemesine izin verin. Aşağıdaki blok örnektir ve sağlayıcının uç nokta rota bağımsız değişkenlerini kullanır.

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

Harita ilişkilendirme listesinin yanındayken, bir hedef eklemek hangi alt ağın onu taşıyacağına dair karar vermeyi zorunlu kılar. İndeksin sakladığı konuşma buydu.

Farklı bir arıza, indeks hatası yerine anlamsız değerler üretir. Daha yüksek düzey bir arayüzün beklendiği yere daha düşük düzey bir yapı geçirmek, API'nin okuduğu alanları doldurulmamış bırakır ve ortaya çıkan CIDR kullanılamaz. Terraform, nesne beklenen yere bir dize geldiğinde aynı şekli gösterir. Bağımsız değişken türü için sağlayıcı şemasını denetleyin.

Bunu bir istemciden kanıtlayın

Uygulamadan önce terraform validate ve gerçek duruma karşı bir plan çalıştırın. Ardından başarılı bir apply'a güvenmek yerine uç noktanın hedef ağ listesini haritayla karşılaştırın.

Kabul testi, amaçlanan her öneke ulaşan bağlı bir istemcidir.

Yetkilendirme kuralı, birçok kurulumun erken durduğu yerdir. Bir hedef CIDR ve bir grupla sınırlıdır ve eşleşen yetkilendirmesi olmayan bir rota, öneke ulaşamayan bağlı bir istemci üretir. Her önek için iki nesneyi de denetleyin, çünkü rotayı oluşturup kuralı unutan bir apply eksiksiz görünür. Grup içinde bir ve dışında bir kullanıcıyla test edin.

Bir önek başarısız olduğunda, rota girdisini yetkilendirme kuralıyla karşılaştırın. Eksik yetkilendirme ve eksik rota istemci günlüğünde benzer görünür ve farklı kaynaklarda düzeltilir.

İlgili makaleler