AmazonからGlacier(氷河)がリリースされましたね。1ヶ月、1GBあたり1円! この低価格がすごいですね。ダウンロード可能になるまで3.5~4.5時間かかるというのがキモで、低価格を実現しているようですが…、あれですかね、ほとんどのHDDは電源オフになってて、リクエストされたデータのあるHDDからは、常時電源オンのHDDにデータをしばらく移すとかそんな仕組みですかね?(まあ、分かりませんが…) ともかく、このような低価格、大容量のオンラインドライブが欲しいと思ってました。デジカメ写真のバックアップ用として(笑)。今、デジカメの写真のバックアップは、自宅のファイルサーバーにとっているのですが、もし、自宅が火事とかになったら、貴重なこどもの写真とかが決して戻ることがない。なので、できればオンラインにバックアップしたかった。でも100GB近くあるのでSkyDriveとかDropboxは候補になりませんでした。
なので、早速Windowsで試してみました。Windowsだと、.NetのC#が使えます。現状は、自分でプログラムつくらないといけません(^_^;)。まあ、あれですね、いずれAmazon謹製のクライアントプログラムとか提供してくれるんでしょうか。まあ、時間があれば、.自分でつくってみたい気もします。
すいません、以下はメモ書きレベルで…。
まずは、このへんのドキュメントを読みます。
What Is Amazon Glacier
http://docs.amazonwebservices.com/amazonglacier/latest/dev/introduction.html
Amazon Glacier Developer Guide
http://awsdocs.s3.amazonaws.com/glacier/latest/glacier-dg.pdf
基本的には、Glacier Management ConsoleでVaultを作成して、そのVaultに対して、クライアントプログラムからファイルのアップロード、ダウンロードを行うということのようですね。
クライアントプログラムの作成には、AWS SDK for .NETをダウンロードしてインストールします。
http://aws.amazon.com/jp/sdkfornet/
それで、Visual Studioの新規プロジェクの作成で、AWS Enpty Projectを選択します。
サンプルコードは、AWSのサイトに載ってますが、こんな感じです。コンフィグファイルは、アップロード、ダウンロードプログラム共通です。
コンフィグファイル
App.config
<?xml version="1.0"?> <configuration> <appSettings> <add key="AWSAccessKey" value="*** provide AccessKeyID ***"/> // アクセスキー ID <add key="AWSSecretKey" value="*** provide SecretKey ***"/> // シークレットアクセスキー </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
アップロードプログラム
Program.cs
using System; using Amazon.Glacier; using Amazon.Glacier.Transfer; using Amazon.Runtime; namespace glacier.amazon.com.docsamples { class ArchiveUploadHighLevel { static string vaultName = "*** provide vault name ***"; // ボールト名 static string archiveToUpload = ""*** provide name of file to upload***"; // ファイル名 public static void Main(string[] args) { try { var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.APNortheast1); // 東京リージョン // Upload an archive. string archiveId = manager.Upload(vaultName, "fujisan", archiveToUpload).ArchiveId; Console.WriteLine("Archive ID: (Copy and save this ID for the next step) : {0}", archiveId); Console.ReadKey(); } catch (AmazonGlacierException e) { Console.WriteLine(e.Message); } catch (AmazonServiceException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("To continue, press Enter"); Console.ReadKey(); } } }
ダウンロードプログラム
Program.cs
using System; using Amazon.Glacier; using Amazon.Glacier.Transfer; using Amazon.Runtime; namespace glacier.amazon.com.docsamples { class ArchiveDownloadHighLevel { static string vaultName = "*** provide vault name ***"; // ボールト名 static string archiveId = "*** provide archive ID ***"; // アーカイブID static string downloadFilePath = ""*** provide location to downloadarchive ***"; // ダウンロードパス public static void Main(string[] args) { try { var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.APNortheast1); //東京リージョン var options = new DownloadOptions(); options.StreamTransferProgress += ArchiveDownloadHighLevel.progress; // Download an archive. manager.Download(vaultName, archiveId, downloadFilePath, options); Console.ReadKey(); } catch (AmazonGlacierException e) { Console.WriteLine(e.Message); } catch (AmazonServiceException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("To continue, press Enter"); Console.ReadKey(); } static int currentPercentage = -1; static void progress(object sender, StreamTransferProgressArgs args) { if (args.PercentDone != currentPercentage) { currentPercentage = args.PercentDone; Console.WriteLine("Downloaded {0}%", args.PercentDone); } } } }
環境にあわせて変更しなければいけないのは、コメントをつけた部分です。最初、東京リージョンの指定がわからなかった。東京リージョンは、APNortheast1になります。
上記のダウンロードプログラムは高レベルAPI使用ということで、ダウンロード要求と、実際のダウンロード命令が特に分かれてません。一命令になってます。つまり、このプログラムを実行すると、3.5~4.5時間、実行しっぱなしでしょう。たぶん、低レベルAPIを使えば、まずダウンロード要求を出して、その後、通知を受けてからダウンロード開始なんてのが、できるんだと思います。
アーカイブIDは、アップロードプログラムを実行すると得られます。そのアーカイブIDをダウンロードプログラムで指定しています。
さて、これで実際に動くのかな? アップロードプログラムは実行したら、アーカイブIDを得られましたが、ダウンロードプログラムは、実行してまだ3時間ぐらいしか経過してなくて、まだダウンロードは実行されてません。