Delphi AWS SDK——S3、SQS、IoT、Lambda、DynamoDB

面向 Amazon Web Services 的原生、无依赖 Delphi 工具包。签名并发送 REST 请求到 S3、向 SQS 推送消息、通过 MQTT-on-WebSocket 驱动 AWS IoT Core、调用 Lambda 函数、与 DynamoDB 和 Bedrock 通信,并从任何 AWS API 的 OpenAPI / Smithy 规范生成强类型 Pascal 客户端——全部来自一组 sgcWebSockets 组件。

一个网络栈,每个 AWS 服务

无需 Java 运行时、无需 Python boto3、无需 Node 桥——只需直接与 AWS 边缘通信 HTTPS、MQTT、WebSocket 和 AMQP 的 Pascal 组件。

Amazon Web Services 公开了超过 250 个 API——存储、队列、IoT、计算、机器学习、身份、DNS、CDN、搜索、RDBMS、密钥管理以及更多。官方 AWS SDK 以 Java、Python、JavaScript、Go、Ruby、PHP 和 .NET 提供,但不提供 Delphi 或 C++Builder 版本。sgcWebSockets 通过一组连贯的原生组件填补了这一空白:用于队列的 TsgcHTTP_API_AmazonSQS、用于基于 WebSocket 的 MQTT(Signature v4 预签名)的 TsgcWSAPI_AWSIoT、带内置 AWS Signature v4 签名器用于任何 REST 服务的 TsgcHTTPClient,以及用于发布机器可读规范的服务长尾的 sgcOpenAPI 代码生成器。

身份验证统一:访问密钥 + 秘密密钥对(或带 IAM 角色担任的临时 STS 会话令牌)、区域和服务标识符。Signature v4 辅助方法为每个出站调用计算规范请求、待签名字符串、HMAC 链和 Authorization 标头,因此每个 AWS 端点——从 S3 PUT 到 Bedrock InvokeModel——都说相同的方言。所有这些都在 Windows、macOS、Linux、iOS 和 Android 上以相同的 Pascal 源代码运行。

核心组件

TsgcHTTP_API_AmazonSQSTsgcWSAPI_AWSIoTTsgcHTTPClient + Signature v4 签名器。

传输

用于 REST 的 HTTPS / HTTP/2、用于 IoT 的基于 WebSocket 的 MQTT 3.1.1 + 5,以及用于流式传输的原始 WebSocket。

平台

Windows、macOS、Linux、iOS、Android、.NET。

代码生成器

sgcOpenAPI 使用任何 AWS OpenAPI / Smithy 规范并发出 Pascal 客户端类。

一流包装器 + 其余服务的生成 SDK

Amazon S3

通过带 Signature v4 的 HTTPS 进行 PUT / GET / DELETE 对象、多部分上传、预签名 URL 和存储桶列表。可对任何 S3 兼容存储(MinIO、Wasabi、Backblaze B2、Cloudflare R2)使用。

Amazon SQS

TsgcHTTP_API_AmazonSQS——创建队列、发送/接收/删除消息、FIFO + 标准、死信队列、一次方法调用即可批量发送。

AWS IoT Core

TsgcWSAPI_AWSIoT——基于 WebSocket 的 MQTT 3.1.1 / 5,带 Signature v4 预签名 URL 或 X.509 双向 TLS。设备影子、作业、机群预配置、自定义身份验证。

AWS Lambda

/2015-03-31/functions/{name}/invocations 端点的同步(RequestResponse)和异步(Event)调用。返回 JSON 响应或 X-Ray 跟踪 ID。

Amazon DynamoDB

通过 JSON 1.0 协议进行 PutItem、GetItem、Query、Scan 和 TransactWriteItems——相同的组件,不同的 X-Amz-Target 标头。

Amazon Bedrock

用于 Claude、Llama、Mistral、Titan 和 Nova 的 InvokeModel 和 InvokeModelWithResponseStream——流式变体使用由 HTTP/2 客户端包装的事件流编解码器。

Amazon SNS

向主题和 SMS 目标发布、管理订阅和平台端点——纯 HTTPS POST + Signature v4。

STS + Cognito

AssumeRole、GetSessionToken 以及 Cognito 用户池登录/令牌刷新——OAuth2 流与 TsgcOAuth2Client 互操作。

生成的 AWS SDK

sgcOpenAPI 为发布 OpenAPI 或 Smithy 规范的任何 AWS 服务发出 Pascal 客户端类——CloudWatch、Kinesis、ECS、EKS、EventBridge 等的长尾服务。

每个服务的 Signature v4

每个 AWS 请求——S3 PUT、DynamoDB Query、Lambda Invoke,甚至 AWS IoT 使用的基于 WebSocket 的 MQTT 预签名 URL——都携带从您的访问密钥、秘密密钥、区域和服务名称派生的 Authorization: AWS4-HMAC-SHA256 标头(或查询字符串)。sgcWebSockets 提供一个单一的 Pascal Signature v4 辅助方法,处理规范请求构建、待签名字符串、HMAC 链和时钟偏差检测——可从任何 HTTP / WebSocket / MQTT 组件重用。结合 TsgcOAuth2Client 用于 STS / Cognito 流以及内置的 IAM 角色担任模式,您可以获得与任何其他语言中的官方 SDK 相同的安全态势。

上传到 S3 并发布到 SQS

一个 30 行的代码片段,将文件上传到 S3 存储桶并在 SQS 上排队通知——AWS 自动化的经典"hello world"。

uses
  sgcHTTP_Client, sgcHTTP_API_AmazonSQS, sgcAWS_SignatureV4;

var
  vHTTP:    TsgcHTTPClient;
  vSigner:  TsgcAWSSignatureV4;
  vSQS:     TsgcHTTP_API_AmazonSQS;
  vStream:  TFileStream;
begin
  // ----- 1) Upload a file to S3 -----
  vHTTP   := TsgcHTTPClient.Create(nil);
  vSigner := TsgcAWSSignatureV4.Create;
  try
    vSigner.AccessKey := 'AKIA...';
    vSigner.SecretKey := 'wJalrXUtn...';
    vSigner.Region    := 'eu-west-1';
    vSigner.Service   := 's3';

    vStream := TFileStream.Create('report.pdf', fmOpenRead);
    try
      vSigner.Sign(vHTTP, 'PUT',
        'https://my-bucket.s3.eu-west-1.amazonaws.com/report.pdf', vStream);
      vHTTP.Put('https://my-bucket.s3.eu-west-1.amazonaws.com/report.pdf', vStream);
    finally
      vStream.Free;
    end;

    // ----- 2) Push a notification on SQS -----
    vSQS := TsgcHTTP_API_AmazonSQS.Create(nil);
    try
      vSQS.AccessKey := 'AKIA...';
      vSQS.SecretKey := 'wJalrXUtn...';
      vSQS.Region    := 'eu-west-1';
      vSQS.QueueUrl  := 'https://sqs.eu-west-1.amazonaws.com/123456789012/uploads';
      vSQS.SendMessage('{"event":"upload","key":"report.pdf"}');
    finally
      vSQS.Free;
    end;
  finally
    vSigner.Free;
    vHTTP.Free;
  end;
end;

带 Signature v4 的基于 WebSocket 的 MQTT

AWS IoT Core 接受带 X.509 双向 TLS 的基于 TLS 的 MQTT(端口 8883)、使用 Signature v4 签名的基于 WebSocket 的 MQTT(端口 443),或带自定义授权器的 MQTT。TsgcWSAPI_AWSIoT 处理所有三种——WebSocket 传输是从阻止 8883 的企业网络访问的最简单路径,组件从您的访问密钥透明地生成预签名 URL。

uses
  sgcWSAPI_AWSIoT;

var
  vIoT: TsgcWSAPI_AWSIoT;
begin
  vIoT := TsgcWSAPI_AWSIoT.Create(nil);
  try
    vIoT.Authentication.SignatureV4.AccessKey := 'AKIA...';
    vIoT.Authentication.SignatureV4.SecretKey := 'wJalrXUtn...';
    vIoT.Authentication.SignatureV4.Region    := 'eu-west-1';
    vIoT.Host       := 'a1b2c3d4e5f6g7-ats.iot.eu-west-1.amazonaws.com';
    vIoT.OnMQTTConnect      := DoMQTTConnect;
    vIoT.OnMQTTSubscribe    := DoMQTTSubscribe;
    vIoT.OnMQTTPublish      := DoMQTTPublish;
    vIoT.Active := True;
  finally
    vIoT.Free;
  end;
end;

三个步骤完成您的第一次 AWS 调用

1. 安装

将 sgcWebSockets 放入您的 Delphi 或 C++Builder 安装——Delphi 7 至 13 的每个版本一个 IDE 包。下载试用版

2. 创建 IAM 用户

在 AWS 控制台中,创建一个程序访问的 IAM 用户,附加最小权限策略,并复制访问密钥/秘密密钥对。

3. 放置组件

对于 SQS 使用 TsgcHTTP_API_AmazonSQS,对于 IoT 使用 TsgcWSAPI_AWSIoT,对于其他任何东西,使用带 Signature v4 辅助方法的 TsgcHTTPClient

相关博客文章

Delphi Amazon AWS SDK

sgcWebSockets 如何将 AWS 界面公开给 Pascal 开发者的概述。

面向 Delphi 的 Amazon SQS 组件

TsgcHTTP_API_AmazonSQS 的分步演练——队列、FIFO、批处理、死信路由。

带 Signature v4 的 AWS IoT MQTT

如何在不使用 X.509 证书的情况下通过基于 WebSocket 的 MQTT 驱动 AWS IoT Core。

AWS IoT 自定义身份验证

使用 Lambda 授权器即时颁发 MQTT 凭据。

AWS Cognito + OAuth2

联合用户并从 Cognito 用户池获取 STS 会话令牌。

从 Delphi 访问 Amazon Braket

通过生成的 SDK 与 Amazon 量子计算服务通信。

今天就在您的 Delphi 应用中发布 AWS 集成

下载试用版——AWS 演示涵盖 S3、SQS、IoT 和 Lambda,附带即可编译的示例项目。