[PowerShell] Azure Blob StorageにConnectionStringを使ってダウンロードおよびアップロードする方法まとめ

今回は、Azure Blob Storageに存在するファイルのダウンロードおよび対象コンテナへのアップロード方法の備忘録となります。

\自身のスキルを向上するには技術書で!!/

月額¥980で技術書が読み放題!!

  • ビジネススキルとマインド向上したい!!
  • 決断や行動を先送りにしてしまう方!!

Kindle Unlimitedでは30日間無料体験実施中!登録はこちら!

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を利用すれば簡単に操作できてしまいます。

データのアップロード等は気をつけて行うようにしてください。

タイトルとURLをコピーしました