@marcfargas/skills 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,222 @@
1
+ # Compute & Networking
2
+
3
+ ## Virtual Machines
4
+
5
+ ```bash
6
+ # READ — list VMs
7
+ az vm list -o json
8
+ az vm list --resource-group my-rg -o table
9
+ az vm list --resource-group my-rg --query "[].{Name:name, Size:hardwareProfile.vmSize, Status:powerState}" -o table
10
+
11
+ # Show VM details
12
+ az vm show --name my-vm --resource-group my-rg -o json
13
+
14
+ # Show VM with instance view (power state)
15
+ az vm get-instance-view --name my-vm --resource-group my-rg \
16
+ --query "{Name:name, Status:instanceView.statuses[1].displayStatus}" -o json
17
+
18
+ # EXPENSIVE — create VM (~$5-2000+/mo depending on size)
19
+ az vm create \
20
+ --resource-group my-rg \
21
+ --name my-vm \
22
+ --image Ubuntu2204 \
23
+ --size Standard_B2s \
24
+ --admin-username azureuser \
25
+ --generate-ssh-keys \
26
+ --location westeurope
27
+
28
+ # Windows VM
29
+ az vm create \
30
+ --resource-group my-rg \
31
+ --name my-win-vm \
32
+ --image Win2022Datacenter \
33
+ --size Standard_B2s \
34
+ --admin-username azureuser \
35
+ --admin-password "$(az keyvault secret show --vault-name my-vault --name vm-pwd --query value -o tsv)"
36
+
37
+ # SSH into VM
38
+ az ssh vm --resource-group my-rg --name my-vm
39
+ # Or with native SSH (needs public IP)
40
+ ssh azureuser@$(az vm show --name my-vm -g my-rg --show-details --query publicIps -o tsv)
41
+
42
+ # Lifecycle
43
+ az vm start --name my-vm --resource-group my-rg
44
+ az vm stop --name my-vm --resource-group my-rg # still billed for compute
45
+ az vm deallocate --name my-vm --resource-group my-rg # stops billing for compute
46
+ az vm restart --name my-vm --resource-group my-rg
47
+
48
+ # Resize
49
+ az vm resize --name my-vm --resource-group my-rg --size Standard_B4ms
50
+
51
+ # ⚠️ DESTRUCTIVE
52
+ az vm delete --name my-vm --resource-group my-rg
53
+ ```
54
+
55
+ ### VM Images
56
+
57
+ ```bash
58
+ # List popular images
59
+ az vm image list -o table # cached popular images
60
+ az vm image list --all --publisher Canonical -o table # all from publisher (slow)
61
+ az vm image list --offer UbuntuServer --sku 22_04 --all -o table
62
+
63
+ # List available sizes in a region
64
+ az vm list-sizes --location westeurope -o table
65
+ az vm list-sizes --location westeurope --query "[?numberOfCores<=`4`]" -o table
66
+ ```
67
+
68
+ ## Network Security Groups (NSGs)
69
+
70
+ ```bash
71
+ # Create NSG
72
+ az network nsg create --resource-group my-rg --name my-nsg
73
+
74
+ # READ
75
+ az network nsg list --resource-group my-rg -o json
76
+ az network nsg rule list --nsg-name my-nsg --resource-group my-rg -o table
77
+
78
+ # ⚠️ SECURITY — open ports
79
+ az network nsg rule create \
80
+ --resource-group my-rg \
81
+ --nsg-name my-nsg \
82
+ --name allow-http \
83
+ --priority 100 \
84
+ --access Allow \
85
+ --protocol Tcp \
86
+ --destination-port-ranges 80 443 \
87
+ --direction Inbound
88
+
89
+ # ⚠️ DESTRUCTIVE
90
+ az network nsg rule delete --resource-group my-rg --nsg-name my-nsg --name allow-http
91
+ az network nsg delete --resource-group my-rg --name my-nsg
92
+ ```
93
+
94
+ ## Virtual Networks (VNets)
95
+
96
+ ```bash
97
+ # Create VNet with subnet
98
+ az network vnet create \
99
+ --resource-group my-rg \
100
+ --name my-vnet \
101
+ --address-prefix 10.0.0.0/16 \
102
+ --subnet-name default \
103
+ --subnet-prefix 10.0.0.0/24
104
+
105
+ # READ
106
+ az network vnet list --resource-group my-rg -o json
107
+ az network vnet show --name my-vnet --resource-group my-rg -o json
108
+
109
+ # Add subnet
110
+ az network vnet subnet create \
111
+ --resource-group my-rg \
112
+ --vnet-name my-vnet \
113
+ --name backend-subnet \
114
+ --address-prefixes 10.0.1.0/24
115
+
116
+ # List subnets
117
+ az network vnet subnet list --resource-group my-rg --vnet-name my-vnet -o table
118
+
119
+ # ⚠️ DESTRUCTIVE
120
+ az network vnet delete --name my-vnet --resource-group my-rg
121
+ ```
122
+
123
+ ## Public IPs
124
+
125
+ ```bash
126
+ az network public-ip create --resource-group my-rg --name my-ip --sku Standard
127
+ az network public-ip list --resource-group my-rg -o table
128
+ az network public-ip show --name my-ip --resource-group my-rg --query ipAddress -o tsv
129
+
130
+ # ⚠️ Unattached static IPs cost ~$3.65/month
131
+ ```
132
+
133
+ ## DNS Zones
134
+
135
+ ```bash
136
+ # Create zone
137
+ az network dns zone create --resource-group my-rg --name example.com
138
+
139
+ # READ
140
+ az network dns zone list --resource-group my-rg -o json
141
+ az network dns record-set list --resource-group my-rg --zone-name example.com -o table
142
+
143
+ # Add A record
144
+ az network dns record-set a add-record \
145
+ --resource-group my-rg \
146
+ --zone-name example.com \
147
+ --record-set-name www \
148
+ --ipv4-address 1.2.3.4
149
+
150
+ # Add CNAME
151
+ az network dns record-set cname set-record \
152
+ --resource-group my-rg \
153
+ --zone-name example.com \
154
+ --record-set-name app \
155
+ --cname my-app.azurewebsites.net
156
+
157
+ # ⚠️ DESTRUCTIVE
158
+ az network dns record-set a remove-record \
159
+ --resource-group my-rg --zone-name example.com \
160
+ --record-set-name www --ipv4-address 1.2.3.4
161
+ ```
162
+
163
+ ## Private DNS
164
+
165
+ ```bash
166
+ az network private-dns zone create --resource-group my-rg --name private.example.com
167
+ az network private-dns link vnet create \
168
+ --resource-group my-rg \
169
+ --zone-name private.example.com \
170
+ --name my-link \
171
+ --virtual-network my-vnet \
172
+ --registration-enabled false
173
+ ```
174
+
175
+ ## Load Balancer
176
+
177
+ ```bash
178
+ # ⚠️ EXPENSIVE — Standard LB ~$18+/month + data processing
179
+ az network lb create \
180
+ --resource-group my-rg \
181
+ --name my-lb \
182
+ --sku Standard \
183
+ --public-ip-address my-ip \
184
+ --frontend-ip-name myFrontEnd \
185
+ --backend-pool-name myBackendPool
186
+
187
+ az network lb list --resource-group my-rg -o json
188
+ ```
189
+
190
+ ## Application Gateway
191
+
192
+ ```bash
193
+ # ⚠️ EXPENSIVE — ~$20+/month (WAF v2 ~$200+/month)
194
+ az network application-gateway list --resource-group my-rg -o json
195
+ ```
196
+
197
+ ## Azure Monitor & Logging
198
+
199
+ ```bash
200
+ # Activity log (audit trail)
201
+ az monitor activity-log list --resource-group my-rg --max-events 20 -o json
202
+
203
+ # Metrics
204
+ az monitor metrics list \
205
+ --resource "/subscriptions/SUB_ID/resourceGroups/my-rg/providers/Microsoft.Compute/virtualMachines/my-vm" \
206
+ --metric "Percentage CPU" \
207
+ --interval PT1H -o json
208
+
209
+ # Log Analytics query
210
+ az monitor log-analytics query \
211
+ --workspace WORKSPACE_ID \
212
+ --analytics-query "AzureActivity | take 10" -o json
213
+
214
+ # Alerts
215
+ az monitor metrics alert list --resource-group my-rg -o json
216
+ az monitor metrics alert create \
217
+ --name "high-cpu" \
218
+ --resource-group my-rg \
219
+ --scopes "/subscriptions/SUB_ID/resourceGroups/my-rg/providers/Microsoft.Compute/virtualMachines/my-vm" \
220
+ --condition "avg Percentage CPU > 80" \
221
+ --description "Alert when CPU exceeds 80%"
222
+ ```
@@ -0,0 +1,220 @@
1
+ # Data: SQL Database, Cosmos DB, Service Bus, Event Hubs
2
+
3
+ ## Azure SQL Database
4
+
5
+ ```bash
6
+ # Create SQL server (logical server — required before creating databases)
7
+ # ⚠️ Never put password in CLI args — use Key Vault
8
+ ADMIN_PWD=$(az keyvault secret show --vault-name my-vault --name sql-admin-pwd --query value -o tsv)
9
+
10
+ az sql server create \
11
+ --resource-group my-rg \
12
+ --name my-sql-server \
13
+ --location westeurope \
14
+ --admin-user sqladmin \
15
+ --admin-password "$ADMIN_PWD"
16
+
17
+ # ⚠️ EXPENSIVE — create database (~$5-2000+/mo depending on tier)
18
+ az sql db create \
19
+ --resource-group my-rg \
20
+ --server my-sql-server \
21
+ --name my-database \
22
+ --edition GeneralPurpose \
23
+ --compute-model Serverless \
24
+ --family Gen5 \
25
+ --capacity 1 \
26
+ --auto-pause-delay 60
27
+
28
+ # Serverless DTU-based (cheapest for dev/test)
29
+ az sql db create \
30
+ --resource-group my-rg \
31
+ --server my-sql-server \
32
+ --name my-database \
33
+ --edition Basic \
34
+ --capacity 5
35
+
36
+ # READ
37
+ az sql server list --resource-group my-rg -o json
38
+ az sql db list --server my-sql-server --resource-group my-rg -o table
39
+ az sql db show --name my-database --server my-sql-server --resource-group my-rg -o json
40
+
41
+ # Firewall rules
42
+ # ⚠️ SECURITY — allow Azure services
43
+ az sql server firewall-rule create \
44
+ --resource-group my-rg \
45
+ --server my-sql-server \
46
+ --name AllowAzureServices \
47
+ --start-ip-address 0.0.0.0 \
48
+ --end-ip-address 0.0.0.0
49
+
50
+ # ⚠️ SECURITY — allow specific IP
51
+ az sql server firewall-rule create \
52
+ --resource-group my-rg \
53
+ --server my-sql-server \
54
+ --name my-ip \
55
+ --start-ip-address 1.2.3.4 \
56
+ --end-ip-address 1.2.3.4
57
+
58
+ az sql server firewall-rule list --server my-sql-server --resource-group my-rg -o table
59
+
60
+ # Connection string
61
+ echo "Server=tcp:my-sql-server.database.windows.net,1433;Database=my-database;User ID=sqladmin;Password=...;Encrypt=yes"
62
+
63
+ # ⚠️ DESTRUCTIVE
64
+ az sql db delete --name my-database --server my-sql-server --resource-group my-rg
65
+ az sql server delete --name my-sql-server --resource-group my-rg
66
+ ```
67
+
68
+ ### SQL Database Pricing
69
+
70
+ | Edition | ~Cost/mo | Notes |
71
+ |---------|----------|-------|
72
+ | Basic (5 DTU) | ~$5 | Dev/test |
73
+ | Standard (S0) | ~$15 | Small workloads |
74
+ | GP Serverless vCore | ~$0.50/hr (auto-pause) | Auto-pause saves cost |
75
+ | Business Critical | ~$400+ | High IOPS, readable secondary |
76
+
77
+ ## Azure Database for PostgreSQL (Flexible Server)
78
+
79
+ ```bash
80
+ # ⚠️ EXPENSIVE
81
+ az postgres flexible-server create \
82
+ --resource-group my-rg \
83
+ --name my-pg-server \
84
+ --location westeurope \
85
+ --admin-user pgadmin \
86
+ --admin-password "$ADMIN_PWD" \
87
+ --sku-name Standard_B1ms \
88
+ --tier Burstable \
89
+ --storage-size 32
90
+
91
+ # Create database
92
+ az postgres flexible-server db create \
93
+ --resource-group my-rg \
94
+ --server-name my-pg-server \
95
+ --database-name mydb
96
+
97
+ # READ
98
+ az postgres flexible-server list --resource-group my-rg -o table
99
+ az postgres flexible-server show --name my-pg-server --resource-group my-rg -o json
100
+ az postgres flexible-server db list --resource-group my-rg --server-name my-pg-server -o table
101
+
102
+ # Firewall
103
+ az postgres flexible-server firewall-rule create \
104
+ --resource-group my-rg \
105
+ --name my-pg-server \
106
+ --rule-name allow-my-ip \
107
+ --start-ip-address 1.2.3.4 \
108
+ --end-ip-address 1.2.3.4
109
+
110
+ # Connect
111
+ az postgres flexible-server connect --name my-pg-server --admin-user pgadmin --admin-password "$ADMIN_PWD" --database-name mydb
112
+
113
+ # ⚠️ DESTRUCTIVE
114
+ az postgres flexible-server delete --name my-pg-server --resource-group my-rg
115
+ ```
116
+
117
+ ## Cosmos DB
118
+
119
+ ```bash
120
+ # Create account (multi-region, multi-model)
121
+ az cosmosdb create \
122
+ --resource-group my-rg \
123
+ --name my-cosmos \
124
+ --kind GlobalDocumentDB \
125
+ --locations regionName=westeurope failoverPriority=0
126
+
127
+ # Create SQL database (Core/SQL API)
128
+ az cosmosdb sql database create \
129
+ --account-name my-cosmos \
130
+ --resource-group my-rg \
131
+ --name mydb
132
+
133
+ # Create container (collection)
134
+ az cosmosdb sql container create \
135
+ --account-name my-cosmos \
136
+ --resource-group my-rg \
137
+ --database-name mydb \
138
+ --name mycontainer \
139
+ --partition-key-path "/partitionKey" \
140
+ --throughput 400
141
+
142
+ # READ
143
+ az cosmosdb list --resource-group my-rg -o json
144
+ az cosmosdb show --name my-cosmos --resource-group my-rg -o json
145
+ az cosmosdb sql database list --account-name my-cosmos --resource-group my-rg -o table
146
+
147
+ # Get connection keys
148
+ az cosmosdb keys list --name my-cosmos --resource-group my-rg -o json
149
+
150
+ # ⚠️ DESTRUCTIVE
151
+ az cosmosdb sql container delete --account-name my-cosmos --resource-group my-rg --database-name mydb --name mycontainer
152
+ az cosmosdb delete --name my-cosmos --resource-group my-rg
153
+ ```
154
+
155
+ ## Service Bus
156
+
157
+ ```bash
158
+ # Create namespace
159
+ az servicebus namespace create \
160
+ --resource-group my-rg \
161
+ --name my-sb-ns \
162
+ --location westeurope \
163
+ --sku Standard
164
+
165
+ # Queues
166
+ az servicebus queue create --resource-group my-rg --namespace-name my-sb-ns --name my-queue
167
+ az servicebus queue list --resource-group my-rg --namespace-name my-sb-ns -o table
168
+
169
+ # Topics & Subscriptions
170
+ az servicebus topic create --resource-group my-rg --namespace-name my-sb-ns --name my-topic
171
+ az servicebus topic subscription create \
172
+ --resource-group my-rg --namespace-name my-sb-ns \
173
+ --topic-name my-topic --name my-sub
174
+
175
+ # Get connection string
176
+ az servicebus namespace authorization-rule keys list \
177
+ --resource-group my-rg --namespace-name my-sb-ns \
178
+ --name RootManageSharedAccessKey --query primaryConnectionString -o tsv
179
+
180
+ # ⚠️ DESTRUCTIVE
181
+ az servicebus queue delete --resource-group my-rg --namespace-name my-sb-ns --name my-queue
182
+ az servicebus topic delete --resource-group my-rg --namespace-name my-sb-ns --name my-topic
183
+ az servicebus namespace delete --resource-group my-rg --name my-sb-ns
184
+ ```
185
+
186
+ ## Event Hubs
187
+
188
+ ```bash
189
+ # Create namespace
190
+ az eventhubs namespace create \
191
+ --resource-group my-rg \
192
+ --name my-eh-ns \
193
+ --location westeurope \
194
+ --sku Standard
195
+
196
+ # Create event hub
197
+ az eventhubs eventhub create \
198
+ --resource-group my-rg \
199
+ --namespace-name my-eh-ns \
200
+ --name my-hub \
201
+ --partition-count 4 \
202
+ --message-retention 1
203
+
204
+ # Consumer groups
205
+ az eventhubs eventhub consumer-group create \
206
+ --resource-group my-rg --namespace-name my-eh-ns \
207
+ --eventhub-name my-hub --name my-cg
208
+
209
+ # READ
210
+ az eventhubs eventhub list --resource-group my-rg --namespace-name my-eh-ns -o table
211
+
212
+ # Get connection string
213
+ az eventhubs namespace authorization-rule keys list \
214
+ --resource-group my-rg --namespace-name my-eh-ns \
215
+ --name RootManageSharedAccessKey --query primaryConnectionString -o tsv
216
+
217
+ # ⚠️ DESTRUCTIVE
218
+ az eventhubs eventhub delete --resource-group my-rg --namespace-name my-eh-ns --name my-hub
219
+ az eventhubs namespace delete --resource-group my-rg --name my-eh-ns
220
+ ```
@@ -0,0 +1,184 @@
1
+ # IAM, Resources & Key Vault
2
+
3
+ ## Resource Groups
4
+
5
+ Resource groups are the fundamental container for all Azure resources.
6
+
7
+ ```bash
8
+ # CREATE
9
+ az group create --name my-rg --location westeurope
10
+
11
+ # READ
12
+ az group list -o json
13
+ az group show --name my-rg -o json
14
+ az group exists --name my-rg # returns true/false
15
+
16
+ # List resources in a group
17
+ az resource list --resource-group my-rg -o table
18
+
19
+ # ⚠️ DESTRUCTIVE — deletes ALL resources inside the group
20
+ az group delete --name my-rg
21
+
22
+ # Tags
23
+ az group update --name my-rg --tags env=dev team=backend
24
+ ```
25
+
26
+ ## RBAC (Role-Based Access Control)
27
+
28
+ ```bash
29
+ # List role assignments on a resource group
30
+ az role assignment list --resource-group my-rg -o json
31
+
32
+ # List role assignments for a specific user/SP
33
+ az role assignment list --assignee user@example.com -o json
34
+
35
+ # WRITE — grant role (confirm with user)
36
+ az role assignment create \
37
+ --assignee user@example.com \
38
+ --role "Contributor" \
39
+ --scope /subscriptions/SUB_ID/resourceGroups/my-rg
40
+
41
+ # Grant role to service principal
42
+ az role assignment create \
43
+ --assignee SP_APP_ID \
44
+ --role "Reader" \
45
+ --scope /subscriptions/SUB_ID/resourceGroups/my-rg
46
+
47
+ # ⚠️ DESTRUCTIVE — remove role
48
+ az role assignment delete \
49
+ --assignee user@example.com \
50
+ --role "Contributor" \
51
+ --scope /subscriptions/SUB_ID/resourceGroups/my-rg
52
+
53
+ # List available role definitions
54
+ az role definition list --query "[].{Name:roleName, Description:description}" -o table
55
+ az role definition list --name "Contributor" -o json
56
+ ```
57
+
58
+ > **Least privilege**: Prefer specific roles (e.g., `Storage Blob Data Reader`)
59
+ > over broad ones (`Contributor`, `Owner`). Never grant `Owner` to automation.
60
+
61
+ ### Common Built-in Roles
62
+
63
+ | Role | Scope |
64
+ |------|-------|
65
+ | `Reader` | View all resources, no changes |
66
+ | `Contributor` | Manage all resources, no RBAC/policy changes |
67
+ | `Owner` | Full access including RBAC |
68
+ | `Storage Blob Data Contributor` | Read/write/delete blobs |
69
+ | `Key Vault Secrets User` | Read secrets |
70
+ | `AcrPush` | Push images to Container Registry |
71
+ | `Website Contributor` | Manage web apps |
72
+
73
+ ## Entra ID (Azure AD)
74
+
75
+ ```bash
76
+ # Users
77
+ az ad user list --query "[].{Name:displayName, UPN:userPrincipalName}" -o table
78
+ az ad user show --id user@example.com -o json
79
+
80
+ # Service Principals
81
+ az ad sp list --display-name "my-sp" -o json
82
+ az ad sp show --id SP_APP_ID -o json
83
+
84
+ # App Registrations
85
+ az ad app list --display-name "my-app" -o json
86
+ az ad app show --id APP_ID -o json
87
+
88
+ # Create app registration
89
+ az ad app create --display-name "my-app"
90
+
91
+ # Create service principal for the app
92
+ az ad sp create --id APP_ID
93
+
94
+ # ⚠️ SECURITY — create client secret (shown only once)
95
+ az ad app credential reset --id APP_ID --append
96
+
97
+ # Groups
98
+ az ad group list -o table
99
+ az ad group member list --group "My Group" -o table
100
+ az ad group member add --group "My Group" --member-id USER_OBJECT_ID
101
+ ```
102
+
103
+ > ⚠️ **FORBIDDEN**: Do not use `az ad app credential reset` with `--password`
104
+ > plaintext argument. Always let Azure generate the secret or use certificates.
105
+
106
+ ## Key Vault
107
+
108
+ ```bash
109
+ # Create vault
110
+ az keyvault create --name my-vault --resource-group my-rg --location westeurope
111
+
112
+ # READ
113
+ az keyvault list -o json
114
+ az keyvault show --name my-vault -o json
115
+
116
+ # --- Secrets ---
117
+ # Set secret (pipe or use --file, avoid plaintext in CLI args)
118
+ az keyvault secret set --vault-name my-vault --name my-secret --value "$(cat secret.txt)"
119
+
120
+ # Get secret value
121
+ az keyvault secret show --vault-name my-vault --name my-secret --query value -o tsv
122
+
123
+ # List secrets
124
+ az keyvault secret list --vault-name my-vault -o table
125
+
126
+ # New version (just set again — versions are automatic)
127
+ az keyvault secret set --vault-name my-vault --name my-secret --value "new-value"
128
+
129
+ # ⚠️ DESTRUCTIVE — soft-delete (recoverable)
130
+ az keyvault secret delete --vault-name my-vault --name my-secret
131
+
132
+ # ⚠️ DESTRUCTIVE — purge (permanent, not recoverable)
133
+ az keyvault secret purge --vault-name my-vault --name my-secret
134
+
135
+ # --- Keys ---
136
+ az keyvault key create --vault-name my-vault --name my-key --kty RSA --size 2048
137
+ az keyvault key list --vault-name my-vault -o json
138
+
139
+ # --- Certificates ---
140
+ az keyvault certificate create --vault-name my-vault --name my-cert --policy @policy.json
141
+ az keyvault certificate list --vault-name my-vault -o json
142
+
143
+ # --- Access Policies ---
144
+ # Grant access to a service principal
145
+ az keyvault set-policy --name my-vault \
146
+ --spn SP_APP_ID \
147
+ --secret-permissions get list
148
+
149
+ # Grant access to a user
150
+ az keyvault set-policy --name my-vault \
151
+ --upn user@example.com \
152
+ --secret-permissions get list set delete
153
+
154
+ # ⚠️ DESTRUCTIVE — delete vault
155
+ az keyvault delete --name my-vault --resource-group my-rg
156
+ az keyvault purge --name my-vault --location westeurope # permanent
157
+ ```
158
+
159
+ ## Resource Locks
160
+
161
+ ```bash
162
+ # Prevent accidental deletion
163
+ az lock create --name no-delete --resource-group my-rg --lock-type CanNotDelete
164
+
165
+ # Prevent any changes
166
+ az lock create --name read-only --resource-group my-rg --lock-type ReadOnly
167
+
168
+ # List & remove
169
+ az lock list --resource-group my-rg -o table
170
+ az lock delete --name no-delete --resource-group my-rg
171
+ ```
172
+
173
+ ## Resource Providers
174
+
175
+ ```bash
176
+ # List registered providers
177
+ az provider list --query "[?registrationState=='Registered'].namespace" -o tsv
178
+
179
+ # Check specific provider
180
+ az provider show --namespace Microsoft.ContainerApp --query registrationState -o tsv
181
+
182
+ # Register (required before first use of some services)
183
+ az provider register --namespace Microsoft.ContainerApp --wait
184
+ ```