Aracılığıyla paylaş


Azure IoT Hub ile bir cihazdan buluta dosya yükleme

Bu makalede şunların nasıl yapılacağını gösterilmektedir:

  • Azure IoT cihazı ve hizmet SDK'larını kullanarak Azure Blob Depolama'a dosya yüklemek için IoT Hub'ın dosya yükleme özelliklerini kullanın.
  • Dosyanın başarıyla karşıya yüklendiğini IoT Hub'a bildirin ve Azure IoT hizmeti SDK'larını kullanarak IoT Hub'dan dosya yükleme bildirimleri almak için bir arka uç hizmeti oluşturun.

Bazı senaryolarda, cihazlarınızın gönderdiği verileri IoT Hub'ın kabul eden nispeten küçük cihazdan buluta iletilerine kolayca eşleyemezsiniz. IoT Hub'daki dosya yükleme özellikleri, büyük veya karmaşık verileri buluta taşımanızı sağlar. Örneğin:

  • Videolar
  • Görüntü içeren büyük dosyalar
  • Yüksek frekansta örneklenen titreşim verileri
  • Önceden işlenmiş verilerin bir biçimi

Bu dosyalar genellikle Azure Data Factory veya Hadoop yığını gibi araçlar kullanılarak bulutta toplu olarak işlenir. Bir cihazdan dosya yüklemeniz gerektiğinde IoT Hub'ın güvenliğini ve güvenilirliğini kullanmaya devam edebilirsiniz. Bu makalede nasıl yapıldığını görebilirsiniz.

Bu makale, bu makalenin içinden başvurulan çalıştırılabilir SDK örneklerini tamamlamaya yöneliktir.

Daha fazla bilgi için bkz.

Önemli

X.509 sertifika yetkilisi (CA) kimlik doğrulaması kullanan cihazlarda dosya yükleme işlevi genel önizleme aşamasındadır ve önizleme modunun etkinleştirilmesi gerekir. Azure Cihaz Sağlama Hizmeti ile X.509 parmak izi kimlik doğrulaması veya X.509 sertifika kanıtlama kullanan cihazlarda genel olarak kullanılabilir. IoT Hub ile X.509 kimlik doğrulaması hakkında daha fazla bilgi edinmek için bkz . Desteklenen X.509 sertifikaları.

Önkoşullar

  • Bir IoT hub'ı. Bazı SDK çağrıları IoT Hub birincil bağlantı dizesi gerektirir, bu nedenle bağlantı dizesi not edin.

  • Kayıtlı bir cihaz. Bazı SDK çağrıları, cihazın birincil bağlantı dizesi gerektirir, bu nedenle bağlantı dizesi not edin.

  • IoT Hub Service Connect izni - Dosya karşıya yükleme bildirim iletilerini almak için arka uç hizmetinizin Service Connect iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur. Daha fazla bilgi için bkz . IoT hub'ına bağlanma.

  • Azure Depolama hesabını ve Azure Blob Depolama kapsayıcısını bağlayarak IoT hub'ınıza dosya yüklemeyi yapılandırın. Bunları Azure portalı, Azure CLI veya Azure PowerShell kullanarak yapılandırabilirsiniz.

Genel bakış

Bu nasıl yapılır iki bölüm içerir:

  • Cihaz uygulamasından dosya yükleme
  • Arka uç uygulamasında dosya karşıya yükleme bildirimi alma

Cihaz uygulamasından dosya yükleme

Bu bölümde, .NET için Azure IoT SDK'sında DeviceClient sınıfını kullanarak bir cihazdan IoT hub'ına dosya yükleme işlemi açıklanmaktadır.

Bir cihazdan IoT hub'ına dosya yüklemek için şu yordamı izleyin:

  1. IoT hub'ına bağlanma
  2. IoT hub'ından SAS URI'si alma
  3. Dosyayı Azure depolamaya yükleme
  4. Dosya karşıya yükleme durumunu IoT hub'ına bildirme

IoT Hub’a cihaz bağlama

Bir cihaz uygulaması aşağıdaki yöntemleri kullanarak IoT Hub ile kimlik doğrulaması yapabilir:

  • X.509 sertifikası
  • Paylaşılan erişim anahtarı

X.509 sertifikası kullanarak kimlik doğrulaması

X.509 sertifikası kullanarak bir cihazı IoT Hub'a bağlamak için:

  1. Cihaz ve sertifika bilgilerini içeren bir nesne oluşturmak için DeviceAuthenticationWithX509Certificate kullanın. DeviceAuthenticationWithX509Certificate ikinci parametre DeviceClient.Create olarak geçirilir (2. adım).

  2. Cihazı bir X.509 sertifikası kullanarak IoT Hub'a bağlamak için DeviceClient.Create kullanın.

Bu örnekte, cihaz ve sertifika bilgileri öğesine DeviceClient.Creategeçirilen nesnede authDeviceAuthenticationWithX509Certificate doldurulur.

Bu örnekte, netlik için yerel değişkenler olarak sertifika giriş parametresi değerleri gösterilmektedir. Bir üretim sisteminde, hassas giriş parametrelerini ortam değişkenlerinde veya daha güvenli başka bir depolama konumunda depolayın. Örneğin, konak adı ortam değişkenini okumak için kullanın Environment.GetEnvironmentVariable("HOSTNAME") .

RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";

var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);

using var deviceClient = DeviceClient.Create(
    HostName,
    auth,
    TransportType.Amqp);

Sertifika kimlik doğrulaması hakkında daha fazla bilgi için bkz:

Kod örnekleri

Cihaz X.509 sertifika kimlik doğrulamasının çalışma örnekleri için bkz:

Paylaşılan erişim anahtarı kullanarak kimlik doğrulaması yapma

Cihaza bağlanmak için CreateFromConnectionString'i çağırın. Cihaz birincil bağlantı dizesi geçirin.

AMQP varsayılan aktarım protokolüdür.

static string connectionString = "{device primary connection string}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString);

IoT hub'ından SAS URI'si alma

Dosya yükleme ayrıntılarını almak için GetFileUploadSasUriAsync'i arayın. SAS URI'si bir sonraki adımda bir cihazdan Blob Depolama'ya dosya yüklemek için kullanılır.

const string filePath = "TestPayload.txt";
using var fileStreamSource = new FileStream(filePath, FileMode.Open);
var fileName = Path.GetFileName(fileStreamSource.Name);
var fileUploadSasUriRequest = new FileUploadSasUriRequest
{
    BlobName = fileName
};

FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, System.Threading.CancellationToken cancellationToken = default);
Uri uploadUri = sasUri.GetBlobUri();

Azure depolamaya dosya yükleme

Azure depolamaya dosya yüklemek için:

  1. Karşıya dosya yükleme URI'sini geçirerek bir blockBlobClient nesnesi oluşturun.

  2. Sas URI'sini geçirerek Blob Depolama'ya dosya yüklemek için UploadAsync yöntemini kullanın. İsteğe bağlı olarak Blob karşıya yükleme seçenekleri ve iptal belirteci parametreleri ekleyebilirsiniz.

Azure Blob istemcisi, dosyayı Azure Depolama'ya yüklemek için protokol olarak her zaman HTTPS kullanır.

Bu örnekte, BlockBlobClient Azure Depolama blok Blob istemcisi oluşturmak için SAS URI'sine geçirilir ve dosyayı karşıya yükler:

var blockBlobClient = new BlockBlobClient(uploadUri);
await blockBlobClient.UploadAsync(fileStreamSource, null, null);

Dosya karşıya yükleme durumunu IoT hub'ına bildirme

Cihaz istemcisinin karşıya yüklemeyi tamamlayıp fileUploadCompletionNotification nesnesi geçirerek IoT hub'ına bildirim göndermek için CompleteFileUploadAsync kullanın. IsSuccess bayrağı, karşıya yüklemenin başarılı olup olmadığını gösterir. Bildirim aldıktan sonra IoT hub'ı karşıya yükleme (SAS URI'sı) ile ilişkili kaynakları serbest bırakır.

Dosya karşıya yükleme bildirimleri etkinleştirilirse, IoT hub dosya karşıya yükleme bildirimi için yapılandırılmış arka uç hizmetlerine bir dosya karşıya yükleme bildirimi iletisi gönderir.

var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
{
    // Mandatory. Must be the same value as the correlation id returned in the sas uri response
    CorrelationId = sasUri.CorrelationId,

    // Mandatory. Will be present when service client receives this file upload notification
    IsSuccess = true,

    // Optional, user defined status code. Will be present when service client receives this file upload notification
    StatusCode = 200,

    // Optional, user-defined status description. Will be present when service client receives this file upload notification
    StatusDescription = "Success"
};

await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);

SDK dosyası karşıya yükleme örneği

SDK bu dosya karşıya yükleme örneğini içerir.

Arka uç uygulamasında dosya karşıya yükleme bildirimi alma

IoT hub'ından dosya karşıya yükleme bildirim iletileri almak için bir arka uç hizmeti oluşturabilirsiniz.

ServiceClient sınıfı, hizmetlerin dosya yükleme bildirimlerini almak için kullanabileceği yöntemler içerir.

Hizmet NuGet Paketi ekleme

Arka uç hizmet uygulamaları Için Microsoft.Azure.Devices NuGet paketi gerekir.

IoT hub'ına bağlanma

Aşağıdaki yöntemleri kullanarak bir arka uç hizmetini IoT Hub'a bağlayabilirsiniz:

  • Paylaşılan erişim ilkesi
  • Microsoft Entra

Önemli

Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.

Paylaşılan erişim ilkesi kullanarak bağlanma

CreateFromConnectionString kullanarak bir arka uç uygulamasını bir cihaza bağlayın. Uygulamanızın hizmet bağlama iznine ihtiyacı var. Bu paylaşılan erişim ilkesini parametresi olarak bağlantı dizesi sağlayınfromConnectionString. Paylaşılan erişim ilkeleri hakkında daha fazla bilgi için bkz . Paylaşılan erişim imzalarıyla IoT Hub'a erişimi denetleme.

Örneğin:

using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "{Shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Microsoft Entra kullanarak bağlanma

Microsoft Entra kullanan bir arka uç uygulamasının IoT Hub'a bağlanmadan önce başarıyla kimlik doğrulaması yapması ve güvenlik belirteci kimlik bilgilerini alması gerekir. Bu belirteç bir IoT Hub bağlantı yöntemine geçirilir. IoT Hub için Microsoft Entra'yı ayarlama ve kullanma hakkında genel bilgi için bkz . Microsoft Entra Id kullanarak IoT Hub'a erişimi denetleme.

Microsoft Entra uygulamasını yapılandırma

Tercih ettiğiniz kimlik doğrulaması kimlik bilgileri için yapılandırılmış bir Microsoft Entra uygulaması ayarlamanız gerekir. Uygulama, arka uç uygulaması tarafından kimlik doğrulaması için kullanılan gizli dizi gibi parametreler içerir. Kullanılabilir uygulama kimlik doğrulaması yapılandırmaları şunlardır:

  • İstemci gizli anahtarı
  • Sertifika
  • Federasyon kimliği kimlik bilgileri

Microsoft Entra uygulamaları, gerçekleştirilen işlemlere bağlı olarak belirli rol izinleri gerektirebilir. Örneğin, IoT Hub cihazına ve modül ikizlerine okuma ve yazma erişimini etkinleştirmek için IoT Hub İkizi Katkıda Bulunanı gereklidir. Daha fazla bilgi için bkz . Azure RBAC rol atamasını kullanarak IoT Hub erişimini yönetme.

Microsoft Entra uygulamasını ayarlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç: Microsoft kimlik platformu ile uygulama kaydetme.

DefaultAzureCredential kullanarak kimlik doğrulaması

Arka uç uygulamasının kimliğini doğrulamak için Microsoft Entra kullanmanın en kolay yolu DefaultAzureCredential kullanmaktır, ancak üretim ortamında belirli TokenCredential veya ayrıştırılmış ChainedTokenCredentialbir dahil olmak üzere farklı bir yöntem kullanılması önerilir. Kolaylık olması için, bu bölümde kullanarak DefaultAzureCredential kimlik doğrulaması ve İstemci gizli dizisi açıklanmaktadır. kullanmanın DefaultAzureCredentialavantajları ve dezavantajları hakkında daha fazla bilgi için bkz . DefaultAzureCredential için kullanım kılavuzu.

DefaultAzureCredential farklı kimlik doğrulama mekanizmalarını destekler ve yürütülmekte olduğu ortama göre uygun kimlik bilgisi türünü belirler. Çalışan bir kimlik bilgisi bulana kadar sırayla birden çok kimlik bilgisi türü kullanmayı dener.

Microsoft Entra, bu NuGet paketlerini ve bunlara karşılık gelen using deyimleri gerektirir:

  • Azure.Core
  • Azure.Identity
using Azure.Core;
using Azure.Identity;

Bu örnekte, Microsoft Entra uygulama kaydı istemci gizli dizisi, istemci kimliği ve kiracı kimliği ortam değişkenlerine eklenir. Bu ortam değişkenleri tarafından DefaultAzureCredential uygulamanın kimliğini doğrulamak için kullanılır. Başarılı bir Microsoft Entra kimlik doğrulamasının sonucu, IoT Hub bağlantı yöntemine geçirilen bir güvenlik belirteci kimlik bilgisidir.

string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";

Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);

TokenCredential tokenCredential = new DefaultAzureCredential();

Sonuçta elde edilen TokenCredential , Microsoft Entra kimlik bilgilerini kabul eden herhangi bir SDK istemcisi için IoT Hub'a bağlanma yöntemine geçirilebilir:

Bu örnekte, TokenCredential bir ServiceClient bağlantı nesnesi oluşturmak için öğesine geçirilir ServiceClient.Create.

string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);

Bu örnekte, TokenCredential bir RegistryManager nesnesi oluşturmak için öğesine geçirilirRegistryManager.Create.

string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
Kod örneği

Microsoft Entra hizmeti kimlik doğrulamasının çalışan bir örneği için bkz . Rol tabanlı kimlik doğrulama örneği.

Dosya karşıya yükleme bildirimi alma

Dosya karşıya yükleme bildirimi almak için:

  1. CancellationToken oluşturun.
  2. Bildirim alıcısı oluşturmak için GetFileNotificationReceiver öğesini çağırın.
  3. Dosya karşıya yükleme bildirimini beklemek için ReceiveAsync ile bir döngü kullanın.

Örneğin:

// Define the cancellation token
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;

// Create a notification receiver
var notificationReceiver = serviceClient.GetFileNotificationReceiver();
Console.WriteLine("\nReceiving file upload notification from service");

// Check for file upload notifications
while (true)
{
    var fileUploadNotification = await notificationReceiver.ReceiveAsync(token);
    if (fileUploadNotification == null) continue;
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("Received file upload notification: {0}", 
        string.Join(", ", fileUploadNotification.BlobName));
    Console.ResetColor();
    await notificationReceiver.CompleteAsync(fileUploadNotification);
}

SDK dosyası karşıya yükleme alıcı örneği

SDK bu dosyayı karşıya yükleme alıcısı örneğini içerir.

Genel bakış

Bu nasıl yapılır iki bölüm içerir:

  • Cihaz uygulamasından dosya yükleme
  • Arka uç uygulamasında dosya karşıya yükleme bildirimi alma

Cihaz uygulamasından dosya yükleme

Bu bölümde, Java için Azure IoT SDK'sından DeviceClient sınıfını kullanarak bir cihazdan IoT hub'ına dosya yükleme işlemi açıklanmaktadır.

Bir cihazdan IoT hub'ına dosya yüklemek için şu yordamı izleyin:

  1. Cihazı IoT Hub'a bağlama
  2. IoT hub'ından SAS URI'si alma
  3. Dosyayı Azure Depolama'ya yükleme
  4. IoT hub'ına dosya karşıya yükleme durum bildirimi gönderme

IoT Hub’a cihaz bağlama

Bir cihaz uygulaması aşağıdaki yöntemleri kullanarak IoT Hub ile kimlik doğrulaması yapabilir:

  • X.509 sertifikası
  • Paylaşılan erişim anahtarı

X.509 sertifikası kullanarak kimlik doğrulaması

X.509 sertifikası kullanarak bir cihazı IoT Hub'a bağlamak için:

  1. buildSSLContext kullanarak SSLContext nesnesini derleyin.
  2. SSLContext Bilgileri clientOptions nesnesine ekleyin.
  3. Cihazdan ClientOptions IoT Hub'a bağlantıyı oluşturmak için bilgileri kullanarak DeviceClient'ı çağırın.

Bu örnekte, netlik için yerel değişkenler olarak sertifika giriş parametresi değerleri gösterilmektedir. Bir üretim sisteminde, hassas giriş parametrelerini ortam değişkenlerinde veya daha güvenli başka bir depolama konumunda depolayın. Örneğin, ortak anahtar sertifika dizesi ortam değişkenlerini okumak için kullanın Environment.GetEnvironmentVariable("PUBLICKEY") .

private static final String publicKeyCertificateString =
        "-----BEGIN CERTIFICATE-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END CERTIFICATE-----\n";

//PEM encoded representation of the private key
private static final String privateKeyString =
        "-----BEGIN EC PRIVATE KEY-----\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
        "-----END EC PRIVATE KEY-----\n";

SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);

Sertifika kimlik doğrulaması hakkında daha fazla bilgi için bkz:

Kod örnekleri

Cihaz X.509 sertifika kimlik doğrulamasının çalışma örnekleri için bkz:

Paylaşılan erişim anahtarı kullanarak kimlik doğrulaması yapma

Dosya yükleme işlemleri her zaman HTTPS kullanır, ancak DeviceClient telemetri, cihaz yöntemi ve cihaz ikizi gibi diğer hizmetler için IotHubClientProtocol tanımlayabilir.

IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

Cihazın birincil bağlantı dizesi kullanarak cihaza bağlanmak için öğesinin DeviceClient örneğini açın.

String connString = "{IoT hub connection string}";
DeviceClient client = new DeviceClient(connString, protocol);

IoT hub'ından SAS URI'si alma

FileUploadSasUriResponse nesnesi almak için getFileUploadSasUri çağrısı yapın.

FileUploadSasUriResponse bu yöntemleri ve dönüş değerlerini içerir. Dönüş değerleri dosya yükleme yöntemlerine geçirilebilir.

Metot Dönüş değeri
getCorrelationId() Bağıntı Kimliği
getContainerName() Kapsayıcı adı
getBlobName() Blob adı
getBlobUri() Blob URI'sı

Örneğin:

FileUploadSasUriResponse sasUriResponse = client.getFileUploadSasUri(new FileUploadSasUriRequest(file.getName()));

System.out.println("Successfully got SAS URI from IoT hub");
System.out.println("Correlation Id: " + sasUriResponse.getCorrelationId());
System.out.println("Container name: " + sasUriResponse.getContainerName());
System.out.println("Blob name: " + sasUriResponse.getBlobName());
System.out.println("Blob Uri: " + sasUriResponse.getBlobUri());

Dosyayı Azure Depolama'ya yükleme

BlobClient nesnesini oluşturmak için blob URI uç noktasını BlobClientBuilder.buildclient'a geçirin.

BlobClient blobClient =
    new BlobClientBuilder()
        .endpoint(sasUriResponse.getBlobUri().toString())
        .buildClient();

Dosyayı Blob Depolama'ya yüklemek için uploadFromFile öğesini çağırın.

String fullFileName = "Path of the file to upload";
blobClient.uploadFromFile(fullFileName);

IoT hub'ına dosya karşıya yükleme durum bildirimi gönderme

Bir dosya karşıya yükleme girişiminin ardından IoT hub'ına karşıya yükleme durumu bildirimi gönderin.

FileUploadCompletionNotification nesnesi oluşturun. ve isSuccess dosyasını karşıya correlationId yükleme başarı durumunu geçirin. Dosya yükleme başarılı olduğunda, false başarılı olmadığında bir isSuccesstrue değer geçirin.

FileUploadCompletionNotification dosya karşıya yükleme başarısız olsa bile çağrılmalıdır. IoT hub'ının belirli bir zamanda etkin olmasına izin verilen sabit sayıda SAS URI'sine sahiptir. Karşıya dosya yükleme işlemini tamamladıktan sonra, diğer SAS URI'sinin oluşturulabilmesi için SAS URI'nizi boşaltmanız gerekir. Sas URI'leri bu API aracılığıyla serbest değilse, SAS URI'lerinin bir IoT hub'ına göre ne kadar süreyle yaşayacak şekilde yapılandırıldığına bağlı olarak sonunda kendini serbesttir.

Bu örnek başarılı bir durum geçirir.

FileUploadCompletionNotification completionNotification = new FileUploadCompletionNotification(sasUriResponse.getCorrelationId(), true);
client.completeFileUpload(completionNotification);

İstemciyi kapatma

Kaynakları serbest.client

client.closeNow();

Arka uç uygulaması oluşturma

Bu bölümde, arka uç uygulamasında dosya karşıya yükleme bildiriminin nasıl alındığı açıklanmaktadır.

ServiceClient sınıfı, hizmetlerin dosya yükleme bildirimlerini almak için kullanabileceği yöntemler içerir.

İçeri aktarma deyimleri ekleme

Azure IoT Java SDK'sını ve özel durum işleyicisini kullanmak için bu içeri aktarma deyimlerini ekleyin.

import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;

IoT Hub'a bağlanma

Aşağıdaki yöntemleri kullanarak bir arka uç hizmetini IoT Hub'a bağlayabilirsiniz:

  • Paylaşılan erişim ilkesi
  • Microsoft Entra

Önemli

Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.

Paylaşılan erişim ilkesi kullanarak bağlanma

Bağlantı protokollerini tanımlama

Hizmet istemcisi tarafından ioT Hub ile iletişim kurmak için kullanılan uygulama katmanı protokollerini tanımlamak için IotHubServiceClientProtocol kullanın.

IotHubServiceClientProtocolyalnızca veya AMQPS_WS numaralandırmasını AMQPS kabul eder.

private static final IotHubServiceClientProtocol protocol =    
    IotHubServiceClientProtocol.AMQPS;
ServiceClient nesnesini oluşturma

Iot Hub bağlantı dizesi ve protokol sağlayarak ServiceClient nesnesini oluşturun.

Cihazdaki bir dosyayı IoT Hub'a yüklemek için hizmetinizin hizmet bağlama iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur.

Oluşturucuya ServiceClient parametre olarak hizmet paylaşılan erişim ilkesini sağlayın. Paylaşılan erişim ilkeleri hakkında daha fazla bilgi için bkz . Paylaşılan erişim imzalarıyla IoT Hub'a erişimi denetleme.

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
Uygulama ile IoT Hub arasındaki bağlantıyı açma

AMQP gönderen bağlantısını açın . Bu yöntem, uygulama ile IoT Hub arasında bağlantı oluşturur.

serviceClient.open();

Microsoft Entra kullanarak bağlanma

Microsoft Entra kullanan bir arka uç uygulamasının IoT Hub'a bağlanmadan önce başarıyla kimlik doğrulaması yapması ve güvenlik belirteci kimlik bilgilerini alması gerekir. Bu belirteç bir IoT Hub bağlantı yöntemine geçirilir. IoT Hub için Microsoft Entra'yı ayarlama ve kullanma hakkında genel bilgi için bkz . Microsoft Entra Id kullanarak IoT Hub'a erişimi denetleme.

Java SDK kimlik doğrulamasına genel bakış için bkz . Java ve Azure Identity ile Azure kimlik doğrulaması.

Kolaylık olması için bu bölüm, istemci gizli dizisini kullanarak kimlik doğrulamasını açıklamaya odaklanır.

Microsoft Entra uygulamasını yapılandırma

Tercih ettiğiniz kimlik doğrulaması kimlik bilgileri için yapılandırılmış bir Microsoft Entra uygulaması ayarlamanız gerekir. Uygulama, arka uç uygulaması tarafından kimlik doğrulaması için kullanılan gizli dizi gibi parametreler içerir. Kullanılabilir uygulama kimlik doğrulaması yapılandırmaları şunlardır:

  • İstemci gizli anahtarı
  • Sertifika
  • Federasyon kimliği kimlik bilgileri

Microsoft Entra uygulamaları, gerçekleştirilen işlemlere bağlı olarak belirli rol izinleri gerektirebilir. Örneğin, IoT Hub cihazına ve modül ikizlerine okuma ve yazma erişimini etkinleştirmek için IoT Hub İkizi Katkıda Bulunanı gereklidir. Daha fazla bilgi için bkz . Azure RBAC rol atamasını kullanarak IoT Hub erişimini yönetme.

Microsoft Entra uygulamasını ayarlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç: Microsoft kimlik platformu ile uygulama kaydetme.

DefaultAzureCredential kullanarak kimlik doğrulaması

Arka uç uygulamasının kimliğini doğrulamak için Microsoft Entra kullanmanın en kolay yolu DefaultAzureCredential kullanmaktır, ancak üretim ortamında belirli TokenCredential veya ayrıştırılmış ChainedTokenCredentialbir dahil olmak üzere farklı bir yöntem kullanılması önerilir. kullanmanın DefaultAzureCredentialavantajları ve dezavantajları hakkında daha fazla bilgi için bkz . Java için Azure Identity istemci kitaplığındaki kimlik bilgileri zincirleri.

DefaultAzureCredential farklı kimlik doğrulama mekanizmalarını destekler ve yürütülmekte olduğu ortama göre uygun kimlik bilgisi türünü belirler. Çalışan bir kimlik bilgisi bulana kadar sırayla birden çok kimlik bilgisi türü kullanmayı dener.

DefaultAzureCredentialBuilder kullanarak Microsoft Entra uygulaması kimlik bilgilerini doğrulayabilirsiniz. İstemci gizli anahtarı tenantID, clientID ve istemci gizli anahtarı değerleri gibi bağlantı parametrelerini ortam değişkenleri olarak kaydedin. TokenCredential oluşturulduktan sonra bunu ServiceClient'a veya başka bir oluşturucuya 'credential' parametresi olarak geçirin.

Bu örnekte, DefaultAzureCredentialBuilder DefaultAzureCredential bölümünde açıklanan listeden bir bağlantının kimliğini doğrulamayı dener. Başarılı bir Microsoft Entra kimlik doğrulamasının sonucu, ServiceClient gibi bir oluşturucuya geçirilen bir güvenlik belirteci kimlik bilgisidir.

TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
ClientSecretCredentialBuilder kullanarak kimlik doğrulaması yapma

İstemci gizli dizi bilgilerini kullanarak kimlik bilgisi oluşturmak için ClientSecretCredentialBuilder'ı kullanabilirsiniz. Başarılı olursa, bu yöntem ServiceClient'a veya başka bir oluşturucuya 'credential' parametresi olarak geçirilebilen bir TokenCredential döndürür.

Bu örnekte, Ortam değişkenlerine Microsoft Entra uygulama kaydı istemci gizli dizisi, istemci kimliği ve kiracı kimliği değerleri eklenmiştir. Bu ortam değişkenleri tarafından ClientSecretCredentialBuilder kimlik bilgilerini oluşturmak için kullanılır.

string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");

TokenCredential credential =
     new ClientSecretCredentialBuilder()
          .tenantId(tenantID)
          .clientId(clientID)
          .clientSecret(clientSecretValue)
          .build();
Diğer kimlik doğrulama sınıfları

Java SDK'sı, Microsoft Entra ile arka uç uygulamasının kimliğini doğrulayan şu sınıfları da içerir:

Kod örnekleri

Microsoft Entra hizmeti kimlik doğrulamasının çalışma örnekleri için bkz . Rol tabanlı kimlik doğrulama örneği.

Dosya karşıya yükleme durumunu denetleme

Dosya karşıya yükleme durumunu denetlemek için:

  1. GetFileUploadNotificationReceiver nesnesi oluşturun.
  2. IoT hub'ına bağlanmak için open kullanın.
  3. Dosya karşıya yükleme durumunu denetlemek için alma çağrısı. Bu yöntem bir fileUploadNotification nesnesi döndürür. Karşıya yükleme bildirimi alınırsa fileUploadNotification yöntemlerini kullanarak karşıya yükleme durumu alanlarını görüntüleyebilirsiniz.

Örneğin:

FileUploadNotificationReceiver receiver = serviceClient.getFileUploadNotificationReceiver();
receiver.open();
FileUploadNotification fileUploadNotification = receiver.receive(2000);

if (fileUploadNotification != null)
{
    System.out.println("File Upload notification received");
    System.out.println("Device Id : " + fileUploadNotification.getDeviceId());
    System.out.println("Blob Uri: " + fileUploadNotification.getBlobUri());
    System.out.println("Blob Name: " + fileUploadNotification.getBlobName());
    System.out.println("Last Updated : " + fileUploadNotification.getLastUpdatedTimeDate());
    System.out.println("Blob Size (Bytes): " + fileUploadNotification.getBlobSizeInBytes());
    System.out.println("Enqueued Time: " + fileUploadNotification.getEnqueuedTimeUtcDate());
}
else
{
    System.out.println("No file upload notification");
}

// Close the receiver object
receiver.close();

SDK dosyası karşıya yükleme örnekleri

İki Java dosyası karşıya yükleme örneği vardır.

Paketleri yükleme

İlgili kodu çağırmadan önce azure-iot-device kitaplığı yüklenmelidir.

pip install azure-iot-device

Azure.storage.blob paketi, dosya yükleme işlemini gerçekleştirmek için kullanılır.

pip install azure.storage.blob

Bir cihaz uygulamasından dosya yükleme

Bu bölümde, Python için Azure IoT SDK'sından IoTHubDeviceClient sınıfını kullanarak bir cihazdan IoT hub'ına dosya yükleme işlemi açıklanmaktadır.

Kitaplıkları içeri aktarma

import os
from azure.iot.device import IoTHubDeviceClient
from azure.core.exceptions import AzureError
from azure.storage.blob import BlobClient

IoT Hub’a cihaz bağlama

Bir cihaz uygulaması aşağıdaki yöntemleri kullanarak IoT Hub ile kimlik doğrulaması yapabilir:

  • X.509 sertifikası
  • Paylaşılan erişim anahtarı

X.509 sertifikası kullanarak kimlik doğrulaması

X.509 sertifikası kullanarak bir cihazı IoT Hub'a bağlamak için:

  1. X.509 sertifika parametrelerini eklemek için create_from_x509_certificate kullanma
  2. Cihaz istemcisini bağlamak için arama bağlantısı

Bu örnekte, netlik için yerel değişkenler olarak sertifika giriş parametresi değerleri gösterilmektedir. Bir üretim sisteminde, hassas giriş parametrelerini ortam değişkenlerinde veya daha güvenli başka bir depolama konumunda depolayın. Örneğin, konak adı ortam değişkenini okumak için kullanın os.getenv("HOSTNAME") .

# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"

# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"

# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"

x509 = X509(
    cert_file,
    key_file,
    pass_phrase,
)

# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
    hostname=hostname, device_id=device_id, x509=x509
)

# Connect to IoT Hub
await device_client.connect()

Sertifika kimlik doğrulaması hakkında daha fazla bilgi için bkz:

Kod örnekleri

Cihaz X.509 sertifika kimlik doğrulamasının çalışma örnekleri için, Async hub senaryolarında dosya adları x509 ile biten örneklere bakın.

Paylaşılan erişim anahtarı kullanarak kimlik doğrulaması yapma

Bir cihazı IoT Hub'a bağlamak için:

  1. Cihaz birincil bağlantı dizesi eklemek için create_from_connection_string'ı çağırın.
  2. Cihaz istemcisini bağlamak için connect çağrısı yapın.

Örneğin:

# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)

# Connect the client
device_client.connect()

Blob Depolama bilgilerini alma

IoT hub'ından bağlantılı Bir Azure Depolama hesabı hakkında bilgi almak için get_storage_info_for_blob'ı arayın. Bu bilgiler konak adını, kapsayıcı adını, blob adını ve SAS belirtecini içerir. yöntemi de get_storage_info_for_blob yönteminde notify_blob_upload_status kullanılan bir correlation_iddöndürür. correlation_id IoT Hub'ın üzerinde çalıştığınız Blobu işaretleme yöntemidir.

# Get the storage info for the blob
PATH_TO_FILE = "{Full path to local file}"
blob_name = os.path.basename(PATH_TO_FILE)
blob_info = device_client.get_storage_info_for_blob(blob_name)

Blob Depolama'ya dosya yükleme

Blob Depolama'ya dosya yüklemek için:

  1. blob URL'sinden BlobClientnesnesi oluşturmak için from_blob_url kullanın.
  2. Dosyayı Blob Depolama'ya yüklemek için upload_blob'yi çağırın.

Bu örnek, BlobClient'ı başlatmak için kullandığı URL'yi oluşturmak için yapısını ayrıştırmaktadır.blob_info Ardından dosyayı Blob Depolama'ya yüklemek için çağrısında upload_blob bulunur.

try:
    sas_url = "https://{}/{}/{}{}".format(
        blob_info["hostName"],
        blob_info["containerName"],
        blob_info["blobName"],
        blob_info["sasToken"]
    )

    print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))

    # Upload the specified file
    with BlobClient.from_blob_url(sas_url) as blob_client:
        with open(file_name, "rb") as f:
            result = blob_client.upload_blob(f, overwrite=True)
            return (True, result)

except FileNotFoundError as ex:
    # catch file not found and add an HTTP status code to return in notification to IoT hub
    ex.status_code = 404
    return (False, ex)

except AzureError as ex:
    # catch Azure errors that might result from the upload operation
    return (False, ex)

IoT hub'ına karşıya yükleme durumunu bildirme

Blob Depolama işleminin durumunu IoT hub'ına bildirmek için notify_blob_upload_status kullanın. correlation_id yöntemi tarafından elde edilen geçirilirget_storage_info_for_blob. , correlation_id IoT hub'ı tarafından dosya yükleme görevinin durumuyla ilgili bir bildirim dinleyen herhangi bir hizmeti bilgilendirmek için kullanılır.

Bu örnek IoT hub'ına başarılı bir dosya yükleme işlemi olduğunu bildirir:

device_client.notify_blob_upload_status(storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)

Cihaz istemcisini kapatma

İstemciyi kapatın. Bu yöntem çağrıldıktan sonra, daha fazla istemci çağrısı girişimi bir ClientError'ın tetiklenmesiyle sonuçlanır.

device_client.shutdown()

SDK dosyası karşıya yükleme örnekleri

SDK iki dosya karşıya yükleme örneği içerir:

Genel bakış

Bu makalede, Node.js için Azure IoT SDK'sını kullanarak bir dosya yüklemek üzere bir cihaz uygulaması oluşturma ve arka uç hizmet uygulamasının dosya karşıya yükleme bildirimi alma işlemleri açıklanmaktadır.

Cihaz uygulaması oluşturma

Bu bölümde, Node.js için Azure IoT SDK'sında azure-iot-device paketini kullanarak bir cihazdan IoT hub'ına dosya yükleme işlemi açıklanmaktadır.

SDK paketlerini yükleme

Geliştirme makinenize azure-iot-device SDK'sını, azure-iot-device-mqtt'yi ve @azure/storage-blob paketlerini yüklemek için şu komutu çalıştırın:

npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save

azure-iot-device paketi, IoT cihazlarıyla arabirim oluşturan nesneler içerir.

Bir cihazdan IoT hub'ına dosya yüklemek için şu yordamı izleyin:

  1. Cihazı IoT Hub'a bağlama
  2. IoT Hub'dan Blob paylaşılan erişim imzası (SAS) belirteci alma
  3. Dosyayı Azure Depolama'ya yükleme
  4. IoT hub'ına dosya karşıya yükleme durum bildirimi gönderme

Modül oluşturma

Yüklü paketleri kullanarak İstemci, Protokol, hatalar ve yol modülleri oluşturun.

const Protocol = require('azure-iot-device-mqtt').Mqtt;
const errors = require('azure-iot-common').errors;
const path = require('path');

IoT Hub’a cihaz bağlama

Bir cihaz uygulaması aşağıdaki yöntemleri kullanarak IoT Hub ile kimlik doğrulaması yapabilir:

  • X.509 sertifikası
  • Paylaşılan erişim anahtarı

X.509 sertifikası kullanarak kimlik doğrulaması

X.509 sertifikası cihazdan IoT Hub'a bağlantı aktarımına eklenir.

X.509 sertifikası kullanarak cihazdan IoT Hub'a bağlantıyı yapılandırmak için:

  1. Cihaz veya kimlik modülünü bağlantı dizesi eklemek ve nesneye aktarım türü eklemek için FromConnectionString'den çağrısı yapınClient. x509=true bir sertifikanın öğesine eklendiğini belirtmek için bağlantı dizesi ekleyinDeviceClientOptions. Örneğin:

    • Cihaz bağlantı dizesi:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

    • Kimlik modülü bağlantı dizesi:

      HostName=xxxxx.azure-devices.net;DeviceId=Device-1;ModuleId=Module-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true

  2. Sertifika ayrıntılarıyla bir JSON değişkeni yapılandırın ve DeviceClientOptions'a geçirin.

  3. İstemci aktarımına bir X.509 sertifikası ve anahtarı (ve isteğe bağlı olarak parola) eklemek için setOptions'ı çağırın.

  4. Cihazdan IoT Hub'a bağlantıyı açmak için open çağrısı yapın.

Bu örnekte, bir JSON değişkeni içindeki sertifika yapılandırma bilgileri gösterilir. Sertifika yapılandırması clientOptions öğesine setOptionsgeçirilir ve bağlantı kullanılarak openaçılır.

const Client = require('azure-iot-device').Client;
const Protocol = require('azure-iot-device-mqtt').Mqtt;
// Connection string illustrated for demonstration only. Never hard-code the connection string in production. Instead use an environmental variable or other secure storage.
const connectionString = `HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true`
const client = Client.fromConnectionString(connectionString, Protocol);

var clientOptions = {
   cert: myX509Certificate,
   key: myX509Key,
   passphrase: passphrase,
   http: {
     receivePolicy: {
       interval: 10
     }
   }
 }

 client.setOptions(clientOptions);
 client.open(connectCallback);

Sertifika kimlik doğrulaması hakkında daha fazla bilgi için bkz:

Kod örneği

Cihaz X.509 sertifika kimlik doğrulamasının çalışan bir örneği için bkz . Basit örnek cihaz X.509.

Paylaşılan erişim anahtarı kullanarak kimlik doğrulaması yapma

Aktarım protokolü seçme

Client nesnesi şu protokolleri destekler:

  • Amqp
  • Http- kullanılırken HttpClient örnek, IoT Hub'dan gelen iletileri seyrek denetler (en az 25 dakikada bir).
  • Mqtt
  • MqttWs
  • AmqpWs

Geliştirme makinenize gerekli aktarım protokollerini yükleyin.

Örneğin, bu komut protokolü yükler Amqp :

npm install azure-iot-device-amqp --save

MQTT, AMQP ve HTTPS desteği arasındaki farklar hakkında daha fazla bilgi için bkz . Buluttan cihaza iletişim kılavuzu ve İletişim protokolü seçme.

İstemci nesnesi oluşturma

Yüklü paketi kullanarak bir Client nesne oluşturun.

Örneğin:

const Client = require('azure-iot-device').Client;
Protokol nesnesi oluşturma

Yüklü bir Protocol aktarım paketi kullanarak bir nesne oluşturun.

Bu örnekte AMQP protokolü atanır:

const Protocol = require('azure-iot-device-amqp').Amqp;
Cihaz bağlantı dizesi ve aktarım protokollerini ekleme

Cihaz bağlantı parametrelerini sağlamak içinConnectionString'den çağrısı yapın:

  • connStr - Cihaz bağlantı dizesi.
  • transportCtor - Aktarım protokolü.

Bu örnekte aktarım protokolü kullanılır Amqp :

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
IoT Hub bağlantısını açma

Bir IoT cihazı ile IoT Hub arasındaki bağlantıyı açmak için open yöntemini kullanın.

Örneğin:

client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
})

IoT hub'ından SAS belirteci alma

Bağlı depolama hesabı SAS belirtecini IoT hub'ından almak için getBlobSharedAccessSignature komutunu kullanın.

Örneğin:

// make sure you set these environment variables prior to running the sample.
const localFilePath = process.env.PATH_TO_FILE;
const storageBlobName = path.basename(localFilePath);
const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
if (!blobInfo) {
throw new errors.ArgumentError('Invalid upload parameters');
}

Dosyayı IoT hub'ına yükleme

Bir cihazdan IoT hub'ına dosya yüklemek için:

  1. Akış işlem hattı oluşturma
  2. Blob URL'sini oluşturma
  3. Blob Depolama'ya dosya yüklemek için BlockBlobClient oluşturma
  4. Dosyayı Blob Depolama'ya yüklemek için uploadFile çağrısı
  5. IoT hub'ına karşıya yüklemenin başarılı veya başarısız olduğunu bildirmek için notifyBlobUploadStatus'u çağırın

Örneğin:

// Open the pipeline
const pipeline = newPipeline(new AnonymousCredential(), {
retryOptions: { maxTries: 4 },
telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
keepAliveOptions: { enable: false }
});

// Construct the blob URL
const { hostName, containerName, blobName, sasToken } = blobInfo;
const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;

// Create the BlockBlobClient for file upload to Blob Storage
const blobClient = new BlockBlobClient(blobUrl, pipeline);

// Setup blank status notification arguments to be filled in on success/failure
let isSuccess;
let statusCode;
let statusDescription;

const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');

  try {
    const uploadStatus = await blobClient.uploadFile(localFilePath);
    console.log('uploadStreamToBlockBlob success');

    // Save successful status notification arguments
    isSuccess = true;
    statusCode = uploadStatus._response.status;
    statusDescription = uploadStatus._response.bodyAsText;

    // Notify IoT hub of upload to blob status (success)
    console.log('notifyBlobUploadStatus success');
  }
  catch (err) {
    isSuccess = false;
    statusCode = err.code;
    statusDescription = err.message;

    console.log('notifyBlobUploadStatus failed');
    console.log(err);
  }

// Send file upload status notification to IoT hub
await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);

Yerel dosyayı blob depolamaya yükleme

Yerel bir dosyayı bir bilgisayardan blob depolamaya yükleyebilirsiniz

const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
uploadToBlob(localFilePath, deviceClient)
  .catch((err) => {
    console.log(err);
  })
  .finally(() => {
    process.exit();
  });

SDK dosyası karşıya yükleme örneği

SDK, bloba bir karşıya yükleme gelişmiş örneği içerir.

Arka uç uygulaması oluşturma

Bu bölümde, arka uç uygulamasında dosya karşıya yükleme bildirimlerinin nasıl alındığı açıklanmaktadır.

ServiceClient sınıfı, hizmetlerin dosya yükleme bildirimlerini almak için kullanabileceği yöntemler içerir.

Hizmet SDK'sı paketini yükleme

Geliştirme makinenize azure-iothub yüklemek için şu komutu çalıştırın:

npm install azure-iothub --save

IoT hub'ına bağlanma

Aşağıdaki yöntemleri kullanarak bir arka uç hizmetini IoT Hub'a bağlayabilirsiniz:

  • Paylaşılan erişim ilkesi
  • Microsoft Entra

Önemli

Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.

Paylaşılan erişim ilkesi kullanarak bağlanma

IoT hub'ına bağlanmak için fromConnectionString komutunu kullanın.

Bir cihazdan dosya yüklemek için hizmetinizin hizmet bağlama iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur.

parametresi CreateFromConnectionStringolarak hizmet paylaşılan erişim ilkesini bağlantı dizesi sağlayın. Paylaşılan erişim ilkeleri hakkında daha fazla bilgi için bkz . Paylaşılan erişim imzalarıyla IoT Hub'a erişimi denetleme.

var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);

Microsoft Entra kullanarak bağlanma

Microsoft Entra kullanan bir arka uç uygulamasının IoT Hub'a bağlanmadan önce başarıyla kimlik doğrulaması yapması ve güvenlik belirteci kimlik bilgilerini alması gerekir. Bu belirteç bir IoT Hub bağlantı yöntemine geçirilir. IoT Hub için Microsoft Entra'yı ayarlama ve kullanma hakkında genel bilgi için bkz . Microsoft Entra Id kullanarak IoT Hub'a erişimi denetleme.

Node.js SDK kimlik doğrulamasına genel bakış için bkz:

Microsoft Entra uygulamasını yapılandırma

Tercih ettiğiniz kimlik doğrulaması kimlik bilgileri için yapılandırılmış bir Microsoft Entra uygulaması ayarlamanız gerekir. Uygulama, arka uç uygulaması tarafından kimlik doğrulaması için kullanılan gizli dizi gibi parametreler içerir. Kullanılabilir uygulama kimlik doğrulaması yapılandırmaları şunlardır:

  • İstemci gizli anahtarı
  • Sertifika
  • Federasyon kimliği kimlik bilgileri

Microsoft Entra uygulamaları, gerçekleştirilen işlemlere bağlı olarak belirli rol izinleri gerektirebilir. Örneğin, IoT Hub cihazına ve modül ikizlerine okuma ve yazma erişimini etkinleştirmek için IoT Hub İkizi Katkıda Bulunanı gereklidir. Daha fazla bilgi için bkz . Azure RBAC rol atamasını kullanarak IoT Hub erişimini yönetme.

Microsoft Entra uygulamasını ayarlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç: Microsoft kimlik platformu ile uygulama kaydetme.

DefaultAzureCredential kullanarak kimlik doğrulaması

Arka uç uygulamasının kimliğini doğrulamak için Microsoft Entra kullanmanın en kolay yolu DefaultAzureCredential kullanmaktır, ancak üretim ortamında belirli TokenCredential veya ayrıştırılmış ChainedTokenCredentialbir dahil olmak üzere farklı bir yöntem kullanılması önerilir. Kolaylık olması için, bu bölümde kullanarak DefaultAzureCredential kimlik doğrulaması ve İstemci gizli dizisi açıklanmaktadır. kullanmanın DefaultAzureCredentialavantajları ve dezavantajları hakkında daha fazla bilgi için bkz . JavaScript için Azure Identity istemci kitaplığında kimlik bilgileri zincirleri

DefaultAzureCredential farklı kimlik doğrulama mekanizmalarını destekler ve yürütülmekte olduğu ortama göre uygun kimlik bilgisi türünü belirler. Çalışan bir kimlik bilgisi bulana kadar sırayla birden çok kimlik bilgisi türü kullanmayı dener.

Microsoft Entra bu paketi gerektirir:

npm install --save @azure/identity

Bu örnekte, Ortam değişkenlerine Microsoft Entra uygulama kaydı istemci gizli dizisi, istemci kimliği ve kiracı kimliği eklenmiştir. Bu ortam değişkenleri tarafından DefaultAzureCredential uygulamanın kimliğini doğrulamak için kullanılır. Başarılı bir Microsoft Entra kimlik doğrulamasının sonucu, IoT Hub bağlantı yöntemine geçirilen bir güvenlik belirteci kimlik bilgisidir.

import { DefaultAzureCredential } from "@azure/identity";

// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();

Sonuçta elde edilen kimlik bilgisi belirteci, Microsoft Entra kimlik bilgilerini kabul eden herhangi bir SDK istemcisi için IoT Hub'a bağlanmak üzere fromTokenCredential'a geçirilebilir:

fromTokenCredential iki parametre gerektirir:

  • Azure hizmet URL'si - Azure hizmet URL'si ön ek olmadan https:// biçiminde {Your Entra domain URL}.azure-devices.net olmalıdır. Örneğin, MyAzureDomain.azure-devices.net.
  • Azure kimlik bilgisi belirteci

Bu örnekte Azure kimlik bilgileri kullanılarak DefaultAzureCredentialelde edilir. Ardından IoT Hub'a bağlantı oluşturmak için Registry.fromTokenCredential Azure etki alanı URL'si ve kimlik bilgileri sağlanır.

const { DefaultAzureCredential } = require("@azure/identity");

let Registry = require('azure-iothub').Registry;

// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;

// Acquire a credential object
const credential = new DefaultAzureCredential()

// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
Kod örnekleri

Microsoft Entra hizmeti kimlik doğrulamasının çalışma örnekleri için bkz . Azure kimlik örnekleri.

Karşıya dosya yükleme bildirimi geri çağırma alıcısı oluşturma

Karşıya dosya yükleme bildirimi geri çağırma alıcısı oluşturmak için:

  1. getFileNotificationReceiver çağrısı. Bildirim iletileri alındığında çağrılan bir dosya karşıya yükleme geri çağırma yönteminin adını belirtin.
  2. Geri çağırma yönteminde dosya karşıya yükleme bildirimlerini işleme.

Bu örnek bir receiveFileUploadNotification bildirim geri çağırma alıcısı ayarlar. Alıcı, dosya karşıya yükleme durum bilgilerini yorumlar ve konsola bir durum iletisi yazdırır.

//Set up the receiveFileUploadNotification notification message callback receiver
serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
if (err) {
  console.error('error getting the file notification receiver: ' + err.toString());
} else {
  receiver.on('message', function (msg) {
    console.log('File upload from device:')
    console.log(msg.getData().toString('utf-8'));
    receiver.complete(msg, function (err) {
      if (err) {
        console.error('Could not finish the upload: ' + err.message);
      } else {
        console.log('Upload complete');
      }
    });
  });
}

SDK dosyası karşıya yükleme bildirimi örneği

SDK bir dosya karşıya yükleme örneği içerir.