0Pricing
Azure Fundamentals · บทเรียน

Bicep: IaC สมัยใหม่สำหรับ Azure

เรียนรู้ไวยากรณ์ที่กระชับของ Bicep ซึ่งเป็นนามธรรมแบบตรวจสอบชนิดข้อมูลอย่างเข้มงวดเหนือ ARM JSON แปลงเทมเพลต ARM ที่มีอยู่เป็น Bicep และปรับใช้ด้วย Azure CLI

Bicep: IaC สมัยใหม่สำหรับ Azure เป็นบทเรียน Azure Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Azure Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

Bicep คืออะไรและเหตุใดจึงควรใช้

Bicepคือภาษาเฉพาะโดเมน (DSL) ที่พัฒนาโดย Microsoft เป็นทางเลือกที่กระชับและมีชนิดข้อมูลเข้มงวดกว่าเทมเพลต ARM JSON Bicep จะคอมไพล์เป็น ARM JSON มาตรฐาน จึงใช้กลไกการปรับใช้ ARM เดียวกันและรองรับทรัพยากร Azure ทุกชนิดตั้งแต่วันแรก Bicep ลดโค้ดส่วนเกินจำนวนมากที่จำเป็นในการเขียน JSON โดยตรง พร้อมเพิ่มความปลอดภัยของชนิดข้อมูลและการรองรับ IntelliSense

การเปรียบเทียบไวยากรณ์ Bicep กับ ARM JSON

บัญชีที่เก็บข้อมูลเดียวกันซึ่งต้องใช้ JSON ประมาณ 25 บรรทัดในเทมเพลต ARM ต้องใช้เพียงประมาณ 8 บรรทัดใน Bicep Bicep ตัด '$schema' contentVersion ตัวครอบอาร์เรย์ resources และไวยากรณ์นิพจน์ที่ละเอียดออก ชื่อคุณสมบัติและชนิดข้อมูลยังคงเหมือนเดิม เนื่องจาก Bicep เป็นชั้นนามธรรมโดยตรงเหนือ ARM JSON จึงไม่มีความแตกต่างขณะทำงานเลย

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

พารามิเตอร์และตัวตกแต่งใน Bicep

พารามิเตอร์ Bicep ใช้ไวยากรณ์กระชับ param name type = defaultValue คุณสามารถใช้ตัวตกแต่ง (นำหน้าด้วย @) ไว้เหนือพารามิเตอร์โดยตรงเพื่อเพิ่มข้อจำกัด เช่น @minLength() @maxLength() @allowed() และ @description() ตัวตกแต่ง @secure() จะทำเครื่องหมายพารามิเตอร์ว่าเป็นข้อมูลละเอียดอ่อน ซึ่งเทียบเท่ากับ secureString ใน ARM JSON

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

ตัวแปรและนิพจน์ใน Bicep

ตัวแปรของ Bicep ประกาศด้วยคีย์เวิร์ด var และสามารถมีนิพจน์ใด ๆ รวมถึงการแทรกสตริงโดยใช้ไวยากรณ์ '${value}' การแทรกสตริงเป็นหนึ่งในการปรับปรุงที่อ่านเข้าใจง่ายที่สุดเมื่อเทียบกับ ARM JSON โดยไม่ต้องเรียกใช้ฟังก์ชัน concat() อีกต่อไป Bicep ยังรองรับนิพจน์แบบมีเงื่อนไขโดยใช้ตัวดำเนินการสามส่วน condition ? trueValue : falseValue

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

การประกาศทรัพยากรและชื่อเชิงสัญลักษณ์

ใน Bicep ทรัพยากรแต่ละรายการจะมีชื่อเชิงสัญลักษณ์ ซึ่งเป็นตัวระบุที่ใช้เพื่ออ้างอิงทรัพยากรนั้นภายในเทมเพลต ชื่อเชิงสัญลักษณ์ไม่ใช่ชื่อ Azure ของทรัพยากร ใช้ชื่อเชิงสัญลักษณ์เพื่อเข้าถึงคุณสมบัติของทรัพยากรและสร้างการขึ้นต่อกันโดยนัยด้วยการอ้างอิงทรัพยากรหนึ่งภายในอีกรายการหนึ่ง จึงไม่จำเป็นต้องมีอาร์เรย์ dependsOn ที่ประกาศอย่างชัดเจน

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

เอาต์พุตใน Bicep

เอาต์พุตของ Bicep ประกาศด้วยคีย์เวิร์ด output ตามด้วยชื่อเอาต์พุต ชนิดข้อมูล และค่า คุณสามารถอ้างอิงคุณสมบัติของทรัพยากรที่ Deploy แล้วโดยใช้ชื่อเชิงสัญลักษณ์และสัญกรณ์จุด ซึ่งอ่านเข้าใจได้ง่ายกว่าฟังก์ชัน reference() ของ ARM มาก เอาต์พุตมีความสำคัญสำหรับการส่งค่าระหว่างการเรียกใช้โมดูล Bicep

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

โมดูล Bicep

โมดูล Bicepเทียบเท่ากับเทมเพลตที่เชื่อมโยงใน ARM JSON ทำให้คุณแบ่งโครงสร้างพื้นฐานออกเป็นส่วนประกอบที่นำกลับมาใช้ใหม่ได้ โมดูลก็คือไฟล์ .bicep อีกไฟล์หนึ่ง คุณอ้างอิงโมดูลด้วยคีย์เวิร์ด module ส่งพารามิเตอร์เข้าไป และนำเอาต์พุตของโมดูลมาใช้ได้ นอกจากนี้ยังสามารถเผยแพร่โมดูลไปยังและเรียกใช้โมดูลจาก Azure รีจิสทรีคอนเทนเนอร์ เพื่อให้ทั้งทีมใช้ซ้ำได้

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

การแปลงเทมเพลต ARM เป็น Bicep

หากคุณมีเทมเพลต ARM JSON อยู่แล้ว CLI ของ Bicep สามารถถอดกลับเป็น Bicep ได้โดยใช้ bicep decompile ผลลัพธ์อาจต้องปรับแก้ด้วยตนเองเล็กน้อย แต่จะเป็นจุดเริ่มต้นที่ดีมาก Microsoft ยังมีสนามทดลองออนไลน์ที่ aka.ms/bicepdemo ซึ่งคุณสามารถวาง ARM JSON และดู Bicep ที่เทียบเท่ากันได้แบบเรียลไทม์

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

การ Deploy Bicep ด้วย Azure CLI

Azure CLI รองรับไฟล์ Bicep โดยตรง คุณจึงไม่จำเป็นต้อง Compile เป็น ARM JSON ด้วยตนเองก่อน Deploy เพียงส่งเส้นทางไฟล์ .bicep ให้กับ az deployment group create พร้อมแฟล็ก --template-file แล้ว CLI จะ Compile ให้โดยอัตโนมัติ คำสั่งย่อย validate และ what-if เดิมยังใช้งานกับไฟล์ Bicep ได้เหมือนกับ ARM JSON ทุกประการ

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

ลูปและเงื่อนไขใน Bicep

Bicep รองรับลูปของทรัพยากรโดยใช้ไวยากรณ์ for ... in เพื่อสร้างทรัพยากรหลายอินสแตนซ์จากพารามิเตอร์ชนิดอาร์เรย์ จึงไม่ต้องทำซ้ำด้วยการคัดลอกและวาง คีย์เวิร์ด if ช่วยให้การ Deploy ทรัพยากรแบบมีเงื่อนไขทำได้ โดยจะรวมทรัพยากรไว้เฉพาะเมื่อเงื่อนไขที่กำหนดเป็นจริง ฟีเจอร์ทั้งสองจะถูก Compile เป็นโครงสร้าง copy และ condition ของ ARM ตามลำดับ

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

เครื่องมือ Bicep และการตรวจสอบรูปแบบโค้ด

ส่วนขยาย Bicep สำหรับ Visual Studio Codeมี IntelliSense การตรวจสอบชนิดข้อมูล และการไฮไลต์ข้อผิดพลาดในบรรทัดขณะที่คุณพิมพ์ CLI ของ Bicep มีเครื่องมือตรวจสอบรูปแบบโค้ดที่ตรวจหาการละเมิดแนวปฏิบัติที่ดี เช่น พารามิเตอร์ที่ไม่ได้ใช้ คำอธิบายที่ขาดหายไป และเวอร์ชัน API ที่ไม่ถูกต้อง เรียกใช้ az bicep lint --file main.bicep ในไปป์ไลน์ CI เพื่อค้นหาปัญหาก่อนการ Deploy

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า Bicepเป็นนามธรรมที่กระชับและมีการกำหนดชนิดข้อมูลอย่างเข้มงวดเหนือ ARM JSON โดยจะ Compile เป็นเทมเพลต ARM มาตรฐาน โมดูลและลูปช่วยให้เขียนโค้ดโครงสร้างพื้นฐานที่นำกลับมาใช้ใหม่ได้และสอดคล้องกับ DRY และAzure CLI สามารถ Deploy ไฟล์ Bicep ได้โดยตรง พร้อมรองรับเวิร์กโฟลว์ validate/what-if/deploy แบบเดียวกัน ต่อไปเราจะสำรวจ Terraform บน Azure

คำถามที่พบบ่อย

บทเรียน “Bicep: IaC สมัยใหม่สำหรับ Azure” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Bicep: IaC สมัยใหม่สำหรับ Azure” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Azure Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Azure Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Bicep: IaC สมัยใหม่สำหรับ Azure”

เรียนรู้ไวยากรณ์ที่กระชับของ Bicep ซึ่งเป็นนามธรรมแบบตรวจสอบชนิดข้อมูลอย่างเข้มงวดเหนือ ARM JSON แปลงเทมเพลต ARM ที่มีอยู่เป็น Bicep และปรับใช้ด้วย Azure CLI คุณปฏิบัติ Azure Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Azure Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Azure Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “Bicep: IaC สมัยใหม่สำหรับ Azure” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Azure Fundamentals นี้ได้ไหม

ได้ บทเรียน Azure Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทำงานของ Azure Resource Manager
  2. การเขียนเทมเพลต ARM
  3. Bicep: IaC สมัยใหม่สำหรับ Azure
  4. Terraform บน Azure
← กลับไปที่ Azure Fundamentals