Skip to main content

Phase 0 - Planning

Plan your deployment by working through the decisions below.

Note

This phase is optional. If you already know what you want, skip to Phase 1.

Terms

  • Accelerator module: the MLOpsAccelerator PowerShell module (Deploy-MLOpsAccelerator).
  • Inputs file: the one inputs.yaml that drives everything.
  • Scenario: one of 11 Azure ML network, serving and governance patterns.
  • Bootstrap: the Terraform that creates the repository, environments, identity and Azure access before any ML infrastructure exists.
  • Generated project: the repository the accelerator writes: infrastructure, CI/CD and ML workload.
  • Environment: a full Azure ML workspace and its dependencies, one per stage (dev, test, prod).

Skills that help

Decisions

Each decision maps to a key in inputs.yaml. The parameter checklist lists them all in one place, and the decision flow shows how the choices connect.

Decision 1 - Infrastructure as Code tooling

iac: terraform or bicep. Both build on Azure Verified Modules and render the same scenarios. The bootstrap is always Terraform.

Decision 2 - Version control system

cicd: github (GitHub Actions) or azdo (Azure DevOps Pipelines). For other systems, use the generated files and wire your own pipeline.

Decision 3 - Scenario

scenario: pick from the scenarios table. Network mode drives most of the cost and prerequisites. When unsure, start with basic-public and move later.

Decision 4 - Azure region

location: where every environment is deployed. Check quota for the compute you will use.

Decision 5 - Subscription and tenant

subscription_id, tenant_id. One subscription hosts all environments. Separate subscriptions per environment are not an input yet.

Decision 6 - Environments

environments: default dev, test, prod. Use [dev, prod] for a trial or small team. Each environment is a complete workspace, so cost scales with the count. See cost estimates.

Decision 7 - Naming and tags

project_name (3 to 10 lowercase alphanumerics) seeds resource names. tags are applied to everything.

Decision 8 - Data source

data_source: taxi-csv, taxi-parquet or nyc-taxi-open (bundled MLTable samples) or adls (your CSV in ADLS Gen2). See data sources.

Decision 9 - Networking inputs

Only for some scenarios: vnet_address_space (your own VNet), allowed_outbound_fqdns (managed approved outbound), and existing_platform (existing platform). Pick address space that does not overlap your corporate or Azure ranges.

Decision 10 - Bootstrap networking

The bootstrap creates the Terraform state storage account, and your pipelines need to reach it. Choose how:

OptionInputsUse when
Public networking with GitHub-hosted runners (default)use_private_networking: false, runner_label: ubuntu-latestTrials, and subscriptions whose policy allows a public, Entra-only state endpoint
Public networking with your own self-hosted runnersuse_private_networking: false, runner_label: <your label>You already run runners (for example on AKS with ARC) that can reach the state storage
Private networking with accelerator-deployed runners (GitHub only)use_private_networking: true, optional runners_vnet_address_spacePolicy disables public access to storage. The bootstrap deploys a VNet, Azure Container Instances runners and a private endpoint for state, and sets runner_label to self-hosted

Self-hosted runners are ignored unless the label points at them. Azure DevOps managed pools are not automated yet; point the generated pipelines at your own agent pool. Review runners_vnet_address_space (default 10.250.0.0/24) so it does not overlap your corporate or Azure ranges. See known issues for the private runner details.

Fill in use_private_networking, runners_vnet_address_space and runner_label. The decision flow walks through the choice.

Decision 11 - Governance

budget_amount and alert_emails for the governance scenarios, and policy_mode for the policy guardrails.

Decision 12 - Workloads

workloads: optional list of workload names (for example [taxi, churn]). All workloads share the one platform (a workspace per environment) and each gets its own workloads/<name>/ folder, assets and pipelines. Omit it for a single workload at the repository root.

Decision 13 - Repository and organization

GitHub: github_org, github_repo. Azure DevOps: azdo_org_url, azdo_project.

Next

Run New-MLOpsInputFile -Scenario <id> -Path inputs.yaml, fill in the values, then continue to Phase 1 - Prerequisites.