2011年12月28日

Amazon S3で保存期間を過ぎると自動削除する設定が可能になった

朝起きるとAmazonからお知らせのメールが届いていた。
Today we're excited to announce Object Expiration, a new feature to help you efficiently manage data stored in Amazon S3. Object Expiration enables you to schedule the removal of objects after a defined time period.

You can define Object Expiration rules for a set of objects in your bucket. Each expiration rule allows you to specify a prefix and an expiration period in days.  (...)

(以下意訳)
「Object Expiration」機能のお知らせです! Amazon S3に保存されたデータを効果的に管理する事を可能にする新機能です。これによって一定期間が過ぎるとオブジェクトが削除される様にスケジュールする事が出来ます。

お客様のBucket内の任意のオブジェクトのセットに対してObject Expirationルールを設定して頂けます。それぞれのルールにはプリフィックスと保存期間(日数)を指定する事が出来ます。(...)


早速AWSの管理コンソールを開いて確認してみた。

Bucketのプロパティを表示して、「Lifecylcle」というタブを開くと、ルール名、プリフィックス、保存期間の組み合わせを複数設定出来る様になっている。


プリフィックスに「foldername/」という様に指定すればフォルダ単位で保存期間を設定出来る。

 これは便利! 

これで自前でバックアップのローテーション機能を作り込まなくても大丈夫になりそうだ。

というかちょうど先週「ローテーション機能付きS3バックアップツール for .NET」を作った所だったのだけど。。。










2011年12月22日

VB.NETでAmazon EC2のEBSスナップショットを自動化する

Amazon EC2のEBSスナップショットをWindows環境で自動化する必要に迫られた。

スナップショットを取るだけならEC2のコマンドラインツールですぐに出来るけれども、際限なくスナップショットが増えてしまうのは困る。

そこで、古いスナップショットを自動で削除しつつ新しいスナップショットを作成してくれるツールが必要になる。

Rubyスクリプトはいくつか見つけた。
code.rock: Amazon EBSとRightAwsを使って自動バックアップ環境を構築する

実践で使えるEBSスナップショット取得スクリプト - よかろうもん!

EBSのスナップショットを定期的に作成するスクリプト - こせきの技術日記

oko_changのインフラ日誌: EBSボリュームのスナップショットを自動作成する(right_aws)

シェルスクリプトもあった。
Amazon EBSのスナップショット(バックアップ)を取得しつつ世代管理も行うスクリプト - RX-7乗りの適当な日々

Pythonスクリプトもあった。
AmazonEC2/S3の便利スクリプトのまとめ | スターワン::ブログ


でもそれだけのためにRubyやPythonをインストールしたり、Cygwinをセットアップしたりするのはちょっと避けたかった。


クラウド管理用のWebサービスも試して見た。

RightScaleCloudWorks など。

RightScaleはUIが複雑過ぎて断念。CloudWorksは無料版だと世代管理は出来なさそう。


要件を満たすものがなかなか見つからないので、結局 AWS SDK for .NET を使って自分で作ってみる事にした。
Ec2EbsSnap - GitHub

Ec2EbsSnap - Source Code (Zip file)

実行可能ファイルはこちら (.NET Framework 3.5以上が必要)














2011年12月16日

次期ASP.NETのBundling and Minification機能が良さそうだ

次のASP.NET(4.5)には「Bundling and Minification」機能というものがあるそうだ。

New Bundling and Minification Support (ASP.NET 4.5 Series) - ScottGu's Blog

サーバー側で、複数のスタイルシートやJavaScriptを一つにまとめてさらに「Minification」までして返してくれるという機能らしい。

通常だとファイルが例えば3つに分かれていればクライアントのブラウザからは3回のHTTPリクエストが発生する。でもこの機能を使うと「〇〇フォルダのCSSファイルを全部取って来て」という指定をするとサーバー側でそのフォルダ内のCSSファイルを一つにまとめてからクライアントに返してくれるそうだ。

サーバー側でまとめる時に、当然順序が正しくないとおかしな事になる。そこで、基本的にはアルファベット順になるけれども、JavaScript なら jQuery、スタイルシートなら reset.css など一般的に最初に読み込んだ方が良さそうなものはちゃんと最初に持って来てくれる。

またBundle処理の詳細やMinificationの詳細な動きを自分で制御したい場合は、それなりのクラスを継承したクラスを書いてコードから呼び出せば可能だそうだ。

ASP.NET 4.5、この他にも多くの新機能があってなかなか面白そうだ。
ASP.NET 4.5 Series - ScottGu's Blog











2011年12月8日

App Engineで課金を出来るだけ少なくする方法

下のブログを見て、ほぉーと思ったのでメモ。
 Google Developer Day 2011 Japan: 「App Engine 最新機能」 | Google Japan Developer Relations Blog 

48分もある動画だったので、飛ばしながら観ていたらGoogleの松尾さんが「このセッションで最も重要な事」と言われている部分(20:00辺り)があった。

「App Engineで課金額を気にする人は今すぐこの設定をして下さい。」と言われているので、早速やっておいた。

管理画面に入って、「Application Settings」を開くと下の2つのスライダーがある。


  • 「Max Idle Instances」を最小(1)にする。 
  • 「Min Pending Latency」を最大(15s)にする。 


これで課金が最小になるとの事。

その後それぞれのスライダーの意味の説明を聞いて、確かになるほどなと思った。 

ただし、プロダクションで使っている重要なアプリケーションの場合はこの設定を適用するのは慎重にした方が良いらしい。

趣味で作っているサイトであればこれで特に問題は無いだろうと思う。