はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Azure PowerShellの具体例(例3:ストレージの追加)

前準備

http://hatsune.hatenablog.jp/entry/2018/04/11/010156

Azureへのログイン

PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。

Login-AzureRmAccount

image27_thumb

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続します。

しかし、複数のサブスクリプションに紐づいている場合は、目的のサブスクリプションにつながらない場合もあります。

その場合は、Get-AzureRmSubscriptionでサブスクリプションIDを調べて、Select-AzureRmSubscriptionを使ってサブスクリプションを指定します。

Select-AzureRmSubscription -SubscriptionId 'xxxx-xxxx-xxxxx-xxxx'

例3:ストレージの追加

Azure PowerShellを使って具体的にBLOBを新規追加する方法を順番にみていきましょう。

(1)リソースグループを新規作成する(既存のものを使うときには省略)
New-AzureRmResourceGroup ?Name myResoureceGroup ?Location ‘Japan West’

image16_thumb

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。

(2)ストレージアカウントの作成
New-AzureRmStorageAccount ?StorageAccountName 'mystorage0409' ?Location 'Japan West' ?ResourceGroup myResoureceGroup ?SkuName 'Standard_LRS' ?Kind storage

image

西日本に'Standard_LRS'=ローカル冗長ストレージでストレージアカウント「mystorage0409」を作成しました。

SkuNameにはレプリケーションを指定するので、その他にも次のような指定が可能です。

SkuName レプリケーション
Standard_LRS ローカル冗長ストレージ
Standard_ZRS ゾーン冗長ストレージ
Standard_GRS 地理冗長ストレージ
Standard_RAGRS 読み取りアクセス地理冗長ストレージ
Premium_LRS Premium(SSD)ローカル冗長ストレージ

通常はローカル冗長、スピードが必要ならPremiumローカル冗長、データセンタのゾーン全体が死んでもデータの持続性を担保したいならゾーン冗長、データセンター丸ごと死んでもということであれば地理冗長を選択しましょう。

詳細は下記のドキュメントを参照してください。

https://docs.microsoft.com/ja-jp/azure/storage/common/storage-redundancy

もし、ストレージに対してhttpsでのアクセスのみを許可したいときは「-EnableHttpsTrafficOnly $True」を付与しましょう。

 

作成したストレージアカウントをAzure Portalで確認してみましょう。

image

(3)BLOBコンテナの作成

ストレージアカウントができているので、次にやる作業はBLOBサービスにBLOBコンテナを作成することです。

New-AzureRm・・・のようなリソースマネージャー関連コマンドではなくなってしまいますが、次のようなコマンドでBLOBコンテナが作成できます。

$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
New-AzureStorageContainer ?Name 'myblob' ?Context $ctx ?Permission blob

image

これで、パブリックアクセスレベルが「BLOB専用の匿名読み取りアクセス」のmyblobというBLOBコンテナが作成できました。

(4)BLOBファイルのアップロード

BLOBコンテナができたので、ローカルPCにあるファイルをアップロードしてみましょう。

$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
Set-AzureStorageBlobContent ?Container myblob ?Blob 'Icon09.png' ?Context $ctx ?File 'C:\Users\hatsune\Pictures\icon09.png'

image

これでローカルPCのファイルがAzure上のBLOBコンテナに入りました。

(5)BLOBコンテナの内容一覧

BLOBコンテナにあるBLOBファイルの一覧を表示してみましょう。

$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
Get-AzureStorageBlob -Container "myblob" -Context $ctx

image

パブリックアクセスレベルが「BLOB専用の匿名読み取りアクセス」となっているので、BLOBファイルへのURLを公開すれば誰でもが参照のみ可能となります。

(6)アクセスキーの取得

参照は誰でもができますが、一部の人には更新もできるようにしたい場合があります。

しかしAzureサブスクリプションに対するアクセス権を渡してしまうのは大げさです。

そのような場合は、ストレージアカウント名とキーを渡してあげて、Azure Storage Explorerなどを使ってもらうといいでしょう。

詳細は:http://hatsune.hatenablog.jp/entry/2018/03/08/065243

 

Get-AzureRmStorageAccountKey -Name mystorage0409 -ResourceGroupName myResoureceGroup

image

mystorage0409という名前と、key2の値を更新者に渡してあげるといいでしょう。

注意(2018/04/15現在)

今回、ストレージアカウントのアカウントの種類としてstorageを指定したがblobstorageを指定したいときは注意が必要だ。

1つもストレージアカウントがない状態でblobstorageを作成するとBLOBコンテナが作成できないストレージアカウントができてしまう。

1つでも作成した後であれば正常に動作する。

New-AzureRmStorageAccount –StorageAccountName 'mystorage0409' –Location 'Japan West' –ResourceGroup myResoureceGroup –SkuName 'Standard_LRS' –Kind storage
New-AzureRmStorageAccount –StorageAccountName 'mystorage0410' –Location 'Japan West' –ResourceGroup myResoureceGroup –SkuName 'Standard_LRS' –Kind BlobStorage –AccessTier Hot

Azure Portalで作成したときは大丈夫なので、Azure PowerShellに何らかの問題があるのかもしれないが注意した方がいいでしょう。