今回は、Azure Blob Storageに存在するファイルのダウンロードおよび対象コンテナへのアップロード方法の備忘録となります。
\自身のスキルを向上するには技術書で!!/
月額¥980で技術書が読み放題!!
- ビジネススキルとマインド向上したい!!
- 決断や行動を先送りにしてしまう方!!
Azure Blob Storageとは
Azure Blob Storageとは、Microsoftが提供するクラウド用のオブジェクトストレージソリューションのこととなります。
テキストや画像、動画データを大量に格納するための最適化されたストレージです。
Azure Blob Storageでは、保存したデータのことを「BLOB(ブロブ)」と言い、BLOBを保存しておく場所を「Container(コンテナー)」と呼びます。
Blob Storageを操作する前の事前準備
早速 Blob Storageへアクセスしてファイルをダウンロードしたいと思いますが、まずはAzure Storageのストレージアカウントから接続文字列を取得します。
下記の赤枠で囲んだ部分を使います
おそらく下記のようになっていると思われます
DefaultEndpointsProtocol=https;AccountName=teststrage;AccountKey=fjoaiefa;kXwYfegddPIHH8=;EndpointSuffix=core.windows.net
次に、PowerShellを起動し、Blob Storageを操作するために、Az.Storage モジュールをインストールします。
Install-Module -Name 'Az.Storage' -Force -Verbose -Scope CurrentUser
これで、BlobStorageを操作する準備が整いました。
Blob Storage上のコンテナからファイルをダウンロード
Storageアカウントに接続するには、「New-AzStorageContext」を使います。
$DistDir = "$PSScriptRoot\Downloads"
$ContainerName = "test-container"
$ConnectionStrings = "DefaultEndpointsProtocol=https;AccountName=teststrage;AccountKey=fjoaiefa;kXwYfegddPIHH8=;EndpointSuffix=core.windows.net;"
$Context = New-AzStorageContext -ConnectionString $ConnectionStrings
Write-Output $Context
# ===== 以下出力結果 =======
StorageAccountName : teststorage
BlobEndPoint : https://xxxxxx.blob.core.windows.net/
TableEndPoint : https://xxxxxx.table.core.windows.net/
・・・・
Context内の内容が出力されたかと思います。
もし接続に失敗した場合は、下記のようなエラーが発生します。
New-AzStorageContext : No valid combination of account information found.
接続ができたら次に、コンテナー内のファイル一覧を取得します。
$ContainerStorage = Get-AzStorageBlob -Container $ContainerName -Context $Context
$ContainerStorage | Format-Table
# ===== 以下出力結果 =======
Name BlobType Length ContentType IsDeleted
------- ------------- ---------- ------------------ -------------
test.csv BlobkBlob 213 application/vnd.ms-excel False
ファイルが存在することを確認できました。
コンテナーが存在しない場合は下記エラーが発生します。
Get-AzStorageBlob : Can not find the container 'test-container1'
ファイルが確認できたらファイルをダウンロードしてみます。
ファイルをダウンロードする場合は Get-AzStorageBlobContent Cmdletを利用します。
# Download File Name
$DestFilePath = "$DestDir¥test.csv"
Get-AzStorageBlobContent -Container $ContainerName -Blob "test.csv" -Context $Context -Destination $DestFilePath -Force
# ===== 以下出力結果 =======
AccountName: teststorage, ContainerName: test-container
Name BlobType Length ContentType IsDeleted
------- ------------- ---------- ------------------ -------------
test.csv BlobkBlob 213 application/vnd.ms-excel False
Force オプションを指定しない場合は、確認ダイアログが表示されます。上記のようにダウンロードに成功した場合は、ストレージアカウント名とコンテナー名、対象ファイルが表示されます。
すでにダウンロード先に同じファイルが存在する場合は、上書きされます。
コンテナー内のすべてのファイルをダウンロードしたい場合は、 foreach文などを利用して$ContainerStorageの結果をループさせることで毎回ダウンロード処理を行います。
Blob Storage上のコンテナにファイルをアップロードする
すでにダウンロード処理でContextを作成するところまでを記載したかと思います。
アップロードも同様に、ConnectionStringを利用してアクセスします。アップロードの場合は、アップロード元のファイルパスを設定し、「Set-AzStorageBlobContent」Cmdletを利用してアップロードします。
$SourceFilePath = "$PSScriptRoot\Downloads\test.csv"
$ContainerName = "test-container"
$ConnectionStrings = "DefaultEndpointsProtocol=https;AccountName=teststrage;AccountKey=fjoaiefa;kXwYfegddPIHH8=;EndpointSuffix=core.windows.net;"
$Context = New-AzStorageContext -ConnectionString $ConnectionStrings
Write-Output $Context
Set-AzStorageBlobContent -File $SourceFilePath -Container $ContainerName -Context $Context
もし、ファイル名を変更してアップロードしたい場合は、下記のようにBlob名をオプションに指定します。
Set-AzStorageBlobContent -File $SourceFilePath -Container $ContainerName -Context $Context -Blob "test1.csv"
もともと「text.csv」ファイルだったものを、コンテナーには「test1.csv」としてアップロードすることができます。
補足
Cmdletオプションに様々なオプションを指定しましたが、ダウンロードやアップロードのオプションをハッシュテーブル化して渡すこともできます。
$DLBlobOpt = @{
Blob = "test.csv"
Container = $ContainerName
Destination = $DistFilePath
Context = $Context
}
Get-AzStorageBlobContent @DLBlobOpt
最後に
Azure Blob StorageはPowerShellを利用すれば簡単に操作できてしまいます。
データのアップロード等は気をつけて行うようにしてください。