Azure

Prof. Dr. Robin Nunkesser

Azure

Einführung

  • Umfangreicher Cloud-Dienst von Microsoft
  • Spezielle Angebote für Mobile
  • Umfangreiche KI und ML Lösungen
  • Teils kontingentiert oder sogar unbegrenzt kostenlos

Azure Table Storage

Einführung

  • NoSQL Key-Value-Store, Teil jedes Azure Storage Accounts
  • Kostenlos nutzbar (5 GB Free Tier, erste 10.000 Transaktionen/Monat frei)
  • Kein Portal nötig — vollständiger Setup per az CLI

Vorgehen

az login
bash setup.sh
  • Legt Resource Group, Storage Account und gibt Connection String aus.
  • Kein Browser, kein Klicken, reproduzierbar und skriptbar.

Ressourcen einrichten

az group create --name TodoRG --location germanywestcentral

az storage account create \
  --name todostorage1234 \
  --resource-group TodoRG \
  --sku Standard_LRS \
  --kind StorageV2

az storage account show-connection-string \
  --name todostorage1234 \
  --resource-group TodoRG \
  --query connectionString --output tsv

Projektstruktur

AzureTables.Core/           ← TodoItem, ITodoRepository
AzureTables.Infrastructure/ ← AzureTableTodoRepository
AzureTables/                ← Console App (Program.cs)
AzureTables.Tests/          ← xUnit (kein Azure nötig)
  • Identische Architektur wie SQLite/EF Core: Ports & Adapters.
  • Tests laufen ohne Netzwerkverbindung (FakeTodoRepository).

Infrastructure: TodoEntity (intern)

internal class TodoEntity : ITableEntity
{
    public string PartitionKey { get; set; } = "todos";
    public string RowKey { get; set; } = string.Empty;
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; }
    public string Title { get; set; } = string.Empty;
    public bool Done { get; set; }
}
  • internal — nur innerhalb der Infrastructure sichtbar.
  • RowKey entspricht der Id des TodoItem.

Infrastructure: AzureTableTodoRepository

public class AzureTableTodoRepository : ITodoRepository
{
    private readonly TableClient _client;

    public AzureTableTodoRepository(string connectionString, string tableName = "todos")
    {
        _client = new TableClient(connectionString, tableName);
        _client.CreateIfNotExists();
    }

    public async Task<List<TodoItem>> GetAllAsync()
    {
        var result = new List<TodoItem>();
        await foreach (var entity in _client.QueryAsync<TodoEntity>())
            result.Add(new TodoItem { Id = entity.RowKey, Title = entity.Title, Done = entity.Done });
        return result;
    }
}

App starten

export AZURE_STORAGE_CONNECTION_STRING='DefaultEndpointsProtocol=https;...'
dotnet run --project AzureTables
Azure Table Storage – Todo Demo
================================
Drei Einträge gespeichert.

Alle Todos (3):
  [ ] Azure CLI einrichten
  [ ] Table Storage ausprobieren
  [ ] Eintrag löschen üben

Finaler Zustand (2):
  [x] Azure CLI einrichten
  [ ] Table Storage ausprobieren

Alle Einträge bereinigt.

Aufräumen

bash teardown.sh
az group delete --name TodoRG --yes --no-wait
  • Löscht alle Ressourcen — keine laufenden Kosten.

Agent-generated example

Vorgehen (Agent)

  • Azure CLI statt Portal: kein Medienbruch
  • Ports & Adapters: ITodoRepository in Core, AzureTableTodoRepository in Infrastructure
  • TodoEntity internal: Mapping zwischen Cloud-SDK und Domain-Modell explizit
  • Connection String per Umgebungsvariable: keine Credentials im Code