Azure CLI Kurulum ve Yapılandırma Rehberi

Azure’u komut satırından yönetmek, GUI üzerinden tıklamakla zaman harcamak yerine işleri hızlandırmanın en etkili yollarından biri. Özellikle onlarca kaynağı aynı anda yönetmeniz gerektiğinde, Azure CLI olmadan hayat gerçekten zorlaşıyor. Bu yazıda Azure CLI’yi sıfırdan kurup yapılandıracak, günlük işlerinizi kolaylaştıracak pratik ipuçlarını paylaşacağım.

Azure CLI Nedir ve Neden Kullanmalısınız?

Azure CLI, Microsoft’un Azure kaynaklarını komut satırından yönetmek için geliştirdiği cross-platform bir araç. Python üzerine inşa edilmiş olan bu araç, Windows, Linux ve macOS üzerinde sorunsuz çalışıyor. az komutuyla başlayan bu CLI, Azure Portal’da yaptığınız neredeyse her şeyi terminal üzerinden yapmanıza olanak sağlıyor.

Birkaç somut senaryoyla başlayalım: Diyelim ki 20 farklı resource group’u temizlemeniz gerekiyor. Portal üzerinden her birine girip silmek yerine, tek bir döngü komutuyla bunu halledebilirsiniz. Ya da CI/CD pipeline’ınızda Azure kaynaklarını otomatik olarak oluşturmanız gerekiyor. İşte bu tür durumlarda Azure CLI’nin değeri net olarak ortaya çıkıyor.

Kurulum Adımları

Linux Üzerinde Kurulum

Linux’ta kurulum oldukça basit. Debian/Ubuntu tabanlı dağıtımlar için Microsoft’un resmi repo’sunu sisteme ekleyip kurulumu yapıyoruz:

# Microsoft GPG anahtarını ve repo'yu ekleyelim
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# Ya da manuel olarak adım adım
sudo apt-get update
sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg

curl -sL https://packages.microsoft.com/keys/microsoft.asc | 
    gpg --dearmor | 
    sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null

AZ_REPO=$(lsb_release -cs)
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | 
    sudo tee /etc/apt/sources.list.d/azure-cli.list

sudo apt-get update
sudo apt-get install azure-cli

RHEL/CentOS/Fedora gibi RPM tabanlı dağıtımlar için:

# RHEL/CentOS 8 için
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

sudo sh -c 'echo -e "[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'

sudo dnf install azure-cli

# Kurulumu doğrulayalım
az --version

Windows Üzerinde Kurulum

Windows’ta birkaç farklı yol var. En hızlısı MSI installer ile gitmek:

# PowerShell üzerinden direkt indirme ve kurulum
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .AzureCLI.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'
Remove-Item .AzureCLI.msi

# Winget ile de kurabilirsiniz (Windows 11 ve güncel Windows 10'da)
winget install -e --id Microsoft.AzureCLI

macOS Üzerinde Kurulum

Mac kullanıyorsanız Homebrew en temiz yol:

# Homebrew ile kurulum
brew update && brew install azure-cli

# Güncelleme yapmak istediğinizde
brew upgrade azure-cli

İlk Yapılandırma ve Kimlik Doğrulama

Kurulum bitti, şimdi hesabınıza bağlanma vakti. Azure CLI’de birden fazla kimlik doğrulama yöntemi mevcut. Bunları tek tek inceleyelim.

İnteraktif Login

Geliştirme ortamı ya da kişisel kullanım için en pratik yöntem:

# Tarayıcı üzerinden login (varsayılan yöntem)
az login

# Belirli bir tenant'a login olmak için
az login --tenant your-tenant-id.onmicrosoft.com

# Device code flow - headless sunucularda çok işe yarıyor
az login --use-device-code

az login --use-device-code özellikle SSH üzerinden bağlı olduğunuz uzak bir sunucuda Azure CLI kullanmanız gerektiğinde hayat kurtarıcı. Komut size bir kod ve URL veriyor, siz kendi bilgisayarınızın tarayıcısından gidip o kodu giriyorsunuz. Basit ama etkili.

Service Principal ile Login

Production ortamlarında, CI/CD pipeline’larında ya da otomasyonlarda service principal kullanmak doğru yaklaşım:

# Önce bir service principal oluşturalım
az ad sp create-for-rbac 
    --name "myapp-automation-sp" 
    --role contributor 
    --scopes /subscriptions/YOUR_SUBSCRIPTION_ID 
    --sdk-auth

# Service principal ile login
az login 
    --service-principal 
    --username APP_ID 
    --password CLIENT_SECRET 
    --tenant TENANT_ID

# Ortam değişkenleri ile de çalışabilirsiniz
export AZURE_CLIENT_ID="your-app-id"
export AZURE_CLIENT_SECRET="your-client-secret"
export AZURE_TENANT_ID="your-tenant-id"

Service principal oluştururken üretilen JSON çıktısını saklamayı unutmayın. Client secret bir daha gösterilmiyor, kaybederseniz yeniden oluşturmanız gerekiyor.

Managed Identity ile Login

Azure VM’leri, Container Instance’lar ya da App Service üzerinde çalışan uygulamalar için managed identity kullanmak en güvenli yöntem. Credential yönetiminden tamamen kurtuluyorsunuz:

# VM'de managed identity ile login
az login --identity

# Birden fazla managed identity varsa client ID belirtin
az login --identity --username CLIENT_ID_OF_USER_ASSIGNED_IDENTITY

Subscription ve Tenant Yönetimi

Birden fazla Azure subscription’ınız varsa, bunlar arasında geçiş yapmayı iyi öğrenmeniz gerekiyor:

# Mevcut hesabınızdaki tüm subscription'ları listeleyin
az account list --output table

# Aktif subscription'ı görüntüleyin
az account show

# Farklı bir subscription'a geçin
az account set --subscription "Subscription Name veya ID"

# Varsayılan subscription'ı kalıcı olarak ayarlayın
az account set --subscription YOUR_SUBSCRIPTION_ID

# Belirli bir subscription üzerinde işlem yaparken --subscription parametresi
az group list --subscription "Other Subscription" --output table

Çok subscription’lı ortamlarda çalışıyorsanız, hangi subscription’da olduğunuzu sürekli kontrol etmek iyi bir alışkanlık. Yanlış subscription’da kaynak silmek gibi durumlarla karşılaşmak istemezsiniz.

Azure CLI Yapılandırma Dosyası

CLI’nin davranışını özelleştirmek için yapılandırma dosyasını kullanabilirsiniz. Bu dosya genellikle ~/.azure/config yolunda bulunuyor:

# Varsayılan output formatını ayarlayın
az configure --defaults output=table

# Varsayılan resource group ve location belirleyin
az configure --defaults group=myResourceGroup location=westeurope

# Mevcut yapılandırmayı görüntüleyin
az configure --list-defaults

# Yapılandırma dosyasını direkt düzenleyebilirsiniz
cat ~/.azure/config

Yapılandırma dosyası içeriği şu şekilde görünür:

# ~/.azure/config dosyasını manuel oluşturma veya düzenleme
cat > ~/.azure/config << 'EOF'
[core]
output = table
collect_telemetry = false
no_color = false

[defaults]
group = production-rg
location = westeurope

[logging]
enable_log_file = true
log_dir = /var/log/azure-cli
EOF

Telemetri verisini göndermek istemiyorsanız collect_telemetry = false ayarını mutlaka ekleyin. Özellikle kurumsal ortamlarda bu önemli olabiliyor.

Output Formatları ve Sorgulama

Azure CLI’nin güçlü yanlarından biri esnek output formatları. Farklı senaryolarda farklı formatlar kullanmak işleri kolaylaştırıyor:

# JSON formatı (varsayılan, scriptlerde parse etmek için ideal)
az vm list --output json

# Tablo formatı (insan gözüyle okuma için)
az vm list --output table

# YAML formatı
az vm list --output yaml

# TSV formatı (bash scriptlerinde awk/cut ile kullanmak için süper)
az vm list --output tsv

# Sadece belirli alanları almak için query kullanın (JMESPath sorgu dili)
az vm list --query "[].{Name:name, Location:location, Status:powerState}" --output table

# Belirli bir VM'nin IP adresini almak
az vm show 
    --resource-group myResourceGroup 
    --name myVM 
    --query "publicIps" 
    --output tsv

JMESPath sorgu dili başlangıçta biraz alışılması zor, ama öğrendikten sonra çok güçlü. Özellikle JSON çıktılarından belirli alanları çekmeniz gerektiğinde oldukça işe yarıyor.

Gerçek Dünya Senaryosu: Ortam Kurulumu Otomasyonu

Şimdi pratik bir senaryo üzerinden gidelim. Yeni bir proje için Azure ortamı kurmam gerekiyor. Resource group, storage account, key vault ve bir sanal ağ oluşturacağım:

#!/bin/bash
# Yeni proje ortamı kurulum scripti

# Değişkenleri tanımlayalım
PROJECT_NAME="myproject"
ENVIRONMENT="prod"
LOCATION="westeurope"
RG_NAME="${PROJECT_NAME}-${ENVIRONMENT}-rg"
STORAGE_NAME="${PROJECT_NAME}${ENVIRONMENT}storage"
KV_NAME="${PROJECT_NAME}-${ENVIRONMENT}-kv"
VNET_NAME="${PROJECT_NAME}-${ENVIRONMENT}-vnet"

echo "=== Azure Ortam Kurulumu Başlıyor ==="
echo "Proje: $PROJECT_NAME | Ortam: $ENVIRONMENT | Bölge: $LOCATION"

# Resource Group oluştur
echo "Resource Group oluşturuluyor..."
az group create 
    --name $RG_NAME 
    --location $LOCATION 
    --tags environment=$ENVIRONMENT project=$PROJECT_NAME 
    --output table

# Storage Account oluştur
echo "Storage Account oluşturuluyor..."
az storage account create 
    --name $STORAGE_NAME 
    --resource-group $RG_NAME 
    --location $LOCATION 
    --sku Standard_LRS 
    --kind StorageV2 
    --https-only true 
    --min-tls-version TLS1_2 
    --output table

# Key Vault oluştur
echo "Key Vault oluşturuluyor..."
az keyvault create 
    --name $KV_NAME 
    --resource-group $RG_NAME 
    --location $LOCATION 
    --sku standard 
    --enable-soft-delete true 
    --retention-days 90 
    --output table

# Virtual Network oluştur
echo "Virtual Network oluşturuluyor..."
az network vnet create 
    --name $VNET_NAME 
    --resource-group $RG_NAME 
    --location $LOCATION 
    --address-prefix 10.0.0.0/16 
    --subnet-name default 
    --subnet-prefix 10.0.1.0/24 
    --output table

echo "=== Kurulum Tamamlandı ==="
az group show --name $RG_NAME --output table

Bu scripti birkaç saniyede çalıştırarak ortam kurulumunu tamamlayabilirsiniz. Aynı işi portal üzerinden yapmaya çalışsanız en az 15-20 dakikanız giderdi.

Gerçek Dünya Senaryosu: Toplu VM Yönetimi

Bir şirkette sysadmin olarak 30 adet test VM’ini iş saatleri dışında kapatmam gerekiyor. Maliyet optimizasyonu için çok yaygın bir senaryo:

#!/bin/bash
# Test VM'lerini durdurma ve başlatma scripti

RESOURCE_GROUP="test-vms-rg"
ACTION=${1:-"deallocate"}  # deallocate veya start parametresi

# Resource group'taki tüm VM'leri listele
VM_LIST=$(az vm list 
    --resource-group $RESOURCE_GROUP 
    --query "[].name" 
    --output tsv)

echo "Toplam VM sayısı: $(echo "$VM_LIST" | wc -l)"
echo "İşlem: $ACTION"
echo "---"

for VM_NAME in $VM_LIST; do
    echo "$VM_NAME için $ACTION işlemi başlatılıyor..."
    
    if [ "$ACTION" = "deallocate" ]; then
        az vm deallocate 
            --resource-group $RESOURCE_GROUP 
            --name $VM_NAME 
            --no-wait
    elif [ "$ACTION" = "start" ]; then
        az vm start 
            --resource-group $RESOURCE_GROUP 
            --name $VM_NAME 
            --no-wait
    fi
done

echo "Tüm işlemler kuyruğa alındı. Durum kontrolü için:"
echo "az vm list --resource-group $RESOURCE_GROUP --show-details --output table"

--no-wait parametresinin kullanımına dikkat edin. Bu parametre, işlemin tamamlanmasını beklemeden bir sonraki adıma geçmenizi sağlıyor. 30 VM’yi sırayla durdurup her birinin bitmesini bekleseydiniz, bu işlem çok uzun sürerdi.

Azure CLI Extension Yönetimi

Azure CLI, extension sistemi sayesinde genişletilebilir bir yapıya sahip. Core CLI’ye dahil olmayan bazı servisler extension olarak geliyor:

# Mevcut extension'ları listeleyin
az extension list --output table

# Kullanılabilir extension'ları arayın
az extension list-available --output table

# Popüler extension'ları kurun
az extension add --name aks-preview          # AKS gelişmiş özellikleri
az extension add --name azure-devops          # Azure DevOps entegrasyonu
az extension add --name containerapp          # Container Apps
az extension add --name ssh                   # VM SSH yönetimi

# Extension güncelleme
az extension update --name aks-preview

# Extension kaldırma
az extension remove --name aks-preview

# Tüm extension'ları tek seferde güncelleyin
az extension update --all

Hata Ayıklama ve Sorun Giderme

CLI komutları beklenmedik şekilde davranıyorsa, debug modunu açmak sorunun kaynağını bulmayı kolaylaştırıyor:

# Verbose output ile çalıştırın
az vm list --verbose

# Debug mode açın (HTTP request/response detayları dahil)
az vm list --debug

# Sadece HTTP isteklerini görmek için
az vm list --debug 2>&1 | grep "Request URL"

# CLI versiyonunu ve bağımlılıkları kontrol edin
az --version

# Bileşenleri güncelleyin (Linux için)
az upgrade

# Cache temizleme
az cache purge
az account clear

Debug modundaki çıktı oldukça ayrıntılı. Hangi API endpoint’ine hangi parametrelerle istek atıldığını, dönen HTTP kodunu ve response body’yi görebiliyorsunuz. Özellikle permission sorunlarını çözerken bu bilgiler çok değerli.

Güvenlik En İyi Pratikleri

Azure CLI kullanırken güvenlik açısından dikkat edilmesi gereken birkaç önemli nokta var:

Credential yönetimi: Service principal secret’larını asla script içine gömmeyIn. Ortam değişkenleri ya da Azure Key Vault kullanın.

En az yetki prensibi: Service principal’lara ihtiyaç duyduklarından fazla yetki vermeyin. Contributor yerine gerektiğinde daha kısıtlı roller kullanın.

# Mevcut login bilgilerini güvenli şekilde yönetin
# Logout yaparak token'ları temizleyin
az logout

# Tüm hesaplardan çıkış yapın
az account clear

# Key Vault'tan secret okuma (credential'ları script içine yazmamak için)
DB_PASSWORD=$(az keyvault secret show 
    --vault-name myKeyVault 
    --name db-password 
    --query "value" 
    --output tsv)

# Service principal için minimum yetki örneği
az role assignment create 
    --assignee APP_ID 
    --role "Storage Blob Data Reader" 
    --scope /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_NAME

Token saklama: Azure CLI, tokenları ~/.azure/ dizininde saklıyor. Paylaşılan sistemlerde bu dizinin izinlerini kontrol edin.

Telemetri: Kurumsal politikalar gerektiriyorsa telemetriyi devre dışı bırakın:

az configure --defaults collect_telemetry=false
# ya da ortam değişkeni ile
export AZURE_CORE_COLLECT_TELEMETRY=0

Shell Tamamlama Ayarı

Tab tamamlama özelliğini aktif etmek günlük kullanımı ciddi oranda hızlandırıyor:

# Bash için tamamlama ayarı
echo 'source /etc/bash_completion.d/azure-cli' >> ~/.bashrc

# Ya da manuel olarak
az completion bash >> ~/.bashrc
source ~/.bashrc

# Zsh kullanıyorsanız
az completion zsh >> ~/.zshrc
source ~/.zshrc

# Fish shell için
az completion fish > ~/.config/fish/completions/az.fish

Tamamlamayı aktif ettikten sonra az vm yazıp Tab’a basınca mevcut alt komutları görürsünüz. az vm list yazıp -- yazdıktan Tab’a basınca tüm parametreler listelenecek. Bu özellik başlangıçta küçük bir detay gibi görünse de gün içinde yüzlerce komut yazarken büyük fark yaratıyor.

Azure CLI ile Scripting İpuçları

Gerçek otomasyonlarda işe yarayacak birkaç pratik ipucu:

# Kaynağın var olup olmadığını kontrol etme
RG_EXISTS=$(az group exists --name myResourceGroup)
if [ "$RG_EXISTS" = "true" ]; then
    echo "Resource group zaten mevcut"
else
    az group create --name myResourceGroup --location westeurope
fi

# İşlem başarısız olduğunda hata yönetimi
az vm create 
    --resource-group myRG 
    --name myVM 
    --image Ubuntu2204 
    --admin-username azureuser 
    --generate-ssh-keys || {
    echo "VM oluşturma başarısız oldu!"
    exit 1
}

# Deployment tamamlanana kadar bekle
az vm wait 
    --resource-group myRG 
    --name myVM 
    --created

echo "VM hazır!"
az vm show 
    --resource-group myRG 
    --name myVM 
    --query "{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" 
    --output table

CLI Güncelleme ve Bakım

Azure sürekli yeni özellikler ekliyor. CLI’yi güncel tutmak önemli:

# Linux (apt) üzerinde güncelleme
sudo apt-get update && sudo apt-get upgrade azure-cli

# macOS üzerinde güncelleme
brew upgrade azure-cli

# Windows üzerinde güncelleme
az upgrade

# Hangi versiyonu kullandığınızı kontrol edin
az --version

# En son versiyonu kontrol et (PyPI üzerinden)
pip show azure-cli

Özellikle büyük versiyon geçişlerinde breaking change’ler olabiliyor. Release notes’u takip etmek, beklenmedik sürprizlerden kaçınmanızı sağlıyor.

Sonuç

Azure CLI, modern cloud altyapısı yönetiminin vazgeçilmez bir parçası. Kurulumdan yapılandırmaya, kimlik doğrulamadan otomasyona kadar anlattığımız konuları bir araya getirdiğinizde, Azure kaynaklarını çok daha verimli yönetebilirsiniz.

Başlangıçta her komutu ezberlemeye çalışmayın. az --help, az vm --help gibi yardım komutlarını kullanmaktan çekinmeyin. Zaman içinde sık kullandığınız komutlar hafızanıza kazınacak, geri kalanlar için dokümantasyon her zaman orada olacak.

En önemli tavsiyem şu: Günlük Azure işlemlerinizden birini seçin ve onu CLI ile yapmaya başlayın. Belki resource group silmek, belki VM durumunu kontrol etmek. Küçük adımlarla başlayıp alışkanlık haline getirince, portal üzerinden yaptığınız işleri ne kadar hızlı terminal üzerinden yapabildiğinizi görerek şaşıracaksınız.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir