プログラマでありたい

おっさんになっても、プログラマでありつづけたい

クラウド破産を防ぐ為のAWS Billing Alert

 先日、Amazon S3を使ったWebホスティングのコスト検証を行いました。従量課金制を心配している人が多いので、私としては心配ないですよとメッセージを送ったつもりだったのですが、やはり上限がないことに不安を覚える人が多いようです。
 消費行動としてはなかなか興味深かったので、従量課金制と定額制については改めて調べて見ようと思います。一方でAWSを利用する上での不安を解消する方法は無い訳ではないので簡単に紹介しておこうと思います。

AWS Billing Alertsを使った請求金額通知



 Amazonには、AWS Billing Alertsという請求額を通知してくれるサービスがあります。コンソール画面から設定を行い、任意のサービスもしくはサービス全体で一定額を超えたらメールで通知するというサービスです。測定出来るメトリクスとしては、EC2,S3,Route53,SNS,データ転送量とあります。


 一定額を超えると次のようなメールが飛んできます。またタイトルは自由に編集できます。


 現状では、日本語の紹介ページならびに日本語のメッセージがないところが残念なところですが、そのうち日本語対応もされるでしょう。

APIを併用して、自動停止プログラミング



 メールだけ来てもどうしようもないじゃないかと言う方もいると思います。そんな場合は、APIを利用して自動停止することも可能です。AWS Billing Alertは、CloudWatchの機能に含まれているようです。Amazon CloudWatch Command Line Tool を使うことによって、コマンドラインから現在の費用を取得することができます。具体的な方法については、この方のブログに詳しく載っています。
 S3の操作については、AWS SDKを使えます。Javaや.Net,Ruby,iOSなど様々な言語で提供されています。

特定のIPアドレスからのアクセスを禁止



 もう一点、懸念が多かったのはボットや私怨で狙われるという事象に対してです。個人的には、ボットの運営者もコストが掛かるのでメリット(利益)がないことには攻撃することはないと思っています。まぁウィルス等に感染したPCやサーバが攻撃してくることはよくありますが、集中して攻撃されることはまずありません。なので、そんなに心配はないのかと思います。
 一方で防ぐ方法も必要というのは、よく解ります。Amazon S3ではBucket Policyでアクセス制御ができます。IPアドレスによる許可/不許可も出来るので、狙われた時はそのIPアドレスを禁止にしたら良いと思います。
 下記はサンプルです。s3web.example.comというバケットに対して、192.168.143.0/24のネットワークからのアクセスを許可して、192.168.143.188/32のネットワークからのアクセスを拒否しています。

{
	"Version": "2008-10-17",
	"Id": "",
	"Statement": [
		{
			"Sid": "PublicReadForGetBucketObjects",
			"Effect": "Allow",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::s3web.example.com/*",
        	"Condition" : {
				"IpAddress" : {
					"aws:SourceIp": "192.168.143.0/24" 
				},
				"NotIpAddress" : {
					"aws:SourceIp": "192.168.143.188/32" 
				} 
			} 
		}
	]
}

Example Cases for Amazon S3 Bucket Policies

まとめ



 色々な方が指摘しているように、Amazon S3で静的サイトを構築するのが一番安い方法ではありません。自宅サーバであったり、定額格安のレンタルサーバや無料のホスティングサービスも幾つもあります。
 一方で、Amazon程の信頼性及び拡張性の高さを兼ねているのは、なかなか見当たりません。従量課金制で低コストで始めて、サイトの成長と共に利用料があがるという形は考慮に値するのではないでしょうか?特に企業サイトなど、信頼性が求められるものについてはお勧めなのではと思っています。


See Also:
Amazon S3 Webホスティング情報をざっくりまとめてみました
本当に月額10円でレンタルサーバを始められるのか? S3で静的サイト構築を検証


参考:
月額10円〜でレンタルサーバーをはじめる方法 | アマゾン ウェブ サービス(AWS)
Monitor Your AWS Charges with Billing Alerts Using Amazon CloudWatch
Amazon CloudWatch Command Line Tool
AWS Billing Alerts を使った請求金額通知と、CLIを使った金額取得
Example Cases for Amazon S3 Bucket Policies