perl関連でAzureのBlobの操作。
サンプルなどはここに書いてありますが、最初はちょっとてこずる。
http://junnama.alfasado.net/online/2013/12/netazurestrageclientcpan.html
まずは、CPANの「Net::Azure::StorageClient」を使えるようにする。
環境はUbuntsu。
command
# apt-get install libxml-perl
# cpan -i Net::Azure::StorageClient
構成的に「test」というコンテナを作り、中に「20140616」というフォルダ、その中に「test.tsv」というファイル。
つまりは以下の構成。
test
|-20140616
|-test.tsv
フォルダのリストの表示
list.pl
#!/usr/bin/perl
use Net::Azure::StorageClient::Blob;
my $blobService = Net::Azure::StorageClient::Blob->new(
account_name => 'アカウント',
primary_access_key => 'シークレットキー', );
my $res = $blobService->list_blobs( 'test', { options => 'prefix=20140616/' } );
my $xml = $res->content;
print "$xml";
シークレットなんかは自分でMSから取得したアカウントとか。
結果は以下のxml
result
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ContainerName="https://アカウント.blob.core.windows.net/test">
<Prefix>20140616/</Prefix>
<Blobs>
<Blob>
<Name>20140616/test.tsv</Name>
<Url>https://アカウント.blob.core.windows.net/test/20140616/test.tsv</Url>
<Properties>
<Last-Modified>Mon, 16 Jun 2014 12:34:39 GMT</Last-Modified>
<Etag>0x8D1577679848FBC</Etag>
<Content-Length>34</Content-Length>
<Content-Type>text/tab-separated-values</Content-Type>
<Content-Encoding /><Content-Language />
<Content-MD5>tfxlTh3a1F1LiVPyrfawLw==</Content-MD5>
<Cache-Control />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Blob>
</Blobs><NextMarker />
</EnumerationResults>
フォルダのダウンロード
test.tsvというファイルをダウンロードしています。
ローカルをフォルダで指定するとエラーになります。
フォルダ単位でのアップとかは出来そう。
get.pl
#!/usr/bin/perl
use Net::Azure::StorageClient::Blob;
my $blobService = Net::Azure::StorageClient::Blob->new(
account_name => 'アカウント',
primary_access_key => 'シークレットキー', );
my $res = $blobService->download('test/20140616/test.tsv', '/tmp/test.tsv');
my $xml = $res->message;
print "$xml";
★結果
OK
「$res->content;」とかすると中身表示しちゃう。
ファイルのアップロード
ローカルの「/tmp/up.txt」をアップロードしています。
up.pl
#!/usr/bin/perl
use Net::Azure::StorageClient::Blob;
my $blobService = Net::Azure::StorageClient::Blob->new(
account_name => 'アカウント',
primary_access_key => 'シークレットキー', );
my $res = $blobService->upload('test/20140616/up.txt', '/tmp/up.txt');
my $xml = $res->message;
print "$xml";
★結果
Created
慣れると操作は色々。
上のリンクのブログにあるようにフォルダにファイル5000個以上の時とか、スレッド増やしたりとか色々癖はありそう。