160 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HCL
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HCL
		
	
	
	
	
	
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
 | 
						|
}
 | 
						|
*/ |