Skip to main content

Workshop: AI Landing Zone

Deploy a production-grade AI Landing Zone โ€” the foundational infrastructure that every enterprise AI workload needs. Secure networking, managed identity, RBAC, and Well-Architected Framework validation in 90 minutes.

Duration90 minutes (5 parts)
LevelIntermediate
Solution Play02 โ€” AI Landing Zone
You'll DeployVNet + private endpoints, Azure OpenAI, AI Search, Key Vault, Managed Identity, RBAC

Prerequisitesโ€‹

  • Azure subscription with Contributor role
  • Azure CLI 2.50+ (az --version)
  • VS Code with FrootAI extension
  • Node.js 18+ (for FrootAI CLI)
# Verify prerequisites
az --version # 2.50+
node --version # 18+
az login # Authenticate

Part 1: Scaffold (15 min)โ€‹

Initialize the AI Landing Zone from the FrootAI template:

npx frootai scaffold 02-ai-landing-zone
cd 02-ai-landing-zone

This creates the standard play structure:

02-ai-landing-zone/
โ”œโ”€โ”€ .github/
โ”‚ โ”œโ”€โ”€ copilot-instructions.md # Knowledge supplement
โ”‚ โ”œโ”€โ”€ agents/ # builder, reviewer, tuner
โ”‚ โ”œโ”€โ”€ instructions/ # WAF-aligned guidance
โ”‚ โ””โ”€โ”€ skills/ # Infrastructure skills
โ”œโ”€โ”€ config/
โ”‚ โ”œโ”€โ”€ openai.json # AI model configuration
โ”‚ โ””โ”€โ”€ guardrails.json # Safety boundaries
โ”œโ”€โ”€ infra/
โ”‚ โ”œโ”€โ”€ main.bicep # Entry point
โ”‚ โ”œโ”€โ”€ modules/ # Network, AI, security modules
โ”‚ โ””โ”€โ”€ parameters/ # Environment-specific values
โ””โ”€โ”€ spec/
โ””โ”€โ”€ fai-manifest.json # Play metadata + wiring

:::tip Explore Before Deploying Spend 5 minutes reading copilot-instructions.md and fai-manifest.json to understand what's being deployed and why each component exists. :::

Part 2: Review Architecture (15 min)โ€‹

Core Componentsโ€‹

The AI Landing Zone deploys a secure, interconnected set of services:

ComponentServicePurpose
NetworkingVNet + subnets + NSGsNetwork isolation
AIAzure OpenAI (private endpoint)LLM inference
SearchAzure AI Search (private endpoint)Vector + keyword search
SecurityKey Vault (private endpoint)Secrets management
IdentityUser-Assigned Managed IdentityService-to-service auth
MonitoringApplication Insights + Log AnalyticsObservability

Review Configuration Filesโ€‹

// config/openai.json
{ "model": "gpt-4o", "temperature": 0.1, "max_tokens": 4096, "api_version": "2024-06-01" }
// config/guardrails.json
{ "content_safety": { "enabled": true }, "max_tokens_per_request": 4096,
"rate_limit_per_minute": 60, "require_managed_identity": true }

Part 3: Deploy Infrastructure (30 min)โ€‹

Set Parametersโ€‹

# Create a resource group
az group create --name ai-landing-zone-rg --location eastus2

# Configure deployment parameters
az deployment group create \
--resource-group ai-landing-zone-rg \
--template-file infra/main.bicep \
--parameters infra/parameters/dev.bicepparam

:::warning Deployment Time The full deployment takes 15-25 minutes due to private endpoint DNS propagation. The Azure OpenAI resource alone can take 5-10 minutes. Monitor progress in the Azure portal under "Deployments." :::

Key Bicep Patternsโ€‹

The landing zone uses Azure Verified Modules (AVM):

module openaiPrivateEndpoint 'br/public:avm/res/network/private-endpoint:0.7.1' = {
name: 'openai-pe'
params: {
name: 'pe-openai-${resourceToken}'
subnetResourceId: vnet.outputs.subnetResourceIds[0]
privateLinkServiceConnections: [{ name: 'openai', properties: {
privateLinkServiceId: openai.outputs.resourceId, groupIds: ['account']
}}]
}
}

Verify with: az resource list --resource-group ai-landing-zone-rg --output table

Part 4: Validate WAF (15 min)โ€‹

Run the FrootAI WAF validation to check your deployment against Well-Architected Framework pillars:

npx frootai validate --waf

Expected output checks:

PillarValidationExpected
SecurityPrivate endpoints enabledโœ… Pass
SecurityManaged Identity configuredโœ… Pass
SecurityRBAC (no access keys)โœ… Pass
ReliabilityMulti-zone deploymentโœ… Pass
CostDev SKUs for non-productionโœ… Pass
OperationsDiagnostic settings enabledโœ… Pass

:::info WAF Pillars The six WAF pillars โ€” Security, Reliability, Cost Optimization, Operational Excellence, Performance Efficiency, and Responsible AI โ€” are enforced across all FrootAI solution plays. See T3: Production Patterns for detailed patterns. :::

Part 5: Connect & Build (15 min)โ€‹

With infrastructure deployed, use the builder agent to create your first AI application on top of the landing zone:

# In VS Code with Copilot, reference the builder agent:
# @fai-play-02-builder Help me connect to the deployed Azure OpenAI
# instance using managed identity and send a test query.

Test Connectivityโ€‹

from azure.identity import DefaultAzureCredential
from openai import AzureOpenAI

credential = DefaultAzureCredential()
token = credential.get_token("https://cognitiveservices.azure.com/.default")

client = AzureOpenAI(
azure_endpoint="https://<your-openai>.openai.azure.com/",
api_key=token.token,
api_version="2024-06-01"
)

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello from the AI Landing Zone!"}]
)
print(response.choices[0].message.content)

Cleanupโ€‹

# Remove all resources (irreversible)
az group delete --name ai-landing-zone-rg --yes --no-wait

Next Stepsโ€‹