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.

Standard Library · std.net · std.crypto


Units im Überblick

Unit Import Beschreibung
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
std.cloud.do import std.cloud.do.droplets; DigitalOcean API: Droplets, Volumes, Spaces, Kubernetes, Datenbanken, Networking, Registry, Functions — 13 Units
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
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 (<ListAllMyBucketsResult>...)
    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)