今日、Bloggerの画像置き場として利用していたPicasaの終了が発表されました。

Moving on from Picasa:The official Google Pacasa Blog

デスクトップ版のPicasaは、3月15日以降はサポート無しで、アップロードも不可。
Picasa Web Albumsは4月までは利用できるようですが、5月1日以降はGoogleフォトに移行するしかないんでしょうね。
単に画像保存としての利用であれば、Picasa Web AlbumsとGoogleフォトで違いは少ないです。
しかし、ブログの画像ファイル置き場としては両者で全く違う。
Googleフォトだと、画像ファイルへのリンクのURLの取得が難しい(ほぼ出来ない)です。

さらにブログ運営をしている人に困ったのが、CSSなどの外部ファイル置場として多く利用されているGoogleドライブでも、8月でウェブ ホスティングが終了。涙

Google ドライブにおけるウェブ ホスティング機能の廃止について:Google Appsアップデートブログ

AWS(Amazon Web Services)

Googleの無料サービス以外で、ブログの画像ファイルやCSSファイル置き場を探してみました。
無料だと取っつき易いんですが、提供する会社の都合で振り回されるのはコリゴリ。
低額で利用できるレンタルサーバやクラウドを探して、候補になったのがAWS(Amazon Web Services)のS3。
AWS S3の凄い所は、99.999999999% の堅牢性と99.99% の可用性で、3拠点でデータが保存される点。
普通のレンタルサーバーだと定期的なバックアップが必要だけど、AWS S3では必要なさそう。
しかもAWS S3は、最初の1年間には無料枠があるので、気に入らなければ他のサービスに移動すればいいだけ。
同じサブドメイン名とフォルダ構造にすれば、ファイルのURLを変更せずに済みます。

AWSの欠点は、クラウドならではの料金が従量制なこと。
ファイル置場としてS3を使う際に気を付ける点は、保存するデータ量、ファイルのPUTおよびGET回数、ファイルのデータ転送量。
詳しくは、Amazon S3の料金表を見てください。
最初の1年目には、毎月のストレージ 5 GB、20,000 GET リクエスト、2,000 PUT リクエスト、データ送信 15 GBが無料となります。

AWS(Amazon Web Services)

1.
AWSの登録は、画面表示の通りに行えば問題なく出来ます。
料金は請求とコスト管理で随時確認できまが、それでも不安な人は、Amazon CloudWatchで請求アラートの設定をお勧めします(10アラートまで無料)。
セキュリティが気になる人は、2段階認証とIAMの設定を考えてみても良いかも。

2.
次に、Amazon S3の設定です。
バケット名は、後で結び付ける独自ドメインを考慮して付けてください。
例えば、画像のURLをサブドメイン名/画像ファイルにする場合には、バケット名をサブドメイン名と同じにします。
バケット内にフォルダを作成して画像を置くと、サブドメイン名/フォルダ名/画像ファイルとなります。

3.
バケットは初期状態ではインターネット上に公開されていないので、まずアクセス許可の設定。
バケットのプロパティのアクセス許可で、ファイルの取得(GET)のみ誰にでも許可するのが以下になります。

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Sid": "AddPerm",
   "Effect": "Allow",
   "Principal": "*",
   "Action": "s3:GetObject",
   "Resource": "arn:aws:s3:::バケット名/*"
  }
 ]
}

画像盗用などを防ぐため等に、リファラ制御も可能です。
しかし、本当に悪意のある人はリファラの偽造をするし、スマートフォンではリファラを送らない場合もあるので、リファラ制御は考えても仕方ないかも。
リファラ以外にも、特定のIPアドレスやAWSユーザーを対象に、かなり自由に設定できます。
細かくやるには、JSONを少し勉強する必要がありますね。
AWSのバケットポリシーの例AWS Policy Generatorが参考になりました。
例として、Allowで全員にGETを許可した後、Denyで特定のリファラを拒否する設定を書いてみました。

{
 "Id": "適当な名前",
 "Version": "2012-10-17",
 "Statement": [
  {
   "Sid": "適当な名前",
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Resource": "arn:aws:s3:::バケット名/*",
   "Principal": "*"
  },
  {
   "Sid": "適当な名前",
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Deny",
   "Resource": "arn:aws:s3:::バケット名/*",
   "Condition": {
    "StringLike": {
     "aws:Referer": ["拒否したいリファラ1","拒否したいリファラ2"]
    }
   },
   "Principal": "*"
  }
 ]
}

4.
次に、バケットのプロパティの静的ウェブサイトホスティングで、「静的ウェブサイトホスティングを有効にする」にチェック。
その際に、簡単なもので良いので、インデックスファイルをアップロードして指定します。
エラードキュメントは、特に作成しなくても、S3で定義済みのエラードキュメントが返される仕様になっています。

5.
ログを確認したい場合には、バケットのプロパティのログ記録を有効に設定。
しかし、細切れのログが凄い数で保存されていくので、その分料金が必要になります。

6.
最後は、AWS S3と独自ドメインとの紐付けです。
独自ドメインの前にwwwなどを付けないネイキッドドメインの場合には、Amazon Route53で転送設定が必要(Amazon Route53は有料)。
しかし、今回はサブドメインなので、独自ドメインを購入したお名前.comのDNSを利用しました。
もちろん無料です。笑
ドメインNAVI>ネームサーバーの設定>DNS関連機能設定>DNSレコード設定で、以下を追加します。
ホスト名:バケット名、TYPE:CNAME、TTL:3600、VALUE:バケット名.s3-website-ap-northeast-1.amazonaws.com

今後、AWS S3を実際に使ってみた結果を報告をしていきたいですね。