貧乏臭くEC2を使っていくために調べたメモ
これもWebサービス前提の話。一般的なものであればDBとWeb/APPサーバだけで成立すると思うのでその前提で。あと、Route53、SSLも使う前提。
VPCを使うか?
非VPCを使わなくっていいのは(ry
ちなみに、Web/APPはpublic subnetに起動して、そのpublic subnetにセキュリティグループ設定して、そのセキュリティグループからのアクセスをDB側で許可してWeb/APPからのアクセスを一括でできるようにしておく。
コスト
いいやつは高い。あたりまえ。用途や負荷特性によって適切なインスタンスタイプを選べばいいと思うけど、とりあえず参考までにスタンダードなオンデマンドインスタンスの起動時間コストを列挙しておく。
- Micro:約$20
- Small:約$63
- Medium:$126
- Large:$252
- ExtraLarge:$504
http://aws.amazon.com/pricing/ec2/
冗長化すれば、上記×台数がかかるわけですな。ちなみにMicroインスタンスはEBS-backedオンリー。
ある程度、利用傾向が読めてきたらリザーブドインスタンスを導入することを検討すべき。
ELB使う?
これは要は冗長構成とるか?という話に思えるかもしれないけど、ELB使っておきながらそれにぶら下げるインスタンスは1個でもいいと思うので、正確には「冗長構成を採る準備をしておくか?」というニュアンスになるかと思う。
考慮ポイントとしては以下を考えた。
- コスト
- 故障率、負荷が上がる可能性
- 故障時、負荷が上がった時の対応
- SSLの扱い
コスト
ELBのコストは2013年6月時点で$0.028/hour + $0.008/転送量(GB)ということで、何もしなくても月$20かかる。月間で1TB転送すればプラス$8で、$30程度。
転送量の1TBは例えばcookpadのトップページが200KBくらいだったので、それベースだと500万PVくらい。
http://aws.amazon.com/pricing/elasticloadbalancing/
この$30をどうとるか。
故障率、負荷が上がる可能性
故障率はまあよくわからないとして、負荷が上がる可能性、要は1台じゃ捌き切れないくらいのアクセスアップがどのタイミングでありそうか?という話。そんなのわかるか、とおもいきや、なんらかのプロモーションをかけたりなど、アクセスアップが予期できるケースというのはままある。そんな場合にはあらかじめ、サッとスケール(アップ|アウト)できる体制を整えておくほうがいいかもしれない。
故障時、負荷が上がった時の対応
故障時は、ELBを使っていても冗長化していなければとにかくインスタンス立ち上げなおしてデプロイしなおして、という手順が必要になる。
負荷が上がった時、スケールアップで対応するならインスタンス立ち上げなおして・・・の手順になるが、個人的な経験的にもネット上の情報的にもこういう上京でWeb/APPサーバをスケールアップで対応した、という情報に触れたことがないので、なんかこの対応方法自体がイメージわかない。
最初期のサーバで支えられない程度のトラフィックがでてきたら、もう冗長化構成を組むべきに思う。また、そういう状況になったときに、ELBを組んで・・・みたいな作業はそこそこプレッシャーのかかる状況下で行われるケースが多いと思うので、それなりにマジでやるサービスなら$30くらい出して最初からELB組んだ構成にしておいたほうがいいと思う。
SSLの扱い
ELB使うなら、ELBにインストールすれば楽でいいねー、くらいでけっこうどうでもいいかも。
デプロイ
VPC使うとなると、外から直接デプロイするにはEIPを付与する必要がある。単一インスタンス構成の場合はそれでいい気がする。でも冗長構成になったら1つ1つのインスタンスにEIPつけていくのは無理がでてきそうなので、そのときはデプロイ用インスタンスを立てて以下のエントリのようにELB配下のインスタンスにデプロイするツールを書けばいいかな。
http://rock-and-hack.blogspot.jp/2013/02/elbcapistrano.html?spref=tw
EBS-backed? instance store?
好き好きなんじゃないでしょうか。
この辺に特性がまとめてあるので、用途とお好みによって選ぶがよいでしょう。
http://www.newvem.com/choosing-between-ebs-backed-and-instance-store-backed-ami/
コスト以外はEBSのほうが優れているように思うけど、EBSの特性に頼った構成を(うっかり)とっちゃうと管理が煩雑になるかも、という観点もあるかも。
あと、MicroインスタンスはEBS-backedのみなんで。