Read, modify, export, and deploy ARM templates and Bicep files with the level of fluency AZ-104 expects.
AZ-104 does not expect you to be a full-time infrastructure engineer, but it does expect you to read and adjust deployment definitions without getting lost. That is why ARM templates and Bicep appear in the official study guide.
The core tasks are interpreting a template or Bicep file, modifying existing files, deploying resources, and exporting a deployment as an ARM template or converting an ARM template to Bicep. In other words, you need to understand deployment structure well enough to review, tweak, and execute it safely.
Know how parameters, variables, resources, outputs, and dependencies affect the result. Also understand the difference between an authored deployment file and a portal-exported template. Exported templates can help you inspect what Azure built, but they are not always the cleanest starting point for repeatable operations.
Candidates often focus on syntax fragments instead of deployment intent. The better exam habit is to ask what the template is supposed to create, which values change between environments, and which resource dependencies must exist before the deployment can succeed.
| Element | Why it matters on AZ-104 |
|---|---|
| Parameters | They show what changes safely between environments |
| Resource definitions | They reveal what Azure will actually create or modify |
| Dependencies | They explain ordering and why a deployment may fail |
| Outputs | They show what values the deployment exposes for later use |
| Existing versus new resources | They help you distinguish extension of an environment from first creation |
The exam does not require deep Bicep authorship, but you should be comfortable reading a file like this and explaining what can change safely.
1param storageAccountName string
2param location string = resourceGroup().location
3param skuName string = 'Standard_LRS'
4
5resource stg 'Microsoft.Storage/storageAccounts@2023-05-01' = {
6 name: storageAccountName
7 location: location
8 sku: {
9 name: skuName
10 }
11 kind: 'StorageV2'
12 properties: {
13 minimumTlsVersion: 'TLS1_2'
14 allowBlobPublicAccess: false
15 }
16}
17
18output blobEndpoint string = stg.properties.primaryEndpoints.blob
AZ-104-style questions usually care less about the syntax itself and more about what each block controls:
param values are the safe environment-specific leversresource block shows the Azure object being createdproperties holds the operational defaults you are enforcingoutput exposes a value another admin or deployment step may needPortal-exported ARM templates are useful for inspection because they show how Azure sees the deployed state. Authored templates or Bicep files are usually cleaner for repeatable administration because they remove noise, make parameters clearer, and are easier to review over time. If the exam asks which file is better for consistent reuse, the cleaner authored definition is usually the stronger answer.
Next, move to Virtual Machines, Disks, and Scale Sets so deployment logic connects to actual runtime administration.