1+ # Dependent resources for Azure Machine Learning
2+ resource "azurerm_application_insights" "default" {
3+ name = " ${ var . name } -${ var . environment } -ain"
4+ location = azurerm_resource_group. default . location
5+ resource_group_name = azurerm_resource_group. default . name
6+ application_type = " web"
7+ }
8+
9+ resource "azurerm_key_vault" "default" {
10+ name = " ${ var . name } ${ var . environment } kv"
11+ location = azurerm_resource_group. default . location
12+ resource_group_name = azurerm_resource_group. default . name
13+ tenant_id = data. azurerm_client_config . current . tenant_id
14+ sku_name = " premium"
15+ purge_protection_enabled = false
16+
17+ network_acls {
18+ default_action = " Deny"
19+ bypass = " AzureServices"
20+ }
21+ }
22+
23+ resource "azurerm_storage_account" "default" {
24+ name = " ${ var . name } ${ var . environment } sa"
25+ location = azurerm_resource_group. default . location
26+ resource_group_name = azurerm_resource_group. default . name
27+ account_tier = " Standard"
28+ account_replication_type = " GRS"
29+
30+ network_rules {
31+ default_action = " Deny"
32+ bypass = [" AzureServices" ]
33+ }
34+ }
35+
36+ resource "azurerm_container_registry" "default" {
37+ name = " ${ var . name } ${ var . environment } cr"
38+ location = azurerm_resource_group. default . location
39+ resource_group_name = azurerm_resource_group. default . name
40+ sku = " Premium"
41+ admin_enabled = true
42+ }
43+
44+ # Machine Learning workspace
45+ resource "azurerm_machine_learning_workspace" "default" {
46+ name = " ${ var . name } -${ var . environment } -aml"
47+ location = azurerm_resource_group. default . location
48+ resource_group_name = azurerm_resource_group. default . name
49+ application_insights_id = azurerm_application_insights. default . id
50+ key_vault_id = azurerm_key_vault. default . id
51+ storage_account_id = azurerm_storage_account. default . id
52+ container_registry_id = azurerm_container_registry. default . id
53+
54+ identity {
55+ type = " SystemAssigned"
56+ }
57+ }
58+
59+ # Virtual network
60+ resource "azurerm_virtual_network" "default" {
61+ name = " ${ var . name } -${ var . environment } -vnet"
62+ address_space = [" 10.0.0.0/16" ]
63+ location = azurerm_resource_group. default . location
64+ resource_group_name = azurerm_resource_group. default . name
65+ }
66+
67+ resource "azurerm_subnet" "mlsubnet" {
68+ name = " mlsubnet"
69+ resource_group_name = azurerm_resource_group. default . name
70+ virtual_network_name = azurerm_virtual_network. default . name
71+ address_prefixes = [" 10.0.1.0/24" ]
72+ enforce_private_link_endpoint_network_policies = true
73+ }
74+
75+ # DNS zones
76+ resource "azurerm_private_dns_zone" "dnsvault" {
77+ name = " privatelink.vaultcore.azure.net"
78+ resource_group_name = azurerm_resource_group. default . name
79+ }
80+
81+ resource "azurerm_private_dns_zone" "dnsstorageblob" {
82+ name = " privatelink.blob.core.windows.net"
83+ resource_group_name = azurerm_resource_group. default . name
84+ }
85+
86+ resource "azurerm_private_dns_zone" "dnsstoragefile" {
87+ name = " privatelink.file.core.windows.net"
88+ resource_group_name = azurerm_resource_group. default . name
89+ }
90+
91+ resource "azurerm_private_dns_zone" "dnscontainerregistry" {
92+ name = " privatelink.azurecr.io"
93+ resource_group_name = azurerm_resource_group. default . name
94+ }
95+
96+ resource "azurerm_private_dns_zone" "dnsazureml" {
97+ name = " privatelink.api.azureml.ms"
98+ resource_group_name = azurerm_resource_group. default . name
99+ }
100+
101+ resource "azurerm_private_dns_zone" "dnsnotebooks" {
102+ name = " privatelink.azureml.notebooks.net"
103+ resource_group_name = azurerm_resource_group. default . name
104+ }
105+
106+ # Private endpoints
107+ resource "azurerm_private_endpoint" "keyvault_ple" {
108+ name = " ${ var . name } -${ var . environment } -kv-ple"
109+ location = azurerm_resource_group. default . location
110+ resource_group_name = azurerm_resource_group. default . name
111+ subnet_id = azurerm_subnet. mlsubnet . id
112+
113+ private_dns_zone_group {
114+ name = " private-dns-zone-group"
115+ private_dns_zone_ids = [azurerm_private_dns_zone . dnsvault . id ]
116+ }
117+
118+ private_service_connection {
119+ name = " ${ var . name } kv-psc"
120+ private_connection_resource_id = azurerm_key_vault. default . id
121+ subresource_names = [ " vault" ]
122+ is_manual_connection = false
123+ }
124+ }
125+
126+ resource "azurerm_private_endpoint" "storage_ple_blob" {
127+ name = " ${ var . name } -${ var . environment } -sa-ple-blob"
128+ location = azurerm_resource_group. default . location
129+ resource_group_name = azurerm_resource_group. default . name
130+ subnet_id = azurerm_subnet. mlsubnet . id
131+
132+ private_dns_zone_group {
133+ name = " private-dns-zone-group"
134+ private_dns_zone_ids = [azurerm_private_dns_zone . dnsstorageblob . id ]
135+ }
136+
137+ private_service_connection {
138+ name = " ${ var . name } sa-psc"
139+ private_connection_resource_id = azurerm_storage_account. default . id
140+ subresource_names = [ " blob" ]
141+ is_manual_connection = false
142+ }
143+ }
144+
145+ resource "azurerm_private_endpoint" "storage_ple_file" {
146+ name = " ${ var . name } -${ var . environment } -sa-ple-file"
147+ location = azurerm_resource_group. default . location
148+ resource_group_name = azurerm_resource_group. default . name
149+ subnet_id = azurerm_subnet. mlsubnet . id
150+
151+ private_dns_zone_group {
152+ name = " private-dns-zone-group"
153+ private_dns_zone_ids = [azurerm_private_dns_zone . dnsstoragefile . id ]
154+ }
155+
156+ private_service_connection {
157+ name = " ${ var . name } sa-psc"
158+ private_connection_resource_id = azurerm_storage_account. default . id
159+ subresource_names = [ " file" ]
160+ is_manual_connection = false
161+ }
162+ }
163+
164+ resource "azurerm_private_endpoint" "cr_ple" {
165+ name = " ${ var . name } -${ var . environment } -cr-ple"
166+ location = azurerm_resource_group. default . location
167+ resource_group_name = azurerm_resource_group. default . name
168+ subnet_id = azurerm_subnet. mlsubnet . id
169+
170+ private_dns_zone_group {
171+ name = " private-dns-zone-group"
172+ private_dns_zone_ids = [azurerm_private_dns_zone . dnscontainerregistry . id ]
173+ }
174+
175+ private_service_connection {
176+ name = " ${ var . name } cr-psc"
177+ private_connection_resource_id = azurerm_container_registry. default . id
178+ subresource_names = [ " registry" ]
179+ is_manual_connection = false
180+ }
181+ }
182+
183+ resource "azurerm_private_endpoint" "ml_ple" {
184+ name = " ${ var . name } -${ var . environment } -ple"
185+ location = azurerm_resource_group. default . location
186+ resource_group_name = azurerm_resource_group. default . name
187+ subnet_id = azurerm_subnet. mlsubnet . id
188+
189+ private_dns_zone_group {
190+ name = " private-dns-zone-group"
191+ private_dns_zone_ids = [
192+ azurerm_private_dns_zone . dnsazureml . id ,
193+ azurerm_private_dns_zone . dnsnotebooks . id
194+ ]
195+ }
196+
197+ private_service_connection {
198+ name = " ${ var . name } ml-psc"
199+ private_connection_resource_id = azurerm_machine_learning_workspace. default . id
200+ subresource_names = [ " amlworkspace" ]
201+ is_manual_connection = false
202+ }
203+ }
0 commit comments