נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת AI-102 עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
עד סוף מעבדה זו, תספק, באמצעות Terraform רגיל, את התשתית של יישום Azure AI בסגנון RAG – חשבון Azure OpenAI עם פריסת מודל צ'אט מסוג Claude / GPT, שירות Azure AI Search עבור אינדקס השליפה, חשבון אחסון עבור מסמכי המקור, ו-Key Vault המחזיק את מפתחות ה-API. חמש אבני בניין; ארכיטקטורת הייחוס של AI-102.
הכנס את הקטעים לקובץ main.tf יחיד, הרץ terraform init, ולאחר מכן terraform apply צעד אחר צעד.
>= 1.5 או OpenTofu >= 1.6.az login).azurerm_cognitive_account בפעם הראשונה דורשת זאת פעם אחת).Azure AI Search Basic הוא החיוב העיקרי ב-$75 לחודש. עבור לשכבת Free (sku = "free") אם אתה רגיש לעלויות; המעבדה עדיין מדגימה את הארכיטקטורה.
פתיח Azure סטנדרטי. AI-102 מצפה ממך להשתמש ב-eastus או westus לזמינות הדגמים החדשים ביותר של Azure OpenAI — אזורים ישנים יותר אינם מקבלים את משפחת GPT-4 במהירות.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-ai-102"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-ai-102-rg"
location = "eastus"
tags = local.tags
}Azure OpenAI הוא מנוע ה-GenAI הייצור עבור AI-102. אנו יוצרים את החשבון (kind = "OpenAI") ופורסים את gpt-4o-mini כמודל הצ'אט — הדגם הזול ביותר מסוג GPT-4 בזמן כתיבה זה וברירת המחדל המומלצת למעבדת AI-102. הפריסה היא ה-קישור בעל השם של גרסת מודל ספציפית להקצאת מכסה; אתה קורא לה בשמה מקוד היישום.
ה-model.version = "2024-07-18" הוא תאריך ההשקה של gpt-4o-mini — AI-102 בודק את יציבות גרסת המודל כדאגה חוזרת (נעילה לגרסה ספציפית לעומת שדרוג אוטומטי). הבחינה מעדיפה הצמדה מפורשת לאמינות בייצור.
resource "azurerm_cognitive_account" "openai" {
name = "openai-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
kind = "OpenAI"
sku_name = "S0"
custom_subdomain_name = "openai-ai102-${random_id.suffix.hex}"
identity {
type = "SystemAssigned"
}
tags = local.tags
}
resource "azurerm_cognitive_deployment" "chat" {
name = "gpt-4o-mini"
cognitive_account_id = azurerm_cognitive_account.openai.id
model {
format = "OpenAI"
name = "gpt-4o-mini"
version = "2024-07-18"
}
sku {
name = "Standard"
capacity = 10 # TPM in thousands; 10 = 10K tokens-per-minute quota
}
}Azure AI Search (שמו המעודכן של Cognitive Search) הוא מנוע השליפה של AI-102 עבור דפוסי RAG. אנו מקצים שירות ברמת Basic — הוא תומך בזהות מנוהלת המוקצית למערכת, הנדרשת עבור AI Search כדי לקרוא באופן מאובטח ל-Azure OpenAI עבור תכונת ה-וקטוריזציה המשולבת (שבה AI Search קורא למודלי הטמעות בשמך במהלך האינדוקס).
ההגדרה local_authentication_enabled = false היא התשובה המומלצת לשיטות עבודה מומלצות בייצור של AI-102 — אכיפת אימות Entra ID, ללא מפתחות ניהול מסתובבים. הזהות המנוהלת המוקצית למערכת מקבלת גישה ל-Azure OpenAI בשלב הבא.
resource "azurerm_search_service" "main" {
name = "search-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "basic"
replica_count = 1
partition_count = 1
local_authentication_enabled = false # Entra auth only
public_network_access_enabled = true
identity {
type = "SystemAssigned"
}
tags = local.tags
}
# Grant AI Search's managed identity Cognitive Services OpenAI User on the
// account — required for integrated vectorization (AI Search → OpenAI embeddings).
resource "azurerm_role_assignment" "search_to_openai" {
scope = azurerm_cognitive_account.openai.id
role_definition_name = "Cognitive Services OpenAI User"
principal_id = azurerm_search_service.main.identity[0].principal_id
}מסמכי מקור עבור RAG חיים ב-Azure Storage. מנגנוני אינדוקס של AI Search מושכים מתוך מיכל הבלובים, עוברים דרך מודל הטמעות OpenAI עבור וקטוריזציה, ומאכלסים את אינדקס החיפוש. הענקת הזהות המנוהלת של AI Search תפקיד Storage Blob Data Reader על חשבון האחסון היא תבנית השליפה ללא סיסמה של AI-102.
כאשר Storage + AI Search + OpenAI מחוברים כולם באמצעות זהות מנוהלת, תשתית ה-RAG במקומה. שכבת היישום (מנהל הצ'אט שמקבל שאילתות משתמשים, קורא ל-AI Search, ואז קורא ל-OpenAI עם ההקשר שנשלף) היא הקוד שאתה כותב — Terraform לא עוזר שם; הוא מכין את התשתית כראוי.
resource "azurerm_storage_account" "docs" {
name = "ai102docs${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_storage_container" "source" {
name = "source"
storage_account_id = azurerm_storage_account.docs.id
container_access_type = "private"
}
resource "azurerm_role_assignment" "search_to_storage" {
scope = azurerm_storage_account.docs.id
role_definition_name = "Storage Blob Data Reader"
principal_id = azurerm_search_service.main.identity[0].principal_id
}AI-102 מצפה מיישומי ייצור לקרוא נקודות קצה ומפתחות מ-Key Vault, לא ממשתני סביבה או קובצי תצורה. אנו מקצים Key Vault ושומרים את נקודת הקצה של OpenAI, שם הפריסה, ונקודת הקצה של AI Search כסודות. בייצור, הזהות המנוהלת של היישום הייתה מחזיקה ב-"Key Vault Secrets User" על כספת זו כדי לקרוא אותם בעת ההפעלה.
זה סוגר את לולאת ה-יישום ושילוב של AI-102: כל נקודת קצה, כל מפתח, כל כתובת URL של שירות עוברים דרך Key Vault — נקודה אחת לסיבוב סודות, נקודה אחת לביקורת. כל דפוס נוסף של AI-102 (Document Intelligence, Translator, Custom Vision, Speech) מתחבר באותו אופן.
resource "azurerm_key_vault" "main" {
name = "kv-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}
resource "azurerm_key_vault_secret" "openai_endpoint" {
name = "openai-endpoint"
value = azurerm_cognitive_account.openai.endpoint
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}
resource "azurerm_key_vault_secret" "openai_deployment" {
name = "openai-deployment"
value = azurerm_cognitive_deployment.chat.name
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}
resource "azurerm_key_vault_secret" "search_endpoint" {
name = "search-endpoint"
value = "https://${azurerm_search_service.main.name}.search.windows.net"
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}terraform destroy מפרק הכל. הערות:
purge_soft_delete_on_destroy = true בתכונות הספק גורם למחיקה בפועל.AI-102 מכסה שירותים נוספים שמעבדה זו אינה יכולה להכיל — Azure AI Document Intelligence (זיהוי טפסים, מודלי חילוץ מותאמים אישית), Azure AI Vision (סיווג תמונות מותאם אישית + זיהוי אובייקטים), Azure AI Language (CLU + שאלות ותשובות מותאמות אישית), Azure AI Speech (דיבור מותאם אישית, קולות נוירוניים, תרגום דיבור), Azure AI Bot Service, Azure AI Content Safety, וכל משטח עיצוב ה-prompt-flow של Azure AI Studio.
אנו נצמדים לתשתית ה-RAG של Azure OpenAI + AI Search + Storage + Key Vault מכיוון שזוהי ארכיטקטורת ה-AI-102 הנבדקת ביותר וזו שכל דפוס AI-102 אחר מורכב עליה. Document Intelligence מזין RAG. Vision מחלץ תוכן מתמונות שמוטמעות ב-RAG. Bot Service הוא חזית (frontend) על גבי ערימה זו.
עבור המשטחים הנ"ל, ראה את מדורי העיון ו-Editorial בדף אישור זה.