概要
PowerShellを使用して、Azure Virtual MachinesからAzure Blob Storageへのファイルアップロードする機能の実装で詰まったので、その解決策を共有します。
詰まったこと
まずは以下のドキュメントを参考にして、ファイルをアップロードしようとした。
Set-AzStorageBlobContent -Container $containerName -File $zipPath -Blob $blobName -Context (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
エラー発生
ただ、以下のようなエラーが出てしまった。
Get-AzStorageAccount : No subscription found in the context.
Please ensure that the credentials you provided are authorized to access an Azure subscription,
then run Connect-AzAccount to login.
エラーの原因
このエラーの原因は、PowerShellセッションでAzureサブスクリプションにログインしていないか、ログイン情報が有効ではないためである。今回はログイン処理をPowershellで実装するなどは行なっていないためこのようなエラーが起きた。Get-AzStorageAccountコマンドは、Azureのサブスクリプションに接続されている必要があるが、環境が他社によって管理されており、ファイルをAzure Blob Storageにアップロードするだけなので連携コストやログインするための設定を追加する工数を考慮すると、他に解決策がないかを検討した。
解決策
以下の記事を参考にして、AZCopyを使用してファイルをアップロードすることで簡単に解決できた。ありがとうございます!
なぜAZCopyで解決できたのか
PowerShellのコマンドは、Azureサブスクリプションの認証情報が必要だが、AZCopyでは、SASトークンやストレージアカウントのキーを使って直接認証を行うことができるため、Azureサブスクリプションに対するログインが不要で簡単に解決できた。これにより、適切なSASトークンやアクセスキーがあれば、スムーズにファイルのアップロードが可能になった。
参考