Microsoft Azure

Cloud Services, DevOps & Enterprise Solutions

Azure Basics

Azure vs AWS Comparison

AzureAWSPurpose
Virtual MachinesEC2Compute
Blob StorageS3Object Storage
Azure SQLRDSManaged SQL
Azure FunctionsLambdaServerless
App ServiceElastic BeanstalkPaaS
Cosmos DBDynamoDBNoSQL
Azure ADIAM + CognitoIdentity

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

TierUse CaseAccess
HotFrequently accessedHighest cost/GB, lowest access cost
CoolInfrequent (30+ days)Lower storage, higher access cost
ArchiveRarely accessedLowest 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