Delphi Azure SDK — IoT Hub、Service Bus、OAuth2 その他

Microsoft Azure 向けのネイティブ Pascal ツールキット: MQTT または AMQP で Azure IoT Hub にデバイスを接続、CBS 認証付き AMQP 1.0 で Azure Service Bus にメッセージを送受信、Azure AD OAuth2 と JWT でリクエストに署名、Azure OpenAI と通信、任意の Azure REST API の OpenAPI 仕様から強く型付けされたクライアントを生成 — すべて一貫した sgcWebSockets コンポーネントセットから。

すべての Azure 面のための Pascal コンポーネント

.NET ランタイム不要、Azure CLI 不要、PowerShell ブリッジ不要 — Azure エンドポイントに直接 HTTPS、MQTT、AMQP、OAuth2 を話す Delphi コンポーネントだけ。

Microsoft Azure は数百の REST API といくつかのストリーミングプロトコルを公開しています: リソースマネージャー、Cognitive Services、Storage、Cosmos DB、Azure OpenAI 用の HTTPS、IoT Hub のデバイス・ツー・クラウドメッセージング用の MQTT 3.1.1 / 5、Service Bus キュー、トピック、Event Hubs 用のCBS(Claims-Based Security)認証付き AMQP 1.0。sgcWebSockets は 3 つすべてのトランスポート用のネイティブコンポーネントを出荷します — IoT Hub 用の TsgcWSAPI_AzureIoT、Service Bus 用の AMQP 1.0 クライアント、その他すべて用の OAuth2 + JWT ヘルパー付き TsgcHTTPClient — 加えて、OpenAPI で文書化された任意の Azure API 用の Pascal クラスを出力する sgcOpenAPI コードジェネレーター。

認証は Pascal にきれいにマッピングされます: テナント ID、アプリケーション(クライアント)ID、クライアントシークレットまたは証明書ベースの秘密鍵が Azure AD OAuth2 クライアントクレデンシャルフローを駆動します。結果として得られる JWT アクセストークンは 1 つ以上の https://management.azure.com/.default(またはサービス固有)スコープを運び、すべての Authorization: Bearer ヘッダーに入ります。Service Bus では、CBS ハンドシェイクが、データリンクが開かれる前に特別な $cbs リンク上の AMQP フレームとして同じトークンを再利用します。ライブラリは自動的にライフサイクルを処理します。

コアコンポーネント

TsgcWSAPI_AzureIoTTsgcAMQPClientTsgcHTTPClientTsgcOAuth2ClientTsgcJWTClient

トランスポート

HTTPS / HTTP/2、TCP / WebSocket 上の MQTT 3.1.1 + 5、TCP / WebSocket 上の AMQP 1.0。

プラットフォーム

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

コードジェネレーター

sgcOpenAPI は Azure REST 仕様を消費し、Pascal クライアントクラスを出力します。

第一級ラッパー + 生成 SDK

Azure IoT Hub

TsgcWSAPI_AzureIoT — SAS トークンまたは X.509 相互 TLS 認証付き MQTT 3.1.1 / 5、デバイスツイン、ダイレクトメソッド、cloud-to-device メッセージ、ファイルアップロード。

Azure Service Bus(AMQP 1.0)

TsgcAMQPClient は Service Bus が要求する CBS 認証ハンドシェイク付きの AMQP 1.0 を話します — キュー、トピック、サブスクリプション、セッション、スケジュール済みメッセージ、dead-letter ルーティング。

Azure Event Hubs

同じ AMQP 1.0 クライアント — 高スループットテレメトリ取り込み用のパーティション分割イベントストリーミング、コンシューマーグループオフセット管理付き。

Azure Storage

共有キーまたは Azure AD 認証付きの HTTPS 経由の Blob、Queue、Table ストレージ — アップロード、ダウンロード、SAS URL、リース管理。

Azure OpenAI

TsgcHTTP_API_OpenAI が Azure OpenAI リソースと通信 — チャット、embeddings、関数呼び出し、ストリーミング、モデル名の代わりにデプロイメント ID。

Azure Functions

関数キー、システムキー、Azure AD 認証付きの関数 URL に対する HTTPS POST / GET 呼び出し。

Azure Cognitive Services

Speech(STT / TTS)、Vision、Language、Translator、Document Intelligence — すべて Bearer またはサブスクリプションキー認証付き HTTPS で到達可能。

生成 Azure SDK

sgcOpenAPI は OpenAPI ドキュメントを公開する任意の Azure REST API 用の Pascal クライアントクラスを出力します — Resource Manager、Key Vault、Cosmos DB、App Service、Logic Apps 他。

Azure AD OAuth2 + JWT、エンド・ツー・エンド

Azure のモダンな ID モデルは統一されています: Azure AD でアプリケーションを登録し、必要な API 権限(例: Service Bus Data Owner、IoT Hub Data Contributor、Cognitive Services User)を付与し、OAuth2 クライアントクレデンシャルフロー(サービス・ツー・サービス用)または認証コードフロー(エンドユーザーデータ用)で認証します。TsgcOAuth2Client は両方を駆動します。TsgcJWTClient は、共有シークレットより証明書ベース認証を好む場合にクライアントアサーションに署名します。結果のベアラートークンはすべての HTTPS 呼び出しに直接供給され、Service Bus / Event Hubs 上の CBS フレームは同じ JWT を再利用します — 資格情報管理の重複なし。

AMQP 1.0 上で Azure Service Bus にメッセージを送信

共有アクセス署名で認証し、CBS ハンドシェイクで AMQP 1.0 接続を開き、キューに発行する 25 行のスニペット。

uses
  sgcAMQP_Client, sgcAMQP_Classes_1_0;

var
  vAMQP: TsgcAMQPClient;
begin
  vAMQP := TsgcAMQPClient.Create(nil);
  try
    vAMQP.Version       := amqp100;
    vAMQP.Host          := 'my-namespace.servicebus.windows.net';
    vAMQP.Port          := 5671;
    vAMQP.TLS           := True;

    // CBS authentication with a SAS token
    vAMQP.Authentication.Mode        := amqpAuthCBS;
    vAMQP.Authentication.User        := 'RootManageSharedAccessKey';
    vAMQP.Authentication.Password    := 'SharedAccessSignature sr=...&sig=...&se=...&skn=RootManageSharedAccessKey';

    vAMQP.Connect;
    try
      vAMQP.SendMessage('orders',
        '{"orderId":1234,"total":42.50}');
    finally
      vAMQP.Disconnect;
    end;
  finally
    vAMQP.Free;
  end;
end;

SAS トークン付き MQTT デバイスクライアント

Azure IoT Hub は、TCP ポート 8883 または WebSocket ポート 443 上で MQTT 3.1.1 または 5(IoT Hub 固有のトピックスキーマ付き)を受け入れます。TsgcWSAPI_AzureIoT は接続、SAS トークン署名、デバイスツイン同期、ダイレクトメソッドディスパッチ、cloud-to-device メッセージチャネルを処理します — Windows、Linux、モバイルターゲット上で同じソースコードで。

uses
  sgcWSAPI_AzureIoT;

var
  vIoT: TsgcWSAPI_AzureIoT;
begin
  vIoT := TsgcWSAPI_AzureIoT.Create(nil);
  try
    vIoT.Authentication.SharedAccessKey.HostName := 'my-hub.azure-devices.net';
    vIoT.Authentication.SharedAccessKey.DeviceId := 'device-001';
    vIoT.Authentication.SharedAccessKey.Key      := 'BASE64-DEVICE-KEY==';

    vIoT.OnMQTTConnect           := DoMQTTConnect;
    vIoT.OnMQTTPublish           := DoMQTTPublish;
    vIoT.OnDeviceTwinDesired     := DoDeviceTwinDesired;
    vIoT.OnDirectMethod          := DoDirectMethod;

    vIoT.Active := True;
  finally
    vIoT.Free;
  end;
end;

最初の Azure 呼び出しまでの 3 ステップ

1. インストール

sgcWebSockets を Delphi または C++Builder IDE にドロップ — Delphi バージョン 7 から 13 までパッケージ 1 つずつ。トライアルをダウンロード

2. Azure AD アプリを登録

アプリ登録を作成し、クライアントシークレットを生成または証明書をアップロードし、呼び出すサービスの API 権限を付与。

3. コンポーネントをドロップ

IoT には TsgcWSAPI_AzureIoT、Service Bus / Event Hubs には AMQP 1.0 クライアント、REST 系には TsgcHTTPClient + TsgcOAuth2Client を使用。

関連ブログ投稿

AMQP 1.0 上の Azure Service Bus + CBS 認証

Azure Service Bus と Event Hubs が要求する AMQP CBS ハンドシェイクのステップバイステップウォークスルー。

Azure IoT ファイルアップロード

IoT Hub の blob ストレージアップロードフローを使って、MQTT メッセージ制限を超えるテレメトリペイロードを出荷。

RAD Studio から Azure OpenAI

TsgcHTTP_API_OpenAI を Azure OpenAI デプロイメントに向け、チャット、embeddings、関数呼び出しを行う。

今日 Delphi アプリに Azure 統合を出荷

トライアルをダウンロード — IoT Hub、Service Bus(AMQP 1.0)、Azure OpenAI デモはコンパイル準備済みで同梱。