当社のAWSへの取り組み
KLab株式会社
佐々木健一(@siroken3)
自己紹介


● お仕事
  ○ SIer (前職)
    ■ Java GUI系
  ○ KLab入社後
    ■ Java サーバサイド開発、受託系SE
    ■ PHPでのソーシャルゲーム開発
    ■ AWSインフラ担当へ(最近半年くらい)
AWS?

● Amazon Web Services の略
● IaaS型クラウドの先駆け
● EC2 (Elastic Computing Cloud)
  ○ 仮想サーバのホスティングサービス
● 世界中にリージョンと呼ばれる物理拠点がある
  ○   北米(東海岸*1, 西海岸*2)
  ○   アジア・パシフィック(東京, シンガポール)
  ○   南アメリカ
  ○   欧州
当社の状況 (ビジネス面)

● AWS上で複数タイトルリリース中
 ○ 真・戦国バスター for iPhone
 ○ Load of Dragons for iPhone
 ○ その他開発中含め複数タイトル


● グローバル市場へ重点を急速にシフト
 ○ まず北米マーケット
当社の状況 (技術面)

● 統合インフラ基盤 DSAS(※)
    ○   物理インフラ
    ○   安定・安心・大規模
    ○   国内大型IP向け
    ○   構成はほぼ枯れている
    ○   多重化 / 冗長化 / フェイルオーバー!
(※) http://www.klab.com/jp/services/products/dsas/index.html


● AWSに対する期待
  ○ 早期立ち上げ可能なインフラ
  ○ 海外ゲーム向け
  ○ 構成は試行錯誤中
当社の状況 (組織面)

● 水平分業チームから垂直分業チームへ

          企画

                      個々のチーム
     アプリケーション開発       で対応




     インフラ (ミドルウェア等)
[目指す姿] 進化/成長するインフラ
                   インフラ
                    Ver.2
          各チームの
          ノウハウ

 インフラ
  Ver.1




 チーム#1    チーム#2   チーム#3
現在試行錯誤中ですが



    開発中(検討中も含)の
   AWSインフラを晒します!
登場する技術


●   Amazon VPC (Virtual Private Cloud)
●   AWS CloudFormation
●   Chef-solo
●   Capistrano
AWS VPC
● プライベートネットワークを構築できる!
 ○ VPCではない従来型のEC2は「レガシー」


● VPCの特徴(抜粋)
 ○ インスタンス停止してもprivate IPアドレスが保持される
 ○ ネットワークインタフェースの差し替え
   ■ Active-standby構成が組める
 ○ ルーティングの動的変更


● はまりどころもたくさん!
AZa   AZb   AZc
CloudFormation / Chef / Capistrano
● CloudFormation
  ○ EC2インスタンスや仮想ルータなどAWSのリソースを設計
    したとおりに起動させる
● Chef (Chef-solo)
  ○ EC2インスタンスで動作するミドルウェア(apache,
    memcached,等)やconfigurationを設計したとおりに反映さ
    せる
● Capistrano
  ○ 多数あるサーバ群を効率よく操作するためのフロントエン
    ド
インフラのライフサイクル

     初期構築         アプリケーション運用

 CloudFormation    Capistrano
      Chef




   ノウハウの記述         インフラ改善

 CloudFormation    Capistrano
   テンプレート            Chef
   Chefレシピ
CloudFormation (抜粋)
"nat": {                                 EC2インスタンスを起動する
                                         定義
   "Type": "AWS::EC2::Instance",
   "Metadata": {
      "AWS::CloudFormation::Init": {
         "configSets": {
            "boot": [ "bootPackages","bootCommands" ]
         },
         "bootPackages" : {
            "packages" : {             起動時に自動的にインストール
                                       するパッケージも指定できる
               "yum" : {
                  "gcc" : [],
                  "gcc-c++" : [],
CloudFormation (抜粋)

                                          ネットワークインタフェースの定
                                          義
"natNetworkInterface" : {
   "Type": "AWS::EC2::NetworkInterface",
   "Properties" : {
      "SubnetId" : { "Ref" : "admUsWest2aSubnet" },
      "SourceDestCheck" : "false",
      "GroupSet" : [ { "Ref": "admSecurityGroup" } ]
    }
}
Chef

● http://www.opscode.com/chef/

● インフラをコーディング!
  ○ ノードの役割をJSONで内部構成をRuby DSLで記述
  ○ 設定/維持の自動化


        Web             NAT        Memcache
  ●   apache2   ●   iptables   ●   memcached
  ●   PHP5.3
Chef (JSON)
name 'role_mgr'
description 'This is mgr server role.'
default_attributes({ :run_app => "mgr" })
run_list [
       "recipe[apache2]",
       "recipe[base::mgr]",              Nodeで実行さ
       "recipe[base::capistrano]",       れるレシピ達
       "recipe[php]",
       "recipe[kg_global::mgr]",
      ]
Chef (Ruby)


web_app "site" do
  server_name node['hostname']
  server_aliases ["prodsite.klab.com", "stgsite.klab.com"]
  docroot "/opt/klab/site/current/app/webroot"
  template "site.conf.erb"
end


                            Apache VirtualHostが生
                            成される
Capistrano

● http://capistranorb.com/

● 多数のサーバに対して透過的に同時に運用操
  作を行うための仕組み

● 元々RoR向けですがPHPでも使える
Capistrano
# ex-1
$ cap shell
cap> ls /tmp # 全サーバの /tmp 以下をls

# ex-2
$ cap logging:tail_log # 全webサーバのログをtail -fする
$ cat deploy.rb
namespace :logging do
   task :tail_log, :roles => :web do
      stream "tail -f/var/log/httpd/access.log"
   end
end
さらに...


● 冗長化して安心して使えるインフラへ

● 適切なコストにするノウハウ

● インフラ運用と開発のアジャイルな開発を支える
  仕組みづくり(devops)
いうわけで当社はAWS力入れてます

● AWSに明るい方、チャレンジしたい方大
  歓迎!

● グローバルゲームインフラ
一緒に作りましょう!

● もちろんPHP技術者大歓迎!
ご清聴
ありがとうございました

当社のawsへの取組