Skip to content

feat: MLOps lifecycle reference architecture with Azure ML (ACA-5886) - #122

Open
p3ck wants to merge 5 commits into
mainfrom
feat/ACA-5886-mlops-lifecycle
Open

feat: MLOps lifecycle reference architecture with Azure ML (ACA-5886)#122
p3ck wants to merge 5 commits into
mainfrom
feat/ACA-5886-mlops-lifecycle

Conversation

@p3ck

@p3ck p3ck commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add end-to-end MLOps lifecycle playbook (mlops_lifecycle.yml) automating Azure ML workspace provisioning, compute, data, environment, component, training job, model registration, and blue/green model deployment
  • Demonstrate cross-workspace model sharing via ML Registry between dev and prod workspaces
  • Include integration test covering workspace creation through endpoint serving with full teardown

Resolves ACA-5886

Acceptance Criteria

Criteria Status
Architecture diagram with AAP orchestration points Done — MLOPS_LIFECYCLE.md
Sample playbooks for each lifecycle stage (workspace, compute, data, environment, component, job, model, endpoint) Done — phases 1-10 in playbook
Blue/green deployment with traffic splitting and automated rollback Done — 100/0 → 90/10 → 50/50 → 0/100 with rollback on failed green
Cross-workspace model sharing with two workspaces Done — dev + prod workspaces bridged by ML Registry
CI/CD integration with AAP workflow Done — documented in MLOPS_LIFECYCLE.md
All playbooks pass ansible-lint Done — passes yamllint + syntax-check
Integration test for full lifecycle Done — azure_ops_test_mlops_lifecycle

Key Design Decisions

  • Uses dedicated azure_rm_ml_* modules (workspace, compute, datastore, data, environment, component, job, model, online_endpoint, online_deployment, registry) instead of generic azure_rm_resource
  • Uses azure_rm_keyvault and azure_rm_containerregistry for workspace dependencies; azure_rm_resource only for Application Insights (no dedicated module exists)
  • resource_definition YAML strings follow Azure ML CLI v2 schema where modules require it
  • Jinja2 escaping ({{ '{{' }}) handles Azure ML ${{inputs.*}} expressions

Test plan

  • yamllint playbooks/mlops_lifecycle.yml — passes
  • ansible-playbook --syntax-check playbooks/mlops_lifecycle.yml — passes
  • Run integration test azure_ops_test_mlops_lifecycle against live Azure subscription
  • Verify create operation provisions all resources end-to-end
  • Verify delete operation tears down all resources cleanly

🤖 Generated with Claude Code

p3ck and others added 5 commits August 12, 2026 13:47
Add end-to-end MLOps lifecycle playbook demonstrating AAP orchestration
of Azure Machine Learning — from workspace provisioning through model
serving with blue/green deployment and cross-workspace model sharing
via ML Registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove Jinja templates from the middle of task names (name[template]
rule) and drop unused azure_ml_training_command variable that contained
unescaped Azure ML ${{}} expressions (jinja[spacing] warning).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Storage accounts (24 char max) and Key Vault (24 char max) names were
derived from the resource group name without truncation, causing
failures when the resource group name was long.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tests

Workspace module requires full ARM resource IDs (not bare names) for
storage_account, key_vault, application_insights, and container_registry.
Info modules return plural list keys (ml_workspaces, ml_registries, etc.)
not singular. Also truncates resource names to Azure service limits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant