Skip to content

Azure AZ-400 DevOps Engineer Expert - Comprehensive Fact Sheet

Exam Overview

The πŸ“– AZ-400: Designing and Implementing Microsoft DevOps Solutions - Official exam page with requirements and updates

Prerequisites: - πŸ“– Azure Administrator Associate (AZ-104) - Recommended prerequisite certification - πŸ“– Azure Developer Associate (AZ-204) - Alternative prerequisite certification

Exam Details: - Duration: 120 minutes - Question Types: Multiple choice, case studies, drag-and-drop - Passing Score: 700/1000 - Cost: $165 USD


Domain 1: DevOps Strategy and Transformation (10-15%)

DevOps Planning and Transformation

πŸ“– DevOps Overview - Comprehensive introduction to DevOps principles and practices

πŸ“– DevOps Culture - Building and fostering DevOps culture in organizations

πŸ“– Agile Practices - Agile methodologies and their integration with DevOps

πŸ“– Azure Boards Overview - Work tracking and agile project management

πŸ“– Kanban Best Practices - Implementing Kanban boards effectively

πŸ“– Scrum in Azure DevOps - Scrum framework implementation

πŸ“– Azure DevOps Projects - Creating and managing Azure DevOps projects

Team Collaboration and Communication

πŸ“– Azure DevOps Wiki - Creating and managing team wikis

πŸ“– Microsoft Teams Integration - Integrating Azure DevOps with Microsoft Teams

πŸ“– Slack Integration - Connecting Azure Pipelines to Slack

Metrics and KPIs

πŸ“– DevOps Metrics - Key performance indicators for DevOps success

πŸ“– Azure DevOps Analytics - Analytics and reporting capabilities

πŸ“– Velocity and Burndown Charts - Sprint progress tracking


Domain 2: Source Control Management (15-20%)

Git Fundamentals

πŸ“– Git in Azure Repos - Git version control in Azure DevOps

πŸ“– Git Branching Strategy - Best practices for branch management

πŸ“– Git Branch Policies - Enforcing code quality with branch policies

πŸ“– Pull Requests - Creating and reviewing pull requests

πŸ“– Code Reviews - Best practices for code reviews

πŸ“– Git Hooks - Implementing Git hooks for automation

πŸ“– Git Large File Storage (LFS) - Managing large files in Git repositories

GitHub and GitHub Actions

πŸ“– GitHub Actions Documentation - Complete guide to GitHub Actions

πŸ“– GitHub Actions Workflow Syntax - YAML syntax for workflows

πŸ“– GitHub Actions Runners - Self-hosted and GitHub-hosted runners

πŸ“– GitHub Secrets Management - Secure handling of secrets in workflows

πŸ“– GitHub Environments - Environment-specific deployments

πŸ“– GitHub Advanced Security - Security features for code scanning and secrets

πŸ“– Dependabot - Automated dependency updates

Azure Repos Advanced Features

πŸ“– TFVC Overview - Team Foundation Version Control

πŸ“– Repository Permissions - Managing access and security

πŸ“– Repository Templates - Importing and creating from templates

πŸ“– Forks - Working with repository forks


Domain 3: Continuous Integration (20-25%)

Azure Pipelines Fundamentals

πŸ“– Azure Pipelines Overview - Introduction to Azure Pipelines

πŸ“– YAML Pipeline Schema - Complete YAML reference

πŸ“– Pipeline Triggers - Configuring CI, scheduled, and manual triggers

πŸ“– Pipeline Variables - Working with variables in pipelines

πŸ“– Variable Groups - Sharing variables across pipelines

πŸ“– Pipeline Templates - Creating reusable pipeline templates

πŸ“– Multi-Stage Pipelines - Defining stages in YAML

πŸ“– Pipeline Jobs - Jobs, dependencies, and conditions

πŸ“– Pipeline Tasks - Built-in and custom tasks

Build Agents and Runners

πŸ“– Microsoft-Hosted Agents - Using Microsoft-hosted build agents

πŸ“– Self-Hosted Agents - Deploying and managing self-hosted agents

πŸ“– Agent Pools - Managing agent pools and queues

πŸ“– Scale Set Agents - Azure Virtual Machine Scale Sets for agents

Build Optimization and Caching

πŸ“– Pipeline Caching - Speeding up builds with caching

πŸ“– Pipeline Artifacts - Publishing and consuming pipeline artifacts

πŸ“– Artifact Feeds - Azure Artifacts feeds overview

πŸ“– NuGet Packages - Publishing and consuming NuGet packages

πŸ“– npm Packages - Working with npm packages

πŸ“– Maven Packages - Publishing Java packages

Container Build Strategies

πŸ“– Docker Build Task - Building Docker images in pipelines

πŸ“– Azure Container Registry - Container registry service overview

πŸ“– ACR Tasks - Automated container image builds

πŸ“– Multi-Stage Docker Builds - Optimizing container images

πŸ“– Container Image Scanning - Security scanning with Defender


Domain 4: Continuous Delivery and Release Management (20-25%)

Release Pipelines and Strategies

πŸ“– Release Pipelines Overview - Classic and YAML release pipelines

πŸ“– Deployment Jobs - Deployment job configuration

πŸ“– Deployment Strategies - Rolling, canary, and blue-green deployments

πŸ“– Environments - Creating and managing environments

πŸ“– Approvals and Gates - Manual and automated approvals

πŸ“– Checks and Policies - Environment protection with checks

Azure App Service Deployment

πŸ“– Deploy to App Service - Web app deployment strategies

πŸ“– App Service Deployment Slots - Using deployment slots for zero-downtime

πŸ“– App Service Deployment Center - Continuous deployment configuration

πŸ“– App Service Configuration - Application settings and connection strings

Azure Kubernetes Service (AKS) Deployment

πŸ“– AKS Overview - Azure Kubernetes Service introduction

πŸ“– Deploy to AKS - Kubernetes deployment pipelines

πŸ“– Kubernetes Manifests Task - Deploying Kubernetes manifests

πŸ“– Helm Task - Helm chart deployments

πŸ“– AKS Blue-Green Deployment - Blue-green strategy for AKS

πŸ“– AKS Canary Deployment - Canary deployment patterns

πŸ“– AKS GitOps with Flux - GitOps-based deployments

πŸ“– Kubernetes Service Connections - Connecting pipelines to Kubernetes

Infrastructure as Code (IaC)

πŸ“– ARM Templates Overview - Azure Resource Manager templates

πŸ“– ARM Template Best Practices - Design patterns and recommendations

πŸ“– ARM Template Functions - Template expression functions

πŸ“– Bicep Overview - Modern IaC language for Azure

πŸ“– Bicep Best Practices - Bicep coding standards

πŸ“– Bicep Modules - Creating reusable Bicep modules

πŸ“– Bicep in Pipelines - Deploying Bicep with Azure Pipelines

πŸ“– Terraform on Azure - Using Terraform with Azure

πŸ“– Terraform in Azure Pipelines - CI/CD with Terraform

πŸ“– Terraform Backends - Remote state in Azure Storage

πŸ“– Azure CLI in Pipelines - Azure CLI task reference

πŸ“– PowerShell in Pipelines - Azure PowerShell task

Package Management and Versioning

πŸ“– Semantic Versioning - Version management strategies

πŸ“– Azure Artifacts Overview - Getting started with Azure Artifacts

πŸ“– Upstream Sources - Configuring upstream package sources

πŸ“– Universal Packages - Publishing universal packages


Domain 5: Security and Compliance (15-20%)

DevSecOps Fundamentals

πŸ“– DevSecOps on Azure - Security best practices

πŸ“– Secure DevOps Kit - Secure development lifecycle

πŸ“– Security in Azure DevOps - Identity and permission management

Secrets Management

πŸ“– Azure Key Vault - Secrets, keys, and certificates management

πŸ“– Key Vault in Pipelines - Accessing Key Vault secrets

πŸ“– Azure Key Vault Task - Key Vault task reference

πŸ“– Variable Groups with Key Vault - Linking secrets from Key Vault

πŸ“– GitHub Actions Secrets - Managing secrets in GitHub

πŸ“– Service Connections Security - Securing service connections

Code Security and Scanning

πŸ“– GitHub Code Scanning - Automated code analysis

πŸ“– CodeQL - Semantic code analysis engine

πŸ“– SonarCloud Integration - Code quality and security analysis

πŸ“– Dependency Scanning - Supply chain security

πŸ“– Microsoft Defender for DevOps - Unified DevOps security management

Compliance and Auditing

πŸ“– Azure Policy - Governance and compliance enforcement

πŸ“– Azure Blueprints - Environment deployment standards

πŸ“– Audit Logs - Azure DevOps auditing capabilities

πŸ“– Pipeline Retention - Build and release retention policies

Managed Identities and RBAC

πŸ“– Managed Identities - Authentication without credentials

πŸ“– Azure RBAC - Role-based access control

πŸ“– Service Principals - Application identities in Azure AD

πŸ“– Workload Identity Federation - Passwordless authentication for workflows


Domain 6: Monitoring and Feedback (10-15%)

Application Monitoring

πŸ“– Azure Monitor Overview - Complete monitoring solution

πŸ“– Application Insights - Application performance management

πŸ“– Application Insights SDK - Instrumenting applications

πŸ“– Live Metrics - Real-time application monitoring

πŸ“– Availability Tests - Proactive availability monitoring

πŸ“– Application Map - Distributed application topology

Log Analytics and Queries

πŸ“– Log Analytics Overview - Log query environment

πŸ“– KQL (Kusto Query Language) - Query language reference

πŸ“– Log Analytics Workspaces - Workspace design and management

πŸ“– Diagnostic Settings - Collecting resource logs

Alerting and Notifications

πŸ“– Azure Alerts - Alert rules and notifications

πŸ“– Action Groups - Notification and automated actions

πŸ“– Smart Detection - AI-powered anomaly detection

πŸ“– Workbooks - Interactive monitoring reports

Container Monitoring

πŸ“– Container Insights - AKS and container monitoring

πŸ“– Prometheus Integration - Prometheus metrics in Azure Monitor

πŸ“– Grafana Integration - Azure Managed Grafana


Advanced Topics and Integration

Azure DevOps Extensions

πŸ“– Azure DevOps Marketplace - Extensions and integrations

πŸ“– Create Pipeline Extensions - Building custom pipeline tasks

πŸ“– Service Hooks - Webhook integrations

REST APIs and CLI

πŸ“– Azure DevOps REST API - Programmatic access to Azure DevOps

πŸ“– Azure DevOps CLI - Command-line interface

πŸ“– GitHub REST API - GitHub API reference

πŸ“– GitHub CLI (gh) - GitHub command-line tool

Migration and Hybrid Scenarios

πŸ“– Migrate to Azure DevOps - Migration planning and tools

πŸ“– GitHub to Azure DevOps - Repository migration

πŸ“– Jenkins to Azure Pipelines - CI/CD migration guide

Performance Optimization

πŸ“– Pipeline Performance - Optimizing build performance

πŸ“– Parallel Jobs - Understanding parallelism and licensing

πŸ“– Pipeline Reports - Analyzing pipeline performance


Exam Preparation Resources

Official Microsoft Learning

πŸ“– Exam Skills Outline - Detailed skills measured document

πŸ“– Microsoft Learn AZ-400 Path - Official learning path

πŸ“– Practice Assessment - Official practice questions

Hands-On Labs

πŸ“– Azure DevOps Labs - Free hands-on labs

πŸ“– Microsoft Learn Sandbox - Free Azure sandbox environment

πŸ“– GitHub Skills - Interactive GitHub tutorials


Quick Reference Commands and Snippets

Azure CLI Common Commands

# Login to Azure
az login

# Set subscription
az account set --subscription "subscription-id"

# Create resource group
az group create --name myRG --location eastus

# Create AKS cluster
az aks create --resource-group myRG --name myAKS --node-count 3

# Get AKS credentials
az aks get-credentials --resource-group myRG --name myAKS

# Create container registry
az acr create --resource-group myRG --name myACR --sku Basic

# Build image in ACR
az acr build --registry myACR --image myapp:v1 .

Azure DevOps CLI Commands

# Set default organization and project
az devops configure --defaults organization=https://dev.azure.com/myorg project=myproject

# Create pipeline
az pipelines create --name myPipeline --yml-path azure-pipelines.yml

# Run pipeline
az pipelines run --name myPipeline

# List pipelines
az pipelines list --output table

# Create variable group
az pipelines variable-group create --name myVarGroup --variables key1=value1 key2=value2

GitHub CLI (gh) Commands

# Authenticate
gh auth login

# Create workflow file
gh workflow view

# List workflows
gh workflow list

# Run workflow
gh workflow run workflow-name

# View workflow runs
gh run list

# Create secret
gh secret set SECRET_NAME

Kubectl Commands for AKS

# Get pods
kubectl get pods -n namespace

# Apply manifest
kubectl apply -f deployment.yaml

# Get services
kubectl get services

# Describe deployment
kubectl describe deployment myapp

# View logs
kubectl logs -f pod-name

# Scale deployment
kubectl scale deployment myapp --replicas=5

# Rollout status
kubectl rollout status deployment/myapp

# Rollback deployment
kubectl rollout undo deployment/myapp

Terraform Commands

# Initialize Terraform
terraform init

# Plan infrastructure changes
terraform plan -out=tfplan

# Apply changes
terraform apply tfplan

# Destroy infrastructure
terraform destroy

# Show state
terraform show

# Import existing resource
terraform import azurerm_resource_group.example /subscriptions/xxx/resourceGroups/myRG

PowerShell Azure Commands

# Connect to Azure
Connect-AzAccount

# Select subscription
Set-AzContext -SubscriptionId "subscription-id"

# Create resource group
New-AzResourceGroup -Name myRG -Location "East US"

# Deploy ARM template
New-AzResourceGroupDeployment -ResourceGroupName myRG -TemplateFile template.json

# Get deployment history
Get-AzResourceGroupDeployment -ResourceGroupName myRG

Common Pipeline Patterns

Multi-Stage YAML Pipeline Example

trigger:
  branches:
    include:
    - main
    - develop

variables:
  buildConfiguration: 'Release'
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: 'Build Stage'
  jobs:
  - job: Build
    displayName: 'Build Job'
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: UseDotNet@2
      inputs:
        packageType: 'sdk'
        version: '8.x'

    - task: DotNetCoreCLI@2
      displayName: 'Restore packages'
      inputs:
        command: 'restore'

    - task: DotNetCoreCLI@2
      displayName: 'Build solution'
      inputs:
        command: 'build'
        configuration: $(buildConfiguration)

    - task: DotNetCoreCLI@2
      displayName: 'Run tests'
      inputs:
        command: 'test'
        projects: '**/*Tests.csproj'

    - task: PublishBuildArtifacts@1
      inputs:
        pathToPublish: '$(Build.ArtifactStagingDirectory)'
        artifactName: 'drop'

- stage: Deploy_Dev
  displayName: 'Deploy to Dev'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: DeployWeb
    displayName: 'Deploy Web App'
    pool:
      vmImage: $(vmImageName)
    environment: 'dev'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              azureSubscription: 'service-connection'
              appName: 'myapp-dev'
              package: '$(Pipeline.Workspace)/drop/**/*.zip'

- stage: Deploy_Prod
  displayName: 'Deploy to Production'
  dependsOn: Deploy_Dev
  condition: succeeded()
  jobs:
  - deployment: DeployWeb
    displayName: 'Deploy Web App'
    pool:
      vmImage: $(vmImageName)
    environment: 'production'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              azureSubscription: 'service-connection'
              appName: 'myapp-prod'
              package: '$(Pipeline.Workspace)/drop/**/*.zip'
              deploymentMethod: 'zipDeploy'

GitHub Actions Workflow Example

name: CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

env:
  AZURE_WEBAPP_NAME: myapp
  AZURE_WEBAPP_PACKAGE_PATH: '.'
  DOTNET_VERSION: '8.x'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: Restore dependencies
      run: dotnet restore

    - name: Build
      run: dotnet build --configuration Release --no-restore

    - name: Test
      run: dotnet test --no-build --verbosity normal

    - name: Publish
      run: dotnet publish -c Release -o ./publish

    - name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: webapp
        path: ./publish

  deploy:
    runs-on: ubuntu-latest
    needs: build
    if: github.ref == 'refs/heads/main'
    environment: production

    steps:
    - name: Download artifact
      uses: actions/download-artifact@v3
      with:
        name: webapp
        path: ./publish

    - name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Deploy to Azure Web App
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        package: ./publish

Docker Build and Push Pipeline

# Azure Pipelines
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  dockerRegistryServiceConnection: 'acr-connection'
  imageRepository: 'myapp'
  containerRegistry: 'myregistry.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: 'Build and Push Docker Image'
  jobs:
  - job: Build
    steps:
    - task: Docker@2
      displayName: 'Build and Push'
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          latest

    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.SourcesDirectory)/manifests'
        artifact: 'manifests'

- stage: Deploy
  displayName: 'Deploy to AKS'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    environment: 'kubernetes-cluster'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: KubernetesManifest@0
            displayName: 'Deploy to Kubernetes'
            inputs:
              action: 'deploy'
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Troubleshooting Common Issues

Pipeline Failures

Issue: Agent job timeout Solution: Increase timeout in pipeline YAML or adjust agent configuration

Issue: Insufficient permissions Solution: Review service connection permissions and Azure RBAC roles

Issue: Missing dependencies Solution: Verify package feeds, upstream sources, and network connectivity

Authentication Issues

Issue: Service principal authentication failure Solution: Verify credentials, check expiration, ensure proper RBAC assignment

Issue: Key Vault access denied Solution: Configure Key Vault access policies or use RBAC model

Container Issues

Issue: Image pull failures in AKS Solution: Attach ACR to AKS cluster or configure image pull secrets

Issue: Container startup failures Solution: Review pod logs, check resource limits, verify configuration

Performance Issues

Issue: Slow build times Solution: Implement caching, use parallel jobs, optimize dependencies

Issue: Agent shortage Solution: Add more agents to pool or use Microsoft-hosted agents


Best Practices Summary

Pipeline Design

  • Use YAML pipelines over classic for version control
  • Implement pipeline templates for reusability
  • Use variable groups for environment-specific configuration
  • Enable pipeline caching for faster builds
  • Implement proper staging with approvals

Security

  • Store secrets in Azure Key Vault
  • Use managed identities when possible
  • Implement least-privilege access
  • Enable code scanning and dependency checks
  • Rotate secrets regularly

Source Control

  • Implement branch policies
  • Require pull request reviews
  • Use semantic versioning
  • Protect main/production branches
  • Keep repositories focused and manageable

Monitoring

  • Implement comprehensive logging
  • Set up proactive alerting
  • Use Application Insights for APM
  • Configure availability tests
  • Create dashboards for visibility

Infrastructure as Code

  • Use Bicep or Terraform consistently
  • Version control all IaC
  • Implement testing for infrastructure
  • Use modules for reusability
  • Document infrastructure dependencies

Important Notes for the Exam

  1. Hands-On Experience: The exam heavily tests practical knowledge. Use Azure DevOps and GitHub Actions extensively.

  2. YAML Syntax: Be comfortable writing and debugging YAML pipelines from scratch.

  3. Security First: Understand secrets management, managed identities, and secure DevOps practices.

  4. Container Knowledge: Know Docker, ACR, and AKS deployment strategies thoroughly.

  5. IaC Tools: Be proficient in ARM templates, Bicep, and Terraform for Azure.

  6. Monitoring: Understand Application Insights, Log Analytics, and KQL queries.

  7. Git Workflows: Master branching strategies, pull requests, and branch policies.

  8. Case Studies: Practice scenario-based questions that test decision-making skills.

  9. Time Management: The exam has case studies that can be time-consuming. Manage your time wisely.

  10. Azure CLI/PowerShell: Know common commands for automation and troubleshooting.


Exam Day Tips

  • Read each question carefully, especially case studies
  • Flag uncertain questions for review
  • Watch for keywords like "most cost-effective" or "least administrative effort"
  • Eliminate obviously wrong answers first
  • Trust your hands-on experience
  • Manage time effectively - don't spend too long on any single question
  • Review flagged questions if time permits

Good luck with your AZ-400 certification exam!

Last Updated: 2025-10-13 Total Documentation Links: 120 Total Lines: 700+