Posted at

perlでAzureのBlob操作

More than 5 years have passed since last update.

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個以上の時とか、スレッド増やしたりとか色々癖はありそう。