Inhaltsverzeichnis

std.cloud — AWS-Units

AWS-Bindings für Lyx: 9 Service-Units und 4 interne Schichten. Alle Anfragen werden mit AWS Signature Version 4 (SigV4) signiert; der HTTP-Transport nutzt std.net.https. Keine externen AWS-SDKs — vollständig in Lyx implementiert.

std.cloud · Standard Library


Schichtenmodell

Schicht Unit Beschreibung
Service-Layer s3, ec2, dynamodb, lambda, iam, sqs, sns, cloudwatch, secrets Dienst-spezifische Clients und Operationen
Credential & Endpoint aws/core AWSCreds-Typ, Credential Chain, Endpoint-Auflösung
Signatur aws/sigv4 AWS Signature Version 4 — Header-Auth und Query-Presigning
Transport aws/transport HTTP-Request/Response, Retry-Logik, JSON- und XML-Protokoll-Helpers
XML-Utilities aws/xml Leichtgewichtiger XML-Parser + Query-String-Builder für EC2/S3

std.cloud.aws.core

Credential-Verwaltung und Endpoint-Auflösung. Wird von allen Service-Units als Basis verwendet.

Typen

Typ Felder Beschreibung
AWSCreds accessKey, secretKey, sessionToken, expiration, source, region, profile AWS-Zugangsdaten (alle Felder int64/pchar)
AWSServiceConfig region, endpoint, useDualStack, useFIPS, maxRetries, timeoutMs Erweiterte Service-Konfiguration

Konstanten

Konstante Wert Bedeutung
CREDS_STATIC 1 Hardcodierte Credentials
CREDS_ENV 2 Aus Umgebungsvariablen
CREDS_FILE 3 Aus ~/.aws/credentials
CREDS_ECS 4 ECS Task Role (Metadata)
CREDS_EC2_META 5 EC2 Instance Metadata Service

Funktionen

Funktion Signatur Beschreibung
AWSCredentialsStatic (accessKey, secretKey: pchar): AWSCreds Statische Credentials
AWSCredentialsStaticWithToken (accessKey, secretKey, sessionToken: pchar): AWSCreds Statisch + Session-Token (STS)
AWSCredentialsFromEnv (): AWSCreds Aus AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN
AWSCredentialsFromFile (path, profile: pchar): AWSCreds Aus INI-Datei (0~/.aws/credentials, default)
AWSCredentialsProfile (profile: pchar): AWSCreds Kurzform: AWSCredentialsFromFile(0, profile)
AWSCredentialsDefault (): AWSCreds Credential Chain: Env → ~/.aws/credentials
AWSCredentialsFree (creds: AWSCreds) Gibt alle allokierten Felder frei
AWSCredentialsIsExpired (creds: AWSCreds): int64 1 wenn expiration überschritten
AWSCredentialsRefresh (creds: AWSCreds): AWSCreds Neue Credentials aus gleicher Quelle laden
AWSEndpoint (service, region: pchar): int64 Hostname für AWS-Dienst (allokiert)
AWSS3Endpoint (bucket, region: pchar, pathStyle: int64): int64 S3-Hostname (virtual-hosted oder path-style)
AWSServiceConfigDefault (region: pchar): AWSServiceConfig Standard-Config (30 s Timeout, 3 Retries)

std.cloud.aws.sigv4

AWS Signature Version 4 — wird intern von transport genutzt; in der Regel kein direkter Aufruf nötig.

Funktion Beschreibung
SigV4Sign(ctx: int64) Berechnet Authorization-Header und schreibt ihn in AWSSignCtx.authHeader
SigV4SignQuery(ctx: int64, expires: int64): int64 Erstellt signierten Query-String (Presigned URL), expires in Sekunden
SigV4DateNow(dateBuf, dateTimeBuf: int64) Füllt Datum (YYYYMMDD) und Datum+Zeit (YYYYMMDDTHHmmssZ)

std.cloud.aws.transport

HTTP-Client-Schicht mit AWS-spezifischen Protokoll-Helpers.

Funktion Beschreibung
AWSSend(req: AWSRequest): AWSResponse Einzelner HTTP-Request mit SigV4-Signatur
AWSSendWithRetry(req: AWSRequest, maxRetries: int64): AWSResponse Mit exponentiellem Backoff
AWSResponseFree(r: AWSResponse) Gibt Response-Body und Header-Puffer frei
AWSResponseGetHeader(resp: AWSResponse, name: pchar): pchar Header-Wert auslesen
AWSJSONRequest(…) Shortcut für JSON-Protokoll (Lambda, DynamoDB, CloudWatch)
AWSQueryRequest(…) Shortcut für Query-Protokoll (EC2, IAM, SQS)
AWSRestJSONRequest(…) Shortcut für REST/JSON (Lambda Invoke)
AWSS3Request(…) Shortcut für REST/XML (S3)

std.cloud.s3

Amazon S3 Client (REST/XML-Protokoll). 54 pub Funktionen. Neben AWS S3 unterstützt die Unit direkt Cloudflare R2 und MinIO über kompatible Connect-Funktionen.

Typen

Typ Felder Beschreibung
S3Client creds, region, endpoint, pathStyle, useTLS, port, lastStatus, lastError, lastErrMsg Verbindungs-Handle inkl. Fehler-State
S3Object key, size, etag, lastModified, storageClass Objekt-Eintrag aus Listing
S3ObjectMeta key, etag, size, lastModified, contentType, versionId Vollständige HEAD-Metadaten
S3BucketList count, names Ergebnis von S3ListBuckets

Verbindung herstellen

Funktion Beschreibung
S3Connect(creds, region) AWS S3 — virtual-hosted Endpoints
S3ConnectEndpoint(creds, region, endpoint, useTLS, pathStyle) Custom Endpoint (LocalStack, andere S3-kompatible Dienste)
S3ConnectR2(accountId, accessKey, secretKey) Cloudflare R2 via S3-API (path-style, TLS)
S3ConnectMinio(host, port, accessKey, secretKey) MinIO (path-style, HTTP auf Port)
S3ConnectConfig(creds, cfg) Mit AWSServiceConfig
S3Close(client) Credentials freigeben

Fehlerbehandlung

Funktion Beschreibung
S3LastStatus(client): int64 Letzter HTTP-Statuscode (z.B. 404, 403)
S3LastError(client): pchar Letzter Fehlertext (NoSuchKey, AccessDenied, …)
S3LastErrorCode(client): pchar AWS-Fehlercode aus XML

Bucket-Operationen

Funktion Beschreibung
S3ListBuckets(client): S3BucketList Alle Buckets (strukturiert; S3BucketListCount, S3BucketListGetName)
S3BucketCreate(client, bucket) Bucket anlegen
S3BucketDelete(client, bucket) Bucket löschen
S3BucketExists(client, bucket): int64 1 wenn Bucket existiert

Objekt-Operationen

Funktion Beschreibung
S3PutObject(client, bucket, key, data, dataLen, contentType) Aus Speicher hochladen
S3PutObjectFile(client, bucket, key, localPath, contentType) Aus lokaler Datei hochladen
S3GetObject(client, bucket, key): int64 Body als allokierten Puffer
S3GetObjectFile(client, bucket, key, localPath): int64 In lokale Datei speichern
S3GetObjectRange(client, bucket, key, rangeStart, rangeEnd): int64 Teilbereich herunterladen (HTTP Range)
S3DeleteObject(client, bucket, key): int64 Einzelnes Objekt löschen
S3DeleteObjects(client, bucket, keys, count): int64 Mehrere Objekte in einem Request löschen
S3HeadObject(client, bucket, key): S3ObjectMeta Metadaten ohne Body (contentType, versionId, …)
S3ObjectExists(client, bucket, key): int64 1 wenn Objekt existiert
S3CopyObject(client, srcBucket, srcKey, dstBucket, dstKey): int64 Server-seitiges Kopieren
S3GetObjectSize(client, bucket, key): int64 Dateigröße in Bytes
S3GetETag(client, bucket, key): int64 ETag-String als allokierten Puffer

Listing & Pagination

Funktion Beschreibung
S3ListObjects(client, bucket, prefix, maxKeys): int64 Bis zu maxKeys Objekte (strukturiertes Ergebnis)
S3ListObjectsNext(client, bucket, prefix, token, maxKeys): int64 Nächste Seite mit Continuation-Token
S3ListAll(client, bucket, prefix): int64 Alle Objekte automatisch paginiert
S3ListWithDelimiter(client, bucket, prefix, delimiter, maxKeys): int64 Mit Delimiter (Verzeichnis-Simulation)

Listing-Ergebnisse werden mit Helper-Funktionen ausgelesen:

Funktion Beschreibung
S3ListCount(list): int64 Anzahl der Einträge
S3ListIsTruncated(list): int64 1 wenn weitere Seiten vorhanden
S3ListGetToken(list): pchar Continuation-Token für nächste Seite
S3ListGetKey(list, i): pchar Key des i-ten Eintrags
S3ListGetSize(list, i): int64 Größe des i-ten Eintrags
S3ListGetETag(list, i): pchar ETag des i-ten Eintrags
S3ListGetModified(list, i): pchar Änderungsdatum des i-ten Eintrags
S3ListGetPrefix(list, i): pchar Gemeinsamer Prefix (bei Delimiter)
S3ListFree(list): void Ergebnis freigeben

Multipart-Upload

Für Dateien > 100 MB empfohlen (bis 5 TB, je Part 5 MB–5 GB):

Funktion Beschreibung
S3MultipartBegin(client, bucket, key, contentType): int64 Upload-ID starten
S3MultipartUploadPart(client, bucket, key, uploadId, partNum, data, dataLen): int64 Part hochladen (gibt ETag zurück)
S3MultipartComplete(client, bucket, key, uploadId, parts, partCount): int64 Alle Parts zusammenführen
S3MultipartAbort(client, bucket, key, uploadId): int64 Upload abbrechen
S3PutObjectMultipart(client, bucket, key, data, dataLen, contentType, partSize): int64 High-Level: teilt automatisch auf und lädt hoch

Presigned URLs

Funktion Beschreibung
S3PresignGet(client, bucket, key, expiresSec): int64 Presigned GET-URL
S3PresignPut(client, bucket, key, expiresSec): int64 Presigned PUT-URL (Upload ohne Credentials)
S3PresignDelete(client, bucket, key, expiresSec): int64 Presigned DELETE-URL
S3PresignHead(client, bucket, key, expiresSec): int64 Presigned HEAD-URL
S3PresignURL(client, bucket, key, expiresSec): int64 Alias für S3PresignGet

import std.cloud.aws.core;
import std.cloud.s3;
import std.alloc;

fn main(): int64 {
    // AWS S3
    var creds: AWSCreds := AWSCredentialsDefault();
    var s3: S3Client := S3Connect(creds, "eu-central-1"c);

    // Große Datei automatisch per Multipart hochladen
    var sz: int64 := FileSize("/tmp/dump.tar.gz"c);
    var data: int64 := alloc(sz);
    ReadFile("/tmp/dump.tar.gz"c, data as pchar, sz);
    S3PutObjectMultipart(s3, "mein-bucket"c, "backups/dump.tar.gz"c,
                         data, sz, "application/gzip"c, 50000000); // 50 MB Parts
    free(data, sz);

    // Paginiertes Listing
    var list: int64 := S3ListAll(s3, "mein-bucket"c, "backups/"c);
    var i: int64 := 0;
    while (i < S3ListCount(list)) {
        Print(S3ListGetKey(list, i)); PrintLn(""c);
        i := i + 1;
    }
    S3ListFree(list);

    S3Close(s3);
    return 0;
}

// MinIO (lokale Entwicklung):
var s3m: S3Client := S3ConnectMinio("localhost"c, 9000,
                                    "minioadmin"c, "minioadmin"c);

// Cloudflare R2:
var s3r: S3Client := S3ConnectR2("mein-account-id"c,
                                 "r2-access-key"c, "r2-secret-key"c);


std.cloud.ec2

Amazon EC2: Instanzen, Images, Key Pairs, Security Groups, VPCs, Elastic IPs, EBS-Volumes. 32 pub Funktionen.

Wichtige Typen

Typ Felder
EC2Client creds, region
EC2Instance instanceId, state, publicIp, privateIp, imageId, instanceType (alle int64)
EC2Volume volumeId, state, size, az, volumeType
EC2SecurityGroup groupId, groupName, description, vpcId

Funktionen (Auswahl)

Funktion Beschreibung
EC2Connect(creds, region) EC2-Client erstellen
EC2DescribeInstances(client) XML: alle Instanzen
EC2RunInstances(client, imageId, instanceType, keyName, sgId, subnetId, count) Neue Instanzen starten
EC2TerminateInstances(client, instanceId) Instanz terminieren
EC2StartInstances / EC2StopInstances Instanz starten / stoppen
EC2DescribeInstanceById(client, instanceId): EC2Instance Instanzdetails als Struct
EC2CreateImage(client, instanceId, name, desc) AMI aus Instanz erstellen
EC2ImportKeyPair(client, keyName, publicKeyBase64) SSH-Key importieren
EC2CreateSecurityGroup / EC2AuthorizeSGIngress SG anlegen + Ingress-Regel hinzufügen
EC2CreateVpc / EC2CreateSubnet (via DescribeSubnets) VPC-Infrastruktur
EC2AllocateAddress / EC2AssociateAddress Elastic IP zuweisen und verknüpfen
EC2CreateVolume / EC2AttachVolume / EC2DetachVolume EBS-Volumes
EC2CreateSnapshot(client, volumeId, desc) EBS-Snapshot
EC2DescribeAvailabilityZones(client) Verfügbare AZs

std.cloud.dynamodb

Amazon DynamoDB Client (JSON-Protokoll). 20 pub Funktionen.

DynamoDB-Items werden über den DDBItem-Typ aufgebaut (Attribut-Map mit Typ-Tags S/N/BOOL).

Funktion Beschreibung
DDBConnect(creds, region): DDBClient Client erstellen
DDBItemNew / DDBItemFree Item-Map anlegen / freigeben
DDBItemSetStr(item, key, val) String-Attribut setzen (Typ-Tag S)
DDBItemSetNum(item, key, val) Zahl-Attribut (Typ-Tag N, val als pchar)
DDBItemSetBool(item, key, val) Boolean-Attribut (Typ-Tag BOOL)
DDBCreateTable(client, tableName, hashKeyName, hashKeyType, rangeKeyName, rangeKeyType, rcu, wcu) Tabelle mit provisioned Throughput
DDBCreateTableOnDemand(client, tableName, …) Tabelle mit PAY_PER_REQUEST
DDBPutItem(client, tableName, item) Item einfügen
DDBGetItem(client, tableName, keyName, keyVal) Item lesen (JSON-Response)
DDBDeleteItem(client, tableName, keyName, keyVal) Item löschen
DDBQuery(client, tableName, keyName, keyVal, filterExpr) Query mit Filter
DDBScan(client, tableName, filterExpr) Full Table Scan
DDBUpdateItem(client, tableName, keyName, keyVal, updateExpr) Item aktualisieren

std.cloud.lambda

AWS Lambda: Funktionen verwalten und aufrufen. 15 pub Funktionen.

Funktion Beschreibung
LambdaConnect(creds, region): LambdaClient Client erstellen
LambdaListFunctions(client) Alle Funktionen auflisten (JSON)
LambdaCreateFunction(client, name, runtime, handler, role, zipBase64, env) Neue Funktion erstellen
LambdaInvoke(client, name, payload, payloadLen): int64 Synchron aufrufen (RequestResponse); gibt Response-Body zurück
LambdaInvokeAsync(client, name, payload, payloadLen): int64 Asynchron (Event)
LambdaUpdateFunctionCode(client, name, zipBase64) Code deployen
LambdaUpdateFunctionConfig(client, name, handler, role, timeout, memorySize, env) Konfiguration ändern
LambdaPublishVersion(client, name, desc) Version veröffentlichen
LambdaCreateEventSourceMapping(client, functionName, eventSourceArn, batchSize) SQS/DynamoDB Stream → Lambda

std.cloud.iam

AWS IAM + STS: Benutzer, Rollen, Policies und temporäre Credentials. 23 pub Funktionen.

Funktion Beschreibung
IAMConnect(creds): IAMClient IAM-Client (globaler Endpoint)
IAMListUsers / IAMGetUser / IAMCreateUser / IAMDeleteUser Benutzer-CRUD
IAMListRoles / IAMGetRole / IAMCreateRole / IAMDeleteRole Rollen-CRUD
IAMListPolicies(client, scope) Policies auflisten (scope: All/Local/AWS)
IAMAttachRolePolicy(client, roleName, policyArn) Policy an Rolle binden
IAMDetachRolePolicy / IAMListAttachedRolePolicies Policy entfernen / auflisten
IAMCreateAccessKey / IAMDeleteAccessKey / IAMListAccessKeys Access-Key-Verwaltung
STSConnect(creds): STSClient STS-Client
STSAssumeRole(client, roleArn, sessionName): STSCredentials Temporäre Credentials per AssumeRole
STSGetCallerIdentity(client) Account-ID und ARN der aktuellen Identity

std.cloud.sqs

Amazon SQS: Standard- und FIFO-Queues. 17 pub Funktionen.

Funktion Beschreibung
SQSConnect(creds, region): SQSClient Client erstellen
SQSCreateQueue(client, name, visibilityTimeoutSec, retentionSec) Standard-Queue anlegen
SQSCreateFIFOQueue(client, name) FIFO-Queue (Suffix .fifo wird automatisch gesetzt)
SQSGetQueueUrl(client, name) Queue-URL ermitteln
SQSSendMessage(client, queueUrl, body, delaySeconds) Nachricht senden
SQSSendMessageFIFO(client, queueUrl, body, groupId, deduplicationId) FIFO-Nachricht senden
SQSReceiveMessages(client, queueUrl, maxMessages, waitSeconds) Nachrichten empfangen (Long Polling)
SQSDeleteMessage(client, queueUrl, receiptHandle) Nachricht quittieren
SQSDeleteMessageBatch(client, queueUrl, handles, count) Batch-Quittierung
SQSChangeMessageVisibility(client, queueUrl, receiptHandle, seconds) Visibility-Timeout ändern
SQSPurgeQueue(client, queueUrl) Queue leeren
SQSParseFirstMessage(xml, xmlLen): SQSMessage Erste Nachricht aus XML-Response parsen

std.cloud.sns

Amazon SNS: Topics, Subscriptions, Push-Benachrichtigungen. 16 pub Funktionen.

Funktion Beschreibung
SNSConnect(creds, region): SNSClient Client erstellen
SNSCreateTopic / SNSCreateFIFOTopic / SNSDeleteTopic Topic-Verwaltung
SNSPublish(client, topicArn, subject, message) Nachricht an Topic veröffentlichen
SNSPublishToPhone(client, phoneNumber, message) SMS direkt an Nummer
SNSPublishBatch(client, topicArn, entries, count) Batch-Publish
SNSSubscribe(client, topicArn, protocol, endpoint) Subscription anlegen (Email, SQS, HTTPS, …)
SNSUnsubscribe / SNSListSubscriptionsByTopic Subscription entfernen / auflisten
SNSConfirmSubscription(client, topicArn, token) Subscription-Token bestätigen
SNSCreatePlatformApplication / SNSCreatePlatformEndpoint Mobile Push (APNs, GCM)

std.cloud.cloudwatch

Amazon CloudWatch: Metriken, Alarme, Logs. 21 pub Funktionen in zwei Clients (CWClient für Metriken/Alarme, CWLogsClient für CloudWatch Logs).

Funktion Beschreibung
CWConnect(creds, region): CWClient Metriken/Alarme-Client
CWLogsConnect(creds, region): CWLogsClient Logs-Client
CWPutMetricData(client, ns, datumJson, count) Metriken veröffentlichen
CWGetMetricStatistics(client, ns, metricName, startTime, endTime, period, stats) Statistiken abfragen
CWListMetrics(client, ns, metricName) Verfügbare Metriken auflisten
CWPutMetricAlarm(client, name, ns, metric, threshold, op, period, evalPeriods, sns) Alarm anlegen
CWDescribeAlarms / CWDeleteAlarms Alarme abfragen / löschen
CWLogsCreateLogGroup / CWLogsDeleteLogGroup Log-Gruppen verwalten
CWLogsCreateLogStream / CWLogsDescribeLogStreams Log-Streams verwalten
CWLogsPutLogEvents(client, groupName, streamName, events, count) Log-Einträge schreiben
CWLogsGetLogEvents(client, groupName, streamName, startTime, endTime) Log-Einträge lesen

std.cloud.secrets

AWS Secrets Manager + SSM Parameter Store. 23 pub Funktionen in zwei Clients.

Funktion Beschreibung
SecretsConnect(creds, region): SecretsClient Secrets Manager Client
SSMConnect(creds, region): SSMClient SSM Parameter Store Client
SecretsGetString(client, secretId) Secret-Wert als String (häufigste Operation)
SecretsGetValue / SecretsGetValueVersion Mit/ohne Version-ID
SecretsCreateSecret(client, name, desc, value) Neues Secret anlegen
SecretsPutValue(client, secretId, secretString) Secret-Wert aktualisieren
SecretsDeleteSecret(client, secretId, recoveryWindowDays) Secret löschen (0 = sofort)
SecretsRotateSecret(client, secretId, lambdaArn) Automatische Rotation einrichten
SecretsTagResource(client, secretId, key, value) Tag hinzufügen
SSMGetParameterValue(client, name) Parameter-Wert direkt (ohne Typ-Wrapper)
SSMGetParameter(client, name, withDecryption) Parameter mit Typ-Info (SecureString entschlüsseln)
SSMPutParameter(client, name, value, paramType, overwrite) Parameter anlegen / aktualisieren
SSMDeleteParameter(client, name) Parameter löschen

Letzte Aktualisierung: 2026-06-12