Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme

Bu makalede, terraform Azure kullanılırken karşılaşılan yaygın sorunlar ve olası çözümler listelenir.

Terraform'a özgü bir sorunla karşılaşırsanız HashiCorp'un topluluk destek kanallarından birini kullanın.

HashiCorp Terraform'a özgü destek kanalları

Sağlayıcı kayıt durumu listelenemiyor

Hata iletisi:

Hata: Sağlayıcı kayıt durumu listelenemiyor. Bu hata, geçersiz kimlik bilgileri nedeniyle veya hizmet sorumlusunun Resource Manager API'sini kullanma izni olmadığından oluşabilir. Azure hatası: kaynaklar. ProvidersClient#List: İstek yanıtlanırken hata oluştu: StatusCode=403 -- Özgün Hata: autorest/azure: Hizmet bir hata döndürdü. Status=403 Code="AuthorizationFailed" Message="'00000000-0000-0000-0000-000000000000' istemcisi, '00000000-0000-0000-0000-000000000000' nesne kimliğiyle, '/subscriptions/00000000-0000-0000-0000-000000000000' kapsamı üzerinde 'Microsoft.Resources/subscriptions/providers/read' eylemini gerçekleştirme yetkisine sahip değil veya kapsam geçersiz. Erişim yeni verildiyse kimlik bilgilerinizi yenileyin."

Arka plan: Cloud Shell Terraform komutlarını çalıştırır ve belirli Terraform/Azure ortam değişkenlerini tanımlarsanız çakışmalar görebilirsiniz. Aşağıdaki tabloda ortam değişkenleri ve temsil ettikleri Azure değerleri listelenir:

Ortam değişkeni Azure değeri
ARM_SUBSCRIPTION_ID Azure abonelik kimliği
ARM_TENANT_ID Microsoft hesabı kiracı kimliği
ARM_CLIENT_ID Azure hizmet sorumlusu uygulama kimliği
ARM_CLIENT_SECRET Azure hizmet sorumlusunun parolası

Neden: Bu yazının yazıldığı sırada, Cloud Shell’de çalışan Terraform betiği, geçerli Azure aboneliğindeki değerleri kullanarak ARM_TENANT_ID ve ARM_SUBSCRIPTION_ID ortam değişkenlerinin üzerine yazar. Sonuç olarak, ortam değişkenlerinin işaret ettiği hizmet sorumlusunun mevcut Azure aboneliği üzerinde gerekli izinleri yoksa Terraform işlemleri başarısız olur.

Durum kilidi alınırken hata oluştu

Hata iletisi:

Hata: Durum kilidi alma hatası; Hata iletisi: 2 hata oluştu:
* durum bloku zaten kilitli
* blob meta verileri "terraformlockid" boştu
Terraform, durumu aynı anda birden çok kullanıcı tarafından yazılmasını önleyen bir durum kilidi alır. Lütfen yukarıdaki sorunu çözün ve yeniden deneyin. Çoğu komut için "-lock=false" bayrağıyla kilitlemeyi devre dışı bırakabilirsiniz, ancak bu önerilmez.

Arka plan: Terraform durum dosyasında Terraform komutları çalıştırıyorsanız ve görüntülenen tek ileti bu hataysa aşağıdaki nedenler geçerli olabilir. Bu hata yerel ve uzak durum dosyaları için geçerlidir.

Neden: Bu hatanın iki olası nedeni vardır. İlk neden, bir Terraform komutunun durum dosyası üzerinde zaten çalışıyor olması ve bu nedenle dosyayı kilitlemiş olmasıdır; böylece bir şeyin bozulması önlenir. İkinci olası neden, komutlar çalışırken durum dosyası ile CLI arasında bir bağlantı kesintisi olmasıdır. Bu kesinti en yaygın olarak uzak durum dosyalarını kullanırken oluşur.

Çözüm: İlk olarak, durum dosyasında herhangi bir komut çalıştırmadığınızdan emin olun. Yerel bir durum dosyasıyla çalışıyorsanız, komut çalıştıran terminalleriniz olup olmadığını denetleyin. Alternatif olarak, çalışan bir şeyin durum dosyasını kullanıp kullanmadığını görmek için dağıtım işlem hatlarınızı denetleyin. Bu koşul sorunu çözmezse ikinci neden hatayı tetiklemiş olabilir. Azure Depolama hesabı kapsayıcısında depolanan uzak durum dosyası için dosyayı bulabilir ve Kirayı kes düğmesini kullanabilirsiniz.

Azure Depolama kapsayıcısındaki Kira sözleşmesini sonlandır düğmesini gösteren ekran görüntüsü.

Durum dosyanızı depolamak için diğer arka uçları kullanıyorsanız, öneriler için HashiCorp belgelerine bakın.

VPN hataları

VPN hatalarını çözme hakkında bilgi için Karma VPN bağlantısı sorunlarını giderme makalesine bakın.

Terraform depolama hesabını silmeyi ve yeniden oluşturmayı planlıyor

Terraform, Azure’da depolama hesabında Terraform dışında değişiklik yapıldıktan sonra bir Azure depolama hesabını silip yeniden oluşturmayı planlayabilir. Bu davranış, bölgesel olmayan küme (LRS, GRS, RA-GRS) ile bölgesel küme (ZRS, GZRS, RA-GZRS) arasındaki sınırı aşan desteklenen bir Azure Depolama hesap yedekliliği dönüştürmesi account_replication_type sırasında oluşabilir.

Planı uygulamadan önce önerilen değişiklikleri gözden geçirin ve Terraform'un depolama hesabı değiştirmenin neden gerekli olduğunu onaylayın. Depolama hesabını yeniden oluşturmak uygulama kapalı kalma süresine veya veri kaybına neden olabilir.

Bu riski azaltmak için:

  • Depolama hesaplarını yöneten dağıtımlar için otomatik onayı devre dışı bırakın ve her terraform planöğesini gözden geçirin.
  • Depolama hesabı kaynağının prevent_destroy = true bloğunda lifecycle yapılandırın.
  • Dönüştürmeye başlamadan önce, ignore_changes öğesine geçici olarak account_replication_type ekleyin.
  • Dönüştürme işleminden sonra Terraform durumunu güncelleştirmek için komutunu çalıştırın terraform apply -refresh-only , ardından Terraform yapılandırmanızı dağıtılan depolama hesabıyla eşleşecek şekilde güncelleştirin.
  • terraform plan öğesini yalnızca ignore_changes komutunu çalıştırıp bunun beklenmeyen değişiklikler bildirmediğini doğruladıktan sonra kaldırın.

Ayrıntılı dönüştürme kılavuzu için bkz. Durum bilgisi olan Azure kaynakları için Terraform kaymasını önleme.