AWS OpsWorks(tm)
2013/06/22
JAWS-UG Osaka 第8回勉強会 Beginners
(環境自動構築パック)
Saturday, June 22, 13
自己紹介
• 澤登 HiganWorks合同会社の代表社員
• アプリケーションのためのプラットフォーム構築/
運用自動化をテーマに活動
2
• http://opsrock.in 共同開発・運営
• AWS OpsWorksとChefを主に取り扱
うソリューションを提供
Saturday, June 22, 13
本日の内容
• AWS OpsWorks の概要
• OpsWorksの機能と関連するAWS達
• スタックとレイヤ
• アプリケーションライフサイクルとデプロイ
• OpsWorksのオートスケール
• OpsWorks Ruby on Railsデプロイ
3
Saturday, June 22, 13
本日の内容
• AWS OpsWorks の概要
• OpsWorksの機能と関連するAWS達
• スタックとレイヤ
• アプリケーションライフサイクルとデプロイ
• OpsWorksのオートスケール
• OpsWorks Ruby on Railsデプロイ
3
・・・もっと詳しく?
Saturday, June 22, 13
7/6(土)AWS自動化特集
4
Saturday, June 22, 13
AWS OpsWorks の
概要
Saturday, June 22, 13
AWS OpsWorksとは?
6
Saturday, June 22, 13
AWS OpsWorksとは?
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
6
Saturday, June 22, 13
AWS OpsWorksとは?
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
• プラットフォームの自動構築
6
Saturday, June 22, 13
AWS OpsWorksとは?
• アプリケーションのライフサイクル管理を一
本化するために作られたソリューション
• プラットフォームの自動構築
• アプリケーションのdeploy(undeploy)
6
Saturday, June 22, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
7
Saturday, June 22, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
7
Saturday, June 22, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
7
Saturday, June 22, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
7
Saturday, June 22, 13
プラットフォームの自動構築
• アプリケーションが動作する
プラットフォームとは?
• ネットワーク環境の構築
• サーバ(インスタンス)の調達
• ミドルウェアの設定
7
Saturday, June 22, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
8
Saturday, June 22, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
8
Saturday, June 22, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
8
OpsWorks Agent
Saturday, June 22, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
8
OpsWorks Agent
タスク実行
Saturday, June 22, 13
アプリケーションのdeploy
• アプリケーション ソースコード(リポジトリ)
• git, svn, zip(http, s3)
+ 何らかの配布/ビルドの仕組み
8
OpsWorks Agent
タスク実行 タスク実行管理
Saturday, June 22, 13
OpsWorksの機能と
関連するAWS達
Saturday, June 22, 13
関連AWSは大体こいつらです
10
Amazon EC2 Auto Scaling
Elastic Load
Balancing
Amazon S3
CloudWatch IAM
Amazon SQS
Saturday, June 22, 13
機能対応表
11
OpsWorks 関連AWS
サーバインスタンス提供 EC2, S3
モニタリング CloudWatch
パーミッション IAM
オートスケール ELB, AutoScaling
オートヒール CloudWatch, EC2
※発表者独自の見解を含みます
Saturday, June 22, 13
スタックとレイヤ
Saturday, June 22, 13
『スタック』
1システムをまとめた単位
アプリケーションのプラットホーム全体
『レイヤ』
役割別インスタンスの集合
DB
WebServer
Application
System A
Saturday, June 22, 13
アプリケーション
ライフサイクルと
デプロイ
Saturday, June 22, 13
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
15
OpsWorksのライフサイクル定義
Saturday, June 22, 13
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
15
OpsWorksのライフサイクル定義
プラットフォーム部分
Saturday, June 22, 13
プラットフォーム部分
• Setup
• インスタンスの起動
• 関連パッケージのインストール
• Configure (構成変更時にも自動実行)
• ミドルウェアの設定
• OpsWorksメタデータへの情報登録
16
Saturday, June 22, 13
プラットフォーム部分
• Setup
• インスタンスの起動
• 関連パッケージのインストール
• Configure (構成変更時にも自動実行)
• ミドルウェアの設定
• OpsWorksメタデータへの情報登録
16
Saturday, June 22, 13
設定情報登録例:Mysql
17
"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"
}
}
※一部抜粋
Saturday, June 22, 13
1.Setup
2.Configure
3.Deploy
4.UnDeploy
5.Shutdown
18
OpsWorksのライフサイクル定義
アプリケーション部分
Saturday, June 22, 13
アプリケーション部分 1/2
• Deploy
• デプロイツール※風のタスクを実行
※Capistrano/Chef::Deploy
• レイヤ情報に基づいてアプリケーションコ
ンフィグの設定
• アプリケーションの起動
• ELB/HAProxy等のバックエンドに参加
19
Saturday, June 22, 13
アプリケーション部分 2/2
• UnDeploy
• ELB/HAProxy等のバックエンドから除外
• アプリケーションの停止
20
Saturday, June 22, 13
その他任意に実行可能な小タスク
• os package管理系
• update_dependencies
• install_dependencies
• Chef関連系
• update_custom_cookbooks
• execute_recipes
21
Saturday, June 22, 13
Shutdown
• 後片付け
• ミドルウェアの安全な停止
• OpsWorksAgentの安全な停止
• ステータス更新&削除
22
Saturday, June 22, 13
OpsWorksの
オートスケール
Saturday, June 22, 13
選べるオートスケール
• CloudWatch、AutoScalingと連携
• TimeBased instance
• 1時間単位でインスタンスの起動・停止状
態をスケジュールできます。
• LoadBased instance
• レイヤの平均負荷状況に応じてインスタン
スを起動・停止します。
24
Saturday, June 22, 13
AutoScale(OpsWorks)設定例
25
http://qiita.com/sawanoboly@github/items/2aa556fc4376a1695654
WEBの情報をご参照お願いします
Saturday, June 22, 13
OpsWorks
Ruby on Railsデプロイ
(紙芝居)
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
あ、依存パッケージ
忘れてた
Saturday, June 22, 13
インスタンス
起動してもうたし...
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Railsプラットホーム
OK
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
おや、
DBレイヤ(mysql)が
ないよ?
注) 演出上の都合です、
プリセットのMySQLレイヤなら
悩まずデプロイできます
Saturday, June 22, 13
とりあえず
SQLite3でいいや
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
{
	
  	
  "deploy":	
  {
	
  	
  	
  	
  "books":	
  {
	
  	
  	
  	
  	
  	
  "database":	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "adapter":	
  "sqlite3"
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  }
}
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
しばし待つ
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
rails-app1: $ sudo cat 
/srv/www/books/current/config/database.yml
development:
-- snip-
production:
adapter: "sqlite3"
database: "books"
encoding: utf8
host: ""
username: "root"
password: ""
reconnect: true
database.yml もバッチリ
Saturday, June 22, 13
このレイヤに
インスタンスを
追加してみる
Saturday, June 22, 13
Saturday, June 22, 13
インスタンス起動時に
登録済みアプリは
とりあえずデプロイされます
Saturday, June 22, 13
Saturday, June 22, 13
production:
adapter: "mysql2"
database: "books"
encoding: utf8
host: ""
username: "root"
password: ""
reconnect: true
DB接続がデフォルトなので当然こけます
Saturday, June 22, 13
production:
adapter: "mysql2"
database: "books"
encoding: utf8
host: ""
username: "root"
password: ""
reconnect: true
DB接続がデフォルトなので当然こけます
リカバリ方法は2つ
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
Saturday, June 22, 13
OpsWorks
Ruby on Railsデプロイ
(紙芝居)
完了
Saturday, June 22, 13
最後に
CloudFormation,Elastic
Beanstalk, OpsWorks...
あとOpscode Chef、
結局どれをつかえばいい
の?
73
Saturday, June 22, 13
目的が達成できるな
らなんでもいいと思
います。
Saturday, June 22, 13
目的が達成できるな
らなんでもいいと思
います。
...それでもやっぱりお悩みなら
Saturday, June 22, 13
相談するのがよいでしょう
OpsRock.in
75
Saturday, June 22, 13
(再掲)7/6(土)AWS自動化特集
76
Saturday, June 22, 13
以上
ありがとうございました
ご質問・ご相談は懇親会でも
受け付けます (^^)
Saturday, June 22, 13

aws_opsworks