Microsoft Foundry Integration with AZD

April 3, 2026 · View on GitHub

Chapter Navigation:

Overview

āļ„āļđāđˆāļĄāļ·āļ­āļ™āļĩāđ‰āļŠāļēāļ˜āļīāļ•āļ§āļīāļ˜āļĩāļāļēāļĢāļĢāļ§āļĄāļšāļĢāļīāļāļēāļĢ Microsoft Foundry āđ€āļ‚āđ‰āļēāļāļąāļš Azure Developer CLI (AZD) āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ AI āļ—āļĩāđˆāļĢāļēāļšāļĢāļ·āđˆāļ™ Microsoft Foundry āļĄāļ­āļšāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ„āļĢāļšāļ§āļ‡āļˆāļĢāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ āļ›āļĢāļąāļšāđƒāļŠāđ‰ āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ AI āļ‚āļ“āļ°āļ—āļĩāđˆ AZD āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰

What is Microsoft Foundry?

Microsoft Foundry āļ„āļ·āļ­āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļĢāļ§āļĄāļ‚āļ­āļ‡ Microsoft āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļē AI āļ—āļĩāđˆāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ:

  • Model Catalog: āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ‚āļĄāđ€āļ”āļĨ AI āļ‚āļąāđ‰āļ™āļŠāļđāļ‡
  • Prompt Flow: āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ­āļ­āļāđāļšāļšāđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒ AI āđāļšāļšāļ āļēāļž
  • Microsoft Foundry Portal: āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļžāļąāļ’āļ™āļēāļĢāđˆāļ§āļĄāļŠāļģāļŦāļĢāļąāļšāđāļ­āļ› AI
  • Deployment Options: āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāđ‚āļŪāļŠāļ•āļīāđ‰āļ‡āđāļĨāļ°āļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āļŦāļĨāļēāļāļŦāļĨāļēāļĒ
  • Safety and Security: āļŸāļĩāđ€āļˆāļ­āļĢāđŒ AI āļ—āļĩāđˆāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāđƒāļ™āļ•āļąāļ§

AZD + Microsoft Foundry: Better Together

FeatureMicrosoft FoundryAZD Integration Benefit
Model Deploymentāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ”āđ‰āļ§āļĒāļžāļ­āļĢāđŒāļ—āļąāļĨāļ”āđ‰āļ§āļĒāļ•āļ™āđ€āļ­āļ‡āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđāļĨāļ°āļ—āļģāļ‹āđ‰āļģāđ„āļ”āđ‰
InfrastructureāļāļēāļĢāļˆāļąāļ”āļŦāļēāđāļšāļšāļ„āļĨāļīāļāļœāđˆāļēāļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđ€āļ›āđ‡āļ™āđ‚āļ„āđ‰āļ” (Bicep)
Environment ManagementāļĄāļļāđˆāļ‡āđ€āļ™āđ‰āļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāđ€āļ”āļĩāļĒāļ§āļŦāļĨāļēāļĒāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ (dev/staging/prod)
CI/CD Integrationāļˆāļģāļāļąāļ”āļĢāļ­āļ‡āļĢāļąāļš GitHub Actions āđ‚āļ”āļĒāļ•āļĢāļ‡
Cost ManagementāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļžāļ·āđ‰āļ™āļāļēāļ™āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒāļ•āļēāļĄāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ

Prerequisites

  • āļāļēāļĢāļŠāļĄāļąāļ„āļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Azure āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđ€āļŦāļĄāļēāļ°āļŠāļĄ
  • āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Azure Developer CLI
  • āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļšāļĢāļīāļāļēāļĢ Microsoft Foundry Models
  • āļ„āļ§āļēāļĄāļ„āļļāđ‰āļ™āđ€āļ„āļĒāļžāļ·āđ‰āļ™āļāļēāļ™āļāļąāļš Microsoft Foundry

Current AZD baseline: āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļ–āļđāļāļ—āļ”āļŠāļ­āļšāļāļąāļš azd 1.23.12 āļŠāļģāļŦāļĢāļąāļšāđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāļ•āļąāļ§āđāļ—āļ™ AI āđƒāļŦāđ‰āđƒāļŠāđ‰āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļžāļĢāļĩāļ§āļīāļ§āļĨāđˆāļēāļŠāļļāļ”āđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ—āļĩāđˆāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļāđˆāļ­āļ™āđ€āļĢāļīāđˆāļĄ

Core Integration Patterns

Pattern 1: Microsoft Foundry Models Integration

Use Case: āļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļ­āļ›āđāļŠāļ—āļ”āđ‰āļ§āļĒāđ‚āļĄāđ€āļ”āļĨ Microsoft Foundry Models

# azure.yaml
name: ai-chat-app
services:
  api:
    project: ./api
    host: containerapp
    env:
      - AZURE_OPENAI_ENDPOINT
      - AZURE_OPENAI_API_KEY

Infrastructure (main.bicep):

// Microsoft Foundry Models Account
resource openAIAccount 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: openAIAccountName
  location: location
  kind: 'OpenAI'
  sku: {
    name: 'S0'
  }
  properties: {
    customSubDomainName: openAIAccountName
    disableLocalAuth: false
  }
}

// Deploy GPT model
resource gptDeployment 'Microsoft.CognitiveServices/accounts/deployments@2023-05-01' = {
  parent: openAIAccount
  name: 'gpt-4.1-mini'
  properties: {
    model: {
      format: 'OpenAI'
      name: 'gpt-4.1-mini'
      version: '2024-07-18'
    }
    scaleSettings: {
      scaleType: 'Standard'
      capacity: 30
    }
  }
}

Pattern 2: AI Search + RAG Integration

Use Case: āļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļ­āļ›āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļšāļšāđ€āļŠāļĢāļīāļĄāļāļēāļĢāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (RAG)

// Azure AI Search
resource searchService 'Microsoft.Search/searchServices@2023-11-01' = {
  name: searchServiceName
  location: location
  sku: {
    name: 'basic'
  }
  properties: {
    replicaCount: 1
    partitionCount: 1
    hostingMode: 'default'
  }
}

// Connect Search with OpenAI
resource searchConnection 'Microsoft.Search/searchServices/dataConnections@2023-11-01' = {
  parent: searchService
  name: 'openai-connection'
  properties: {
    targetResourceId: openAIAccount.id
    authenticationMethod: 'managedIdentity'
  }
}

Pattern 3: Document Intelligence Integration

Use Case: āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļĨāļ°āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļ­āļāļŠāļēāļĢ

// Document Intelligence service
resource documentIntelligence 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: documentIntelligenceName
  location: location
  kind: 'FormRecognizer'
  sku: {
    name: 'S0'
  }
  properties: {
    customSubDomainName: documentIntelligenceName
  }
}

// Storage for document processing
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
    allowBlobPublicAccess: false
  }
}

🔧 Configuration Patterns

Environment Variables Setup

Production Configuration:

# āļšāļĢāļīāļāļēāļĢ AI āđāļāļ™āļŦāļĨāļąāļ
azd env set AZURE_OPENAI_ENDPOINT "https://your-openai.openai.azure.com/"
azd env set AZURE_SEARCH_ENDPOINT "https://your-search.search.windows.net"
azd env set AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT "https://your-formrec.cognitiveservices.azure.com/"

# āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļĢāļđāļ›āđāļšāļš
azd env set AZURE_OPENAI_MODEL "gpt-4.1-mini"
azd env set AZURE_OPENAI_EMBEDDING_MODEL "text-embedding-3-large"

# āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
azd env set AZURE_OPENAI_CAPACITY 30
azd env set AZURE_SEARCH_SKU "standard"

Development Configuration:

# āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ”āđ‰āļēāļ™āļ•āđ‰āļ™āļ—āļļāļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļē
azd env set AZURE_OPENAI_CAPACITY 10
azd env set AZURE_SEARCH_SKU "basic"
azd env set AZURE_DOCUMENT_INTELLIGENCE_SKU "F0"  # āļĢāļ°āļ”āļąāļšāļŸāļĢāļĩ

Secure Configuration with Key Vault

// Key Vault for secrets
resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' = {
  name: keyVaultName
  location: location
  properties: {
    tenantId: tenant().tenantId
    sku: {
      family: 'A'
      name: 'standard'
    }
    accessPolicies: [
      {
        tenantId: tenant().tenantId
        objectId: webAppIdentity.properties.principalId
        permissions: {
          secrets: ['get']
        }
      }
    ]
  }
}

// Store OpenAI key securely
resource openAIKeySecret 'Microsoft.KeyVault/vaults/secrets@2023-02-01' = {
  parent: keyVault
  name: 'openai-api-key'
  properties: {
    value: openAIAccount.listKeys().key1
  }
}

Deployment Workflows

AZD Extensions for Foundry

AZD āđƒāļŦāđ‰āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāļ—āļĩāđˆāđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‰āļžāļēāļ°āļ”āđ‰āļēāļ™ AI āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļāļąāļšāļšāļĢāļīāļāļēāļĢ Microsoft Foundry:

# āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāđ€āļ­āđ€āļˆāļ™āļ•āđŒ Foundry
azd extension install azure.ai.agents

# āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ”
azd extension install azure.ai.finetune

# āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡
azd extension install azure.ai.models

# āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāļ—āļĩāđˆāļ•āļīāļ”āļ•āļąāđ‰āļ‡
azd extension list --installed

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāđ€āļ­āđ€āļˆāļ™āļ•āđŒāļ—āļĩāđˆāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™
azd extension show azure.ai.agents

āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒ AI āļĒāļąāļ‡āļ„āļ‡āļžāļąāļ’āļ™āļēāļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āđƒāļ™āļŠāđˆāļ§āļ‡āļžāļĢāļĩāļ§āļīāļ§ āļŦāļēāļāļ„āļģāļŠāļąāđˆāļ‡āļ—āļģāļ‡āļēāļ™āđāļ•āļāļ•āđˆāļēāļ‡āļˆāļēāļāļ—āļĩāđˆāđāļŠāļ”āļ‡ āđƒāļŦāđ‰āļ—āļģāļāļēāļĢāļ­āļąāļ›āđ€āļāļĢāļ”āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāđˆāļ­āļ™āđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļēāđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ

Agent-First Deployment with azd ai

āļŦāļēāļāļ„āļļāļ“āļĄāļĩāđāļœāđˆāļ™āļāļģāļāļąāļšāļ•āļąāļ§āđāļ—āļ™ āđƒāļŠāđ‰ azd ai agent init āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āđ‚āļ„āļĢāļ‡āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļš Foundry Agent Service:

# āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļˆāļēāļāļ•āļąāļ§āļĢāļ°āļšāļļāđ€āļ­āđ€āļĒāđˆāļ™āļ•āđŒ
azd ai agent init -m agent-manifest.yaml --project-id <foundry-project-id>

# āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ„āļ›āļĒāļąāļ‡ Azure
azd up

āļāļēāļĢāđ€āļ›āļīāļ”āļ•āļąāļ§āļžāļĢāļĩāļ§āļīāļ§āļĨāđˆāļēāļŠāļļāļ”āļ‚āļ­āļ‡ azure.ai.agents āļĒāļąāļ‡āđ€āļžāļīāđˆāļĄāļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ”āđ‰āļ§āļĒāđ€āļ—āļĄāđ€āļžāļĨāļ•āļŠāļģāļŦāļĢāļąāļš azd ai agent init āļŦāļēāļāļ„āļļāļ“āļāļģāļĨāļąāļ‡āļ•āļīāļ”āļ•āļēāļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ•āļąāļ§āđāļ—āļ™āļĢāļļāđˆāļ™āđƒāļŦāļĄāđˆ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļŠāđˆāļ§āļĒāđ€āļŦāļĨāļ·āļ­āļ‚āļ­āļ‡āļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒāđ€āļžāļ·āđˆāļ­āļ”āļđāļ˜āļ‡āļ—āļĩāđˆāļĄāļĩāđƒāļ™āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ—āļĩāđˆāļ•āļīāļ”āļ•āļąāđ‰āļ‡

āļ”āļđāļ—āļĩāđˆ AZD AI CLI Commands āļŠāļģāļŦāļĢāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ„āļģāļŠāļąāđˆāļ‡āđāļĨāļ°āļ˜āļ‡āļ—āļąāđ‰āļ‡āļŦāļĄāļ”

Single Command Deployment

# āđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡āđ€āļ”āļĩāļĒāļ§āđƒāļ™āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
azd up

# āļŦāļĢāļ·āļ­āļ›āļĢāļąāļšāđƒāļŠāđ‰āļ­āļĒāđˆāļēāļ‡āļ„āđˆāļ­āļĒāđ€āļ›āđ‡āļ™āļ„āđˆāļ­āļĒāđ„āļ›
azd provision  # āđāļ„āđˆāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
azd deploy     # āđāļ„āđˆāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

# āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ‡āļēāļ™āđāļ­āļ› AI āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļĒāļēāļ§āļ™āļēāļ™āđƒāļ™ azd 1.23.11+
azd deploy --timeout 1800

Environment-Specific Deployments

# āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļžāļąāļ’āļ™āļē
azd env new development
azd env set AZURE_LOCATION eastus
azd env set ENVIRONMENT_TYPE dev
azd up

# āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļœāļĨāļīāļ•
azd env new production
azd env set AZURE_LOCATION westus2
azd env set ENVIRONMENT_TYPE prod
azd env set AZURE_OPENAI_CAPACITY 100
azd up

Monitoring and Observability

Application Insights Integration

// Application Insights for AI application monitoring
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

// Custom metrics for AI operations
resource customMetrics 'Microsoft.Insights/components/analyticsItems@2015-05-01' = {
  parent: applicationInsights
  name: 'AI-Metrics'
  properties: {
    name: 'AI Operations Metrics'
    content: '''
      requests
      | where name contains "openai"
      | summarize 
          RequestCount = count(),
          AvgDuration = avg(duration),
          SuccessRate = countif(success == true) * 100.0 / count()
      by bin(timestamp, 5m)
    '''
  }
}

Cost Monitoring

// Budget alert for AI services
resource budget 'Microsoft.Consumption/budgets@2023-05-01' = {
  name: 'ai-services-budget'
  properties: {
    timePeriod: {
      startDate: '2024-01-01'
      endDate: '2024-12-31'
    }
    timeGrain: 'Monthly'
    amount: 500
    category: 'Cost'
    notifications: {
      notification1: {
        enabled: true
        operator: 'GreaterThan'
        threshold: 80
        contactEmails: [
          'admin@company.com'
        ]
      }
    }
  }
}

🔐 Security Best Practices

Managed Identity Configuration

// Managed identity for the web application
resource webAppIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: '${appName}-identity'
  location: location
}

// Assign OpenAI User role
resource openAIRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: openAIAccount
  name: guid(openAIAccount.id, webAppIdentity.id, 'Cognitive Services OpenAI User')
  properties: {
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd')
    principalId: webAppIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

Network Security

// Private endpoints for AI services
resource openAIPrivateEndpoint 'Microsoft.Network/privateEndpoints@2023-04-01' = {
  name: '${openAIAccountName}-pe'
  location: location
  properties: {
    subnet: {
      id: virtualNetwork.properties.subnets[0].id
    }
    privateLinkServiceConnections: [
      {
        name: 'openai-connection'
        properties: {
          privateLinkServiceId: openAIAccount.id
          groupIds: ['account']
        }
      }
    ]
  }
}

Performance Optimization

Caching Strategies

# azure.yaml - Redis cache integration
services:
  api:
    project: ./api
    host: containerapp
    env:
      - REDIS_CONNECTION_STRING
      - CACHE_TTL=3600
// Redis cache for AI responses
resource redisCache 'Microsoft.Cache/redis@2023-04-01' = {
  name: redisCacheName
  location: location
  properties: {
    sku: {
      name: 'Basic'
      family: 'C'
      capacity: 1
    }
    enableNonSslPort: false
    minimumTlsVersion: '1.2'
  }
}

Auto-scaling Configuration

// Container App with auto-scaling
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  name: containerAppName
  location: location
  properties: {
    configuration: {
      ingress: {
        external: true
        targetPort: 8000
      }
    }
    template: {
      scale: {
        minReplicas: 1
        maxReplicas: 10
        rules: [
          {
            name: 'http-scaling'
            http: {
              metadata: {
                concurrentRequests: '30'
              }
            }
          }
        ]
      }
    }
  }
}

Troubleshooting Common Issues

Issue 1: OpenAI Quota Exceeded

Symptoms:

  • āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ‚āļ„āļ§āļ•āļē
  • āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” 429 āđƒāļ™āļšāļąāļ™āļ—āļķāļāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™

Solutions:

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ‚āļ„āļ§āļ•āļēāļ›āļąāļˆāļˆāļļāļšāļąāļ™
az cognitiveservices usage list --location eastus

# āļĨāļ­āļ‡āđƒāļŠāđ‰āļ āļđāļĄāļīāļ āļēāļ„āļ­āļ·āđˆāļ™
azd env set AZURE_LOCATION westus2
azd up

# āļĨāļ”āļ„āļ§āļēāļĄāļˆāļļāļŠāļąāđˆāļ§āļ„āļĢāļēāļ§
azd env set AZURE_OPENAI_CAPACITY 10
azd deploy

Issue 2: Authentication Failures

Symptoms:

  • āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” 401/403 āđ€āļĄāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāļšāļĢāļīāļāļēāļĢ AI
  • āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ "Access denied"

Solutions:

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļāļģāļŦāļ™āļ”āļšāļ—āļšāļēāļ—
az role assignment list --scope /subscriptions/YOUR_SUB/resourceGroups/YOUR_RG

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļšāļąāļāļŠāļĩāļ•āļąāļ§āļ•āļ™āļ—āļĩāđˆāļˆāļąāļ”āļāļēāļĢ
az webapp identity show --name YOUR_APP --resource-group YOUR_RG

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ Key Vault
az keyvault secret show --vault-name YOUR_KV --name openai-api-key

Issue 3: Model Deployment Issues

Symptoms:

  • āđ‚āļĄāđ€āļ”āļĨāđ„āļĄāđˆāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āđƒāļ™āļ›āļĢāļąāļšāđƒāļŠāđ‰
  • āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āđ‚āļĄāđ€āļ”āļĨāļšāļēāļ‡āļ•āļąāļ§āļĨāđ‰āļĄāđ€āļŦāļĨāļ§

Solutions:

# āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāļĄāļĩāļ•āļēāļĄāļ āļđāļĄāļīāļ āļēāļ„
az cognitiveservices model list --location eastus

# āļ­āļąāļ›āđ€āļ”āļ•āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āđ‚āļĄāđ€āļ”āļĨāđƒāļ™āđ€āļ—āļĄāđ€āļžāļĨāļ• bicep
# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļˆāļļāļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨ

Example Templates

RAG Chat Application (Python)

Repository: azure-search-openai-demo

Services: Azure OpenAI + Azure AI Search + Azure Container Apps + Azure Blob Storage

Description: āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ Azure AI āļĒāļ­āļ”āļ™āļīāļĒāļĄāļ—āļĩāđˆāļŠāļļāļ” â€” āđāļ­āļ›āđāļŠāļ— RAG āļ—āļĩāđˆāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āļ‹āļķāđˆāļ‡āđƒāļŦāđ‰āļ„āļļāļ“āļ–āļēāļĄāļ„āļģāļ–āļēāļĄāļāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ‡āļ„āļļāļ“āđ€āļ­āļ‡ āđƒāļŠāđ‰ GPT-4.1-mini āļŠāļģāļŦāļĢāļąāļšāđāļŠāļ—, text-embedding-3-large āļŠāļģāļŦāļĢāļąāļš embeddings, āđāļĨāļ° Azure AI Search āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ āļĢāļ­āļ‡āļĢāļąāļšāđ€āļ­āļāļŠāļēāļĢāļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš, āļāļēāļĢāļ›āđ‰āļ­āļ™/āļŠāđˆāļ‡āđ€āļŠāļĩāļĒāļ‡, āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒ Microsoft Entra, āđāļĨāļ°āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ”āđ‰āļ§āļĒ Application Insights

Quick Start:

azd init --template azure-search-openai-demo
azd up

RAG Chat Application (.NET)

Repository: azure-search-openai-demo-csharp

Services: Azure OpenAI + Azure AI Search + Azure Container Apps + Semantic Kernel

Description: āđ€āļ—āļĩāļĒāļšāđ€āļ—āđˆāļēāļ‚āļ­āļ‡ .NET/C# āļ‚āļ­āļ‡āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ RAG chat āđƒāļ™ Python āļŠāļĢāđ‰āļēāļ‡āļ”āđ‰āļ§āļĒ ASP.NET Core Minimal API āđāļĨāļ° Blazor WebAssembly frontend āļĄāļĩāļāļēāļĢāđāļŠāļ—āļ”āđ‰āļ§āļĒāđ€āļŠāļĩāļĒāļ‡, āļĢāļ­āļ‡āļĢāļąāļš GPT-4o-mini vision āđāļĨāļ°āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒ .NET MAUI Blazor Hybrid āļŠāļģāļŦāļĢāļąāļšāđ€āļ”āļŠāļāđŒāļ—āđ‡āļ­āļ›/āļĄāļ·āļ­āļ–āļ·āļ­

Quick Start:

azd init --template azure-search-openai-demo-csharp
azd up

RAG Chat Application (Java)

Repository: azure-search-openai-demo-java

Services: Azure OpenAI + Azure AI Search + Azure Container Apps / AKS + Langchain4J + Azure Cosmos DB

Description: āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ Java āļ‚āļ­āļ‡āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ RAG chat āđƒāļŠāđ‰ Langchain4J āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ AI āļĢāļ­āļ‡āļĢāļąāļšāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ­āļĩāđ€āļ§āļ™āļ•āđŒāđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ, āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļŦāļĨāļēāļĒāđāļšāļš (āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ, āđ€āļ§āļāđ€āļ•āļ­āļĢāđŒ, āđ„āļŪāļšāļĢāļīāļ”), āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ€āļ­āļāļŠāļēāļĢāļ”āđ‰āļ§āļĒ Azure Document Intelligence, āđāļĨāļ°āļ›āļĢāļąāļšāđƒāļŠāđ‰āļšāļ™ Azure Container Apps āļŦāļĢāļ·āļ­ Azure Kubernetes Service

Quick Start:

azd init --template azure-search-openai-demo-java
azd up

Enterprise Retail Copilot with Azure AI Foundry

Repository: contoso-chat

Services: Azure OpenAI + Azure AI Foundry + Prompty + Azure AI Search + Azure Container Apps + Azure Cosmos DB

Description: āđ‚āļ„āđ„āļžāļĨāļ­āļ• RAG āļŠāļģāļŦāļĢāļąāļšāļ˜āļļāļĢāļāļīāļˆāļ„āđ‰āļēāļ›āļĨāļĩāļāļ„āļĢāļšāļ§āļ‡āļˆāļĢ āđƒāļŠāđ‰ Azure AI Foundry āđāļĨāļ° Prompty āđāļŠāļ—āļšāļ­āļ— Contoso Outdoor āļ—āļĩāđˆāļĒāļķāļ”āļ„āļģāļ•āļ­āļšāļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļ•āļ•āļēāļĨāđ‡āļ­āļāļŠāļīāļ™āļ„āđ‰āļēāđāļĨāļ°āļ„āļģāļŠāļąāđˆāļ‡āļ‹āļ·āđ‰āļ­āļœāļđāđ‰āđƒāļŠāđ‰ āđāļŠāļ”āļ‡āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒ GenAIOps āļ—āļąāđ‰āļ‡āļŦāļĄāļ” â€” āļ•āđ‰āļ™āđāļšāļšāļāļąāļš Prompty, āļ›āļĢāļ°āđ€āļĄāļīāļ™āļ”āđ‰āļ§āļĒāļœāļđāđ‰āļŠāđˆāļ§āļĒ AI, āđāļĨāļ°āļ›āļĢāļąāļšāđƒāļŠāđ‰āļœāđˆāļēāļ™ AZD āđ„āļ›āļĒāļąāļ‡ Container Apps

Quick Start:

azd init --template contoso-chat
azd up

Creative Writing Multi-Agent Application

Repository: contoso-creative-writer

Services: Azure OpenAI + Azure AI Agent Service + Bing Grounding + Azure AI Search + Azure Container Apps

Description: āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ multi-agent āļ—āļĩāđˆāđāļŠāļ”āļ‡āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ•āļąāļ§āđāļ—āļ™ AI āļ”āđ‰āļ§āļĒ Prompty āđƒāļŠāđ‰āļ•āļąāļ§āđāļ—āļ™āļ§āļīāļˆāļąāļĒ (Bing Grounding āđƒāļ™ Azure AI Agent Service), āļ•āļąāļ§āđāļ—āļ™āļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒ (Azure AI Search), āļ•āļąāļ§āđāļ—āļ™āļœāļđāđ‰āđ€āļ‚āļĩāļĒāļ™ āđāļĨāļ°āļ•āļąāļ§āđāļ—āļ™āļšāļĢāļĢāļ“āļēāļ˜āļīāļāļēāļĢ āļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āļŠāļĢāđ‰āļēāļ‡āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļ§āļīāļˆāļąāļĒāļ”āļĩ āļĢāļ§āļĄ CI/CD āļ”āđ‰āļ§āļĒāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđƒāļ™ GitHub Actions

Quick Start:

azd init --template contoso-creative-writer
azd up

Serverless RAG Chat (JavaScript/TypeScript)

Repository: serverless-chat-langchainjs

Services: Azure OpenAI + Azure Functions + Azure Static Web Apps + Azure Cosmos DB for NoSQL + LangChain.js

Description: āđāļŠāļ—āļšāļ­āļ— RAG āđāļšāļšāđ„āļĄāđˆāļĄāļĩāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ€āļ•āđ‡āļĄāļĢāļđāļ›āđāļšāļš āđƒāļŠāđ‰ LangChain.js āļāļąāļš Azure Functions āļŠāļģāļŦāļĢāļąāļš API āđāļĨāļ° Azure Static Web Apps āļŠāļģāļŦāļĢāļąāļšāđ‚āļŪāļŠāļ•āđŒ āđƒāļŠāđ‰ Azure Cosmos DB āđ€āļ›āđ‡āļ™āļ—āļąāđ‰āļ‡āļ—āļĩāđˆāđ€āļāđ‡āļšāđ€āļ§āļāđ€āļ•āļ­āļĢāđŒāđāļĨāļ°āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāđāļŠāļ— āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļēāļ—āđ‰āļ­āļ‡āļ–āļīāđˆāļ™āļ”āđ‰āļ§āļĒ Ollama āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŸāļĢāļĩ

Quick Start:

azd init --template serverless-chat-langchainjs
azd up

Chat with Your Data Solution Accelerator

Repository: chat-with-your-data-solution-accelerator

Services: Azure OpenAI + Azure AI Search + Azure App Service + Azure Document Intelligence + Azure Functions + Azure Cosmos DB / PostgreSQL

Description: āļ•āļąāļ§āđ€āļĢāđˆāļ‡āļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§āđ‚āļ‹āļĨāļđāļŠāļąāļ™ RAG āļĢāļ°āļ”āļąāļšāļ­āļ‡āļ„āđŒāļāļĢ āļžāļĢāđ‰āļ­āļĄāļžāļ­āļĢāđŒāļ—āļąāļĨāļœāļđāđ‰āļ”āļđāđāļĨāļĢāļ°āļšāļšāļŠāļģāļŦāļĢāļąāļšāļ­āļąāļ›āđ‚āļŦāļĨāļ”/āļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢ, āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ­āļ­āļĢāđŒāđ€āļ„āļŠāđ€āļ•āļĢāđ€āļ•āļ­āļĢāđŒāļŦāļĨāļēāļĒāđāļšāļš (Semantic Kernel, LangChain, Prompt Flow), āļāļēāļĢāļžāļđāļ”āđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ, āļāļēāļĢāļœāļŠāļēāļ™āļāļąāļš Microsoft Teams, āđāļĨāļ°āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ PostgreSQL āļŦāļĢāļ·āļ­ Cosmos DB āļ­āļ­āļāđāļšāļšāđ€āļ›āđ‡āļ™āļˆāļļāļ”āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ—āļĩāđˆāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ RAG āđƒāļ™āļāļēāļĢāļœāļĨāļīāļ•

Quick Start:

azd init --template chat-with-your-data-solution-accelerator
azd up

AI Travel Agents — Multi-Agent MCP Orchestration

Repository: azure-ai-travel-agents

Services: Azure OpenAI + Azure AI Foundry + Azure Container Apps + MCP Servers (.NET, Python, Java, TypeScript)

Description: āđāļ­āļ›āļ­āđ‰āļēāļ‡āļ­āļīāļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ•āļąāļ§āđāļ—āļ™ AI āļŦāļĨāļēāļĒāļ•āļąāļ§ āđƒāļŠāđ‰āļŠāļēāļĄāđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļ (LangChain.js, LlamaIndex.TS āđāļĨāļ° Microsoft Agent Framework) āļĄāļĩāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ MCP (Model Context Protocol) āļŠāļĩāđˆāļ āļēāļĐāļē āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ€āļ›āđ‡āļ™ Azure Container Apps āđāļšāļšāđ„āļĄāđˆāļĄāļĩāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ āļžāļĢāđ‰āļ­āļĄāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ”āđ‰āļ§āļĒ OpenTelemetry

Quick Start:

azd init --template azure-ai-travel-agents
azd up

Azure AI Starter

Repository: azd-ai-starter

Services: Azure AI Services + Azure OpenAI

Description: āđ€āļ—āļĄāđ€āļžāļĨāļ• Bicep āļ‚āļąāđ‰āļ™āļ•āđˆāļģāļ—āļĩāđˆāļ›āļĢāļąāļšāđƒāļŠāđ‰āļšāļĢāļīāļāļēāļĢ Azure AI āļžāļĢāđ‰āļ­āļĄāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļ—āļĩāđˆāļ•āļąāđ‰āļ‡āļ„āđˆāļēāđ„āļ§āđ‰ āļˆāļļāļ”āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ™āđ‰āļģāļŦāļ™āļąāļāđ€āļšāļēāļŠāļģāļŦāļĢāļąāļšāđ€āļĄāļ·āđˆāļ­āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļ„āđˆāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™ Azure AI āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĄāļĩāļŠāđāļ•āļāđāļ­āļ›āđ€āļ•āđ‡āļĄāļĢāļđāļ›āđāļšāļš

Quick Start:

azd init --template azd-ai-starter
azd up

Browse more templates: āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄ Awesome AZD AI Template Gallery āļŠāļģāļŦāļĢāļąāļšāđ€āļ—āļĄāđ€āļžāļĨāļ• AZD āđ€āļ‰āļžāļēāļ° AI āļāļ§āđˆāļē 80 āđāļšāļš āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŦāļĨāļēāļĒāļ āļēāļĐāļēāđāļĨāļ°āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ

Next Steps

  1. Try the Examples: āđ€āļĢāļīāđˆāļĄāļ”āđ‰āļ§āļĒāđ€āļ—āļĄāđ€āļžāļĨāļ•āļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āđ„āļ§āđ‰āđāļĨāđ‰āļ§āļ‹āļķāđˆāļ‡āļ•āļĢāļ‡āļāļąāļšāļāļĢāļ“āļĩāđƒāļŠāđ‰āļ‡āļēāļ™āļ‚āļ­āļ‡āļ„āļļāļ“
  2. Customize for Your Needs: āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđāļĨāļ°āđ‚āļ„āđ‰āļ”āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™
  3. Add Monitoring: āļ™āļģāļāļēāļĢāļŠāļąāļ‡āđ€āļāļ•āļāļēāļĢāļ“āđŒāļ„āļĢāļšāļ§āļ‡āļˆāļĢāļĄāļēāđƒāļŠāđ‰
  4. Optimize Costs: āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļģāļŦāļĢāļąāļšāļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļ‚āļ­āļ‡āļ„āļļāļ“
  5. Secure Your Deployment: āļ™āļģāļĢāļđāļ›āđāļšāļšāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļĄāļēāđƒāļŠāđ‰
  6. Scale to Production: āđ€āļžāļīāđˆāļĄāļŸāļĩāđ€āļˆāļ­āļĢāđŒāļŦāļĨāļēāļĒāļ āļđāļĄāļīāļ āļēāļ„āđāļĨāļ°āļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļđāļ‡

ðŸŽŊ Hands-On Exercises

Exercise 1: Deploy Microsoft Foundry Models Chat App (30 minutes)

Goal: āļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđāļ­āļ›āđāļŠāļ— AI āļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļˆāļĢāļīāļ‡

# āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđ€āļ—āļĄāđ€āļžāļĨāļ•
mkdir ai-chat-demo && cd ai-chat-demo
azd init --template azure-search-openai-demo

# āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ
azd env set AZURE_LOCATION eastus2
azd env set AZURE_OPENAI_CAPACITY 30

# āļ›āļĢāļąāļšāđƒāļŠāđ‰
azd up

# āļ—āļ”āļŠāļ­āļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™
WEB_URL=$(azd show --output json | jq -r '.services.web.endpoint')
echo "Chat app: $WEB_URL"

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ AI
azd monitor

# āļ—āļģāļ„āļ§āļēāļĄāļŠāļ°āļ­āļēāļ”
azd down --force --purge

Success Criteria:

  • āļ›āļĢāļąāļšāđƒāļŠāđ‰āļŠāļģāđ€āļĢāđ‡āļˆāđ‚āļ”āļĒāđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ‚āļ„āļ§āļ•āļē
  • āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āđāļŠāļ—āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒ
  • āļŠāļēāļĄāļēāļĢāļ–āļ–āļēāļĄāļ„āļģāļ–āļēāļĄāđāļĨāļ°āđ„āļ”āđ‰āļĢāļąāļšāļ„āļģāļ•āļ­āļšāļˆāļēāļ AI
  • Application Insights āđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ—āļĢāļĄāļēāļ•āļĢ
  • āļĨāđ‰āļēāļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢāļŠāļģāđ€āļĢāđ‡āļˆ

Estimated Cost: $5-10 āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļ”āļŠāļ­āļš 30 āļ™āļēāļ—āļĩ

Exercise 2: Configure Multi-Model Deployment (45 minutes)

Goal: āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨ AI āļŦāļĨāļēāļĒāļ•āļąāļ§āđ‚āļ”āļĒāđƒāļŠāđ‰āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ—āļĩāđˆāđāļ•āļāļ•āđˆāļēāļ‡

# āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē Bicep āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡
cat > infra/ai-models.bicep << 'EOF'
param openAiAccountName string
param location string

resource openAi 'Microsoft.CognitiveServices/accounts@2023-05-01' existing = {
  name: openAiAccountName
}

// gpt-4.1-mini for general chat
resource gpt4omini 'Microsoft.CognitiveServices/accounts/deployments@2023-05-01' = {
  parent: openAi
  name: 'gpt-4.1-mini'
  properties: {
    model: {
      format: 'OpenAI'
      name: 'gpt-4.1-mini'
      version: '2024-07-18'
    }
    scaleSettings: {
      scaleType: 'Standard'
      capacity: 30
    }
  }
}

// Text embedding for search
resource embedding 'Microsoft.CognitiveServices/accounts/deployments@2023-05-01' = {
  parent: openAi
  name: 'text-embedding-3-large'
  properties: {
    model: {
      format: 'OpenAI'
      name: 'text-embedding-3-large'
      version: '1'
    }
    scaleSettings: {
      scaleType: 'Standard'
      capacity: 50
    }
  }
  dependsOn: [gpt4omini]
}
EOF

# āļ™āļģāđ„āļ›āđƒāļŠāđ‰āđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļš
azd provision
azd show

Success Criteria:

  • āđ‚āļĄāđ€āļ”āļĨāļŦāļĨāļēāļĒāļ•āļąāļ§āļ–āļđāļāļ›āļĢāļąāļšāđƒāļŠāđ‰āļŠāļģāđ€āļĢāđ‡āļˆ
  • āļāļģāļŦāļ™āļ”āļ„āļ§āļēāļĄāļˆāļļāļ•āđˆāļēāļ‡āļāļąāļ™āđ„āļ”āđ‰
  • āđ‚āļĄāđ€āļ”āļĨāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļœāđˆāļēāļ™ API
  • āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāļˆāļēāļāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™

Exercise 3: Implement Cost Monitoring (20 minutes)

Goal: āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āđāļĨāļ°āļ•āļīāļ”āļ•āļēāļĄāļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒ

# āđ€āļžāļīāđˆāļĄāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āđƒāļ™ Bicep
cat >> infra/main.bicep << 'EOF'

resource budget 'Microsoft.Consumption/budgets@2023-05-01' = {
  name: 'ai-monthly-budget'
  properties: {
    timePeriod: {
      startDate: '2024-01-01'
      endDate: '2025-12-31'
    }
    timeGrain: 'Monthly'
    amount: 200
    category: 'Cost'
    notifications: {
      notification1: {
        enabled: true
        operator: 'GreaterThan'
        threshold: 80
        contactEmails: ['your-email@example.com']
      }
      notification2: {
        enabled: true
        operator: 'GreaterThan'
        threshold: 100
        contactEmails: ['your-email@example.com']
      }
    }
  }
}
EOF

# āļ›āļĢāļąāļšāđƒāļŠāđ‰āļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“
azd provision

# āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒāļ›āļąāļˆāļˆāļļāļšāļąāļ™
az consumption usage list --start-date $(date -d '7 days ago' +%Y-%m-%d) --end-date $(date +%Y-%m-%d)

Success Criteria:

  • āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āđƒāļ™ Azure āļŠāļģāđ€āļĢāđ‡āļˆ
  • āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ—āļēāļ‡āļ­āļĩāđ€āļĄāļĨ
  • āļŠāļēāļĄāļēāļĢāļ–āļ”āļđāļ‚āđ‰āļ­āļĄāļđāļĨāļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒāđƒāļ™ Azure Portal
  • āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ‚āļĩāļ”āļˆāļģāļāļąāļ”āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āđ€āļŦāļĄāļēāļ°āļŠāļĄ

ðŸ’Ą Frequently Asked Questions

āļ‰āļąāļ™āļˆāļ°āļĨāļ”āļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒ Microsoft Foundry Models āđƒāļ™āļŠāđˆāļ§āļ‡āļžāļąāļ’āļ™āļēāļĢāļ°āļšāļšāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?
  1. āđƒāļŠāđ‰ Free Tier: Microsoft Foundry Models āđƒāļŦāđ‰āđ‚āļ—āđ€āļ„āđ‡āļ™āļŸāļĢāļĩ 50,000 āđ‚āļ—āđ€āļ„āđ‡āļ™/āđ€āļ”āļ·āļ­āļ™
  2. āļĨāļ”āļ„āļ§āļēāļĄāļˆāļļ: āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļ§āļēāļĄāļˆāļļāđ€āļ›āđ‡āļ™ 10 TPM āđāļ—āļ™ 30+ āđƒāļ™āļŠāđˆāļ§āļ‡āļžāļąāļ’āļ™āļē
  3. āđƒāļŠāđ‰ azd down: āļ›āļĨāļ”āļ—āļĢāļąāļžāļĒāļēāļāļĢāđ€āļĄāļ·āđˆāļ­āļ•āļ­āļ™āđ„āļĄāđˆāđ„āļ”āđ‰āļžāļąāļ’āļ™āļē
  4. āđāļ„āļŠāļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš: āđƒāļŠāđ‰ Redis cache āļŠāļģāļŦāļĢāļąāļšāļ„āļģāļ–āļēāļĄāļ‹āđ‰āļģāđ†
  5. āđƒāļŠāđ‰ Prompt Engineering: āļĨāļ”āļāļēāļĢāđƒāļŠāđ‰āđ‚āļ—āđ€āļ„āđ‡āļ™āļ”āđ‰āļ§āļĒāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļģāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
# āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļāļēāļĢāļžāļąāļ’āļ™āļē
azd env set AZURE_OPENAI_CAPACITY 10
azd env set ENABLE_RESPONSE_CACHE true
āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Microsoft Foundry Models āļāļąāļš OpenAI API āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

Microsoft Foundry Models:

  • āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļāļēāļĢāļ›āļāļīāļšāļąāļ•āļīāļ•āļēāļĄāļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļŠāļģāļŦāļĢāļąāļšāļ­āļ‡āļ„āđŒāļāļĢ
  • āļāļēāļĢāļĢāļ§āļĄāđ€āļ„āļĢāļ·āļ­āļ‚āđˆāļēāļĒāļŠāđˆāļ§āļ™āļ•āļąāļ§
  • āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™ SLA
  • āļāļēāļĢāļžāļīāļŠāļđāļˆāļ™āđŒāļ•āļąāļ§āļ•āļ™āļ”āđ‰āļ§āļĒ managed identity
  • āđ‚āļ„āļ§āļ•āđ‰āļēāļ—āļĩāđˆāļŠāļđāļ‡āļāļ§āđˆāļē

OpenAI API:

  • āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ‚āļĄāđ€āļ”āļĨāđƒāļŦāļĄāđˆāđ„āļ”āđ‰āđ€āļĢāđ‡āļ§āļāļ§āđˆāļē
  • āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ‡āđˆāļēāļĒāļāļ§āđˆāļē
  • āļĢāļ°āļ”āļąāļšāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ•āđˆāļģāļāļ§āđˆāļē
  • āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āđƒāļ™āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļ™āđ‡āļ•āļŠāļēāļ˜āļēāļĢāļ“āļ°āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

āļŠāļģāļŦāļĢāļąāļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđƒāļ™āļĢāļ°āļ”āļąāļšāļāļēāļĢāļœāļĨāļīāļ• āđāļ™āļ°āļ™āļģāđƒāļŦāđ‰āđƒāļŠāđ‰ Microsoft Foundry Models.

āļ‰āļąāļ™āļˆāļ°āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ‚āļ„āļ§āļ•āđ‰āļēāļ—āļĩāđˆāđ€āļāļīāļ™āļ‚āļ­āļ‡ Microsoft Foundry Models āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?
# āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ‚āļ„āļ§āļ•āđ‰āļēāļ›āļąāļˆāļˆāļļāļšāļąāļ™
az cognitiveservices usage list --location eastus2

# āļĨāļ­āļ‡āļ āļđāļĄāļīāļ āļēāļ„āļ­āļ·āđˆāļ™
azd env set AZURE_LOCATION westus2
azd up

# āļĨāļ”āļ„āļ§āļēāļĄāļˆāļļāļŠāļąāđˆāļ§āļ„āļĢāļēāļ§
azd env set AZURE_OPENAI_CAPACITY 10
azd provision

# āļ‚āļ­āđ€āļžāļīāđˆāļĄāđ‚āļ„āļ§āļ•āđ‰āļē
# āđ„āļ›āļ—āļĩāđˆ Azure Portal > Quotas > āļ‚āļ­āđ€āļžāļīāđˆāļĄāđ‚āļ„āļ§āļ•āđ‰āļē
āļ‰āļąāļ™āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡āļāļąāļš Microsoft Foundry Models āđ„āļ”āđ‰āđ„āļŦāļĄ?

āđ„āļ”āđ‰āđ€āļĨāļĒ! āđƒāļŠāđ‰ Azure AI Search āļŠāļģāļŦāļĢāļąāļš RAG (Retrieval Augmented Generation):

# azure.yaml
services:
  ai:
    env:
      - AZURE_SEARCH_ENDPOINT
      - AZURE_SEARCH_INDEX
      - AZURE_OPENAI_ENDPOINT

āļ”āļđāđ€āļ—āļĄāđ€āļžāļĨāļ• azure-search-openai-demo

āļ‰āļąāļ™āļˆāļ°āļĢāļąāļāļĐāļēāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡ AI model endpoints āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

āđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”:

  1. āđƒāļŠāđ‰ Managed Identity (āđ„āļĄāđˆāđƒāļŠāđ‰āļ„āļĩāļĒāđŒ API)
  2. āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ Private Endpoints
  3. āļāļģāļŦāļ™āļ”āļ„āđˆāļē network security groups
  4. āđƒāļŠāđ‰āļāļēāļĢāļˆāļģāļāļąāļ”āļ­āļąāļ•āļĢāļē (rate limiting)
  5. āđƒāļŠāđ‰ Azure Key Vault āļŠāļģāļŦāļĢāļąāļšāđ€āļāđ‡āļšāļ„āļ§āļēāļĄāļĨāļąāļš
// Managed Identity authentication
resource webAppIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: 'web-identity'
  location: location
}

resource openAIRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: openAIAccount
  name: guid(openAIAccount.id, webAppIdentity.id)
  properties: {
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd')
    principalId: webAppIdentity.properties.principalId
  }
}

āļŠāļļāļĄāļŠāļ™āđāļĨāļ°āļāļēāļĢāļŠāļ™āļąāļšāļŠāļ™āļļāļ™


āļāļēāļĢāļ™āļģāļ—āļēāļ‡āļšāļ—:

āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļŠāđˆāļ§āļĒāđ€āļŦāļĨāļ·āļ­? āđ€āļ‚āđ‰āļēāļĢāđˆāļ§āļĄāļāļēāļĢāļ­āļ āļīāļ›āļĢāļēāļĒāļŠāļļāļĄāļŠāļ™āļ‚āļ­āļ‡āđ€āļĢāļēāļŦāļĢāļ·āļ­āđ€āļ›āļīāļ”āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļ›āļąāļāļŦāļēāđƒāļ™āļ—āļĩāđˆāđ€āļāđ‡āļšāđ‚āļ„āđ‰āļ” āļŠāļļāļĄāļŠāļ™ Azure AI + AZD āļžāļĢāđ‰āļ­āļĄāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ„āļļāļ“āļ›āļĢāļ°āļŠāļšāļ„āļ§āļēāļĄāļŠāļģāđ€āļĢāđ‡āļˆ!


āļ‚āđ‰āļ­āļ›āļāļīāđ€āļŠāļ˜āļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš:
āđ€āļ­āļāļŠāļēāļĢāļ‰āļšāļąāļšāļ™āļĩāđ‰āđ„āļ”āđ‰āļ–āļđāļāđāļ›āļĨāđ‚āļ”āļĒāđƒāļŠāđ‰āļšāļĢāļīāļāļēāļĢāđāļ›āļĨāļ āļēāļĐāļēāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī Co-op Translator āđāļĄāđ‰āđ€āļĢāļēāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ—āļĩāđˆāļŠāļļāļ” āđ‚āļ›āļĢāļ”āļ—āļĢāļēāļšāļ§āđˆāļēāļāļēāļĢāđāļ›āļĨāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŦāļĢāļ·āļ­āļ„āļ§āļēāļĄāđ„āļĄāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡ āđ€āļ­āļāļŠāļēāļĢāļ•āđ‰āļ™āļ‰āļšāļąāļšāđƒāļ™āļ āļēāļĐāļēāļ•āđ‰āļ™āļ—āļēāļ‡āļ„āļ§āļĢāļ–āļđāļāļžāļīāļˆāļēāļĢāļ“āļēāđ€āļ›āđ‡āļ™āđāļŦāļĨāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ„āļ”āđ‰ āļŠāļģāļŦāļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļŠāļģāļ„āļąāļ āļ„āļ§āļĢāđƒāļŠāđ‰āļāļēāļĢāđāļ›āļĨāđ‚āļ”āļĒāļĄāļ·āļ­āļ­āļēāļŠāļĩāļžāļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ™āļēāļ āđ€āļĢāļēāđ„āļĄāđˆāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ•āđˆāļ­āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļœāļīāļ”āļŦāļĢāļ·āļ­āļāļēāļĢāļ•āļĩāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āđƒāļ” āđ† āļ—āļĩāđˆāļ­āļēāļˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļˆāļēāļāļāļēāļĢāđƒāļŠāđ‰āļāļēāļĢāđāļ›āļĨāļ™āļĩāđ‰