72
SimpleWorkflowとOpsWorksで サービスを開発して解ったこと

JAWS DAYS 2015 SimpleWorkflowとOpsWorksでサービスを開発して解ったこと

Embed Size (px)

Citation preview

SimpleWorkflowとOpsWorksで

サービスを開発して解ったこと

•千葉哲也

•株式会社サーバーワークス

• JAWS UG 横浜支部

• Cloud Automator

• http://cloudautomator.com

• twitter : @kachina_t

• facebook : tetsuya.chiba

•好きなAWSサービス

• SimpleWorkflow / OpsWorks

自己紹介

TwitterでJaws Daysに参加しよう!たくさんリツイートされた人にプレゼント!

@jawsdays

参加方法は簡単!3ステップ

@awscloud_jp +

#jawsdaysをつけてツイート投稿!

1番リツイート数を集めた人が優勝者です!

AWS公式TwitterとJAWS DAYS公式Twitterをフォロー

??

17:00~の懇親会で優勝者発表です。※9:00~16:50のTweetが対象です。

Kindle JAWS Tシャツ

ウェアラブル

Moff Band JAWS Tシャツ

Step 1 (参加条件になります)

Step 2

Step 3

(Jaws Daysに関する投稿なら何でもOK!)

JAWS Tシャツ

• Cloud Automatorのご紹介

• SimpleWorkflowについて

• OpsWorksについて

•まとめ

もくじ

CLOUD AUTOMATOR

ご紹介

AWSを進化させるオペレーション自動化サービス

CLOUD AUTOMATORの提供価値

わたしたちは

運用を自動化するサービスを提供します

運用管理

44.9%

保守開発

30.8%

新規開発,

24.3%

出典) 日経BP社「企業情報システムの運用管理に関する実態調査2013」

運用の自動化

• 2010年03月サービスイン

• AWSマネジメントコンソールの日本語化

について

[AWSマネジメントコンソール]

[Cloudworksコンソール]

前身の

create_image

create_rds_snapshot

create_snapshot

request_volume_copy

start_instance

stop_instance

20

10

04

20

10

05

20

10

06

20

10

07

20

10

08

20

10

09

20

10

10

20

10

11

20

10

12

20

11

01

20

11

02

20

11

03

20

11

04

20

11

05

20

11

06

20

11

07

20

11

08

20

11

09

20

11

10

20

11

11

20

11

12

20

12

01

20

12

02

20

12

03

20

12

04

20

12

05

20

12

06

20

12

07

20

12

08

20

12

09

20

12

10

20

12

11

20

12

12

20

13

01

20

13

02

20

13

03

20

13

04

20

13

05

20

13

06

20

13

07

20

13

08

20

13

09

20

13

10

20

13

11

インスタンス操作

EIP

キーペア

ロードバランサー

セキュリティグループ

スナップショット

EBSボリューム

[操作系機能の利用数]

[自動化系機能の利用数]

(クラウドオートメーター)とは、

AWS(Amazon Web Services) の運用を自動化するサービスです。

CLOUD AUTOMATORとは

これまでのAWSオペレーション

AWS運用担当者が手動で対応

新しいAWSオペレーション

CLOUD AUTOMATORで自動運用

CLOUD AUTOMATORでできること

業務時間外は開発用インスタンスを停止してコストを削減したい

ローカルディスクのスナップショットを毎週取得したい

EC2インスタンスのAMIを毎日取得したい

RDSインスタンスのスナップショットを毎日取得したい

指定の日時になったらDNSレコードを書き換えて新デザインのサイトを公開したい

1

2

3

4

5

AWSの運用に欠かせない様々なオペレーションを自動化します。

1. 業務時間外は開発用インスタンスを停止してコストを削減したい

1. 業務時間外は開発用インスタンスを停止してコストを削減したい

1. 業務時間外は開発用インスタンスを停止してコストを削減したい

1. 業務時間外は開発用インスタンスを停止してコストを削減したい

1. 業務時間外は開発用インスタンスを停止してコストを削減したい

CLOUD AUTOMATORを利用すれば

「トリガー」と「アクション」を定義して

自動的な運用が実現できます。

CLOUD AUTOMATOR実現例

業務時間外は開発用インスタンスを停止してコストを削減したい

時刻指定(毎日) EC2インスタンスを起動/終了

ローカルディスクのスナップショットを毎週取得したい

曜日指定(毎週) EBSボリュームのスナップショットを作成

EC2インスタンスのAMIを毎日取得したい

時刻指定(毎日) AMIを作成

RDSインスタンスのスナップショットを毎日取得したい

時刻指定(毎日) RDSのスナップショットを作成

指定の日時になったらDNSレコードを書き換えて新デザインのサイトを公開したい

時刻指定(一度だけ) DNS(Route53のレコードを更新

1

2

3

4

5

CLOUD AUTOMATORのフィーチャー

トリガー アクション

日時指定(一度だけ)

時刻指定(毎日)

曜日指定(毎週)

日にち指定(毎月)

SQSメッセージ受信

SNSメッセージ受信

HTTPリクエスト

EC2インスタンスを起動

EC2インスタンスを停止

EBSのスナップショットを作成

AMIを作成

AMIをリージョン間コピー

RDSのスナップショットを作成

DNSのレコードを変更

※今後対応の予定 Disaster Recovery

Redshiftクラスタの削除

Redshiftスナップショットのリストア

CLOUD AUTOMATOR は、運用の自動化を実現するために

さまざまな「トリガー」と「アクション」を提供します。

• SQSを通じて連携することで、外部サービスとCloud Automatorのジョブ

とをシームレスに結合可能

外部サービスとの連携

CLOUD AUTOMATORの特徴

外部サービスとの連携も可能なトリガー

多彩なアクション ジョブを自由に組み合わせ完全自動化

『タイマートリガー』では時間、曜日、日にちを指定することが可能です。その他にも『HTTPリクエスト』『SQS』等、様々な条件をトリガーに利用することが可能です。

『EC2インスタンスを起動』『EC2インスタンスを停止』『EBSボリュームのスナップショットを作成』『AMIを作成』『RDSのスナップショットを作成』『DNS(Route53)のレコードを更新する』など、AWSリソースの操作を自動化します。

多彩な自動化オプションで、AWSの運用を自動化する機能を提供します。『条件(トリガー)』+『処理(アクション)』を自由に組み合わせて人手に頼っていたタスクを自動化(ジョブ化)します。

アーキテクチャ全体像

アーキテクチャ全体像Worker App

Rails App

アーキテクチャ全体像

SimpleWorkflowについて

SimpleWorkflowとは

•開発者が並行したステップまたは連続したステッ

プがあるバックグラウンドジョブを構築、実行、

拡張する為のサービスです

•完全マネージド型の状態トラッカー、およびタス

クコーディネーター

SWFの利用イメージ

SWFの利用イメージ

SWFの利用イメージ

なぜSimpleWorkflowを選んだのか?

3つの実装パターンを比較

1. フルスクラッチ2. SQSの利用3. SimpleWorkflowの利用

フルスクラッチの場合

• 1回だけジョブを実行する為の設計

•タイムアウト処理の設計

•リトライ処理の設計

SQSを使った場合

SQSを使った場合

•ジョブ毎にWorkerを専有するので、事前に同時刻に実行されるジョブの数だけWorkerプロセスを準備しておく必要がある

SQSを使った場合

•複数のWorkerが同じメッセージを受け取る可能性がある

SQS【最低1度のメッセージ到達を保証】

SimpleWorkflowを使った場合

SimpleWorkflowを選んだ理由

•タイマー処理はSWFにおまかせ• 設定した日時に1度だけWorkflowを実行することを保証してくれます

• 『日時』ではなく『n秒後に再開』と指定するので『作成したAMIが完了ステータスになるまで5秒毎に確認』の様な処理も簡単に実現

SimpleWorkflowを選んだ理由

•タイムアウト、リトライ処理もSWFにおまかせ• Activity毎にタイムアウトを設定

• 正常動作しているWorkerでリトライ

• Workflowの状態はSWF側に保持しているのでWorkerプロセスだダウンしても再開可能

SimpleWorkflowを選んだ理由

• Sleep処理もSWFにおまかせ• 『作成したAMIが完了ステータスになるまで5秒毎に確認』の様な処理はSWFに一旦返して、その間に別の仕事ができます(1ジョブ ≠ 1プロセス)

SimpleWorkflowの良いところ

•スケジュールした時間にWorkflowを1度だけ実行す

ることについてSWFが保証してくれます

• Workflowの状態はSWFに保持されます

• Workerプロセスが異常終了した際にもリトライする機能

が用意されている

•最大で1年間ワークフローの実行を試し続ける

•小さくActivityを設計することでWorker側のリソー

スを最適化

• OpsWorksと併用することで高い可用性を実現

SimpleWorkflow3つの注意点

【注意-1】デバッグ超タイヘン

• SimpleWorkflow、あまりシンプルではありません

• 2回実行されても問題なければSQSがおすすめ

【注意-2】Workflow Execution Historyに持たせる情報は小さく

• Workflow Execution Historyとは『ワークフローの状

態』の事を指します

• SWFからタスクを受け取る度に再現(replay)します

サイズが大きくなる=処理開始までのオーバーヘッド

タイムアウト→リトライ→タイムアウト→リトライ…

【注意-3】Loop処理について

• Workflow Execution Historyの上限回数は25,000

•上記の様なステータスをチェックする様な処理を

実装する際には

• リトライの間隔を指数関数的に増加させる (1, 2, 4, 8, 16…)

• リトライの回数に上限を設ける

OpsWorksについて

OpsWorksとは

•アプリケーションを容易にデプロイおよび操作で

きるアプリケーション管理サービス

•パッケージのインストール、ソフトウェア設定お

よびストレージなどのリソースを含む、各コン

ポーネントのアプリケーションのアーキテクチャ

および仕様を定義できます

アーキテクチャ全体像Worker App

Rails App

アーキテクチャ全体像

なぜOpsWorksを選んだのか?

OpsWorksの利用イメージ

OpsWorksの利用イメージ

OpsWorksから参照

OpsWorksの利用イメージ

デプロイ

OpsWorksの利用イメージ

Chefを使って構成管

OpsWorksの利用イメージ(Dev, Staging, QA環境)

テストが通ったら自動デプロイ

モニタリング

•標準でCloudWatchでCPU / メモリ / ロードアベレー

ジ / プロセス数を監視

•レイヤ毎の平均負荷状況も提供

オートスケール機能

•時間ベースのオートスケール

•殆どのジョブが深夜帯に実行されている

0 2 4 6 8 10 12 14 16 18 20 22

Starter 4台 2台

Business 6台 4台

Enterprise 8台 6台 4台

•ロードベースのオートスケール

•インスタンス群(レイヤ)の平均負荷状況に応じてインス

タンスの増減

権限管理

• IAMユーザー毎に権限を設定

• Stackの参照権限

• Stackへのデプロイのみ

•フル権限

• OSのユーザーを自動作成

• ec2-userを共有しない

• IAMユーザー毎にアカウントを発行

• ssh接続を許可するか?

• sudo権限を付与するか?

Tips

EC2インスタンスの起動・停止

•EC2インスタンスへのSSH接続はしない

設計

•プロセスは自動起動 / 停止

•Workflow Worker

•Activity Worker

•Workerプロセスの停止スクリプトは処

理が終わったプロセスから順次落とす

WorkerプロセスはMONITで監視

例外の通知には外部サービスを利用

予期せぬ例外

OpsWorks3つの注意点

【注意-1】Auto Healing機能について

• EC2インスタンスのH/W障害でAuto Healingが発生

•別のEC2インスタンスに変わるので以前のログが消

える

OpsWorksの利用イメージ

ログの集約

【注意-1】Auto Healing機能について

• EC2インスタンスのH/W障害でAuto Healingが発生

•別のEC2インスタンスに変わるので以前のログが消

える

ログ管理サービスを利用しようCloudWatch Logs / Papertrail / Logentries …

【注意-2】Root Volumeサイズ

• OpsWorksから起動されるEC2インスタンスはデフォ

ルトが8GB

• Root Volumeのサイズ変更はできないので必要に応

じてEBSを追加する

• Custom Cookbookでマウント

•パーミッションの変更

【注意-2】Root Volumeサイズ

• OpsWorksから起動されるEC2インスタンスはデフォ

ルトが8GB

• Root Volumeのサイズ変更はできないので必要に応

じてEBSを追加する

• Custom Cookbookでマウント

•パーミッションの変更

Logrotateの設定は『日数』ではなく『ファイルサイズ』でローテーションする

【注意-3】Rubyのバージョン変更

• 2014/12/01

aws/opsworks-cookbooksのRuby 2.1系デフォルトバージョン

が2.1.5に変更されていた

• 開発環境のEC2インスタンスを追加した際に

Rubyが2.1.5で起動されたのでWorkerアプリが正常に動作しない

【注意-3】Rubyのバージョン変更

• 2014/12/01

aws/opsworks-cookbooksのRuby 2.1系デフォルトバージョン

が2.1.5に変更されていた

• 開発環境のEC2インスタンスを追加した際に

Rubyが2.1.5で起動されたのでWorkerアプリが正常に動作しない

Custom CookbookでRubyのバージョンを固定

まとめ

SimpleWorkflow

•複雑なサービスです

• SQSで解決できる課題じゃないか、もう一度考えてみま

しょう

• 1つのActivityは小さく設計しよう

• Sleep処理はSWF側に任せよう

• Workflow Execution Historyに持たせるデータは少な

•ステータスチェック等の繰り返し間隔には指数関

数的に増加させる

OwsWorks

• ssh接続しない運用設計

• Workerプロセスの自動起動、停止

• Workerプロセスの自動復旧(MONIT)

•オートスケール機能を使う

•時間ベース / ロードベース

• Auto Healing機能は有効可

•ログはログ管理サービスに集約

• Logrotateはファイルサイズでローテーション設定

さいごに

クラウドで、世界を、もっと、はたらきやすく