Azure PowerShellでBLOBを操作する備忘録です。余り知られていませんが、以下のようなことはできます。
- BLOBコンテナ取得、作成、削除
- BLOB取得、アップロード、ダウンロード、削除
- BLOB間コピー
- Table操作
- Queue操作
- etc...
これらは、まとめて以下は、MSDNで説明されています。
ストレージ作成
作成前に、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
以上、続くかも。