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