Microsoft Azure dari Nol hingga Profesional: 100 Contoh dengan CLI, Bicep, dan Python
Microsoft Azure adalah platform cloud untuk menjalankan situs web, basis data, kontainer, pipeline data, dan layanan AI tanpa membeli server. Artikel ini membawa Anda dari masuk pertama kali hingga pengaturan yang siap produksi dalam 100 contoh. Anda akan mempelajari Azure CLI, grup sumber daya dan tag, infrastruktur sebagai kode dengan Bicep, identitas dengan managed identity dan RBAC, mesin virtual, App Service, kontainer dan Kubernetes, penyimpanan dengan SAS dan aturan siklus hidup, SQL dan Cosmos DB, Functions tanpa server, jaringan virtual dan private endpoint, Service Bus dan Event Hubs, pemantauan dengan Log Analytics dan Application Insights, Key Vault, serta pengendalian biaya. Catatan kejujuran: perintah cloud dan contoh SDK tidak dijalankan karena membutuhkan langganan Azure. Contoh yang bertanda dapat dijalankan telah dieksekusi di komputer ini, dan keluaran nyatanya ditampilkan setelah kode.
Yang Anda butuhkan
Akun Azure dengan langganan (uji coba gratis cukup untuk sebagian besar contoh), Azure CLI, Python 3.10 atau lebih baru, dan editor kode seperti Visual Studio Code dengan ekstensi Bicep. Gunakan langganan sandbox untuk belajar dan jangan pernah menempelkan rahasia asli ke perintah atau kode. Beberapa sumber daya dikenai biaya, jadi hapus grup sumber daya latihan saat selesai.
Cara memakai contoh
Contoh bash memakai Azure CLI, dan contoh Bicep memakai Azure CLI atau VS Code. Contoh Python yang tidak membutuhkan akun Azure dijalankan dengan python dan menampilkan keluaran nyatanya. Contoh yang memanggil Azure membutuhkan langganan sebelum bisa berfungsi.
Topik 1: Memulai dengan Azure
Azure tersusun atas langganan, grup sumber daya, dan sumber daya. Pelajari cara masuk, memeriksa di mana perintah Anda akan berjalan, dan memakai nama yang mudah ditemukan dan dihitung biayanya.
Azure CLI dan masuk
Azure CLI adalah satu alat untuk setiap layanan Azure. Pasang, jalankan az login, dan periksa dengan az account show. Perintah bekerja pada langganan yang sedang dipilih, jadi pastikan langganannya sebelum membuat atau menghapus apa pun.
Wilayah dan penamaan
Setiap sumber daya berada di satu wilayah, jadi pilih wilayah yang paling dekat dengan pengguna dan pastikan layanan yang Anda butuhkan tersedia di sana. Nama akun penyimpanan ketat: 3 sampai 24 huruf kecil dan angka, dan harus unik di seluruh Azure.
Konvensi penamaan
Pola seperti rg-app-env-region-01 menjaga nama tetap konsisten, sehingga orang mudah menemukan sumber daya dan memahami biayanya. Bangun nama dengan fungsi kecil dan pakai ulang di setiap skrip.
Ilustrasi
Contoh 1: Pasang Azure CLI dan masuk
Siapkan alat baris perintah dan masuk ke akun Anda.
winget install -e --id Microsoft.AzureCLI
az --version
az login
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 2: Periksa langganan yang aktif
Pastikan langganan mana yang akan diubah perintah Anda.
az account show --output table
az account list --query "[].{name:name, id:id, default:isDefault}" --output table
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 3: Buat grup sumber daya
Wadah untuk sumber daya terkait di satu wilayah.
az group create --name rg-learn-dev --location southeastasia
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 4: Daftar wilayah Azure
Temukan wilayah tempat Anda bisa menerapkan sumber daya.
az account list-locations --query "[?metadata.regionCategory=='Recommended'].name" --output tsv
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 5: Validasi nama akun penyimpanan
Nama harus 3 sampai 24 huruf kecil dan angka.
import re
def valid_storage_name(name):
return re.fullmatch(r"[a-z0-9]{3,24}", name) is not None
for candidate in ("stlearndev01", "Store-1", "ab", "a" * 25):
print(repr(candidate), valid_storage_name(candidate))
Keluaran:
'stlearndev01' True
'Store-1' False
'ab' False
'aaaaaaaaaaaaaaaaaaaaaaaaa' False
Contoh 6: Bangun nama sumber daya dari konvensi
Nama yang konsisten memudahkan pencarian dan penagihan.
def resource_name(kind, app, env, region, index=1):
return f"{kind}-{app}-{env}-{region}-{index:02d}"
print(resource_name("rg", "shop", "dev", "sea"))
print(resource_name("app", "shop", "prod", "sea", 3))
Keluaran:
rg-shop-dev-sea-01
app-shop-prod-sea-03
Topik 2: Grup sumber daya, tag, dan keluaran CLI
Grup sumber daya menampung sumber daya satu aplikasi atau satu lingkungan. Tag mencatat pemilik dan biaya, dan CLI dapat menyaring serta memformat keluarannya untuk orang atau skrip.
Grup sumber daya dan penghapusan
Kumpulkan sumber daya yang terkait dalam satu grup agar bisa dikelola dan dihapus bersama. Menghapus grup akan menghapus semua isinya, jadi gunakan --no-wait hanya jika Anda yakin, dan jangan pernah menghapus grup yang tidak Anda buat.
Tag untuk kepemilikan dan biaya
Tag berupa pasangan kunci dan nilai seperti owner dan costcenter. Tambahkan saat membuat sumber daya dan cari yang belum diberi tag dengan skrip. Laporan biaya dapat mengelompokkan pengeluaran berdasarkan tag.
Keluaran, kueri, dan nilai default
Gunakan --output table untuk orang dan json untuk skrip. --query memakai JMESPath untuk menyaring kolom. Atur grup dan wilayah default dengan az configure agar tidak perlu diulang.
Contoh 7: Beri tag pada grup sumber daya
Tag mencatat pemilik, pusat biaya, dan lingkungan.
az group update --name rg-learn-dev \
--tags owner=team-a costcenter=1001 environment=dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 8: Periksa tag yang wajib
Temukan sumber daya yang tidak punya tag yang dibutuhkan tim.
REQUIRED = {"owner", "costcenter", "environment"}
def missing_tags(tags):
return sorted(REQUIRED - set(tags))
print(missing_tags({"owner": "team-a", "environment": "dev"}))
print(missing_tags({"owner": "x", "costcenter": "1", "environment": "prod"}))
Keluaran:
['costcenter']
[]
Contoh 9: Hapus grup sumber daya tanpa menunggu
Hapus seluruh grup sumber daya dengan satu perintah.
az group delete --name rg-learn-test --yes --no-wait
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 10: Pilih wilayah terdekat berdasarkan latensi
Pilih wilayah yang paling cepat merespons pengguna.
latency_ms = {"southeastasia": 42, "japaneast": 71, "eastus": 210, "westeurope": 185}
best = min(latency_ms, key=latency_ms.get)
print("closest region:", best, latency_ms[best], "ms")
Keluaran:
closest region: southeastasia 42 ms
Contoh 11: Saring keluaran dengan kueri JMESPath
Tampilkan hanya kolom dan baris yang Anda perlukan.
az vm list \
--query "[?powerState=='VM running'].{name:name, rg:resourceGroup}" \
--output table
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 12: Pilih format keluaran
Tabel, JSON, atau YAML untuk manusia atau skrip.
az group list --output table
az group list --output json
az group list --output yaml
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 13: Perulangan sumber daya dalam skrip
Jalankan satu perintah untuk setiap grup sumber daya.
for rg in $(az group list --query "[].name" -o tsv); do
echo "resource group: $rg"
done
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 14: Atur grup dan wilayah default
Tidak perlu mengetik opsi yang sama di setiap perintah.
az configure --defaults group=rg-learn-dev location=southeastasia
az configure --list-defaults
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 3: Skrip dan otomatisasi
Pekerjaan yang berulang sebaiknya ditulis dalam skrip. Perulangan, percobaan ulang, dan penguraian JSON mengubah perintah sekali pakai menjadi otomatisasi andal yang bisa dijalankan pipeline.
Perulangan pada sumber daya
Perulangan shell menjalankan satu perintah untuk setiap sumber daya dalam daftar. Jaga daftar tetap kecil dan periksa hasilnya sebelum mengubah apa pun.
Mengurai keluaran JSON
Minta CLI menghasilkan JSON lalu urai dengan program, daripada membaca teks. Kelompokkan sumber daya berdasarkan jenisnya untuk membuat ringkasan yang mudah dibaca.
Percobaan ulang dan backoff
Azure API membatasi klien yang terlalu sering memanggil. Coba lagi dengan jeda yang makin lama, sehingga skrip bisa pulih tanpa membanjiri layanan.
Contoh 15: Urai keluaran JSON dari CLI
Ubah daftar sumber daya menjadi ringkasan.
import json
sample = """[{"name": "vm-web-01", "type": "Microsoft.Compute/virtualMachines", "location": "southeastasia"},
{"name": "stlearn01", "type": "Microsoft.Storage/storageAccounts", "location": "southeastasia"}]"""
resources = json.loads(sample)
by_type = {}
for r in resources:
by_type.setdefault(r["type"].split("/")[-1], []).append(r["name"])
for kind, names in sorted(by_type.items()):
print(kind, names)
Keluaran:
storageAccounts ['stlearn01']
virtualMachines ['vm-web-01']
Contoh 16: Coba ulang panggilan dengan backoff
Tunggu lebih lama setelah setiap permintaan yang dibatasi.
import time
def call_with_retry(fn, attempts=4, base_delay=0.05):
for n in range(attempts):
try:
return fn()
except ConnectionError as e:
if n == attempts - 1:
raise
delay = base_delay * (2 ** n)
print(f"attempt {n + 1} failed ({e}); retrying in {delay:.2f}s")
time.sleep(delay)
state = {"calls": 0}
def flaky_list():
state["calls"] += 1
if state["calls"] < 3:
raise ConnectionError("throttled")
return ["rg-learn-dev"]
print(call_with_retry(flaky_list))
Keluaran:
attempt 1 failed (throttled); retrying in 0.05s
attempt 2 failed (throttled); retrying in 0.10s
['rg-learn-dev']
Contoh 17: Periksa versi CLI dan ekstensi
Jaga alat dan ekstensinya tetap mutakhir.
az version
az extension list --output table
az extension add --name containerapp --upgrade
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 18: Buat service principal dengan aman
Identitas aplikasi untuk otomatisasi dengan cakupan sekecil mungkin.
# Store the output securely: it contains a password. Never commit it to Git.
az ad sp create-for-rbac --name sp-learn-deploy --role Contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 4: Infrastruktur sebagai kode dengan Bicep
Bicep mendeskripsikan sumber daya Azure sebagai kode. Templat dapat ditinjau, diberi versi, dan diterapkan dengan cara yang sama setiap kali, yang lebih aman daripada mengklik di portal.
Sumber daya, parameter, dan keluaran
Deklarasi sumber daya menyebut jenis dan versi API, lalu mengatur propertinya. Parameter membuat templat dapat dipakai ulang, dan @secure mencegah kata sandi masuk ke log. Keluaran mengembalikan nilai seperti ID ke pemanggil.
Modul, kondisi, dan perulangan
Modul memecah templat besar menjadi berkas yang dapat dipakai ulang. Kondisi membuat sumber daya hanya jika benar, misalnya di produksi. Perulangan membuat beberapa sumber daya dari satu daftar.
Penerapan yang aman
Gunakan az deployment group what-if untuk melihat pratinjau perubahan sebelum membuat sumber daya. Nama yang dibuat dengan uniqueString menghindari bentrokan antarlingkungan dalam satu langganan yang sama.
Contoh 19: Akun penyimpanan Bicep minimal
Deskripsikan akun penyimpanan sebagai kode.
param location string = resourceGroup().location
param storageName string
resource storage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
minimumTlsVersion: 'TLS1_2'
allowBlobPublicAccess: false
}
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 20: Parameter, keluaran, dan nilai rahasia
Gunakan ulang templat dan jangan simpan kata sandi di berkas.
@minLength(3)
@maxLength(24)
param storageName string
@allowed([
'dev'
'test'
'prod'
])
param environment string = 'dev'
@secure()
param adminPassword string
output storageId string = storage.id
resource storage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageName
location: resourceGroup().location
sku: { name: environment == 'prod' ? 'Standard_GRS' : 'Standard_LRS' }
kind: 'StorageV2'
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 21: Terapkan modul dari main.bicep
Pecah templat besar menjadi modul yang bisa dipakai ulang.
// main.bicep
targetScope = 'resourceGroup'
module network './modules/network.bicep' = {
name: 'networkDeploy'
params: {
prefix: 'shop-dev'
}
}
output vnetId string = network.outputs.vnetId
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 22: Sumber daya bersyarat
Buat sumber daya hanya di produksi.
param environment string
resource logs 'Microsoft.OperationalInsights/workspaces@2022-10-01' = if (environment == 'prod') {
name: 'log-shop-prod'
location: resourceGroup().location
properties: {
retentionInDays: 90
}
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 23: Perulangan kontainer di Bicep
Buat beberapa kontainer blob dari satu daftar.
param containerNames array = [
'uploads'
'exports'
'backups'
]
resource storage 'Microsoft.Storage/storageAccounts@2023-05-01' existing = {
name: 'stlearndev01'
}
resource containers 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-05-01' = [for name in containerNames: {
name: '${storage.name}/default/${name}'
}]
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 24: Nama unik dengan uniqueString
Hasilkan nama yang tidak bentrok di dalam langganan.
param prefix string = 'shop'
var uniqueSuffix = uniqueString(resourceGroup().id)
var storageName = toLower('st${prefix}${uniqueSuffix}')
output generatedName string = storageName
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 25: Terapkan berkas Bicep
Buat atau perbarui sumber daya dari templat.
az deployment group create \
--resource-group rg-learn-dev \
--template-file main.bicep \
--parameters storageName=stlearndev01 environment=dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 26: Pratinjau perubahan dengan what-if
Lihat dulu apa yang akan ditambah, diubah, atau dihapus.
az deployment group what-if \
--resource-group rg-learn-dev \
--template-file main.bicep \
--parameters storageName=stlearndev01
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 5: Identitas dan kontrol akses
Keamanan dimulai dari menentukan siapa boleh melakukan apa. Managed identity memberi aplikasi kredensial tanpa kata sandi, dan kontrol akses berbasis peran hanya memberi setiap identitas izin yang ia butuhkan.
Managed identity
Managed identity adalah akun yang dikelola Azure untuk aplikasi Anda, sehingga aplikasi mendapatkan token tanpa menyimpan rahasia. Gunakan identitas yang ditetapkan pengguna saat beberapa sumber daya berbagi satu identitas.
RBAC dan hak akses minimum
Penetapan peran menghubungkan identitas ke peran pada suatu cakupan, misalnya satu akun penyimpanan. Pilih peran bawaan yang sesuai dengan pekerjaan, dan buat peran kustom hanya jika tidak ada yang cocok.
Service principal dan token
Service principal adalah identitas untuk otomatisasi. Kata sandinya adalah rahasia, jadi simpan di brankas pipeline. Token adalah string yang ditandatangani dan memiliki waktu kedaluwarsa, yang bisa dibaca dari payload-nya.
Contoh 27: Identitas terkelola yang ditetapkan pengguna
Identitas yang dipakai aplikasi tanpa menyimpan kata sandi.
param location string = resourceGroup().location
resource appIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'id-shop-dev'
location: location
}
output principalId string = appIdentity.properties.principalId
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 28: Berikan akses baca dengan RBAC
Beri identitas hanya peran yang dibutuhkannya.
PRINCIPAL_ID=$(az identity show --name id-shop-dev --resource-group rg-learn-dev --query principalId -o tsv)
az role assignment create \
--assignee-object-id "$PRINCIPAL_ID" \
--assignee-principal-type ServicePrincipal \
--role "Storage Blob Data Reader" \
--scope /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev/providers/Microsoft.Storage/storageAccounts/stlearndev01
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 29: Masuk pipeline dengan service principal
Otomatisasi masuk menggunakan rahasia dari pipeline.
az login --service-principal \
--username "$AZURE_CLIENT_ID" \
--password "$AZURE_CLIENT_SECRET" \
--tenant "$AZURE_TENANT_ID"
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 30: Periksa penugasan peran
Tinjau siapa yang boleh melakukan apa pada sumber daya.
assignments = [
{"principal": "id-shop-dev", "role": "Storage Blob Data Reader", "scope": "stlearndev01"},
{"principal": "sp-learn-deploy", "role": "Contributor", "scope": "rg-learn-dev"},
{"principal": "id-shop-dev", "role": "Key Vault Secrets User", "scope": "kv-shop-dev"},
]
def roles_for(principal):
return sorted(a["role"] for a in assignments if a["principal"] == principal)
print(roles_for("id-shop-dev"))
print(roles_for("nobody"))
Keluaran:
['Key Vault Secrets User', 'Storage Blob Data Reader']
[]
Contoh 31: Masuk di VM dengan identitas terkelolanya
VM mendapatkan token tanpa kata sandi.
az login --identity
az account show --query "user.assignedIdentityInfo" -o tsv
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 32: Baca waktu kedaluwarsa token JWT
Token membawa waktu kedaluwarsa di payload-nya.
import base64
import json
def jwt_payload(token):
part = token.split(".")[1]
part += "=" * (-len(part) % 4)
return json.loads(base64.urlsafe_b64decode(part))
payload = {"aud": "https://management.azure.com/", "exp": 1767225600, "upn": "[email protected]"}
raw = base64.urlsafe_b64encode(json.dumps(payload).encode()).decode().rstrip("=")
token = f"header.{raw}.signature"
claims = jwt_payload(token)
print("audience:", claims["aud"])
print("expires at unix time:", claims["exp"])
Keluaran:
audience: https://management.azure.com/
expires at unix time: 1767225600
Contoh 33: Peran kustom dengan hak minimum
Izinkan satu aksi pada satu cakupan saja.
{
"Name": "Blob Uploader",
"IsCustom": true,
"Description": "Can upload blobs to one storage account only.",
"Actions": [],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write"
],
"AssignableScopes": [
"/subscriptions/<subscription-id>/resourceGroups/rg-learn-dev"
]
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 34: Buat peran kustom
Daftarkan definisi peran di langganan.
az role definition create --role-definition @blob-uploader.json
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 6: Komputasi: mesin virtual dan App Service
Azure menjalankan kode Anda di mesin virtual atau platform terkelola. App Service menghilangkan sebagian besar pekerjaan server, sedangkan mesin virtual memberi kendali penuh atas sistem operasi.
Mesin virtual dan scale set
Mesin virtual memiliki ukuran, image, disk, dan antarmuka jaringan. Scale set menjalankan mesin virtual yang identik dan menambah atau mengurangi jumlahnya sesuai permintaan. Matikan mesin pengembangan di malam hari untuk menghemat biaya.
Paket App Service dan aplikasi web
Paket menentukan mesin dan harganya, dan aplikasi web berjalan di atasnya. Terapkan kode sebagai berkas zip, atur konfigurasi lewat pengaturan aplikasi, dan gunakan slot deployment untuk menguji sebelum pengguna melihat perubahan.
Keputusan penskalaan otomatis
Aturan penskalaan membandingkan metrik, misalnya rata-rata CPU, dengan ambang batas, lalu menambah atau menghapus instans. Masa tenang mencegah sistem berpindah-pindah ukuran.
Contoh 35: Buat VM Linux
Jalankan mesin virtual dengan ukuran dan image yang dipilih.
az vm create \
--resource-group rg-learn-dev \
--name vm-web-01 \
--image Ubuntu2204 \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 36: Daftar ukuran VM dan disk
Periksa kapasitas dan penyimpanan sebelum mengubah ukuran.
az vm list-sizes --location southeastasia --output table | head -n 10
az vm disk list --resource-group rg-learn-dev --output table
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 37: Virtual machine scale set
Jalankan VM identik yang bertambah dan berkurang bersama-sama.
resource vmss 'Microsoft.Compute/virtualMachineScaleSets@2023-09-01' = {
name: 'vmss-web'
location: resourceGroup().location
sku: {
name: 'Standard_B2s'
capacity: 2
}
properties: {
upgradePolicy: { mode: 'Rolling' }
// osProfile, networkProfile and storageProfile go here
}
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 38: Mati otomatis untuk VM pengembangan
Matikan mesin uji setiap malam untuk menghemat biaya.
az vm auto-shutdown --resource-group rg-learn-dev --name vm-web-01 --time 2100
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 39: Buat paket App Service dan aplikasi web
Jalankan aplikasi web di server Linux terkelola.
az appservice plan create --name plan-shop-dev --resource-group rg-learn-dev --sku B1 --is-linux
az webapp create --name app-shop-dev-01 --resource-group rg-learn-dev \
--plan plan-shop-dev --runtime "PYTHON:3.12"
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 40: Terapkan kode dari berkas zip
Unggah paket aplikasi ke aplikasi web.
zip -r app.zip . -x "*.git*"
az webapp deploy --resource-group rg-learn-dev --name app-shop-dev-01 \
--src-path app.zip --type zip
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 41: Pengaturan aplikasi dan slot staging
Uji versi baru sebelum sampai ke pengguna.
az webapp config appsettings set --resource-group rg-learn-dev --name app-shop-dev-01 \
--settings ENVIRONMENT=dev LOG_LEVEL=info
az webapp deployment slot create --resource-group rg-learn-dev --name app-shop-dev-01 --slot staging
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 42: Keputusan penskalaan dari CPU
Tambah instans saat sibuk dan kurangi saat sepi.
def scale_decision(cpu_samples, instances, minimum=1, maximum=5):
average = sum(cpu_samples) / len(cpu_samples)
if average > 75 and instances < maximum:
return instances + 1, f"scale out (avg CPU {average:.0f}%)"
if average < 25 and instances > minimum:
return instances - 1, f"scale in (avg CPU {average:.0f}%)"
return instances, f"hold (avg CPU {average:.0f}%)"
print(scale_decision([82, 90, 78], 2))
print(scale_decision([10, 12, 15], 2))
print(scale_decision([40, 45, 50], 2))
Keluaran:
(3, 'scale out (avg CPU 83%)')
(1, 'scale in (avg CPU 12%)')
(2, 'hold (avg CPU 45%)')
Topik 7: Kontainer: registry, Container Apps, dan Kubernetes
Kontainer mengemas aplikasi bersama semua yang dibutuhkannya. Azure menyimpan image di registry dan menjalankannya di Container Apps atau Kubernetes, tergantung seberapa besar kendali yang Anda butuhkan.
Azure Container Registry
Registry adalah tempat penyimpanan image yang privat. Bangun image di Azure dengan az acr build agar prosesnya tidak bergantung pada komputer Anda, lalu dorong hasilnya ke registry.
Container Apps dan AKS
Container Apps menjalankan kontainer tanpa mengelola klaster dan dapat diskalakan hingga nol. AKS adalah Kubernetes terkelola untuk sistem yang lebih besar. AKS bisa menarik image dari registry Anda memakai managed identity-nya, sehingga tidak perlu kata sandi.
Tag dan pembersihan
Beri tag pada setiap image dengan versi, tanggal, dan commit agar Anda bisa kembali ke versi sebelumnya. Jadwalkan tugas purge untuk menghapus image lama yang tidak ber-tag agar biaya penyimpanan terkendali.
Contoh 43: Buat container registry
Tempat pribadi untuk menyimpan image kontainer.
az acr create --resource-group rg-learn-dev --name acrshopdev01 --sku Basic
az acr login --name acrshopdev01
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 44: Bangun dan unggah image
Bangun image di Azure dan simpan di registry.
az acr build --registry acrshopdev01 --image shop-api:1.0.0 .
az acr repository show-tags --name acrshopdev01 --repository shop-api -o table
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 45: Jalankan aplikasi kontainer
Jalankan kontainer tanpa mengelola server.
az containerapp env create --name cae-shop-dev --resource-group rg-learn-dev --location southeastasia
az containerapp create --name ca-shop-api --resource-group rg-learn-dev \
--environment cae-shop-dev \
--image acrshopdev01.azurecr.io/shop-api:1.0.0 \
--target-port 8080 --ingress external --min-replicas 0 --max-replicas 3
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 46: Buat klaster AKS
Klaster Kubernetes terkelola yang mengambil image dari registry Anda.
az aks create \
--resource-group rg-learn-dev \
--name aks-shop-dev \
--node-count 2 \
--enable-managed-identity \
--attach-acr acrshopdev01 \
--generate-ssh-keys
az aks get-credentials --resource-group rg-learn-dev --name aks-shop-dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 47: Terapkan ke Kubernetes
Terapkan manifes dan tunggu rollout selesai.
kubectl apply -f deployment.yaml
kubectl rollout status deployment/shop-api
kubectl get pods -l app=shop-api
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 48: Manifes deployment Kubernetes
Deskripsikan pod, jumlah replika, dan sumber dayanya.
apiVersion: apps/v1
kind: Deployment
metadata:
name: shop-api
spec:
replicas: 2
selector:
matchLabels:
app: shop-api
template:
metadata:
labels:
app: shop-api
spec:
containers:
- name: shop-api
image: acrshopdev01.azurecr.io/shop-api:1.0.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 100m
memory: 128Mi
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 49: Hasilkan tag image
Beri tag setiap image dengan versi, tanggal, dan commit.
from datetime import date
def image_tag(version, commit, when):
short = commit[:7]
return f"{version}-{when.strftime('%Y%m%d')}-{short}"
print(image_tag("1.4.2", "9f3c1ab7e54d0a12", date(2026, 1, 15)))
Keluaran:
1.4.2-20260115-9f3c1ab
Contoh 50: Bersihkan image lama dengan tugas
Hapus image tanpa tag sesuai jadwal untuk menghemat penyimpanan.
az acr task create --name purge-old-images --registry acrshopdev01 \
--cmd "acr purge --filter 'shop-api:.*' --ago 30d --untagged" \
--schedule "0 1 * * *" --context /dev/null
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 8: Penyimpanan: blob, antrean, dan kontrol akses
Akun penyimpanan menyimpan berkas, pesan, dan tabel. Amankan akses dengan Entra ID, gunakan tautan SAS berumur pendek saat harus membagikan, dan biarkan aturan siklus hidup memindahkan data lama ke tingkat yang lebih murah.
Blob dan penamaan path
Kontainer blob menyimpan berkas. Gunakan path yang memuat perangkat dan tanggal agar data satu hari bisa dicantumkan atau dihapus dengan cepat. Biarkan akses publik mati kecuali konten memang harus publik.
Shared access signature
Tautan SAS memberi akses terbatas dalam waktu singkat. Berikan hanya izin yang diperlukan, misalnya baca, dan pilih masa berlaku terpendek yang masih berfungsi.
Aturan siklus hidup dan antrean
Aturan siklus hidup memindahkan blob ke tingkat cool atau archive dan menghapusnya setelah sejumlah hari tertentu. Antrean menyimpan pesan untuk pekerja latar belakang, sehingga tugas yang lambat tidak menghambat permintaan web.
Contoh 51: Buat akun penyimpanan
Default aman: TLS 1.2 dan tanpa akses blob publik.
az storage account create \
--name stlearndev01 \
--resource-group rg-learn-dev \
--location southeastasia \
--sku Standard_LRS \
--kind StorageV2 \
--min-tls-version TLS1_2 \
--allow-blob-public-access false
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 52: Path blob dengan partisi tanggal
Atur unggahan per perangkat dan tanggal agar kueri tetap cepat.
from datetime import datetime
def blob_path(device, when, filename):
return f"telemetry/{device}/{when:%Y/%m/%d}/{when:%H%M%S}-{filename}"
print(blob_path("sensor-7", datetime(2026, 1, 15, 8, 30, 5), "batch.json"))
Keluaran:
telemetry/sensor-7/2026/01/15/083005-batch.json
Contoh 53: Unggah blob
Salin berkas ke kontainer dengan CLI.
az storage container create --name uploads --account-name stlearndev01 --auth-mode login
az storage blob upload --account-name stlearndev01 --container-name uploads \
--name reports/2026-01.csv --file ./report.csv --auth-mode login
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 54: Unggah dari Python dengan Entra ID
Gunakan identitas Azure, bukan kunci akun.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
client = BlobServiceClient(
account_url="https://stlearndev01.blob.core.windows.net",
credential=DefaultAzureCredential(),
)
blob = client.get_blob_client(container="uploads", blob="reports/2026-01.csv")
with open("report.csv", "rb") as data:
blob.upload_blob(data, overwrite=True)
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 55: Buat SAS berumur pendek
Tautan yang kedaluwarsa dan hanya memberi akses baca.
EXPIRY=$(date -u -d "+1 hour" '+%Y-%m-%dT%H:%MZ')
az storage blob generate-sas --account-name stlearndev01 --container-name uploads \
--name reports/2026-01.csv --permissions r --expiry "$EXPIRY" --auth-mode login --as-user --output tsv
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 56: Jelaskan izin SAS
Jelaskan apa yang diizinkan shared access signature dan berapa lama.
from datetime import datetime, timedelta, timezone
def describe_sas(permissions, expiry):
names = {"r": "read", "w": "write", "d": "delete", "c": "create"}
allowed = ", ".join(names[p] for p in permissions)
left = expiry - datetime(2026, 1, 15, 8, 0, tzinfo=timezone.utc)
return f"allows {allowed} for {int(left.total_seconds() // 60)} minutes"
print(describe_sas("rw", datetime(2026, 1, 15, 9, 0, tzinfo=timezone.utc)))
Keluaran:
allows read, write for 60 minutes
Contoh 57: Aturan siklus hidup blob
Pindahkan data lama ke penyimpanan yang lebih murah lalu hapus.
{
"rules": [
{
"enabled": true,
"name": "archive-telemetry",
"type": "Lifecycle",
"definition": {
"filters": { "blobTypes": ["blockBlob"], "prefixMatch": ["telemetry/"] },
"actions": {
"baseBlob": {
"tierToCool": { "daysAfterModificationGreaterThan": 30 },
"delete": { "daysAfterModificationGreaterThan": 365 }
}
}
}
}
]
}
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 58: Penyimpanan antrean untuk pekerjaan latar belakang
Masukkan tugas ke antrean dan biarkan pekerja memprosesnya nanti.
az storage queue create --name jobs --account-name stlearndev01 --auth-mode login
az storage message put --queue-name jobs --content "resize:photo-42" \
--account-name stlearndev01 --auth-mode login
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 9: Basis data: Azure SQL dan Cosmos DB
Azure menawarkan basis data relasional terkelola dan basis data NoSQL yang didistribusikan secara global. Hubungkan dengan identitas, bukan kata sandi, dan selalu gunakan parameter dalam kueri.
Azure SQL
Azure SQL adalah basis data SQL Server terkelola. Aktifkan autentikasi Microsoft Entra ID dan private endpoint, sehingga basis data tidak memiliki kata sandi tersimpan dan tidak memiliki alamat publik.
Kueri berparameter
Kirim masukan pengguna sebagai parameter, jangan pernah menggabungkan teks ke dalam SQL. Basis data akan memperlakukan masukan sebagai data, sehingga mencegah SQL injection.
Cosmos DB dan kunci partisi
Cosmos DB menyimpan dokumen JSON dalam kontainer. Kunci partisi menentukan bagaimana data tersebar ke mesin-mesin. Kunci dengan banyak nilai berbeda, seperti ID pelanggan, menjaga beban tetap seimbang.
Contoh 59: Server dan basis data Azure SQL
Basis data relasional terkelola dengan jaringan privat.
az sql server create --name sql-shop-dev-01 --resource-group rg-learn-dev \
--location southeastasia --enable-public-network false --enable-ad-only-auth \
--external-admin-principal-type User --external-admin-name [email protected]
az sql db create --resource-group rg-learn-dev --server sql-shop-dev-01 \
--name shopdb --service-objective S0
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 60: Terhubung ke Azure SQL tanpa kata sandi
Autentikasi Entra ID, bukan kata sandi yang disimpan.
import pyodbc
conn = pyodbc.connect(
"Driver={ODBC Driver 18 for SQL Server};"
"Server=tcp:sql-shop-dev-01.database.windows.net,1433;"
"Database=shopdb;Encrypt=yes;"
"Authentication=ActiveDirectoryDefault;"
)
cursor = conn.cursor()
cursor.execute("SELECT TOP 5 name FROM sys.tables")
print([row.name for row in cursor.fetchall()])
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 61: Kueri dengan parameter
Kirim nilai sebagai parameter agar masukan tidak mengubah kueri.
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE orders (id INTEGER, customer TEXT, total REAL)")
conn.executemany("INSERT INTO orders VALUES (?, ?, ?)",
[(1, "ana", 120.0), (2, "ben", 75.5)])
customer = "ana' OR '1'='1" # hostile input stays a plain value
rows = conn.execute("SELECT id, total FROM orders WHERE customer = ?", (customer,)).fetchall()
print("matches:", rows)
conn.close()
Keluaran:
matches: []
Contoh 62: Buat kontainer Cosmos DB
Basis data terdistribusi global dengan kunci partisi.
az cosmosdb create --name cosmos-shop-dev-01 --resource-group rg-learn-dev \
--locations regionName=southeastasia failoverPriority=0
az cosmosdb sql database create --account-name cosmos-shop-dev-01 --resource-group rg-learn-dev \
--name shop
az cosmosdb sql container create --account-name cosmos-shop-dev-01 --resource-group rg-learn-dev \
--database-name shop --name orders --partition-key-path "/customerId"
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 63: Tulis item ke Cosmos DB
Simpan dokumen JSON di dalam kontainer.
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential
client = CosmosClient("https://cosmos-shop-dev-01.documents.azure.com:443/", DefaultAzureCredential())
container = client.get_database_client("shop").get_container_client("orders")
container.upsert_item({"id": "o-1001", "customerId": "ana", "total": 120.0})
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 64: Sebarkan item dengan hash kunci partisi
Kunci yang baik membagi data merata ke seluruh partisi.
import hashlib
def partition_for(key, partitions=4):
digest = hashlib.sha256(key.encode("utf-8")).hexdigest()
return int(digest, 16) % partitions
counts = [0, 0, 0, 0]
for customer in ["ana", "ben", "chai", "dao", "eve", "fon", "gus", "hana"]:
counts[partition_for(customer)] += 1
print("items per partition:", counts)
Keluaran:
items per partition: [4, 1, 1, 2]
Topik 10: Tanpa server dengan Azure Functions
Azure Functions menjalankan potongan kode kecil saat sesuatu terjadi: permintaan HTTP, pengatur waktu, atau pesan di antrean. Anda membayar per eksekusi dan tidak perlu mengelola server.
Pemicu dan binding
Pemicu memulai fungsi, misalnya permintaan HTTP atau pengatur waktu. Binding menghubungkan fungsi dengan layanan lain, misalnya menulis ke antrean, sehingga kode koneksinya lebih sedikit.
Pengatur waktu dan jadwal cron
Pemicu pengatur waktu memakai ekspresi NCRONTAB enam bidang dengan detik di depan. Ekspresi 0 */5 * * * * berjalan setiap lima menit.
Pemrosesan idempoten
Antrean bisa mengirim pesan yang sama lebih dari sekali. Catat ID yang sudah diproses dan lewati duplikatnya, sehingga menjalankan tugas dua kali tidak menagih pelanggan dua kali.
Contoh 65: Buat aplikasi fungsi
Kode tanpa server pada paket Consumption.
az storage account create --name stfuncshopdev01 --resource-group rg-learn-dev --sku Standard_LRS
az functionapp create --name func-shop-dev-01 --resource-group rg-learn-dev \
--storage-account stfuncshopdev01 --consumption-plan-location southeastasia \
--runtime python --runtime-version 3.12 --functions-version 4 --os-type Linux
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 66: Fungsi yang dipicu HTTP
Jalankan kode saat permintaan web masuk.
import azure.functions as func
app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.route(route="hello", methods=["GET"])
def hello(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "world")
return func.HttpResponse(f"Hello, {name}!", status_code=200)
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 67: Fungsi pengatur waktu dengan jadwal cron
Jalankan kode setiap lima menit tanpa server.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.timer_trigger(schedule="0 */5 * * * *", arg_name="timer", run_on_startup=False)
def every_five_minutes(timer: func.TimerRequest) -> None:
logging.info("checking sensors")
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 68: Jadwal berikutnya dari ekspresi cron
Hitung kapan jadwal akan berjalan berikutnya.
def next_minutes(expression, current_minute):
field = expression.split()[1] # minute field, for example */5
step = int(field.removeprefix("*/"))
return step - (current_minute % step) if current_minute % step else step
for minute in (0, 3, 12, 14):
print(f"at minute {minute:2d}: next run in {next_minutes('0 */5 * * * *', minute)} min")
Keluaran:
at minute 0: next run in 5 min
at minute 3: next run in 2 min
at minute 12: next run in 3 min
at minute 14: next run in 1 min
Contoh 69: Terbitkan aplikasi fungsi
Terapkan kode Python ke Azure Functions.
func azure functionapp publish func-shop-dev-01 --python
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 70: Fungsi yang dipicu antrean
Proses setiap pesan dan tulis hasilnya ke antrean lain.
import azure.functions as func
app = func.FunctionApp()
@app.queue_trigger(arg_name="msg", queue_name="jobs", connection="AzureWebJobsStorage")
@app.queue_output(arg_name="out", queue_name="done", connection="AzureWebJobsStorage")
def process(msg: func.QueueMessage, out: func.Out[str]) -> None:
out.set(f"processed:{msg.get_body().decode('utf-8')}")
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 71: Penanganan pesan yang idempoten
Proses pesan sekali saja meski tiba dua kali.
processed_ids = set()
def handle(message):
if message["id"] in processed_ids:
return "skipped duplicate"
processed_ids.add(message["id"])
return f"processed {message['id']}"
events = [{"id": "e1"}, {"id": "e2"}, {"id": "e1"}]
for event in events:
print(handle(event))
Keluaran:
processed e1
processed e2
skipped duplicate
Contoh 72: Referensi Key Vault di pengaturan aplikasi
Muat rahasia ke aplikasi tanpa menyalinnya.
az functionapp config appsettings set --name func-shop-dev-01 --resource-group rg-learn-dev \
--settings "[email protected](VaultName=kv-shop-dev;SecretName=db-password)"
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 11: Jaringan: jaringan virtual, NSG, dan private endpoint
Jaringan virtual adalah jaringan privat Anda di dalam Azure. Subnet memisahkan lapisan, aturan keamanan membatasi lalu lintas, dan private endpoint menjaga layanan tetap jauh dari internet publik.
Jaringan virtual dan subnet
Pilih rentang alamat seperti 10.10.0.0/16, lalu bagi menjadi subnet untuk web dan data. Azure mencadangkan lima alamat di setiap subnet, sehingga /24 memberi 251 alamat yang dapat dipakai.
Network security group
NSG adalah daftar aturan izin dan tolak dengan prioritas. Izinkan hanya port yang Anda butuhkan, seperti 443 untuk HTTPS, dan tolak sisanya secara default.
Private endpoint dan DNS
Private endpoint memberi layanan alamat IP privat di dalam jaringan Anda. Zona DNS privat membuat namanya ter-resolve ke alamat itu, sehingga aplikasi tidak perlu diubah kodenya.
Contoh 73: Jaringan virtual dan subnet
Jaringan privat dengan subnet terpisah untuk web dan data.
az network vnet create --name vnet-shop-dev --resource-group rg-learn-dev \
--address-prefix 10.10.0.0/16 --subnet-name snet-web --subnet-prefix 10.10.1.0/24
az network vnet subnet create --vnet-name vnet-shop-dev --resource-group rg-learn-dev \
--name snet-data --address-prefixes 10.10.2.0/24
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 74: Aturan network security group
Izinkan HTTPS saja dari internet.
az network nsg create --name nsg-web --resource-group rg-learn-dev
az network nsg rule create --nsg-name nsg-web --resource-group rg-learn-dev \
--name allow-https --priority 100 --direction Inbound --access Allow \
--protocol Tcp --destination-port-ranges 443 --source-address-prefixes Internet
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 75: Private endpoint untuk penyimpanan
Akses akun penyimpanan hanya dari dalam jaringan Anda.
az network private-endpoint create --name pe-storage --resource-group rg-learn-dev \
--vnet-name vnet-shop-dev --subnet snet-data \
--private-connection-resource-id $(az storage account show -n stlearndev01 -g rg-learn-dev --query id -o tsv) \
--group-id blob --connection-name conn-storage
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 76: Zona DNS privat
Selesaikan nama private endpoint di dalam jaringan virtual.
az network private-dns zone create --resource-group rg-learn-dev \
--name privatelink.blob.core.windows.net
az network private-dns link vnet create --resource-group rg-learn-dev \
--zone-name privatelink.blob.core.windows.net --name link-shop \
--virtual-network vnet-shop-dev --registration-enabled false
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 77: Load balancer publik
Bagi lalu lintas masuk ke beberapa mesin virtual.
az network public-ip create --name pip-lb --resource-group rg-learn-dev --sku Standard
az network lb create --name lb-shop --resource-group rg-learn-dev --sku Standard \
--public-ip-address pip-lb --backend-pool-name be-web
az network lb probe create --lb-name lb-shop --resource-group rg-learn-dev \
--name probe-https --protocol Tcp --port 443
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 78: Kalkulator ukuran subnet
Hitung alamat yang bisa dipakai dalam blok CIDR.
import ipaddress
def usable_hosts(cidr):
net = ipaddress.ip_network(cidr)
return net.num_addresses - 5 # Azure reserves 5 addresses in every subnet
for block in ("10.10.1.0/24", "10.10.2.0/27", "10.10.0.0/16"):
print(block, usable_hosts(block))
Keluaran:
10.10.1.0/24 251
10.10.2.0/27 27
10.10.0.0/16 65531
Topik 12: Pesan dan streaming: Service Bus dan Event Hubs
Layanan saling berkomunikasi lewat pesan. Service Bus untuk pesan bisnis yang andal, dan Event Hubs untuk aliran volume tinggi seperti telemetri.
Antrean Service Bus
Antrean menyimpan pesan sampai penerima menyelesaikannya. Selesaikan pesan hanya setelah Anda memprosesnya, sehingga jika terjadi crash akan dicoba ulang, bukan pesanan yang hilang. Pesan yang gagal terlalu sering dipindahkan ke antrean dead-letter.
Event Hubs dan partisi
Event hub membagi alirannya menjadi partisi yang dapat dibaca banyak pembaca secara paralel. Kirim peristiwa dalam batch, dan jaga setiap batch di bawah batas ukuran.
Memilih di antara keduanya
Gunakan Service Bus ketika setiap pesan penting dan harus diproses sesuai maksudnya. Gunakan Event Hubs ketika Anda mengumpulkan peristiwa dalam jumlah besar dan dapat memprosesnya berurutan di dalam partisi.
Contoh 79: Antrean Service Bus
Pesan andal antaraplikasi dengan dead-letter.
az servicebus namespace create --name sb-shop-dev --resource-group rg-learn-dev --location southeastasia --sku Standard
az servicebus queue create --namespace-name sb-shop-dev --resource-group rg-learn-dev \
--name orders --max-delivery-count 5 --dead-lettering-on-message-expiration true
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 80: Kirim pesan Service Bus
Masukkan pesanan ke antrean dari Python.
from azure.identity import DefaultAzureCredential
from azure.servicebus import ServiceBusClient, ServiceBusMessage
with ServiceBusClient("sb-shop-dev.servicebus.windows.net", DefaultAzureCredential()) as client:
with client.get_queue_sender("orders") as sender:
sender.send_messages(ServiceBusMessage('{"orderId": "o-1001"}'))
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 81: Terima dan selesaikan pesan
Hapus pesan hanya setelah diproses.
from azure.identity import DefaultAzureCredential
from azure.servicebus import ServiceBusClient
with ServiceBusClient("sb-shop-dev.servicebus.windows.net", DefaultAzureCredential()) as client:
with client.get_queue_receiver("orders", max_wait_time=5) as receiver:
for msg in receiver:
print(str(msg))
receiver.complete_message(msg) # removes it only after processing succeeded
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 82: Event Hubs untuk telemetri
Aliran yang menerima jutaan peristiwa per detik.
az eventhubs namespace create --name evhns-shop-dev --resource-group rg-learn-dev --location southeastasia --sku Standard
az eventhubs eventhub create --name telemetry --namespace-name evhns-shop-dev --resource-group rg-learn-dev \
--partition-count 4 --message-retention 1
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 83: Kirim batch ke Event Hubs
Kelompokkan peristiwa dalam batch agar efisien.
import json
from azure.eventhub import EventData, EventHubProducerClient
from azure.identity import DefaultAzureCredential
producer = EventHubProducerClient(
fully_qualified_namespace="evhns-shop-dev.servicebus.windows.net",
eventhub_name="telemetry",
credential=DefaultAzureCredential(),
)
with producer:
batch = producer.create_batch()
batch.add(EventData(json.dumps({"device": "sensor-7", "temp_c": 21.5})))
producer.send_batch(batch)
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 84: Bagi pesan berdasarkan batas ukuran
Pastikan setiap batch di bawah ukuran maksimum.
def make_batches(messages, limit_bytes=60):
batches, current, size = [], [], 0
for msg in messages:
n = len(msg.encode("utf-8"))
if current and size + n > limit_bytes:
batches.append(current)
current, size = [], 0
current.append(msg)
size += n
if current:
batches.append(current)
return batches
events = [f'{{"id": {i}, "temp": 21.{i}}}' for i in range(6)]
for number, batch in enumerate(make_batches(events), start=1):
print("batch", number, len(batch), "messages")
Keluaran:
batch 1 2 messages
batch 2 2 messages
batch 3 2 messages
Topik 13: Pemantauan: Log Analytics, Application Insights, dan peringatan
Anda tidak bisa memperbaiki apa yang tidak terlihat. Azure Monitor mengumpulkan log dan metrik, Log Analytics memungkinkan Anda mengkuerinya dengan KQL, dan peringatan memberi tahu tim saat ada masalah.
Log Analytics dan KQL
Workspace Log Analytics menyimpan log dari banyak sumber daya. Kusto Query Language menyaring, meringkas, dan membuat grafiknya, misalnya menghitung kegagalan per jam.
Application Insights
Application Insights melacak permintaan, dependensi, dan peristiwa kustom dari kode Anda. Gunakan untuk menemukan panggilan mana yang lambat, bukan hanya mengetahui bahwa aplikasinya lambat.
Peringatan tanpa alarm palsu
Peringatan metrik menyala saat sebuah ukuran melewati ambang batas. Syaratkan kondisi bertahan di beberapa sampel berturut-turut, sehingga satu lonjakan tidak membangunkan insinyur yang sedang siaga.
Contoh 85: Workspace Log Analytics
Tempat terpusat untuk mengkueri log dari setiap sumber daya.
az monitor log-analytics workspace create --resource-group rg-learn-dev \
--workspace-name log-shop-dev --location southeastasia --retention-time 30
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 86: Kueri KQL untuk kegagalan
Hitung permintaan gagal per jam dengan Kusto Query Language.
AppRequests
| where TimeGenerated > ago(24h)
| where Success == false
| summarize failures = count() by bin(TimeGenerated, 1h), ResultCode
| order by TimeGenerated desc
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 87: Pengaturan diagnostik
Kirim log dan metrik platform ke workspace.
az monitor diagnostic-settings create \
--name diag-storage \
--resource /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev/providers/Microsoft.Storage/storageAccounts/stlearndev01 \
--workspace log-shop-dev \
--logs '[{"category":"StorageRead","enabled":true}]' \
--metrics '[{"category":"Transaction","enabled":true}]'
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 88: Telemetri Application Insights
Lacak permintaan dan peristiwa kustom dari kode Python.
from opentelemetry import trace
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(connection_string="InstrumentationKey=<key>;IngestionEndpoint=https://southeastasia-1.in.applicationinsights.azure.com/")
tracer = trace.get_tracer("shop")
with tracer.start_as_current_span("checkout") as span:
span.set_attribute("order.total", 120.0)
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 89: Peringatan metrik saat respons lambat
Beri tahu tim siaga saat API melambat.
az monitor metrics alert create --name alert-slow-api --resource-group rg-learn-dev \
--scopes /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev/providers/Microsoft.Web/sites/app-shop-dev-01 \
--condition "avg HttpResponseTime > 2" --window-size 5m --evaluation-frequency 1m \
--action /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev/providers/microsoft.insights/actionGroups/ag-oncall
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 90: Peringatan setelah beberapa sampel buruk
Hindari alarm palsu dengan mensyaratkan beberapa pembacaan buruk berturut-turut.
def should_alert(samples, threshold=2.0, required=3):
streak = 0
for value in samples:
streak = streak + 1 if value > threshold else 0
if streak >= required:
return True
return False
print(should_alert([1.0, 2.5, 2.7, 2.9, 1.1]))
print(should_alert([2.5, 1.0, 2.5, 2.5, 1.0]))
Keluaran:
True
False
Topik 14: Keamanan: Key Vault, rahasia, dan perlindungan ancaman
Rahasia harus berada di brankas, bukan di kode atau log. Key Vault menyimpannya dengan kontrol akses, dan Defender for Cloud memantau sumber daya Anda dari ancaman.
Key Vault dan akses
Key Vault menyimpan rahasia, kunci, dan sertifikat. Gunakan akses berbasis peran, beri setiap aplikasi akses baca hanya ke rahasia yang dibutuhkannya, dan catat setiap akses.
Membaca rahasia dengan aman
DefaultAzureCredential memakai managed identity di Azure dan login Anda sendiri di komputer, sehingga kode yang sama berjalan di kedua tempat. Jangan pernah mencetak rahasia atau menuliskannya ke log.
Defender for Cloud
Defender for Cloud menilai postur keamanan Anda dan menyalakan perlindungan ancaman untuk mesin virtual, penyimpanan, dan Key Vault. Tinjau rekomendasinya secara berkala.
Contoh 91: Key Vault dan rahasia
Simpan kata sandi di brankas dengan kontrol akses.
az keyvault create --name kv-shop-dev --resource-group rg-learn-dev --location southeastasia \
--enable-rbac-authorization true
az keyvault secret set --vault-name kv-shop-dev --name db-password --value "$DB_PASSWORD"
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 92: Baca rahasia dari Python
Gunakan DefaultAzureCredential untuk mengambil rahasia.
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
client = SecretClient(vault_url="https://kv-shop-dev.vault.azure.net/", credential=DefaultAzureCredential())
password = client.get_secret("db-password").value
# use the value, never print it
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 93: Sensor rahasia dari log
Sembunyikan kata sandi dan kunci sebelum ada yang ditulis.
import re
def redact(text):
text = re.sub(r"(password|secret|token)=\S+", r"\1=***", text, flags=re.IGNORECASE)
text = re.sub(r"(AccountKey=)[^;\s]+", r"\1***", text)
return text
print(redact("connecting with password=hunter2 to host"))
print(redact("AccountKey=abc123==;EndpointSuffix=core.windows.net"))
Keluaran:
connecting with password=*** to host
AccountKey=***;EndpointSuffix=core.windows.net
Contoh 94: Paket Defender for Cloud
Aktifkan perlindungan ancaman untuk VM, penyimpanan, dan Key Vault.
az security pricing create --name VirtualMachines --tier Standard
az security pricing create --name StorageAccounts --tier Standard
az security pricing create --name KeyVaults --tier Standard
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Topik 15: DevOps, biaya, dan tata kelola
Sistem produksi membutuhkan pipeline yang bisa diulang, batas pengeluaran, dan aturan yang harus dipatuhi setiap sumber daya baru. Praktik ini menjaga Azure tetap andal dan terjangkau seiring tim berkembang.
Pipeline dan rollback
Pipeline menguji setiap perubahan dan menerapkan dari cabang main. Pantau tingkat error dan latensi setelah rilis, dan kembali ke versi sebelumnya saat melewati batas Anda.
Anggaran dan perkiraan biaya
Anggaran menetapkan batas bulanan dan mengirim peringatan sebelum Anda mencapainya. Perkirakan biaya dari jam dan penyimpanan, lalu bandingkan dengan tagihan sebenarnya, dan ekspor laporan harian.
Azure Policy
Policy memeriksa sumber daya terhadap aturan, misalnya mewajibkan tag pemilik. Efek deny menghentikan pembuatan sumber daya yang tidak sesuai, sehingga standar yang disepakati ditegakkan.
Contoh 95: Pipeline Azure DevOps
Uji di setiap push dan terapkan aplikasi web dari main.
trigger:
branches:
include: [main]
pool:
vmImage: ubuntu-latest
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
- script: pip install -r requirements.txt && pytest
displayName: Test
- task: AzureWebApp@1
inputs:
azureSubscription: sc-shop-dev
appName: app-shop-dev-01
package: '$(System.DefaultWorkingDirectory)'
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 96: Anggaran bulanan
Atur batas pengeluaran dan beri peringatan sebelum tercapai.
az consumption budget create --budget-name budget-dev --amount 200 \
--category Cost --time-grain Monthly \
--start-date 2026-01-01 --end-date 2026-12-31 \
--resource-group rg-learn-dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 97: Perkirakan tagihan bulanan
Ubah jam pemakaian dan penyimpanan menjadi perkiraan biaya.
def monthly_cost(hours_per_day, hourly_rate, storage_gb, storage_rate, days=30):
compute = hours_per_day * days * hourly_rate
storage = storage_gb * storage_rate
return round(compute + storage, 2)
print(monthly_cost(10, 0.05, 120, 0.02))
print(monthly_cost(24, 0.05, 120, 0.02))
Keluaran:
17.4
38.4
Contoh 98: Ekspor data biaya
Kirim laporan biaya harian ke akun penyimpanan.
az costmanagement export create --name daily-costs \
--scope "/subscriptions/<subscription-id>/resourceGroups/rg-learn-dev" \
--storage-account-id /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev/providers/Microsoft.Storage/storageAccounts/stlearndev01 \
--storage-container exports --timeframe MonthToDate --recurrence Daily \
--recurrence-period from=2026-01-01T00:00:00Z to=2026-12-31T00:00:00Z
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Contoh 99: Putuskan rollback
Gunakan tingkat error dan latensi untuk memutuskan rollback.
def should_roll_back(error_rate, previous_error_rate, latency_ms, latency_limit=800):
if error_rate > 0.05:
return True, "error rate above 5 percent"
if error_rate > previous_error_rate * 2 and error_rate > 0.01:
return True, "error rate doubled since the last release"
if latency_ms > latency_limit:
return True, "latency above limit"
return False, "healthy"
print(should_roll_back(0.02, 0.01, 300))
print(should_roll_back(0.07, 0.01, 300))
Keluaran:
(False, 'healthy')
(True, 'error rate above 5 percent')
Contoh 100: Wajibkan tag dengan Azure Policy
Tolak sumber daya baru yang tidak punya tag pemilik.
az policy definition create --name require-owner-tag --display-name "Require owner tag" \
--rules '{"if":{"field":"tags[owner]","exists":"false"},"then":{"effect":"deny"}}' --mode Indexed
az policy assignment create --name require-owner --policy require-owner-tag \
--scope /subscriptions/<subscription-id>/resourceGroups/rg-learn-dev
*Contoh ini tidak dijalankan di sini karena membutuhkan langganan Azure atau alat Azure.*
Proyek Latihan: Aplikasi Web Aman dengan Penyimpanan dan Pemantauan
Bangun satu pengaturan kecil dan aman yang memakai gagasan dari beberapa bagian. Tulis Bicep dan skrip sendiri terlebih dahulu, lalu bandingkan dengan contohnya. Hapus grup sumber daya saat selesai agar tidak ada biaya.
1. Buat grup sumber daya dengan tag owner dan environment, lalu periksa tag yang belum ada menggunakan skrip.
2. Tulis templat Bicep untuk akun penyimpanan dengan TLS 1.2 dan tanpa akses publik ke blob, lalu lihat pratinjaunya dengan what-if sebelum deploy.
3. Buat managed identity yang ditetapkan pengguna dan beri peran Storage Blob Data Reader hanya pada akun penyimpanan itu.
4. Deploy aplikasi web yang membaca blob dengan managed identity-nya, lalu tambahkan peringatan saat waktu respons rata-rata tetap di atas dua detik.
5. Buat anggaran pada 80 persen dari batas bulanan Anda, lalu hapus grup sumber daya dan pastikan penghapusannya di portal.
Langkah berikutnya
Selanjutnya, pelajari panduan arsitektur Azure, ambil sertifikasi berbasis peran seperti AZ-900 atau AZ-104, dan latih pipeline infrastruktur dengan GitHub Actions atau Azure DevOps. Jalankan setiap perintah di langganan sandbox terlebih dahulu, dan baca dokumentasi layanan untuk versi yang Anda deploy.
Ringkasan
Azure menjadi platform profesional ketika Anda mendeskripsikannya sebagai kode, mengamankannya dengan identitas dan bukan kata sandi, memantaunya, dan mengendalikan biayanya. Melalui 100 contoh, artikel ini membahas Azure CLI, grup sumber daya dan tag, skrip, Bicep, identitas dan RBAC, mesin virtual dan App Service, kontainer dan Kubernetes, penyimpanan, basis data, Functions tanpa server, jaringan, pesan, pemantauan, Key Vault dan keamanan, serta DevOps dengan tata kelola biaya. Bangun aplikasi web aman di proyek latihan, dan ubah satu pengaturan setiap kali untuk memahami cara kerja setiap bagian.