SlideShare a Scribd company logo
Elastic Beanstalk /
CloudFormation /
OpsWorks / CloudWatch など
JAWSUG初心者向けトラック 【Deploy&Ops】
夏のJAWS-UG三都物語 July 5 2014
@sawanoboly (HiganWoks LLC, OpsRock LLC)
運営組織
2
• 業務執行社員をつとめる合同会社
• アプリケーションのためのプラットフォーム構築/運
用自動化をテーマにした活動を担当
• http://opsrock.in 共同開発・運営
• Chefをはじめ、Infrastracture as Code
関連を主に取り扱うソリューションを提供
• 導入支援・トレーニングも
自動化サービス比較(0/3)
3
インフラ自由度
アプリデプロイ
対応柔軟性
EC2設定手法
CloudFormation ? ? ?
OpsWorks ? ? ?
Elastic
Beanstalk
? ? ?
AWS CloudFormation
4
AWS
CloudFormation
Template Stack
CloudFormationは
AWSのほぼ全て※の
リソースが対象
※インフラ・プラットフォーム系AWS
CloudFormation
CloudFormationリソース一覧(1/6)
(User-Guideより)
• Compute & Networking
• AWS::Route53::***
• AWS::ElasticLoadBalancing::LoadBalan
cer
• AWS::EC2::***
• AWS::EC2::VPC***
• AWS::EC2::VPN***
6
AWS
CloudFormation
CloudFormationリソース一覧(2/6)
(User-Guideより)
• Storage & Content Delivery
• AWS::CloudFront::Distribution
• AWS::S3::***
7
AWS
CloudFormation
CloudFormationリソース一覧(3/6)
(User-Guideより)
• Database
• AWS::DynamoDB::Table
• AWS::ElastiCache::***
• AWS::RDS::***
• AWS::Redshift::Cluster***
• AWS::SDB::Domain

(※SimpleDB)
8
AWS
CloudFormation
CloudFormationリソース一覧(4/6)
(User-Guideより)
• Deployment & Management
• AWS::CloudFormation::***
• AWS::CloudTrail::Trail
• AWS::CloudWatch::Alarm
• AWS::ElasticBeanstalk::***
• AWS::IAM::***
• AWS::OpsWorks::***
9
AWS
CloudFormation
CloudFormationリソース一覧(5/6)
(User-Guideより)
• Analytics
• AWS::Kinesis::Stream
10
AWS
CloudFormation
CloudFormationリソース一覧(6/6)
(User-Guideより)
• App Services
• AWS::SNS::Topic***
• AWS::SQS::Queue***
11
AWS
CloudFormation
全84リソース
※User Guide (API Version 2010-05-15)AWS
CloudFormation
JSONテンプレートで環境定義
• AWSリソース名:プロパティ:値のセットで

定義 => スタック
• 外部テンプレートの読み込み可能
• 環境依存を解決するリソースやマクロ
• Parameters: 作成時の入力項目
• Mappings: ユーザー定義の連想配列
• Conditions: リソース作成フラグなど
• Outputs: 戻り値
• Function: 値に使えるマクロ
13
AWS
CloudFormation
EC2インスタンス作成
テンプレートの例
14
AWS
CloudFormation
マクロを使用する例
• 作成する他のリソースのID(arn)を使用する
指定
• 依存関係となり、元のIDが用意されるまで
は実行されない
15
AWS
CloudFormation
テンプレートをアップロードして
環境作成
16
$ aws cloudformation create-stack 

--stack-name sample002 

--template-body file://./single_is.json	
GUIから
AWS CLIから
AWS
CloudFormation
EC2の設定:Cloud-Init
• Config: プリセットの起動時タスク定義
• packages: 起動時に追加するパッケージ
• sources: 展開するアーカイブ(外部URL)
• files: 設置するファイル(テンプレート可)
• services: (自動)起動するサービス
• User-Dataとfilesを組み合わせてプロビジョ
ニング(Chef, Puppet, Ansible)
17
AWS
CloudFormation
JSON作成が大変?
ではツールを
AWS
CloudFormation
CloudFormation
対策ツール達
• CloudFormer(公式)
• テンプレート雛形作成ツール
• EC2にアプリを起動、今あるリソースを選
択するとテンプレートにしてくれる
• そのまま使うものではなく、あくまで雛形
作成に
19
AWS
CloudFormation
CloudFormation
対策ツール達
• coffin (https://github.com/chrisfjones/coffin)
• coffee-script でJSON生成
!
!
• CoffeeFormation(https://github.com/j3tm0t0/csfn)
• coffee-script でJSON生成
20
AWS
CloudFormation
CloudFormation
対策ツール達
• Kumogata (https://github.com/winebarrel/kumogata)
• Ruby DSLで記述(直接作成/JSON変換)
• またはYAMLから
21
AWS
CloudFormation
AWS
CloudFormation
自動化サービス比較(1/3)
22
インフラ自由度
アプリデプロイ
対応柔軟性
EC2設定手法
CloudFormation
AWSのリソース
ほとんどOK
ミドルウェアやや難
単体では厳しい
Cloud-Init
(+なにか)
OpsWorks ? ? ?
Elastic
Beanstalk
? ? ?
AWS OpsWorks
23
OpsWorks
OpsWorksは
特定アプリケーションの
プラットフォーム管理
& Deployタスク
OpsWorks
注: OpsWorks部分は
3月(東京)の使い回し多いです
25
OpsWorks
レイヤとアプリケーション
• レイヤ: 役割・プロトコルを元に定義する
• EC2インスタンス群でクラスタを組むなど
• 例えると、自分で作るRDS
!
• アプリケーション
• 配布サーバやリポジトリから取得し、任意のラ
ンタイムで実行されるコード
• OpsWorksのデプロイタスクによりライフサイ
クルイベントを実行
26
OpsWorks
OpsWorks
『スタック』
1システムをまとめた単位
アプリケーションのプラットフォーム全体
『レイヤ』
役割別インスタンスの集合
DB
HTTPServer
Application
System A
←ここに

デプロイ
プラットフォームと
アプリケーションの
ライフサイクル
OpsWorks
プラットフォームの構成管理
• スタックのメタデータを保持するOpsWorks
• ミドルウェアの構成管理を行なうChef
• コードはgit(svnも)リポジトリかS3から
• スタックではVPCやRDSの情報を使用できる
29
OpsWorks AgentAmazon S3
OpsWorks
アプリケーションデプロイ
• アプリケーションのレイヤはイベントによっ
てDeploy用のタスクを起動
• これもChef
30
OpsWorks AgentAmazon S3
OpsWorks
OpsWorks
【販促】日本語Chefの本が出ていますので
OpsWorksのライフサイクル定義
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
32
プラットフォーム部分
OpsWorks
プラットフォーム部分
• Setup
• インスタンスの起動
• 専用AMIか、それを元に作成したAMI
• 関連パッケージのインストール
• Configure (構成変更時にも自動実行)
• ミドルウェアの設定
• OpsWorksメタデータへの情報登録
33
OpsWorks
設定情報登録例:Mysql
"opsworks": {!
"stack": {!
"name": "sample_stack"!
},!
"layers": {!
"db-master": {!
"id": "e554fc61-25f0-4cde-ab21-0fb890f586b6",!
"name": "MySQL Master",!
"instances": {!
"db-master1": {!
"public_dns_name": "ec2-54-250-66-243.xxx",!
"ip": "54.250.66.243",!
"private_ip": "10.154.17.254",!
"private_dns_name": "ip-10-154-17-254.xxx"!
}!
}!
}!
"mysql": {!
"server_root_password": "root_password"!
}!
}
※一部抜粋
34
OpsWorks
OpsWorksのライフサイクル定義
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
35
アプリケーション部分
OpsWorks
アプリケーション部分 1/2
• Deploy
• デプロイツール※風のタスクを実行

※Capistrano/Chef::Deploy
• レイヤ情報に基づいてアプリケーションコ
ンフィグの設定
• アプリケーションの起動
• ELB/HAProxy等のバックエンドに参加
36
OpsWorks
アプリケーション部分 2/2
• UnDeploy
• ELB/HAProxy等のバックエンドから除外
• アプリケーションの停止
37
OpsWorks
OpsWorksその他
• AutoScale標準装備
• レイヤ単位でインスタンス数の増減
• レイヤ用のCloudWatchモニタ
• CloudFormationから作成可能
38
OpsWorks
OpsWorksは
補助ツール特になし…
OpsWorks
実機で挙動確認は一応可能
40
http://qiita.com/sawanoboly/items/147f550878477ff7723e
OpsWorks
OpsWorks
自動化サービス比較(2/3)
41
インフラ自由度
アプリデプロイ
対応柔軟性
EC2設定手法
CloudFormation
AWSのリソース
ほとんどOK
ミドルウェアやや難
単体では厳しい
Cloud-Init
(+なにか)
OpsWorks
ネットワークより上
に特化
OSSでのクラスタは
比較的作りやすい
要Chef(Ruby)力
大抵の事は可能
Blue-Greenやや難
主にChef
+ Cloud-Init
Elastic
Beanstalk
? ? ?
AWS Elastic Beanstalk
42
Elastic Beanstalk Application Deployment
Elastic Beanstalkは
固定プラットフォームへの
アプリケーション設置
Elastic Beanstalk
Elastic Beanstalk
まず
プラットフォームを
決めます
動かすまで3ステップ
45
Elastic Beanstalk
No more thing…
Elastic Beanstalk
Elastic Beanstalk
Elastic Beanstalk概要
• Webアプリ、またはワーカー用のプラット
フォームが作られます
• アプリケーションをアップロードすると起動
します
47
※AWS Elastic Beanstalk 開発者ガイド より
Elastic Beanstalk
アプリケーションコード
• コードは`zip`か`war`で、バージョンラベル
を付けてアップロード (※一部 S3サポート)
• またはEclipse、gitの拡張でPush
• サンプルアプリも用意されている
• スケールできるように作っておく
48
バージョン管理
• ソースアーカイブは任意のバージョンを選ん
でデプロイ可能
• デプロイ対象の環境も任意
49
Elastic Beanstalk
Elastic Beanstalk
Environment
• 環境の単位、個別設定やアプリのデプロイ
• 他AWS関連付け情報のセット
• CloudWatchやアラームのセット
• 環境ごとのエンドポイントDNS

(任意に入れ替え可(Swap))
50
うまくハマれば非常に楽
• PaaS(Platform as a service)
• インフラ管理一切なし
• RDSは連携作成
• VPCは既存と関連付けになる
• AutoScale勝手に対応 (Offも可)
• CloudWatchによる監視
51
Elastic Beanstalk
スタートアップ/開発者が
Ops Freeな運用を
できる(かも)
うまくハマる環境は
やや限られていたが…?
Dockerサポート
• Dockerfile
• Dockerrun.aws.json ※
• AWS用追加情報
• バージョン等
• .dockercfg ※
• プライベートレジストリ情報
54
Elastic Beanstalk
Elastic Beanstalkに
役立つツール
Elastic Beanstalk
Elastic Beanstalk
Eclipse
eb, git aws
(Elastic Beanstalk CLI)
Elastic Beanstalk
Elastic Beanstalk
自動化サービス比較(3/3)
58
インフラ自由度
アプリデプロイ
対応柔軟性
EC2設定手法
CloudFormation
AWSのリソース
ほとんどOK
ミドルウェアやや難
単体では厳しい
Cloud-Init
(+なにか)
OpsWorks
ネットワークより上
に特化
OSSでのクラスタは
比較的作りやすい
要Chef(Ruby)力
大抵の事は可能
Blue-Greenやや難
主にChef
+ Cloud-Init
Elastic
Beanstalk
なし(必要十分)
※関連付けは可能
プリセットで多少
※Dockerを除く
YAMLで記述
Cloud-Init拡張ぽい
ほぼアプリ起動特化
※Dockerを除く
Amazon CloudWatch
59
CloudWatch AlarmAuto Scaling
既に結構CloudWatch
• OpsWorksで
• モニタリング/AutoScale
• Elastic Beanstalkで
• モニタリング/AutoScale
!
• メトリクスの収集とAlarmによるトリガ
• SNS, Auto Scaling Policy, EC2の停止
60
CloudWatch
CloudWatchの仕様
• データ保存期間は2週間
• カスタムメトリクスのサイズは
• POST / 40KB
• GET / 8KB
• 登録は1分間隔
61
CloudWatch
請求もWatch
62
『[AWSマイスターシリーズ]Amazon CloudWatch & Auto Scaling』よりCloudWatch
カスタムメトリクス&AutoScale
• 任意のメトリクスからAutoScaleのポリシー
を更新
• 例: キャパシティ設計をしているホスティン
グで、サーバの負荷でなく収容数に応じてイ
ンスタンス数を変えたい
63
CloudWatch
AWSプラットフォーム管理で
全体的に有用なお勧めツールを
適当にピックアップ
【おまけ】
AWS CLI
& jq
Vagrant
Packer
AWS-SDK
おわり

More Related Content

JAWSUG初心者向けトラック 【Deploy&Ops】