====== 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)