Azure Basics
Azure vs AWS Comparison
| Azure | AWS | Purpose |
|---|---|---|
| Virtual Machines | EC2 | Compute |
| Blob Storage | S3 | Object Storage |
| Azure SQL | RDS | Managed SQL |
| Azure Functions | Lambda | Serverless |
| App Service | Elastic Beanstalk | PaaS |
| Cosmos DB | DynamoDB | NoSQL |
| Azure AD | IAM + Cognito | Identity |
Azure CLI
Bash
# Login to Azure
az login
# Set subscription
az account set --subscription "My Subscription"
# Create resource group
az group create --name myResourceGroup --location eastus
# List resources
az resource list --resource-group myResourceGroup
# Delete resource group
az group delete --name myResourceGroup --yes
Azure Free Account: $200 credit for 30 days + 12 months of free services including VMs, storage, and databases.
Compute Services
Virtual Machines
Azure CLI
# Create a VM
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--size Standard_B2s
# Start/Stop VM
az vm start --resource-group myResourceGroup --name myVM
az vm stop --resource-group myResourceGroup --name myVM
# Open port
az vm open-port --port 80 --resource-group myResourceGroup --name myVM
# List VMs
az vm list --output table
VM Scale Sets
Auto-scale identical VMs based on demand. Perfect for load-balanced workloads.
Azure Kubernetes Service (AKS)
Azure CLI
# Create AKS cluster
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
# Get credentials
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
# Scale cluster
az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 5
Storage Services
Blob Storage
Object storage for unstructured data (images, videos, documents).
Storage Tiers
| Tier | Use Case | Access |
|---|---|---|
| Hot | Frequently accessed | Highest cost/GB, lowest access cost |
| Cool | Infrequent (30+ days) | Lower storage, higher access cost |
| Archive | Rarely accessed | Lowest storage, highest access cost |
Azure CLI Storage Commands
Azure CLI
# Create storage account
az storage account create \
--name mystorageaccount \
--resource-group myResourceGroup \
--location eastus \
--sku Standard_LRS
# Create container
az storage container create \
--name mycontainer \
--account-name mystorageaccount
# Upload blob
az storage blob upload \
--container-name mycontainer \
--file myfile.txt \
--name myblob.txt \
--account-name mystorageaccount
# List blobs
az storage blob list --container-name mycontainer --account-name mystorageaccount
C# SDK Example
C#
using Azure.Storage.Blobs;
// Connect to storage
BlobServiceClient blobService = new BlobServiceClient(connectionString);
BlobContainerClient container = blobService.GetBlobContainerClient("mycontainer");
// Upload file
BlobClient blob = container.GetBlobClient("myfile.txt");
await blob.UploadAsync("local-file.txt", overwrite: true);
// Download file
await blob.DownloadToAsync("downloaded-file.txt");
// List blobs
await foreach (var item in container.GetBlobsAsync())
{
Console.WriteLine(item.Name);
}
App Service
Azure App Service is a fully managed platform for building web apps, REST APIs, and mobile backends.
Azure CLI
# Create App Service plan
az appservice plan create \
--name myAppServicePlan \
--resource-group myResourceGroup \
--sku B1 \
--is-linux
# Create web app
az webapp create \
--resource-group myResourceGroup \
--plan myAppServicePlan \
--name myUniqueAppName \
--runtime "NODE|18-lts"
# Deploy from GitHub
az webapp deployment source config \
--name myUniqueAppName \
--resource-group myResourceGroup \
--repo-url https://github.com/user/repo \
--branch main \
--manual-integration
# Configure app settings
az webapp config appsettings set \
--resource-group myResourceGroup \
--name myUniqueAppName \
--settings KEY=value
# View logs
az webapp log tail --name myUniqueAppName --resource-group myResourceGroup
Deployment Slots
Create staging environments and swap to production with zero downtime.
Azure Functions
Azure Functions is a serverless compute service for running event-driven code.
HTTP Trigger Function
C#
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public class HelloFunction
{
[Function("HelloWorld")]
public HttpResponseData Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")]
HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/json");
response.WriteString("{\"message\": \"Hello, World!\"}");
return response;
}
}
Timer Trigger (Scheduled)
C#
[Function("TimerFunction")]
public void Run([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
// Runs every 5 minutes
_logger.LogInformation($"Timer triggered at: {DateTime.Now}");
}
Blob Trigger
C#
[Function("BlobTrigger")]
public void Run(
[BlobTrigger("container/{name}")] string content,
string name)
{
_logger.LogInformation($"Blob {name} was uploaded with content: {content}");
}
Azure DevOps
Services
- Azure Repos: Git repositories
- Azure Pipelines: CI/CD automation
- Azure Boards: Work tracking (Agile/Scrum)
- Azure Artifacts: Package management
- Azure Test Plans: Manual/exploratory testing
Pipeline YAML Example
YAML
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: Build
jobs:
- job: BuildJob
steps:
- task: NodeTool@0
inputs:
versionSpec: '18.x'
- script: |
npm install
npm run build
displayName: 'Build application'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: 'dist'
artifactName: 'drop'
- stage: Deploy
dependsOn: Build
jobs:
- deployment: DeployWeb
environment: 'production'
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
azureSubscription: 'MySubscription'
appName: 'myWebApp'
package: '$(Pipeline.Workspace)/drop'
Security & Identity
Azure Active Directory (Azure AD)
Cloud-based identity and access management service.
Key Vault
Securely store and access secrets, keys, and certificates.
Azure CLI
# Create Key Vault
az keyvault create \
--name myKeyVault \
--resource-group myResourceGroup \
--location eastus
# Store secret
az keyvault secret set \
--vault-name myKeyVault \
--name MySecret \
--value "super-secret-value"
# Get secret
az keyvault secret show \
--vault-name myKeyVault \
--name MySecret
C# Key Vault Access
C#
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
var client = new SecretClient(
new Uri("https://mykeyvault.vault.azure.net/"),
new DefaultAzureCredential());
KeyVaultSecret secret = await client.GetSecretAsync("MySecret");
string value = secret.Value;
Azure Security Best Practices:
• Use Managed Identities for service auth
• Store secrets in Key Vault, not code
• Enable MFA in Azure AD
• Use Azure Policy for compliance
• Enable Azure Security Center
• Use Managed Identities for service auth
• Store secrets in Key Vault, not code
• Enable MFA in Azure AD
• Use Azure Policy for compliance
• Enable Azure Security Center