Hızlı Başlangıç: Terraform kullanarak Azure IoT Cihazı Sağlama Hizmeti oluşturma
Bu hızlı başlangıçta Terraform kullanarak karma ayırma ilkesiyle Azure IoT Hub Cihaz Sağlama Hizmeti (DPS) kaynağını dağıtmayı öğreneceksiniz.
Bu hızlı başlangıç, aşağıdaki Terraform ve Terraform sağlayıcı sürümleriyle test edilmiştir:
Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform kullanarak HCL söz dizimlerini kullanarak yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, Azure gibi bulut sağlayıcısını ve bulut altyapınızı oluşturan öğeleri belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.
Bu makalede şunları öğreneceksiniz:
- Depolama Hesabı ve Depolama Kapsayıcısı Oluşturma
- Event Hubs, Ad Alanı ve Yetkilendirme Kuralı Oluşturma
- IoT Hub oluşturma
- IoT Hub'ı Depolama Hesap uç noktasına ve Event Hubs uç noktasına bağlama
- IoT Hub Paylaşılan Erişim İlkesi oluşturma
- DPS Kaynağı Oluşturma
- DPS ve IoT Hub'ı bağlama
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Terraform kodunu uygulama
Not
Bu makaledeki örnek kod, Azure Terraform GitHub deposunda bulunur. Azure kaynaklarını yönetmek için Terraform'un nasıl kullanılacağını gösteren diğer makalelere ve örnek koda bakın
Örnek Terraform kodunu test edip çalıştırmak ve geçerli dizin yapmak için bir dizin oluşturun.
adlı
providers.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = ">=3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
adlı
main.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create storage account & container resource "random_string" "sa_name" { length = 12 special = false upper = false } resource "azurerm_storage_account" "sa" { name = random_string.sa_name.id resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location account_tier = "Standard" account_replication_type = "LRS" } resource "azurerm_storage_container" "my_terraform_container" { name = "mycontainer" storage_account_name = azurerm_storage_account.sa.name container_access_type = "private" } # Create an Event Hub & Authorization Rule resource "random_pet" "eventhub_namespace_name" { prefix = var.eventhub_namespace_name_prefix } resource "azurerm_eventhub_namespace" "namespace" { name = random_pet.eventhub_namespace_name.id resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku = "Basic" } resource "azurerm_eventhub" "my_terraform_eventhub" { name = "myEventHub" resource_group_name = azurerm_resource_group.rg.name namespace_name = azurerm_eventhub_namespace.namespace.name partition_count = 2 message_retention = 1 } resource "azurerm_eventhub_authorization_rule" "my_terraform_authorization_rule" { resource_group_name = azurerm_resource_group.rg.name namespace_name = azurerm_eventhub_namespace.namespace.name eventhub_name = azurerm_eventhub.my_terraform_eventhub.name name = "acctest" send = true } # Create an IoT Hub resource "random_pet" "iothub_name" { prefix = var.iothub_name_prefix length = 1 } resource "azurerm_iothub" "iothub" { name = random_pet.iothub_name.id resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku { name = "S1" capacity = 1 } endpoint { type = "AzureIotHub.StorageContainer" connection_string = azurerm_storage_account.sa.primary_blob_connection_string name = "export" batch_frequency_in_seconds = 60 max_chunk_size_in_bytes = 10485760 container_name = azurerm_storage_container.my_terraform_container.name encoding = "Avro" file_name_format = "{iothub}/{partition}_{YYYY}_{MM}_{DD}_{HH}_{mm}" } endpoint { type = "AzureIotHub.EventHub" connection_string = azurerm_eventhub_authorization_rule.my_terraform_authorization_rule.primary_connection_string name = "export2" } route { name = "export" source = "DeviceMessages" condition = "true" endpoint_names = ["export"] enabled = true } route { name = "export2" source = "DeviceMessages" condition = "true" endpoint_names = ["export2"] enabled = true } enrichment { key = "tenant" value = "$twin.tags.Tenant" endpoint_names = ["export", "export2"] } cloud_to_device { max_delivery_count = 30 default_ttl = "PT1H" feedback { time_to_live = "PT1H10M" max_delivery_count = 15 lock_duration = "PT30S" } } tags = { purpose = "testing" } } #Create IoT Hub Access Policy resource "azurerm_iothub_shared_access_policy" "hub_access_policy" { name = "terraform-policy" resource_group_name = azurerm_resource_group.rg.name iothub_name = azurerm_iothub.iothub.name registry_read = true registry_write = true service_connect = true } # Create IoT Hub DPS resource "random_pet" "dps_name" { prefix = var.dps_name_prefix length = 1 } resource "azurerm_iothub_dps" "dps" { name = random_pet.dps_name.id resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location allocation_policy = "Hashed" sku { name = "S1" capacity = 1 } linked_hub { connection_string = azurerm_iothub_shared_access_policy.hub_access_policy.primary_connection_string location = azurerm_resource_group.rg.location allocation_weight = 150 apply_allocation_policy = true } }
adlı
variables.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "resource_group_location" { default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "eventhub_namespace_name_prefix" { default = "namespace" description = "Prefix of the event hub namespace name that's combined with a random ID so name is unique in your Azure subscription." } variable "iothub_name_prefix" { default = "iothub" description = "Prefix of the iot hub name that's combined with a random ID so name is unique in your Azure subscription." } variable "dps_name_prefix" { default = "dps" description = "Prefix of the dps name that's combined with a random ID so name is unique in your Azure subscription." }
adlı
outputs.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:output "azurerm_iothub_name" { value = azurerm_iothub.iothub.name } output "azurerm_iothub_dps_name" { value = azurerm_iothub_dps.dps.name } output "resource_group_name" { value = azurerm_resource_group.rg.name }
Terraform'u başlatma
Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.
terraform init -upgrade
Önemli noktalar:
-upgrade
parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.
Terraform yürütme planı oluşturma
Terraform planını çalıştırarak yürütme planı oluşturun.
terraform plan -out main.tfplan
Önemli noktalar:
- komutu
terraform plan
bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-out
parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-out
kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
Terraform yürütme planı uygulama
Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.tfplan
Önemli noktalar:
- Örnek
terraform apply
komut, daha önce komutunu çalıştırdığınızıterraform plan -out main.tfplan
varsayar. - parametresi için
-out
farklı bir dosya adı belirttiyseniz, çağrısındaterraform apply
aynı dosya adını kullanın. - parametresini
-out
kullanmadıysanız, parametresiz olarak çağırınterraform apply
.
Sonuçları doğrulama
Azure DPS kaynağını görüntülemek için az iot dps show komutunu çalıştırın.
az iot dps show \
--name <azurerm_iothub_dps_name> \
--resource-group <resource_group_name>
Önemli noktalar:
- Kaynak grubunun ve DPS örneğinin adları çıktıda
terraform apply
görüntülenir. Bu çıkış değerlerini görüntülemek için terraform çıkışını da çalıştırabilirsiniz.
Kaynakları temizleme
Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:
terraform planını çalıştırın ve bayrağını
destroy
belirtin.terraform plan -destroy -out main.destroy.tfplan
Önemli noktalar:
- komutu
terraform plan
bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-out
parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-out
kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
- komutu
Yürütme planını uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.destroy.tfplan
Azure'da Terraform sorunlarını giderme
Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme
Sonraki adımlar
Bu hızlı başlangıçta bir IoT hub'ı ve Bir Cihaz Sağlama Hizmeti örneği dağıttınız ve iki kaynağı bağladınız. Bu kurulumu kullanarak cihaz sağlamayı öğrenmek için cihaz oluşturma hızlı başlangıcına geçin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin