Read this the night before or on exam morning. It assumes you’ve studied the notes. It’s here to refresh, not to teach.
Exam day
- Microsoft doesn’t publish a fixed question count or duration for AZ-400, so plan on a mix of formats (multiple choice, drag and drop, yes/no case-study sets, and some YAML-reading questions) and check the time shown at the start. Some sections can’t be revisited once you move on, so answer each before leaving it.
- Passing score is 700 out of 1,000. There is no penalty for guessing.
- Domain weights (skills measured from July 27, 2026): processes and communications 10-15%, source control 10-15%, build and release pipelines 50-55%, security and compliance 10-15%, instrumentation 5-10%.
- The certification renews annually through a free online assessment.
How to read an AZ-400 question
Read the last sentence first, then look for the constraint:
| The question says | Pick |
|---|---|
| Without storing secrets / no credential rotation | Managed identity, or workload identity federation (OIDC) |
| Least administrative effort | Built-in feature (policy, check, template) over custom scripts |
| Must reach on-premises or private network | Self-hosted agent or runner (or VNet-injected pool) |
| Prevent deployment from non-main branches | Branch control check, environment or service connection check |
| Enforce across many pipelines | Extends template + Required template check |
| Decouple release from deployment | Feature flags |
| Instant rollback | Blue-green, slot swap |
| Limit blast radius | Canary or rings |
| Audit / who approved | Environment approvals and deployment history |
Elimination tricks
- Task groups and classic release pipelines are only right in classic scenarios; new designs use YAML templates and multi-stage pipelines.
- A personal access token tied to a person is rarely the best answer for automation.
- Secrets in YAML, repository files or plain pipeline variables on fork builds are wrong.
- Answers that disable a control “temporarily” (bypass policies, grant admin) are usually wrong.
Core syntax to have fresh
Azure Pipelines
- Hierarchy: pipeline > stages > jobs > steps. Stages sequential, jobs parallel by default;
dependsOnchanges it. - Job types: agent, container, server, deployment (targets an environment; strategies
runOnce,rolling,canary). - Variable syntax:
$(x)macro (runtime),${{ }}template (compile time),$[ ]runtime expression. - Templates:
template:for step/job/stage/variable,extends:to enforce structure. Task groups are classic only. - Trigger keys:
trigger,pr(GitHub and Bitbucket only),schedules(UTC cron),resources.pipelines,resources.webhooks. - Output between jobs:
isOutput=truethendependencies.<job>.outputs['step.var'].
GitHub Actions
on:(push, pull_request, schedule, workflow_dispatch, workflow_call, workflow_run, repository_dispatch).needs:orders jobs.permissions:limitsGITHUB_TOKEN.concurrency:prevents overlap.environment:brings protection rules.- OIDC login needs
permissions: id-token: write. - Reusable workflow = whole job set (
workflow_call). Composite action = steps inside a job. - Code scanning upload needs
security-events: write.
Deployment strategies
| Strategy | One-line summary |
|---|---|
| Rolling | Update in batches; mixed versions meanwhile |
| Blue-green | Two environments, switch traffic, instant way back, double cost |
| Canary | Small percentage first, widen on good metrics |
| Ring | Named audiences in order, validate between |
| Feature flag | Code deployed dark, enabled at runtime (App Configuration) |
| A/B | Compare variants on a business metric |
| Slot swap | App Service staging slot swapped into production; sticky settings stay |
Identity and secrets
| Need | Choose |
|---|---|
| Azure resource calling Azure | Managed identity (system-assigned for 1:1; user-assigned to share or pre-create) |
| Pipeline outside Azure to Azure | Service connection or azure/login with federated credential |
| Workflow within its repo | GITHUB_TOKEN with least permissions |
| Cross-repo automation | GitHub App |
| Read-only exec or PO in Azure DevOps | Stakeholder |
| External person on GitHub | Outside collaborator |
| Certificate file in pipeline | Secure file |
| Secret rotated centrally | Key Vault (RBAC, soft delete, purge protection) |
Scanning
| Class | Tool |
|---|---|
| Dependencies | Dependabot, dependency review |
| Your code | CodeQL |
| Secrets | Secret scanning + push protection |
| Licences | Dependency review deny-licenses |
| Images | Defender for Containers, Trivy |
| IaC | MSDO (Template Analyzer, Checkov), PSRule |
| Central view | Defender for Cloud DevOps security |
Metrics and monitoring
| Term | Meaning |
|---|---|
| Lead time | Request to production |
| Cycle time | Work started to done |
| MTTR | Failure to recovery |
| Change failure rate | Deployments causing incidents |
| Insights | VM (guest, map), Container (AKS), Storage, Network |
| App Insights | Requests, dependencies, exceptions; Application Map, Live Metrics, availability tests |
KQL: where, project, extend, summarize ... by bin(timestamp, 5m), top 10 by x desc, render timechart, ago(1d), join, let. sort by is descending by default; == is case-sensitive; has is faster than contains.
Numbers worth knowing
| Thing | Number |
|---|---|
| Azure DevOps free users (Basic) | First 5 |
| Microsoft-hosted agent job limit (private, paid) | 360 minutes |
| GitHub artifact retention | 1-90 days, default 90 |
| GitHub Actions cache | 10 GB per repository, evicted after 7 days unused |
| Key Vault soft-delete retention | 7-90 days |
| Metrics store retention | 93 days |
| GitHub objects over 100 MB | Rejected, use LFS |