読者です 読者をやめる 読者になる 読者になる

Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Azure PowerShell でのBLOB操作など

Azure Storage Blob PowerShell

Azure PowerShellでBLOBを操作する備忘録です。余り知られていませんが、以下のようなことはできます。

  • BLOBコンテナ取得、作成、削除
  • BLOB取得、アップロード、ダウンロード、削除
  • BLOB間コピー
  • Table操作
  • Queue操作
  • etc...

これらは、まとめて以下は、MSDNで説明されています。

Azure Storage Cmdlets

ストレージ作成

作成前に、Test-AzureName で既に存在する名前かどうかチェックできます。

PS C:\> Test-AzureName -Storage hogefuga
詳細: The storage account named 'hogefuga' is already taken.
True

PS C:\> Test-AzureName -Storage fugahoge
False

作成は、New-AzureStorageAccount です。Location or Affinity グループを指定できますが、昨今はLocationでOKでしょうね。

PS C:\> New-AzureStorageAccount -StorageAccountName fugahoge -Location "Japan West"

デフォルトストレージアカウント

PowerShellでストレージアカウントを操作する場合、以下の方法でストレージアカウントを明示しないといけないです。

  • Set-AzureSubscription でデフォルトストレージアカウントを設定
  • New-AzureStorageContext でストレージコンテキストを設定
  • コマンドによっては、直接アカウントとキーを指定

Set-AzureSubscription での設定方法は以下。いちいちサブスクリプション名を明示したくない場合は、Currentから取得して再設定すればいいでしょう。

Set-AzureSubscription `
-SubscriptionName (Get-AzureSubscription -Current).SubscriptionName `
-CurrentStorageAccountName "fugahoge"

Storage Context の作成方法は以下。アカウント名とストレージキーをあたえますが、自分のアカウントのキーはGet-AzureStorageKeyとかで設定したほうがキーが見えなくて良い感じかと思います。

$ctx = New-AzureStorageContext -StorageAccountName fugahoge `
-StorageAccountKey (Get-AzureStorageKey -StorageAccountName fugahoge).Primary

っていうか、自分のストレージアカウントならキーを省略できてもいいんじゃないかとは思いますけども。

コンテナ

コンテナの作成は、New-AzureStorageContainerです。-Contextを指定しないとデフォルトストレージアカウントを使いますし、指定されていたらコンテキトオブジェクトのストレージアカウントを使います。

New-AzureStorageContainer -Name "hoge1"

New-AzureStorageContainer -Name "hoge2" -Context $ctx

コンテナ一覧は Get-AzureStorageContainerです。Listとかのほうが直感的な気がするのですがそれはどーでもいいです。

PS C:\> Get-AzureStorageContainer 


   Blob End Point: https://fugahoge.blob.core.windows.net/

Name    PublicAccess   LastModified
----    ------------   ------------
hoge1   Off            2015/04/01 1:12:48 +00:00
hoge2   Off            2015/04/01 1:13:44 +00:00

BLOBのアップロード

BLOBのアップロードは、Set-AzureStorageBlobContent です。Uploadとかの方がしっくりくるんですが。

PS C:\> Set-AzureStorageBlobContent -Container hoge1 -File "C:\temp\a.xml"

   Container Uri: https://fugahoge.blob.core.windows.net/hoge1

Name                BlobType   Length              ContentType         LastModified       SnapshotTime      
----                --------   ------              -----------         ------------       ------------      
a.xml               BlockBlob  826                 application/octe... 2015/04/01 1:20...                   
詳細: Transfer Summary
--------------------------------
Total:  1.
Successful: 1.
Failed: 0.

見たいな感じです。プロパティとかメタデータ、BLOBタイプなども指定できます。上書きはForceです。File引数は必須なので、現在のところ必ずファイルでないとアップロードできません。

PS C:\> Set-AzureStorageBlobContent -Container hoge1 -File "C:\temp\a.xml" -BlobType Block -Force -Properties @{"ContentType" = "application/xml"} 


   Container Uri: https://fugahoge.blob.core.windows.net/hoge1

Name                              BlobType   Length                            ContentType                      LastModified                     SnapshotTime                    
----                              --------   ------                            -----------                      ------------                     ------------                    
a.xml                             BlockBlob  826                               application/xml                  2015/04/01 1:24:26 +00:00                                        
詳細: Transfer Summary
--------------------------------
Total:  1.
Successful: 1.
Failed: 0.

BLOBのダウンロード

ダウンロードは、Get-AzureStorageBlobContent です。やっぱりDownloadとかのほうが(ry Get-AzureStorageBlob ってのもあって、これはBlobReferernce的なオブジェクトです。

直接指定できたりもしますが、

Set-AzureStorageBlobContent -Container hoge1 -Blob a.xml

色々パイプで繋いだ方が、PowerShellっぽいかもしれません。

Get-AzureStorageContainer -Name hoge1 | Get-AzureStorageBlob | Get-AzureStorageBlobContent

一覧を取得したい場合は、Get-AzureStorageBlob で止めればOKです。

Get-AzureStorageContainer -Name hoge1 | Get-AzureStorageBlob 

以上、続くかも。