From 6ee7ca12efafcf45194d78a50ae887f9a2eff287 Mon Sep 17 00:00:00 2001 From: Christoph Muller-Reyes Date: Mon, 11 Apr 2022 10:42:25 -0700 Subject: [PATCH] added quickstart and images --- QUICKSTART.md | 40 +++++++++++++++++++++++++++++++++++ images/iacpipelineresult.png | Bin 0 -> 23747 bytes 2 files changed, 40 insertions(+) create mode 100644 QUICKSTART.md create mode 100644 images/iacpipelineresult.png diff --git a/QUICKSTART.md b/QUICKSTART.md new file mode 100644 index 0000000..1d16d5a --- /dev/null +++ b/QUICKSTART.md @@ -0,0 +1,40 @@ +# Quickstart + + +## Setting Variables +--- + +For a quickstart, the only variables needed to be set are in 'config-infra-dev.yml': +* If your location (Azure Regtion) is different from 'northeurope' then you'll have to adjust it to the desired one p.ex. 'westus' like here: 'location: westus' +* the function of 'namespace' is to make all your artifacts, that you're going to deploy, unique. Since there's going to be a Storage Account deployed, it has to adhere to the naming limitations of these (3-24 characters, all lowercase letters or numbers) +* as of (20220405) the 'ado_service_connection_rg' needs to have contributor permission subscription wide, since there's two resource groups being created: one for the Terraform state, and the second, which contains the artifacts for the Machine Learning Workspace (Storage Account, Key Vault, Application Insights, Container Registry). You then have to create a service connection in your ADO project, which has the same name ' or adjust it here accordingly. + + +## Deploying Infrastructure via ADO (Azure DevOps) +--- + +To daploy the infrastructure in ADO (Azure DevOps), you will have to have an organization and a project, with the mentioned service connection configured. +Then under pipelines you'll create a new pipeline and choose 'infrastructure\terraform\pipelines\tf-ado-deploy-infra.yml' as the source. + + You can then run the pipeline, which should create the following artifacts: + * Resource Group for Terraform State including Storage Account + * Resource Group for your Workspace including Storage Account, Container Registry, Application Insights, Keyvault and the Azure Machine Learning Workspace itself. + + > If you didn't change the variable 'enable_aml_computecluster' from 'true' to 'false' a compute cluster is created as defined in 'infrastructure\terraform\modules\aml-workspace\main.tf' + + +As of now (20220410) the Terraform infrastructure pipeline will create a new pair of Terraform state Resource Group and Machine Learning workspace Resource Group every time it runs, with a slightly different name (number 10x). + +The successfully run pipeline should look like this: + +![IaC image](./images/iacpipelineresult.png) + +

+

+ + + +## Deploying Training Pipeline via ADO (Azure DevOps) +--- + + diff --git a/images/iacpipelineresult.png b/images/iacpipelineresult.png new file mode 100644 index 0000000000000000000000000000000000000000..3e0ff725a17c6a377f3e9aafdd8ee340970ac207 GIT binary patch literal 23747 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 BO0NI_ literal 0 HcmV?d00001