What's new
Newest first. The latest release is v0.2.0 (2026-10-15); the first was v0.1.0 (2026-10-14). Releases are tagged v0.x.y until the first gold release (v1.0.0), which also needs the bootstrap, private runners and Azure DevOps verified live. The module is pre-release and is not on the PowerShell Gallery yet. Entries are tagged [Important] when you must act, or [Preview] for features that are not applied to a live subscription yet.
All generated output is validated offline (render, terraform validate, az bicep build, pytest). Scenarios 1 to 12 are also verified live for Terraform and Bicep by the e2e.yml workflow. The GitHub and Azure DevOps bootstraps and the Bicep infra pipeline on both (dev and prod) are verified live too. Private runners and private state storage, separate plan and apply identities, Managed DevOps Pools, the rai option, the scenario 7 feature-set pack and endpoint deployment are not verified live; see Known issues.
Unreleased
Changed
Known issues now records that the training pipeline cannot upload to workspace storage when policy forces public access off and shared keys off. The deployment of
basic-publictodevsucceeded; the data and component upload did not.The training steps are now Azure ML command components in
mlops/azureml/components/(prep, train, evaluate and register), each with typed inputs and outputs. The pipeline calls them by name (<name>_prepand so on, with hyphens in the workload name replaced by underscores, which component names require), andml-trainregisters them before it submits the job. The generated smoke test checks each component against its script. The components are validated offline with the Azure ML SDK loader but have not run live yet, and registering them in a registry for scenario 8 is not done.The Bicep pipelines scan with PSRule for Azure instead of Checkov, which parsed none of the AVM based Bicep and passed. The step fails if nothing is scanned.
The Azure DevOps bootstrap sets the repository default branch to
mainand authorizes pipelines to use its environments and service connections. The Azure DevOps bootstrap and Bicep pipeline were applied live on October 15, 2026.Soft-delete guidance now says workspace names need a new
project_name, not only a newsuffix.The GitHub bootstrap now declares the federated credentials directly instead of through the identity module. The module’s latest release still uses the deprecated
parent_idargument, so every plan printed a deprecation warning. Regenerated bootstrap folders replace the two credentials once on the next apply.The printed next step, the project README and the run guide quote
-var-fileand-outso the commands work in PowerShell as well as bash.The
workloadinput is renamedworkload_typeto stop it being confused withworkloads. The old name is still accepted and prints a deprecation warning. Workload names that clash with generated folders (src,data,tests,mlops,infra,bootstrap,docs,rag,workloads) are now rejected.The bundled taxi samples now come from the MIT-licensed
azureml-examplesrepository, with the license indata/NOTICE.md. The schema and data source docs now agree thattaxi-parquetis supported.Resource name suffix is now exactly 5 characters (was 4, with the schema allowing 4 to 6 while Bicep required 4). The generated default is 5 characters and
name_suffixmust be 5 lowercase letters or digits. Regenerating an existing project changes its derived resource names, so set a stablename_suffixonly on new deployments and plan to redeploy preview environments.Input validation is stricter: properties that do not apply to the scenario are rejected,
use_private_networkingis rejected with Azure DevOps, private networking requires a self-hostedrunner_label, environments are sorted into dev, test, prod order, registry scenarios need two environments, and CIDR ranges are checked for private space, host bits, size and overlap.
Added
- The GitHub bootstrap was applied live and the generated Bicep project deployed
basic-publicto dev and prod through the pipeline. The Terraform pipeline cannot reach state storage in subscriptions whose policy turns public access off, so use a self-hosted runner there. e2e.ymlacceptsscenarios: allto run the full matrix. The e2e policy (affected scenarios on a change, full set before a release) is written in the known issues page and the agent instructions.- A non-blocking CI canary job runs the Pester suite on the
ubuntu-26.04image beforeubuntu-latestmoves to it (GitHub starts the move on October 19, 2026). The cost table andGet-ScenarioCostEstimates.ps1now include scenario 12, and scenario 12 is documented as verified live. data_source: nyc-taxi-open: a 2,000-row sample of the public Azure Open Datasets yellow taxi parquet with its original column names.prep.pycleans and maps it to the model features, so you can see a real parquet schema end to end.- A CSV or parquet options page that explains why parquet is worth learning and how to convert a CSV.
- Scenario 12,
rag-llmops: Azure AI Search, a chat and an embedding model deployment, an index of sample documents, and an evaluation step with a groundedness quality gate in the pipeline, on Terraform and Bicep. The newraginput section sets the models, capacity, search tier and gate threshold. The newTest-MLOpsModelQuotafunction, which-Deployalso runs, checks regional model and search quota first. Not yet applied live. rag.search_locationinput to place Azure AI Search in a different region than the rest of the workload, for when the main region is out of Search capacity. The quota check now reads Search usage for that region and warns that quota does not guarantee capacity.e2e.ymlworkflow: the identity needs a lock-management role for governance, and a final job removes any leftover test resource groups and writes a pass or fail summary. Runs are manual and need a scenario list; the weekly schedule was removed, and Bicep deployments are named per scenario so parallel jobs no longer collide.
v0.2.0 (2026-10-15)
All 11 scenarios are now verified live on Terraform and Bicep. The bootstrap, private runners and Azure DevOps are still not applied live.
Fixed
- Terraform and Bicep, feature store: sets
featureStoreSettings, passes the dependent storage, Key Vault and Application Insights resources, enables the managed network that serverless Spark needs, and drops the container registry because a managed network requires a Premium one. - Terraform, governance: the storage account diagnostic setting now sends the
Transactionmetric, so Azure creates it and the apply no longer times out. e2e.ymlworkflow: removes resource locks before deleting the resource group, so the governance scenario can be destroyed.
Verified
- Scenarios 6 to 11 applied, verified and destroyed live on Terraform and Bicep.
e2e.ymlworkflow: scenario 11 runs against a stand-in platform (VNet, Log Analytics and private DNS zones) that the job creates and removes.
v0.1.0 (2026-10-14)
First tagged pre-release. Scenarios 1 to 5 are verified live on Terraform and Bicep; scenarios 6 to 11 are validated offline and by plan or what-if only.
Fixed
- Terraform:
workspace_managed_networkis now one object with conditional fields, fixing “Inconsistent conditional result types” on managed-network scenarios. - Bicep: public scenarios set explicit
Allownetwork ACLs on storage, Key Vault and the container registry. e2e.ymlworkflow: re-logs in before verify and destroy because the OIDC token expires after about 5 minutes.
Fixed (Terraform, byo-vnet)
- Private DNS zone counts are known at plan time, storage blob and file private endpoints have unique names, and the workspace, hub and compute cluster use
depends_onso private endpoints exist first.
Verified
- Scenarios 1 to 5 applied, verified and destroyed live on Terraform and Bicep.
2026-10-13
Added
data_source: taxi-parquet, and the bundled samples (taxi-csv,taxi-parquet) are now registered as MLTable data assets (type: mltable, mounted read-only into the prep step). The Parquet sample is a 2,000-row slice with the same columns. The Azure Open Datasets green-taxi Parquet has a different schema (2 GB, East US only), so it is not bundled.prep.pyreads the MLTable file itself because themltablepackage requires Python below 3.14.adlsstays a single-fileuri_file.The module is packaged for the PowerShell Gallery:
scripts/Build-Module.ps1stages a self-contained module (templates, schema and version lock bundled), and av*tag builds it, attaches a zip to the GitHub release and publishes to the Gallery when thePSGALLERY_API_KEYsecret is set. The module is not published yet, so install withinstall-local.ps1.The interactive prompt now mirrors ALZ: numbered menus for scenario, IaC, CI/CD, region and subscription,
[0]for manual entry, a(current)default marker,[AZ]on zone-enabled regions (fromaz account list-locations, limited to regions where Azure ML workspaces are available), subscriptions from the current tenant, and a warning when the chosen region has no zones. Withoutazit falls back to free text.[Preview]
policy_mode(audit,denyornone): built-in Azure Policy guardrails on every environment resource group, documented under Azure Policy. [Important] the bootstrap now grants the deploy identity Resource Policy Contributor; re-run the bootstrap for existing projects. The generated compute cluster now disables local authentication.11 AML scenarios (now 12) on Terraform and Bicep, built on Azure Verified Modules: Scenarios.
Estimated fixed monthly cost per scenario, from the Azure Retail Prices API (
scripts/Get-ScenarioCostEstimates.ps1).data_source: adls: read your own CSV from ADLS Gen2 with an identity-based datastore. [Important] the workspace identity needs Storage Blob Data Reader; see Data sources.Phase 0 - Planning decisions that map to
inputs.yaml.Phase 1 - Prerequisites, with a resource provider check in
Test-MLOpsAcceleratorRequirement.Phase 2 - Bootstrap and Phase 3 - Run guides.
Plan and approve before apply,
Remove-MLOpsAccelerator,-Upgrade,-InteractiveandGrant-MLOpsStorageAccess.install-local.ps1for local install and uninstall, since the module is not published yet.Default environments are
dev,testandprod.Pipelines are numbered by phase.
Changed
- [Important] Docs renumbered: Planning 0, Prerequisites 1, Bootstrap 2, Run 3.
- Python is pinned to 3.14. Held back on purpose:
azurermbelow 5.0 (AVM requirement),pyarrowbelow 26 (mlflow cap) andazureml-mlflow1.60.0. - Generated files are LF-only on every OS.
- CI runs on Ubuntu, Windows and macOS.
Fixed
- Python lookup in
Update-MLOpsAcceleratorVersionnow works on Windows (python,python3andpython3.14). - The scenario test matrix uses the OS temp folder instead of
$env:TMPDIR.
Known gaps
- Compute sizes are not inputs yet.
- The bootstrap sets no approval reviewers and does not register Azure DevOps pipelines.
- No managed feature store pack yet.
- Not published to the PowerShell Gallery.
See Gap analysis versus ALZ for the full comparison.