2013.8.10 JAWS-UG 会津
吉田真吾 @yoshidashingo
現場的!
AWSとオンプレの違い
自己紹介
名前:吉田真吾
アイレット株式会社 cloudpack エバンジェリスト
JAWS-UG 横浜 代表
好きなAWSサービス:Amazon S3
好きなAWSクラウドデザインパターン:Direct
Hostingパターン
赤べこ伝説
807年(大同2年)、柳津町の円蔵寺には徳一大師が円蔵寺
の虚空蔵堂を建立する際、上流の村から大量の材木を寄進
された。しかし、水量が豊富な只見川から材木を運搬する
ことは決して簡単ではない仕事だった。
人々が材木を運ぶのに難儀しているとどこからか牛の群れ
が現れ、材木の運搬を手伝ってくれた。重労働で多くの牛
が倒れる中で最後まで働いたのが赤色の牛だったといわれ
ている。そのことから、赤べこが作られた。
(Wikipediaより)
Akabeko Web Services
Work hard,
have fun,
make history!
決して簡単ではない大量の処理をさばくため、
どこからともなく(オンデマンドに)現れて、
多くのマシンが倒れる(H/W障害)中、
最後まで働いた(高可用性)
赤色の牛
アジェンダ
設計編
構築・運用編
CloudFormation 事例
保守編
cloudpack のご紹介
Confidential
設計編
物理サーバーでクラスタリング
している(HAあるいはN+1)
H/Wレベルでの「可用性」向上
フォールトイントレランス→フォール
トトレラント(Design for failure)
Web/APサーバ→Multi-Serverパター
ン、Multi-Datacenterパターン
DBサーバ→DB Replicationパターン
DB Replication
Multi-Server
Multi-Datacenter
共有ディスク
極力使わない
GlusterFS
NFSサーバー
参照コンテンツだけなら S3
アプライアンスもある
Confidential
構築・運用編
アプリケーション管理サービス
AWS CloudFormation
テンプレートベースで柔軟な設定
AWS Elastic Beanstalk
Webアプリケーション向け
障害の起きたEC2を自動復旧
ELBのURLを入替えて環境の切替が瞬時にできる
AWS OpsWorks
Chefレシピベース → v.11 (New!)
カスタムAMI (New!)
RDS 未対応 → 使う方法あり
Confidential
AWS
CloudFormation
説明
AWS CloudFormation
JSON形式で記述したテンプレートを利用する
ことで、システムのスタックまるごとデプロ
イ・更新・削除できるサービス
テンプレートのパート
Resources:作成したいリソースの定義
Parameters:画面から指定する引数
Mappings:条件に応じて入替える引数リスト
Outputs:結果の出力
{
	
  	
  "Parameters"	
  :	
  {
	
  	
  	
  	
  "KeyName"	
  :	
  {
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "Name	
  of	
  an	
  existing	
  EC2	
  KeyPair	
  to	
  enable	
  SSH	
  access	
  to	
  the	
  instance",
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "String"
	
  	
  	
  	
  }
	
  	
  },
	
  	
  "Mappings"	
  :	
  {
	
  	
  	
  	
  "RegionMap"	
  :	
  {
	
  	
  	
  	
  	
  	
  "us-­‐east-­‐1"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "AMI"	
  :	
  "ami-­‐76f0061f"
	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  "us-­‐west-­‐1"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "AMI"	
  :	
  "ami-­‐655a0a20"
	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  "eu-­‐west-­‐1"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "AMI"	
  :	
  "ami-­‐7fd4e10b"
	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  "ap-­‐southeast-­‐1"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "AMI"	
  :	
  "ami-­‐72621c20"
	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  "ap-­‐northeast-­‐1"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "AMI"	
  :	
  "ami-­‐8e08a38f"
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  },
	
  	
  "Resources"	
  :	
  {
	
  	
  	
  	
  "Ec2Instance"	
  :	
  {
	
  	
  	
  	
  	
  	
  "Type"	
  :	
  "AWS::EC2::Instance",
	
  	
  	
  	
  	
  	
  "Properties"	
  :	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "KeyName"	
  :	
  {	
  "Ref"	
  :	
  "KeyName"	
  },
	
  	
  	
  	
  	
  	
  	
  	
  "ImageId"	
  :	
  {	
  "Fn::FindInMap"	
  :	
  [	
  "RegionMap",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "AMI"	
  ]},
	
  	
  	
  	
  	
  	
  	
  	
  "UserData"	
  :	
  {	
  "Fn::Base64"	
  :	
  "80"	
  }
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  }
}
 	
  "Outputs":	
  {
	
  	
  	
  	
  "InstallURL":	
  {
	
  	
  	
  	
  	
  	
  "Value":	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "Fn::Join":	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "http://",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Fn::GetAtt":	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "ElasticLoadBalancer",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "DNSName"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "/wp-­‐admin/install.php"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
	
  	
  	
  	
  	
  	
  	
  	
  ]
	
  	
  	
  	
  	
  	
  },
	
  	
  	
  	
  	
  	
  "Description"	
  :	
  "Installation	
  URL	
  of	
  the	
  WordPress	
  website"
	
  	
  	
  	
  },
	
  	
  	
  	
  "WebsiteURL":	
  {
	
  	
  	
  	
  	
  	
  "Value":	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "Fn::Join":	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "http://",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Fn::GetAtt":	
  [
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "ElasticLoadBalancer",
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "DNSName"	
  ]
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
	
  	
  	
  	
  	
  	
  	
  	
  ]
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  }
Confidential
AWS
CloudFormation
事例
インフラ設計・構築
インターネット公式サイト
月間1億PV 45億ヒット、
新車発表時3倍のアクセス
すべて冗長化
オンプレに環境再生可能な
バックアップ
東京リージョン障害時に
シンガポールで復旧可能
DR用CloudFormation
CloudFormationでシンガポールリージョ
ンに環境構築
テンプレートから一発で構築可能
Tokyo Region Singapore Region
CloudForma*on,
Template, Stack,
Confidential
AWS
CloudFormation
Tips
Tips
テンプレートを再利用可能なモジュ
ール分割(パラメータ、アウトプッ
ト)してチェーン実行しよう
同じ役割のサーバーを複数作成する
ならオートスケーリングで管理しよう
(可用性の観点からも Good!)
テンプレートのチェーン
"Resources":	
  {
  "CloudFormationStackVPCBasic"	
  :	
  {
    "Type":	
  "AWS::CloudFormation::Stack",
    "Properties":	
  {
      "TemplateURL":	
  "https://s3-­‐ap-­‐northeast-­‐1.amazonaws.com/template.suz-­‐lab.com/template/suz-­‐lab_vpc-­‐
basic-­‐0.0.1.json",
"TimeoutInMinutes":	
  "60"
    }
  },
  "CloudFormationStackOnDemandNAT"	
  :	
  {
    "Type":	
  "AWS::CloudFormation::Stack",
    "Properties":	
  {
      "TemplateURL"	
  :	
  "https://s3-­‐ap-­‐northeast-­‐1.amazonaws.com/template.suz-­‐lab.com/template/suz-­‐
lab_ondemand-­‐nat-­‐0.0.1.json",
      "Parameters"	
  :	
  {
        "KeyName":	
  {	
  "Ref":	
  "KeyName"	
  },
        "ImageId":	
  {	
  "Ref":	
  "OnDemandNATImageId"	
  },
        "InstanceType":	
  {	
  "Ref":	
  "OnDemandNATInstanceType"	
  },
        "Name":	
  {	
  "Ref":	
  "OnDemandNATName"	
  },
        "RouteTableId":	
  {	
  "Fn::GetAtt"	
  :	
  [	
  "CloudFormationStackVPCBasic",	
  
"Outputs.RouteTableIdProtected"	
  ]	
  },
        "SecurityGroupId":	
  {	
  "Fn::GetAtt"	
  :	
  [	
  "CloudFormationStackVPCBasic",	
  
"Outputs.SecurityGroupIdCommon"	
  ]	
  },
        "SubnetId":	
  {	
  "Fn::GetAtt"	
  :	
  [	
  "CloudFormationStackVPCBasic",	
  "Outputs.SubnetIdPublicVarA00"	
  ]	
  },
        "VpcId":	
  {	
  "Fn::GetAtt"	
  :	
  [	
  "CloudFormationStackVPCBasic",	
  "Outputs.VpcIdBasic"	
  ]	
  }
      }
    }
  }
},
親テンプレートの定義
同一レイヤーは Auto Scaling で
"Resources":	
  {
	
   "AutoScalingLaunchConfig"	
  :	
  {
	
   	
   "Type"	
  :	
  "AWS::AutoScaling::LaunchConfiguration",
	
   	
   "Properties"	
  :	
  {
	
   	
   	
   "KeyName"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "KeyName"	
  },
	
   	
   	
   "ImageId"	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "ImageId"	
  },
	
   	
   	
   "SecurityGroups"	
  :	
  {	
  "Ref"	
  :	
  "SecurityGroups"	
  },
	
   	
   	
   "InstanceType"	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "InstanceType"	
  }
	
   	
   }
	
   },
	
   "AutoScalingAutoScalingGroup"	
  :	
  {
	
   	
   "Type"	
  :	
  "AWS::AutoScaling::AutoScalingGroup",
	
   	
   "Properties"	
  :	
  {
	
   	
   	
   "DesiredCapacity"	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "CapacitySize"	
  },
	
   	
   	
   "LaunchConfigurationName"	
  :	
  {	
  "Ref"	
  :	
  "AutoScalingLaunchConfig"	
  },
	
   	
   	
   "MaxSize"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "CapacitySize"	
  },
	
   	
   	
   "MinSize"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :	
  {	
  "Ref"	
  :	
  "CapacitySize"	
  },
	
   	
   	
   "AvailabilityZones"	
  :	
  [
	
   	
   	
   	
   {	
  "Fn::FindInMap"	
  :	
  [	
  "AzMap",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "Az1"	
  ]	
  },
	
   	
   	
   	
   {	
  "Fn::FindInMap"	
  :	
  [	
  "AzMap",	
  {	
  "Ref"	
  :	
  "AWS::Region"	
  },	
  "Az2"	
  ]	
  }
	
   	
   	
   ],
	
   	
   "Tags"	
  :	
  [
	
   	
   	
   {	
  "Key"	
  :	
  "Name",	
  "Value"	
  :	
  {	
  "Ref"	
  :	
  "Name"	
  },	
  "PropagateAtLaunch"	
  :	
  true	
  }
	
   	
   ]
	
   	
   }
	
   }
},
Parameters
Confidential
保守編
EC2の障害復旧フロー
EC2の障害復旧フロー
障害は起きるもの
復旧ファースト
Confidential
エンジニア
世界共通の夢?
夜はぐっすり眠りたいモン!
そんなときは...
自主規制
AWS運用をアウトソースしたい企業向けの
月額費用固定型フルマネージドホスティング
24時間365日サーバー運用・保守
•電話/メールによるサポート
初期費用なし(基本移行作業含む)
月額5万円からのスタート
日本円で請求書発行
フルマネージド
サービス/リソース監視
ディスク使用量、メモリ使用量、プロセス数、
Webサーバー・DBサーバー死活...
バックアップ/リストア
EBSスナップショットを利用した二世代(過去
二日分)バックアップ
アクセス制御(ファイアーウォール)
適切なセキュリティグループを設定、OS・ミド
ルウェアレベルでさらに細かな設定も対応可能
定額課金・請求書払い
従量課金では予算計画が立てられない
クレジットカードでUSドル決済では利用料の予測が難しい
Amazon Web Servicesでは...
月額固定+日本円請求書発行
バースト保障
キャンペーンなど急激なアクセス増加へ合わせてインフラ
準備するのは不可能
いつあるかわからないピークのために予め準備できない
追加料金無しでスケールアウト
(7インスタンス日まで)
日本初のAPNプレミア コンサルティングパートナーの
一社として認定されました。
メニュー サービス項目 提供有無
ライト コンサルティング プランに含まれます
初期費用
プランに含まれます
※インスタンス構築費用
AWS利用料 プランに含まれます
バースト保障 プランに含まれます
監視/運用/保守
平日営業時間帯
(平日10:00-19:00)
平日時間外
(0:00-10:00、19:00-24:00)
土曜、日曜、祝祭日
(0:00-24:00)
 監視 プランに含まれます プランに含まれます プランに含まれます
 運用 プランに含まれます なし なし
 保守 プランに含まれます プランに含まれます プランに含まれます
専用サーバープラン
メニュー サービス項目 提供有無
ライト コンサルティング プランに含まれます
初期費用
プランに含まれます
※インスタンス構築費用
AWS利用料 プランに含まれます
バースト保障 なし
監視/運用/保守
平日営業時間帯
(平日10:00-19:00)
平日時間外
(0:00-10:00、19:00-24:00)
土曜、日曜、祝祭日
(0:00-24:00)
 監視 プランに含まれます プランに含まれます プランに含まれます
 運用 プランに含まれます なし なし
 保守 プランに含まれます なし なし
専用サーバーライトプラン
↑New!!
MICROプラン ライト 2万円/月
SMALLプラン ライト 3万円/月
:
まとめ
設計:Design for failure
運用:サービスを利用
保守:サービス継続優先
それでも障害は起きるので、頼れる
パートナーを
Thanks!
http://www.cloudpack.jp/
suuport@cloudpack.jp
@cloudpack_jp

現場的!AWSとオンプレの違い(赤べこバージョン)