====== std.cloud ====== Cloud-Infrastruktur-Bindings für **AWS**, **DigitalOcean**, **Cloudflare** und **Google Cloud Platform** — direkt in Lyx implementiert, ohne externe SDKs. Die Units bauen auf ''std.net.https'' und ''std.net.tls'' auf; alle HTTP-Anfragen werden über den eingebauten TLS-Stack abgewickelt. Authentifizierung erfolgt über AWS Signature Version 4 (SigV4), Bearer-Token (DO/CF), Cloudflare API-Token oder JWT RS256 / Application Default Credentials (GCP). Einsatzbereiche: serverseitige Lyx-Anwendungen, Build-Pipelines, Deployment-Tools, Infrastruktur-Automation, Edge-Computing. → [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:units:net|std.net]] · [[lyx_-_programmiersprache:units:crypto|std.crypto]] ---- ===== Units im Überblick ===== ^ Unit ^ Import ^ Beschreibung ^ | [[lyx_-_programmiersprache:units:cloud:aws|std.cloud.aws]] | ''import std.cloud.s3;'' | AWS-Dienste: S3, EC2, DynamoDB, Lambda, IAM, SQS, SNS, CloudWatch, Secrets Manager — 9 Service-Units + 4 interne Schichten | | [[lyx_-_programmiersprache:units:cloud:do|std.cloud.do]] | ''import std.cloud.do.droplets;'' | DigitalOcean API: Droplets, Volumes, Spaces, Kubernetes, Datenbanken, Networking, Registry, Functions — 13 Units | | [[lyx_-_programmiersprache:units:cloud:cf|std.cloud.cf]] | ''import std.cloud.cf.dns;'' | Cloudflare API v4: Zones, DNS, Workers, KV, R2, D1, WAF, Cache, Pages, Tunnel, Email, Analytics — 16 Units | | [[lyx_-_programmiersprache:units:cloud:gcp|std.cloud.gcp]] | ''import std.cloud.gcp.storage;'' | Google Cloud Platform: GCS, GCE, Firestore, Pub/Sub, Cloud Functions, Cloud Run, Logging, Monitoring, Secret Manager, IAM — 11 Units | ---- ===== Architektur ===== ┌─────────────────────────────────────────────────────────────────┐ │ AWS Service-Units │ │ s3 · ec2 · dynamodb · lambda · iam · sqs · sns · cloudwatch │ │ secrets │ ├─────────────────────────────────────────────────────────────────┤ │ Interne AWS-Schichten │ │ aws/core (Credentials, Endpoints) │ │ aws/sigv4 (Signatur) aws/transport (HTTP+Retry) │ │ aws/xml (XML-Parser + Query-Builder) │ ├─────────────────────────────────────────────────────────────────┤ │ DigitalOcean Units │ │ droplets · volumes · spaces · databases · kubernetes · apps │ │ networking · monitoring · registry · functions │ │ do/credentials · do/transport · do/core │ ├─────────────────────────────────────────────────────────────────┤ │ Cloudflare Units │ │ zones · dns · workers · kv · r2 · d1 · cache · waf │ │ lb · pages · tunnel · email · analytics │ │ cf/credentials · cf/transport · cf/core │ ├─────────────────────────────────────────────────────────────────┤ │ Google Cloud Platform Units │ │ storage (GCS) · compute (GCE) · firestore · pubsub │ │ functions (GCF + GCR) · logging (+ monitoring) · secrets (+ IAM)│ │ gcp/credentials · gcp/jwt · gcp/oauth · gcp/transport │ ├─────────────────────────────────────────────────────────────────┤ │ Netzwerk-Grundschicht │ │ std.net.https · std.net.tls · std.net.http │ └─────────────────────────────────────────────────────────────────┘ ---- ===== Credential-Konzept ===== Beide Provider verwenden eigene Credential-Typen, die über mehrere Quellen geladen werden können: **AWS:** ''AWSCreds'' — Credential Chain (Umgebungsvariablen → ''~/.aws/credentials'' → EC2 Metadata): import std.cloud.aws.core; // Credential Chain: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY → ~/.aws/credentials → leer var creds: AWSCreds := AWSCredentialsDefault(); // Oder explizit: var creds2: AWSCreds := AWSCredentialsStatic("AKIAIOSFODNN7EXAMPLE"c, "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"c); // Cleanup AWSCredentialsFree(creds); **DigitalOcean:** ''DOCredentials'' — Bearer-Token: import std.cloud.do.credentials; // Aus Umgebungsvariable DIGITALOCEAN_TOKEN var creds: DOCredentials := DOCredentialsFromEnv(); // Oder direkt: var creds2: DOCredentials := DOCredentialsFromToken("dop_v1_xxxx"c); ---- ===== Rückgabewerte ===== Die meisten Lese-Funktionen geben ein ''int64'' zurück, das auf einen allokierten Puffer mit der API-Antwort (XML oder JSON als Rohtext) zeigt. Der Aufrufer ist für das Freigeben verantwortlich: import std.cloud.s3; import std.alloc; var creds: AWSCreds := AWSCredentialsDefault(); var client: S3Client := S3Connect(creds, "eu-central-1"c); var list: int64 := S3ListBuckets(client); if (list != 0) { // list zeigt auf XML-Text (...) Print(list as pchar); PrintLn(""c); free(list, StrLen(list as pchar) + 1); } S3Close(client); **Google Cloud Platform:** ''GCPCredentials'' — Application Default Credentials (ADC): import std.cloud.gcp.credentials; // Credential Chain: GOOGLE_APPLICATION_CREDENTIALS → ADC-Datei → GCE-Metadata var creds: GCPCredentials := GCPCredentialsDefault( "https://www.googleapis.com/auth/cloud-platform"c); // Oder explizit aus Service-Account-JSON: // var creds2: GCPCredentials := GCPCredentialsFromFile("/pfad/sa.json"c, scope); // Cleanup GCPCredentialsFree(creds); ---- Letzte Aktualisierung: 2026-06-13 (GCP ergänzt)