Tworzenie centrum azure AI Studio za pomocą narzędzia Terraform
W tym artykule użyjesz narzędzia Terraform do utworzenia centrum usługi Azure AI Studio, projektu i połączenia usług sztucznej inteligencji. Centrum to centralne miejsce dla analityków danych i deweloperów do współpracy nad projektami uczenia maszynowego. Zapewnia ona udostępnioną, wspólną przestrzeń do tworzenia, trenowania i wdrażania modeli uczenia maszynowego. Centrum jest zintegrowane z usługą Azure Machine Learning i innymi usługami platformy Azure, dzięki czemu jest to kompleksowe rozwiązanie do zadań uczenia maszynowego. Centrum umożliwia również zarządzanie wdrożeniami sztucznej inteligencji i monitorowanie ich, zapewniając, że działają zgodnie z oczekiwaniami.
Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania, który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.
- Tworzenie grupy zasobów
- Konfigurowanie konta magazynu
- Ustanawianie magazynu kluczy
- Konfigurowanie usług sztucznej inteligencji
- Tworzenie centrum AI Studio
- Opracowywanie projektu AI Studio
- Ustanawianie połączenia usług sztucznej inteligencji
Wymagania wstępne
Utwórz konto platformy Azure z aktywną subskrypcją. Możesz bezpłatnie utworzyć konto.
Implementowanie kodu narzędzia Terraform
Uwaga
Przykładowy kod tego artykułu znajduje się w repozytorium GitHub programu Azure Terraform. Możesz wyświetlić plik dziennika zawierający wyniki testu z bieżących i poprzednich wersji programu Terraform.
Zobacz więcej artykułów i przykładowego kodu pokazującego, jak zarządzać zasobami platformy Azure za pomocą narzędzia Terraform
Utwórz katalog, w którym chcesz przetestować i uruchomić przykładowy kod programu Terraform i utworzyć go jako bieżący katalog.
Utwórz plik o nazwie
providers.tf
i wstaw następujący kod.terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } azapi = { source = "azure/azapi" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features { key_vault { recover_soft_deleted_key_vaults = false purge_soft_delete_on_destroy = false purge_soft_deleted_keys_on_destroy = false } resource_group { prevent_deletion_if_contains_resources = false } } } provider "azapi" { }
Utwórz plik o nazwie
main.tf
i wstaw następujący kod.resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } // RESOURCE GROUP resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } data "azurerm_client_config" "current" { } // STORAGE ACCOUNT resource "azurerm_storage_account" "default" { name = "${var.prefix}storage${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name account_tier = "Standard" account_replication_type = "GRS" allow_nested_items_to_be_public = false } // KEY VAULT resource "azurerm_key_vault" "default" { name = "${var.prefix}keyvault${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "standard" purge_protection_enabled = false } // AzAPI AIServices resource "azapi_resource" "AIServicesResource"{ type = "Microsoft.CognitiveServices/accounts@2023-10-01-preview" name = "AIServicesResource${random_string.suffix.result}" location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id identity { type = "SystemAssigned" } body = jsonencode({ name = "AIServicesResource${random_string.suffix.result}" properties = { //restore = true customSubDomainName = "${random_string.suffix.result}domain" apiProperties = { statisticsEnabled = false } } kind = "AIServices" sku = { name = var.sku } }) response_export_values = ["*"] } // Azure AI Hub resource "azapi_resource" "hub" { type = "Microsoft.MachineLearningServices/workspaces@2024-04-01-preview" name = "${random_pet.rg_name.id}-aih" location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id identity { type = "SystemAssigned" } body = jsonencode({ properties = { description = "This is my Azure AI hub" friendlyName = "My Hub" storageAccount = azurerm_storage_account.default.id keyVault = azurerm_key_vault.default.id /* Optional: To enable these field, the corresponding dependent resources need to be uncommented. applicationInsight = azurerm_application_insights.default.id containerRegistry = azurerm_container_registry.default.id */ /*Optional: To enable Customer Managed Keys, the corresponding encryption = { status = var.encryption_status keyVaultProperties = { keyVaultArmId = azurerm_key_vault.default.id keyIdentifier = var.cmk_keyvault_key_uri } } */ } kind = "hub" }) } // Azure AI Project resource "azapi_resource" "project" { type = "Microsoft.MachineLearningServices/workspaces@2024-04-01-preview" name = "my-ai-project${random_string.suffix.result}" location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id identity { type = "SystemAssigned" } body = jsonencode({ properties = { description = "This is my Azure AI PROJECT" friendlyName = "My Project" hubResourceId = azapi_resource.hub.id } kind = "project" }) } // AzAPI AI Services Connection resource "azapi_resource" "AIServicesConnection" { type = "Microsoft.MachineLearningServices/workspaces/connections@2024-04-01-preview" name = "Default_AIServices${random_string.suffix.result}" parent_id = azapi_resource.hub.id body = jsonencode({ properties = { category = "AIServices", target = jsondecode(azapi_resource.AIServicesResource.output).properties.endpoint, authType = "AAD", isSharedToAll = true, metadata = { ApiType = "Azure", ResourceId = azapi_resource.AIServicesResource.id } } }) response_export_values = ["*"] } /* The following resources are OPTIONAL. // APPLICATION INSIGHTS resource "azurerm_application_insights" "default" { name = "${var.prefix}appinsights${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name application_type = "web" } // CONTAINER REGISTRY resource "azurerm_container_registry" "default" { name = "${var.prefix}contreg${random_string.suffix.result}" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku = "premium" admin_enabled = true } */
Utwórz plik o nazwie
variables.tf
i wstaw następujący kod.variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string 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 "prefix" { type = string description="This variable is used to name the hub, project, and dependent resources." default = "ai" } variable "sku" { type = string description = "The sku name of the Azure Analysis Services server to create. Choose from: B1, B2, D1, S0, S1, S2, S3, S4, S8, S9. Some skus are region specific. See https://docs.microsoft.com/en-us/azure/analysis-services/analysis-services-overview#availability-by-region" default = "S0" } resource "random_string" "suffix" { length = 4 special = false upper = false } /*Optional: For Customer Managed Keys, uncomment this part AND the corresponding section in main.tf variable "cmk_keyvault_key_uri" { description = "Key vault uri to access the encryption key." } variable "encryption_status" { description = "Indicates whether or not the encryption is enabled for the workspace." default = "Enabled" } */
Utwórz plik o nazwie
outputs.tf
i wstaw następujący kod.output "resource_group_name" { value = azurerm_resource_group.rg.id } output "workspace_name" { value = azapi_resource.project.id } output "endpoint" { value = jsondecode(azapi_resource.AIServicesResource.output).properties.endpoint }
Inicjowanie narzędzia Terraform
Uruchom narzędzie terraform init , aby zainicjować wdrożenie narzędzia Terraform. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure.
terraform init -upgrade
Kluczowe punkty:
- Parametr
-upgrade
uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.
Tworzenie planu wykonania programu Terraform
Uruchom plan terraform, aby utworzyć plan wykonania.
terraform plan -out main.tfplan
Kluczowe punkty:
- Polecenie
terraform plan
tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
Stosowanie planu wykonywania narzędzia Terraform
Uruchom narzędzie terraform, aby zastosować plan wykonania do infrastruktury chmury.
terraform apply main.tfplan
Kluczowe punkty:
- Przykładowe
terraform apply
polecenie zakłada, że wcześniej uruchomionoterraform plan -out main.tfplan
polecenie . - Jeśli określono inną nazwę pliku parametru
-out
, użyj tej samej nazwy pliku w wywołaniu metodyterraform apply
. - Jeśli parametr nie został użyty, wywołaj metodę
-out
terraform apply
bez żadnych parametrów.
Weryfikowanie wyników
Pobierz nazwę grupy zasobów platformy Azure.
resource_group_name=$(terraform output -raw resource_group_name)
Pobierz nazwę obszaru roboczego.
workspace_name=$(terraform output -raw workspace_name)
Uruchom polecenie az ml workspace show , aby wyświetlić informacje o nowym obszarze roboczym.
az ml workspace show --resource-group $resource_group_name \ --name $workspace_name
Czyszczenie zasobów
Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:
Uruchom plan terraform i określ flagę
destroy
.terraform plan -destroy -out main.destroy.tfplan
Kluczowe punkty:
- Polecenie
terraform plan
tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
- Polecenie
Uruchom narzędzie terraform zastosuj, aby zastosować plan wykonania.
terraform apply main.destroy.tfplan
Rozwiązywanie problemów z programem Terraform na platformie Azure
Rozwiązywanie typowych problemów podczas korzystania z programu Terraform na platformie Azure.