原則としてBlobは追記できません。
多くの場合、追記できなくても差し支えないのですが、ログなどをHDInsight等で分析する際、オンプレ環境からBloBにログを移す作業が分析よりしんどい。そこで、ログを直接BloBに追記、保存したいというニーズが発生します。
AppendBlob
このようなニーズを満たすために2015年の夏に登場したのがAppendBlob。その名の通り追記できるBlob。
今までのBlockBlobとPageBlobと合わせて3つの種類となりました。
本当は環境依存の低いPHP SDKかREST API経由で利用したかったのですが、PHPには2015年12月時点で未実装のようです(ちらっとソースを見る限り。間違いならご指摘を!)。
またREST APIは、設定がわからず、うまく通信できませんでした(解決するには情報が少ないので一旦保留)。
リファレンスを見る限りnode.js用のSDKにはAPIが追加されているようでした。
というわけで、とりあえず王道の.NETからの接続をまずはメモしておきます。
環境
前提
- Azureのアカウントを取得し、かつ、Storageも生成していることを前提とします。
ツール類など
とりあえず無難に下記の環境を利用します。
- ツールはVisualStudio2015 Communityを使います。
- コンソールアプリで試します。
- 追加ライブラリとしてNuGetでWindowsAzure.Storageをインストールします
実装
REST APIで苦労したのがウソのように簡単に利用できます。
using System;
//追加
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
namespace AppendBlobTest1
{
class Program
{
static void Main(string[] args)
{
//コンテナ名
String containerName = "CONTAINER_NAME";
//ストレージKey
String key = "YOUR_KEY";
//アカウント生成
CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(containerName,key),useHttps:false);
//Blobクライアント生成
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//コンテナ参照生成
CloudBlobContainer container = blobClient.GetContainerReference("test");
//コンテナがなければ作る
container.CreateIfNotExists();
//追加Blobの参照生成
CloudAppendBlob appendBlob = container.GetAppendBlobReference("append-blob.log");
//作るか置き帰るか(既存を使う場合はいらない)
//appendBlob.CreateOrReplace();
//テキスト追記
appendBlob.AppendText("hoge1\n");
appendBlob.AppendText("hoge2\n");
//内容をダウンロードしてテキスト表示
Console.WriteLine(appendBlob.DownloadText());
//入力街
Console.ReadLine();
}
}
}
以上です。簡単。
宿題
- Azure PHP SDKで試す(SDKが対応したら)
- REST APIで試す(情報が増えたら)