IoT ハブでファイルのアップロードを構成すると、接続されているデバイスで Azure ストレージ アカウントにファイルをアップロードできます。 この記事では、Azure portal、Azure CLI、Azure PowerShell を使用して、IoT ハブでファイルのアップロードを構成する方法について説明します。
IoT Hub でファイルのアップロード機能を使用するには、最初に Azure ストレージ アカウントと BLOB コンテナーを IoT ハブに関連付ける必要があります。 IoT Hub により、ファイルをアップロードするときにデバイスで使用する、この BLOB コンテナーへの書き込みアクセス許可を含む SAS URI が自動的に生成します。 ストレージ アカウントと BLOB コンテナーに加えて、SAS URI の有効期限と、Azure Storage で IoT Hub が使用する認証の種類を設定できます。 IoT Hub でバックエンド サービスに配信できる、オプションのファイル アップロード通知の設定を構成することもできます。
前提条件
アクティブな Azure アカウントアカウントがない場合、Azure 試用版にサインアップして、最大 10 件の無料 Mobile Apps を入手できます。 アカウントがない場合は、 無料アカウント を数分で作成することができます。
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従って作成できます。
Azure portal で IoT ハブを構成する
Azure portal で、目的の IoT ハブに移動し、[ファイルのアップロード] を選択して、ファイルのアップロード プロパティを表示します。 次に、[ストレージ コンテナー設定] で [Azure Storage コンテナー] を選択します。
現在のサブスクリプションで Azure Storage アカウントと BLOB コンテナーを選択して、IoT ハブに関連付けます。 必要に応じて、[ストレージ アカウント] ペインで Azure Storage アカウントを作成し、[コンテナー] ペインで BLOB コンテナーを作成できます。
Azure Storage アカウントと BLOB コンテナーを選択したら、残りのファイルのアップロード プロパティを構成します。
Receive notifications for uploaded files (アップロードされたファイルに関する通知を受け取る): トグル ボタンを使用して、ファイルのアップロードに関する通知を有効または無効にします。
SAS TTL: IoT Hub によりデバイスに返される SAS URI の有効期間を設定します。 既定で 1 時間に設定されますが、スライダーを使用して、他の値にカスタマイズできます。
[ファイル通知の設定] の [既定の TTL]: 有効期限が切れるまでのファイルのアップロード通知の有効期間。 既定で 1 時間に設定されますが、スライダーを使用して、他の値にカスタマイズできます。
File notification maximum delivery count (ファイルの通知設定 最大配信回数): IoT Hub がファイルのアップロード通知の配信を試行する回数です。 既定で 10 に設定されますが、スライダーを使用して、他の値にカスタマイズできます。
認証の種類: 既定では、Azure IoT Hub はキーベースの認証を使用して Azure Storage に接続し、認証します。 ユーザー割り当てまたはシステム割り当てのマネージド ID を構成して、Azure Storage で Azure IoT Hub を認証することもできます。 マネージド ID は、Microsoft Entra ID で自動的に管理される ID を安全な方法で Azure サービスに提供します。 マネージド ID の構成方法については、「IoT Hub でのマネージド ID のサポート」を参照してください。 Azure Storage アカウントと IoT ハブで 1 つ以上のマネージド ID を構成したら、そのうちの 1 つを、[システム割り当て] または [ユーザー割り当て] ボタンを使用して Azure Storage での認証用に選択できます。
Note
認証の種類の設定は、IoT ハブが Azure Storage アカウントで認証する方法を構成します。 デバイスは常に、IoT ハブから取得した SAS URI を使用して、Azure Storage で認証されます。
[Save]\(保存\) を選択して設定を保存します。 正常に完了したことを必ず確認してください。 一部の選択 (認証の種類など) は、設定を保存した後にのみ検証されます。
前提条件
アクティブな Azure アカウントアカウントがない場合、Azure 試用版にサインアップして、最大 10 件の無料 Mobile Apps を入手できます。 アカウントがない場合は、 無料アカウント を数分で作成することができます。
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従って作成できます。
BLOB コンテナーを持つ Azure Storage アカウント。 Azure Storage アカウントをお持ちでない場合は、Azure CLI を使用して作成できます。 詳しくは、「ストレージ アカウントの作成」をご覧ください。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
Azure アカウントにサインインして設定する
Azure アカウントにサインインしてサブスクリプションを選択します。 Azure Cloud Shell を使用している場合は、既にサインインしている必要があります。ただし、複数のサブスクリプションがある場合は、引き続き Azure サブスクリプションを選択する必要があります。
コマンド プロンプトで、 login コマンドを実行します。
az login指示に従って、コードを使用して認証し、Web ブラウザーで Azure アカウントにサインインします。
複数の Azure サブスクリプションがある場合は、Azure にサインインすると、資格情報に関連付けられているすべてのAzure アカウントへのアクセスが許可されます。 以下の、利用できる Azure アカウントを一覧表示するコマンドを使用します。
az account list次のコマンドを使用して、IoT ハブを作成するコマンドの実行に使用するサブスクリプションを選択します。 前のコマンドの出力から、サブスクリプション名または ID のいずれかを使用できます。
az account set --subscription {your subscription name or id}
ストレージ アカウントへのアクセスを構成する
次の手順では、クラシック デプロイ モデルではなく、Resource Manager デプロイ モデルを使用してストレージ アカウントを作成していることを前提としています。
デバイスからファイルのアップロードを構成するには、Azure Storage アカウントへのアクセス許可を IoT ハブに付与する必要があります。 ストレージ アカウントは、IoT ハブと同じサブスクリプションに存在する必要があります。 ストレージ アカウント内の BLOB コンテナーの名前も必要です。
キーベースまたは ID ベースの認証を使用して、アクセス許可を提供できます。 Microsoft では、より安全なオプションとして ID ベースの認証を推奨しています。
キーベースの認証
キーベースの認証の場合は、ストレージ アカウントの接続文字列を指定します。 az storage account show-connection-string コマンドを使用して、ストレージ アカウント キーを取得します。
connectionString の値を書き留めておきます。 接続文字列は次の出力のようになります。
{
"connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName={your_storage_account_name};AccountKey={your_storage_account_key}"
}
ID ベースの認証
ID ベースの認証には、システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用できます。 詳細については、 マネージド ID の IoT Hub のサポートに関する説明を参照してください。
az role assignment create コマンドを使用して、マネージド ID にロールを割り当てます。 詳細については、「 BLOB データにアクセスするための Azure ロールの割り当て」を参照してください。
IoT Hub を構成する
ストレージ アカウントの詳細を使用して IoT ハブにファイルを アップロードできるように IoT ハブ を構成できるようになりました。
構成には、次の値が必要です。
ストレージ コンテナー: IoT ハブに関連付ける現在の Azure サブスクリプションの Azure ストレージ アカウント内の BLOB コンテナー。 前のセクションで必要なストレージ アカウント情報を取得しました。 IoT Hub により、ファイルをアップロードするときにデバイスで使用する、この BLOB コンテナーへの書き込みアクセス許可を含む SAS URI が自動的に生成します。
アップロードされたファイルの通知を受信する: ファイルのアップロード通知を有効または無効にします。
SAS TTL: IoT Hub によりデバイスに返される SAS URI の有効期間を設定します。 既定では 1 時間に設定されます。
ファイル通知設定の既定の TTL: 有効期限が切れる前のファイル アップロード通知の有効期間。 既定では 1 日に設定されます。
File notification maximum delivery count (ファイルの通知設定 最大配信回数): IoT Hub がファイルのアップロード通知の配信を試行する回数です。 既定では 10 に設定されます。
ファイル通知のロック期間: ファイル通知キューのロック期間。 既定では 60 秒に設定されています。
認証の種類: Azure Storage で使用する IoT Hub の認証の種類。 この設定により、IoT ハブが Azure Storage を使用して認証および承認する方法が決まります。 既定値はキーベースの認証です。ただし、システム割り当てまたはユーザー割り当てマネージド ID 認証オプションが推奨されます。 マネージド ID は、Microsoft Entra ID で自動的に管理される ID を安全な方法で Azure サービスに提供します。
Note
認証の種類の設定は、IoT ハブが Azure Storage アカウントで認証する方法を構成します。 デバイスは常に、IoT ハブから取得した SAS URI を使用して、Azure Storage で認証されます。
次のコマンドは、IoT ハブでファイルのアップロード設定を構成する方法を示しています。 これらのコマンドはわかりやすくするために個別に表示されますが、通常は、シナリオに必要なすべてのパラメーターを含む 1 つのコマンドを発行します。 コマンド ラインに引用符が表示される場所を含めます。 中かっこは含めません。 各パラメーターの詳細については、 az iot hub update コマンドの Azure CLI ドキュメントを参照してください。
次のコマンドは、ストレージ アカウントと BLOB コンテナーを構成します。
az iot hub update --name {your iot hub name} \
--fileupload-storage-connectionstring "{your storage account connection string}" \
--fileupload-storage-container-name "{your container name}"
次のコマンドは、SAS URI の有効期間を既定値 (1 時間) に設定します。
az iot hub update --name {your iot hub name} \
--fileupload-sas-ttl 1
次のコマンドは、ファイル通知を有効にし、ファイル通知のプロパティを既定値に設定します。 (ファイルのアップロード通知の有効期間は 1 時間に設定され、ロック期間は 60 秒に設定されます)。
az iot hub update --name {your iot hub name} \
--fileupload-notifications true \
--fileupload-notification-max-delivery-count 10 \
--fileupload-notification-ttl 1 \
--fileupload-notification-lock-duration 60
次のコマンドは、キーベースの認証を構成します。
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type keyBased
次のコマンドは、IoT ハブのシステム割り当てマネージド ID を使用して認証を構成します。 このコマンドを実行する前に、IoT ハブのシステム割り当てマネージド ID を有効にし、Azure Storage アカウントで適切なロールベースのアクセス制御ロールを付与する必要があります。 方法については、 マネージド ID に対する IoT Hub のサポートに関するページを参照してください。
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type identityBased \
--fileupload-storage-identity [system]
次のコマンドは、IoT ハブで構成されたユーザー割り当てマネージド ID を取得し、そのうちの 1 つで認証を構成します。 ユーザー割り当てマネージド ID を使用して認証するには、その ID を IoT ハブで構成し、Azure Storage アカウントで適切なロールベースのアクセス制御ロールを付与する必要があります。 詳細と手順については、 マネージド ID に対する IoT Hub のサポートに関する説明を参照してください。
IoT ハブでユーザー割り当てマネージド ID のクエリを実行するには、 az iot hub identity show コマンドを使用します。
az iot hub identity show --name {your iot hub name} --query userAssignedIdentities
このコマンドは、IoT ハブで構成されたユーザー割り当てマネージド ID のコレクションを返します。 次の出力は、1 つのユーザー割り当てマネージド ID を含むコレクションを示しています。
{
"/subscriptions/{your subscription ID}/resourcegroups/{your resource group}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your user-assigned managed identity name}":
{
"clientId": "<client ID GUID>",
"principalId": "<principal ID GUID>"
}
}
次のコマンドは、上記のユーザー割り当て ID を使用するように認証を構成します。
az iot hub update --name {your iot hub name} \
--fileupload-storage-auth-type identityBased \
--fileupload-storage-identity "/subscriptions/{your subscription ID}/resourcegroups/{your resource group}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your user-assigned managed identity name}"
IoT ハブの設定は、次のコマンドを使用して確認できます。
az iot hub show --name {your iot hub name}
ファイルのアップロード設定のみを確認するには、次のコマンドを使用します。
az iot hub show --name {your iot hub name}
--query '[properties.storageEndpoints, properties.enableFileUploadNotifications, properties.messagingEndpoints.fileNotifications]'
ほとんどの場合、Azure CLI コマンドで名前付きパラメーターを使用するのが最も簡単です。ただし、 --set パラメーターを使用してファイルのアップロード設定を構成することもできます。 次のコマンドは、その方法を理解するのに役立ちます。
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.connectionString="{your storage account connection string}"
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.containerName="{your storage container name}"
az iot hub update --name {your iot hub name} \
--set properties.storageEndpoints.'$default'.sasTtlAsIso8601=PT1H0M0S
az iot hub update --name {your iot hub name} \
--set properties.enableFileUploadNotifications=true
az iot hub update --name {your iot hub name} \
--set properties.messagingEndpoints.fileNotifications.maxDeliveryCount=10
az iot hub update --name {your iot hub name} \
--set properties.messagingEndpoints.fileNotifications.ttlAsIso8601=PT1H0M0S
前提条件
アクティブな Azure アカウントアカウントがない場合、Azure 試用版にサインアップして、最大 10 件の無料 Mobile Apps を入手できます。 アカウントがない場合は、 無料アカウント を数分で作成することができます。
Azure IoT Hub。 IoT ハブがない場合は、 New-AzIoTHub コマンドレット を使用して作成するか、「 IoT ハブの作成」の手順に従うことができます。
Azure ストレージ アカウント。 Azure ストレージ アカウントをお持ちでない場合は、 Azure Storage PowerShell コマンドレット を使用して作成するか、ポータルを使用して ストレージ アカウントを作成できます。
Azure Cloud Shell で PowerShell 環境を使用します。
必要に応じて、PowerShell をローカルに インストール します。
- Azure Az PowerShell モジュールをインストールします。 (モジュールは、Azure Cloud Shell PowerShell 環境に既定でインストールされます)。
- Connect-AzAccount コマンドを使用して PowerShell にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure PowerShell を使用したサインイン」を参照してください。
Azure アカウントにサインインして設定する
Azure アカウントにサインインしてサブスクリプションを選択します。 Azure Cloud Shell を使用している場合は、既にサインインしている必要があります。ただし、複数のサブスクリプションがある場合は、引き続き Azure サブスクリプションを選択する必要があります。
PowerShell プロンプトで、 Connect-AzAccount コマンドレットを実行します。
Connect-AzAccount複数の Azure サブスクリプションがある場合は、Azure にサインインすると、資格情報に関連付けられているすべての Azure サブスクリプションへのアクセス権が付与されます。 Get-AzSubscription コマンドを使用して、使用できる Azure サブスクリプションを一覧表示します。
Get-AzSubscription次のコマンドを使用して、IoT ハブを管理するコマンドの実行に使用するサブスクリプションを選択します。 前のコマンドの出力から、サブスクリプション名または ID のいずれかを使用できます。
Select-AzSubscription ` -Name "{your subscription name}"Note
Select-AzSubscription コマンドは、Select-AzContext コマンドに必要なより複雑なコンテキスト名ではなく、Get-AzSubscription コマンドによって返されるサブスクリプション名 (名前) またはサブスクリプション ID (ID) を使用できる Select-AzContext のエイリアスです。
ストレージ アカウントの詳細を取得する
次の手順では、クラシック デプロイ モデルではなく、Resource Manager デプロイ モデルを使用してストレージ アカウントを作成していることを前提としています。
デバイスからのファイルのアップロードを構成するには、Azure ストレージ アカウントの接続文字列が必要です。 ストレージ アカウントは、IoT ハブと同じサブスクリプションに存在する必要があります。 ストレージ アカウント内の BLOB コンテナーの名前も必要です。 Get-AzStorageAccountKey コマンドを使用して、ストレージ アカウント キーを取得します。
Get-AzStorageAccountKey `
-Name {your storage account name} `
-ResourceGroupName {your storage account resource group}
key1 ストレージ アカウントキーの値を書き留めます。 次の手順で必要になります。
ファイルのアップロードに既存の BLOB コンテナーを使用するか、新しい BLOB コンテナーを作成できます。
ストレージ アカウント内の既存の BLOB コンテナーを一覧表示するには、 New-AzStorageContext コマンドと Get-AzStorageContainer コマンドを使用します。
$ctx = New-AzStorageContext ` -StorageAccountName {your storage account name} ` -StorageAccountKey {your storage account key} Get-AzStorageContainer -Context $ctxストレージ アカウントに BLOB コンテナーを作成するには、 New-AzStorageContext コマンドと New-AzStorageContainer コマンドを使用します。
$ctx = New-AzStorageContext ` -StorageAccountName {your storage account name} ` -StorageAccountKey {your storage account key} New-AzStorageContainer ` -Name {your new container name} ` -Permission Off ` -Context $ctx
IoT Hub を構成する
ストレージ アカウントの詳細を使用して IoT ハブにファイルをアップロードするように IoT ハブ を構成できるようになりました。
構成には、次の値が必要です。
ストレージ コンテナー: IoT ハブに関連付ける現在の Azure サブスクリプションの Azure ストレージ アカウント内の BLOB コンテナー。 前のセクションで必要なストレージ アカウント情報を取得しました。 IoT Hub により、ファイルをアップロードするときにデバイスで使用する、この BLOB コンテナーへの書き込みアクセス許可を含む SAS URI が自動的に生成します。
アップロードされたファイルの通知を受信する: ファイルのアップロード通知を有効または無効にします。
SAS TTL: IoT Hub によりデバイスに返される SAS URI の有効期間を設定します。 既定では 1 時間に設定されます。
[ファイル通知の設定] の [既定の TTL]: 有効期限が切れるまでのファイルのアップロード通知の有効期間。 既定では 1 日に設定されます。
File notification maximum delivery count (ファイルの通知設定 最大配信回数): IoT Hub がファイルのアップロード通知の配信を試行する回数です。 既定では 10 に設定されます。
Set-AzIotHub コマンドを使用して、IoT ハブでファイルのアップロード設定を構成します。
Set-AzIotHub `
-ResourceGroupName "{your iot hub resource group}" `
-Name "{your iot hub name}" `
-FileUploadNotificationTtl "01:00:00" `
-FileUploadSasUriTtl "01:00:00" `
-EnableFileUploadNotifications $true `
-FileUploadStorageConnectionString "DefaultEndpointsProtocol=https;AccountName={your storage account name};AccountKey={your storage account key};EndpointSuffix=core.windows.net" `
-FileUploadContainerName "{your blob container name}" `
-FileUploadNotificationMaxDeliveryCount 10
Note
既定では、IoT Hub は接続文字列のアカウント キーを使用して Azure Storage で認証を行います。 システム割り当てマネージド ID またはユーザー割り当てマネージド ID を使用した認証も使用できます。 マネージド ID は、Microsoft Entra ID で自動的に管理される ID を安全な方法で Azure サービスに提供します。 詳細については、 マネージド ID に対する IoT Hub のサポートに関するページを参照してください。 現時点では、 Set-AzIotHub コマンドに認証の種類を設定するパラメーターはありません。