Azureの小ネタ (改)

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

Storage SDKを使ってSAS付きコンテナに書き込みする

前回の投稿ではBLOBへのSASであったわけですが、今回はコンテナレベルにSASをあたえる例です。 CloudBlobContainerに対して、同じような操作をすればよく、コードだけ例だけ貼り付けておきます。

    var sas = container.GetSharedAccessSignature(new SharedAccessBlobPolicy()
    {
       SharedAccessStartTime  = DateTime.UtcNow.AddMinutes(-5),
       SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(+5),
       Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
    });

    Console.WriteLine (container.Uri.AbsoluteUri);
    Console.WriteLine (container.Uri.AbsoluteUri + sas);

    
    var container2 = new CloudBlobContainer(new Uri(container.Uri.AbsoluteUri + sas));
    container2.GetBlockBlobReference("a.txt").UploadText("hello");  
   
    var creds3 = new StorageCredentials(sas);
    var container3 = new CloudBlobContainer(container.Uri, creds3);
    container3.GetBlockBlobReference("b.txt").UploadText("hello");

Storage SDKを使ってSAS付きBLOBに書き込みする

久しぶりにBLOBのSAS(share access sigunature : 共有アクセス署名)を使っていたら、色々忘れてたので備忘録。SASについては、以下にまとめられています。

共有アクセス署名:SAS モデルについて | Microsoft Azure

前回の記事では、UploadをREST APIでやっていた訳なのですが、普通にSDKを使っても同じことができます。逆に前回 なぜ REST API を使ったのかが思い出せません。

statemachine.hatenablog.com

以下、BLOBに対してSASを取得してから、SDKから上書きする例です。SAS Tokenは、 StorageCredentials への引数としてあたえることができ、CloudBlobStorageインスタンスを作成するときに、そのCredentialを渡すことで、 CloudBlockBlob インスタンスを作成しています。

    ...
    ...
    var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
    {
       SharedAccessStartTime  = DateTime.UtcNow.AddMinutes(-5),
       SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(+5),
       Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
    });

    Console.WriteLine (blob.Uri.AbsoluteUri);
    Console.WriteLine (blob.Uri.AbsoluteUri + sas);

    
    var creds2 = new StorageCredentials(sas);
    var blob2 = new CloudBlockBlob(blob.Uri, creds2);
    blob2.UploadFromFile(@"hoge.jpg", FileMode.Open);

}

credential 作成できなくても、SAS付きのURIをざっくり渡しちゃうのでもOKみたいです。

   var blob2 = new CloudBlockBlob(new Uri(blob.Uri + sas2))

みたいな。といわけで、ポイントはStorageAccountインスタンスは作らなくても良いというところでしょうか。

Azure 仮想マシン(VM)の再起動ログを表示

元ネタは、以下のブログからです。VMの再起動ログを表示できるとのことです(いつからあったんだっけ?ちょっと前に聞いた記憶はうっすらあるけど)。

クラウドサービスのダッシュボード(仮想マシンではないところがミソ)に、「再起動ログを表示」というのがあります。

f:id:StateMachine:20150406162346p:plain

これをクリックすると、検索ダイアログが開きますが、手持ちの仮想マシンで試したところログは見つかりませんでした。(同期元、同期先ってのは多分誤訳で、英語版でみるとFROM、TOとなっています)

f:id:StateMachine:20150406162512p:plain

Azure Poshでも Get-AzureDeploymentEvent コマンドレットで参照できるみたいですが、何も出ない仮想マシンしかありませんでしたので、情報を得られずじまい。以下、60日前~本日の間のイベントをゲッツする例です。

PS C:\> Get-AzureDeploymentEvent -ServiceName hogehoge -StartTime ((get-date).AddDays(-60)) -EndTime (get-date)
詳細: 16:28:32 - Begin Operation: Get-AzureDeploymentEvent
詳細: 16:28:34 - Completed Operation: Get-AzureDeploymentEvent

引用しますと、以下のように表示されるそうです。

OperationDescription : Get-AzureDeploymentEvent
OperationId          : 1153476a-9696-2e4a-8819-19ec662edbdc
OperationStatus      : Succeeded

DeploymentName       :
DeploymentSlot       : Production
InstanceName         : KenazDemo-D4
RebootReason         : Virtual machine rebooted due to planned maintenance event.
RebootStartTime      : 9/13/2014 10:22:03 PM
RoleName             : KenazDemo-D4
ServiceName          : kenaztestdemoservice
OperationDescription : Get-AzureDeploymentEvent
OperationId          : 1153476a-9696-2e4a-8819-19ec662edbdc
OperationStatus      : Succeeded