51
JAWS DAYS 2015 AWS OpsWorksの仕組みと 活用方法のご紹介 2015/03/22 アマゾン データ サービス ジャパン株式会社 ソリューションアーキテクト 舟崎健治

JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Embed Size (px)

Citation preview

Page 1: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

JAWS DAYS 2015

AWS OpsWorksの仕組みと活用方法のご紹介

2015/03/22

アマゾン データ サービス ジャパン株式会社

ソリューションアーキテクト 舟崎健治

Page 2: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

自己紹介

• 名前:舟崎 健治(ふなさき けんじ)

• 所属:アマゾン データ サービスジャパン

• 職種:ソリューションアーキテクト

• 好きなAWSのサービス:AWS OpsWorks

• 最近1児のパパになりました。イクメン修行中です。

AWS初心者向けWebinarの活動に取り組んでいます!

Page 3: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Amazon EC2を使っていますか!?

Page 4: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

AWS OpsWorksを使っていますか!?

Page 5: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

なぜAWS OpsWorksを使うと良いのでしょうか!?

Page 6: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

なぜAWS OpsWorksを使うと良いのでしょうか?

自動化できる領域が多くなる

デプロイ自動化 運用タスクの自動化

運用負荷を軽減できる

Page 7: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

EC2インスタンスの構築例

インスタンス起動

ソフトウェアインストール・構成用のスクリプトを実行

アプリケーションのデプロイ

EC2のAPIで自動化が可能

ユーザー側でインスタンス内部で起動スクリプト等を使って、自動化が可能

Page 8: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksインスタンスの構築例

インスタンス起動

ソフトウェアインストール・構成用のChefレシピを実行

アプリケーションのデプロイ用のChefレシピを実行

OpsWorksのAPIで自動化が可能

Page 9: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

なぜ、OpsWorksでインスタンス内部のChefレシピを実行可能か?

OpsWorksインスタンス内で、OpsWorksエージェントがインストール・動作しているため

Page 10: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksの基本的な仕組み(1)

EC2インスタンス上のOpsWorksエージェント

OpsWorks

talks with

OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)

Page 11: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksの基本的な仕組み(2)

OpsWorksによって発行された一連のコマンドを取得AgentがChef solo(Chef Zero)でレシピを実行

EC2インスタンス上のOpsWorks Agent

Chef 11.10ではChef Clientのlocal modeにて動作

Page 12: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Chefのレシピやアプリケーションのコードは指定したコードリポジトリから展開

EC2インスタンス上のOpsWorks Agent Chefのレシピ用の

コードリポジトリ

アプリケーション用のコードリポジトリ

別々に指定可能

Page 13: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksで実行可能なコマンド

以下の2種類がある

スタックコマンド

スタック全体の構成を変更・管理するためのコマンド

AWSマネージメントコンソール、AWS SDK、AWS CLIでリモートから実行可能

エージェントコマンド

デバッグやトラブルシューティングのために利用するコマンド

それ以外の用途の場合は、スタックコマンドの利用を推奨

インスタンス内部にログインして実行可能。

sudoもしくはroot権限が必要

Page 14: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksインスタンスに対してリモートからChefレシピ実行コマンドを発行

実行するスタックコマンドを選択

実行するCookbook/レシピ名を選択

実行するインスタンスを選択

Page 15: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行可能

スタックコマンド 内容

Install Dependencies 全てのパッケージをインストールする

Update Dependencies 全てのパッケージをアップデートする

Update Custom Cookbooks

リポジトリにある更新されたCookbookをそれぞれのインスタンスに展開する

Execute Recipes 指定したレシピを指定したインスタンス上で実行する

Setup Setupのレシピを実行する(Setupを実行するとDeployもその後で実行される)

Configure Configureのレシピを実行する。

AWS Management Console

管理者Instances

インスタンスからのPollingのタイミングでExecute Recipesを実行

OpsWorksエージェントがChefレシピを実行Execute Recipes

実行リクエスト

Page 16: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

レシピを自動で実行させるには?

• Execute Recipesのスタックコマンドをcron等のタスクスケジューラを使って自動実行

• OpsWorksのライフサイクルイベントにレシピを登録して、適切なタイミングで自動実行

Page 17: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksの 5 つのライフサイクルイベント

Setup

Configure

Deploy

Undeploy

Shutdown

Page 18: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

どのタイミングでライフサイクルイベントが実行されるか?

Page 19: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

最初のインスタンスを追加

Appサーバー

Setup Deploy Configure Execute Recipe

Shutdown

Page 20: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

最初のインスタンスを起動すると、Setupが自動実行される

Appサーバーの起動

Appサーバー

Setup Deploy Configure Execute Recipe

Shutdown

Page 21: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Setupが実行された後にDeployが自動実行される

Appサーバーの起動

Appサーバー

Setup Deploy Configure Execute Recipe

Shutdown

Page 22: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

インスタンスがonlineになるとConfigureが自動実行される

Appサーバーの起動

Appサーバー

Setup Deploy Configure Execute Recipe

Shutdown

Page 23: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

データベースインスタンスの追加

Appサーバーの起動

Appサーバー

DBサーバー

Setup Deploy Configure Execute Recipe

Shutdown

Page 24: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Setup, Deployが自動実行される

Appサーバーの起動

Appサーバー

DBサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Page 25: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

DBサーバーがonlineになるとスタック内の全インスタンスでConfigureが自動実行される

Appサーバーの起動

Appサーバー

DBサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Page 26: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

さらにインスタンスを追加

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Page 27: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Setup、Deployが自動実行される

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

Page 28: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

インスタンスがonlineになるとスタック内の全インスタンスでconfigureが自動実行される

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

Page 29: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

手動でデプロイを実行

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

手動でデプロイを実行

Page 30: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

レシピを手動で実行

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

手動でデプロイを実行

レシピ単体を実行

Page 31: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

インスタンスを停止

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

手動でデプロイを実行

レシピ単体を実行

Appサーバーのシャットダウン

Page 32: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

インスタンスがonlineでなくなると、Configureが自動実行される

Appサーバーの起動

Appサーバー

DBサーバー

Appサーバー

DBサーバーの起動

Setup Deploy Configure Execute Recipe

Shutdown

Appサーバーの起動

手動でデプロイを実行

レシピ単体を実行

Appサーバーのシャットダウン

Page 33: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

ライフサイクルイベントに登録するレシピの例(レイヤー別)

Setup Configure Deploy Undeploy Shutdown

ロードバランサーレイヤー

ロードバランサーをインストール

アプリケーションサーバーのIPをアップデート

コネクションをDrainする

アプリケーションサーバーレイヤー

アプリケーションサーバーをインストール

DB接続先をアップデートしてリスタート

アプリケーションコードをアップデートしてリスタート

アプリケーションを削除してリスタート

ログを保存

データベースレイヤー

データベースをインストール

アプリケーションサーバーのIPのACLをアップデート

スナップショットの作成

Page 34: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

さらに、AWS OpsWorksでは継続的な構成管理が可能です。

Page 35: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

構成情報の管理

(途中省略)"instance": {

"id": "b29e44ed-6245-40a6-9575-eaa97a3a3d49","hostname": "custom12","instance_type": "t2.micro","public_dns_name": "ec2-54-65-253-240.ap-northeast-1.compute.amazonaws.com","private_dns_name": "ip-10-0-0-15.ap-northeast-1.compute.internal","ip": "54.65.253.240","private_ip": "10.0.0.15","architecture": "x86_64","layers": [

"custom1","php-app"

], (以下省略)

OpsWorks

構成情報をキャッシュとして保持

構成情報(JSON)

スタック内のインスタンス

構成情報をJSON形式で保持

ホスト名IPレイヤー等

Page 36: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

構成情報(JSON)内のパラメータをChefレシピから取得する例

"deploy": {“appname": {(途中省略)"database": {

"host": “xxx.ap-northeast-1.rds.amazonaws.com","database": "test","port": 3306,"username": "awsuser","password": "mypassword","reconnect": true,"data_source_provider": "rds","type": "mysql"

},(以下省略)

dbname = node[:deploy][:appname][:database][:database]

dbuser = node[:deploy][:appname][:database][:username]

dbpass = node[:deploy][:appname][:database][:password]

dbhost = node[:deploy][:appname][:database][:host]

deploy JSONの例

Chefレシピから取得する例

取得した値をApp ServerインスタンスのローカルにDB接続用の設定ファイルとして保持しておく。configureが実行されるたびに上記値を更新する

Page 37: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

ElastiCacheとの連携例

スタック

App Serverレイヤー

ElastiCache Redis

構成情報(JSON)

{"deploy": {

"elasticacheredisexample": {"redis": {

"host": "mycluster.XXX.amazonaws.com", "port": "6379"

}}

}}

ElastiCacheRedisを事前に作成

Chefレシピから上記パラメータを取得する詳細http://aws.amazon.com/blogs/aws/using-aws-elasticache-for-redis-with-aws-opsworks/

ElastiCache以外のデータストアを利用する場合も上記方法と同様に連携が可能

• OpsWorksではElastiCacheは未サポートだが、スタックJSONに接続情報を追加することで連携可能

Page 38: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

プライベートサブネット内にOpsWorksインスタンスを配置可能

VPC Public Subnet

VPC Private Subnet

Internet Gateway

NAT

App Code Repository

• OpsWorksにより起動されたインスタンスはOpsWorksサービスエンドポイントと接続が必須(Privateサブネット利用時はNAT必須)

• プライベートサブネット内のコードリポジトリを利用可能

OpsWorks

instances

アウトバウンド通信が必要

Page 39: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorksインスタンスの動作の仕組みについてご理解頂けましたでしょうか?

大まかに、ざっくりとでも良いですので。

Page 40: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

次にOpsWorksの利用例についてご説明します。

Page 41: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

アプリケーションのデプロイ自動化

• デプロイ用のスタックコマンドを実行するだけで、指定したインスタンスに自動デプロイ

• Cron等のタスクスケジューラでデプロイ用のスタックコマンドを自動実行

• ライフサイクルイベントにより、インスタンス起動時に自動デプロイ

Page 42: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

Jenkins / GitHubを使った自動デプロイの例

App Serverインスタンス

OpsWorksスタック

GitHubコードリポジト

開発者

②アプリケーションコードをgit push

①アプリケーションコードを作成

Jenkinsレイヤー③GitHubのwebhookにより、git pushされた時に自動でJenkinsにHTTPリクエストを送信

④Jenkinsジョブにてアプリケーションコードをビルド。ビルドが成功したらOpsWorksのdeployコマンドを実行

App Serverレイヤー⑤App Serverレイヤーの指定したインスタンスにAppのdeployを実行

Jenkinsインスタンス

App Serverインスタンス

Page 43: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

運用関連タスクの自動化の例

ソフトウェアパッケージアップデート(Heart Bleed、Bash脆弱性対策等)

バッチ実行

ログファイルをAmazon S3へ転送

監視対象サーバの登録・削除

OpsWorksスタックコマンドで上記用途のChefレシピを実行するだけ!

Page 44: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

同じ役割のレイヤーを複数個作成可能

• カスタムレイヤーを作成して、同じレシピを登録することで同じ役割のレイヤーを作成可能

Page 45: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

インスタンス台数の少ない小規模構成時には?

• 1インスタンスでAPとDBの同梱構成例

異なるレイヤー同じインスタンス

1つのインスタンスを複数のレイヤーにアサイン可能(複数の役割を割り当て可能)

※小規模構成でもOpsWorksをご利用頂けます!

Page 46: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

AWSとオンプレミスのハイブリッド構成

• オンプレミス環境の仮想サーバ、あるいは物理サーバにOpsWorksエージェントをインストールして、管理可能

Instance A Instance B Instance C Instance D

オンプレミス環境 AWS Cloud

オンプレミス環境での対応オペレーティングシステム• Ubuntu 12.04 LTS• Ubuntu 14.04 LTS

2015/3/22現在

Page 47: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

いかがでしょうか?

皆様が管理されているシステムにAWS OpsWorksを活用できそう!と思って頂けると幸いです。

Page 48: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

まとめ

• OpsWorksを使うことで自動化できる領域が多くなり、運用負荷を軽減可能

• デプロイや運用管理タスクをスタックコマンドやライフサイクルイベントにより自動実行可能

• スタックの構成情報を使って動的な構成変更に対応可能

• AWSとオンプレミスのハイブリッドなど、さまざまな構成で利用が可能

新しいDevOpsソリューションを是非お試しください!

Page 49: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

AWS OpsWorksのハンズオン資料が公開されています

• OpsWorksを使ってWordpressを構築するハンズオンを是非お試しください!

– http://www.slideshare.net/AmazonWebServicesJapan/aws-opsworks

Page 50: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

2015/3/26「よくわかるAWS OpsWorks」セミナーを開催します

• 日時:2015/3/26(木) 14:00-16:20

• 場所:アマゾン目黒オフィス

• お申込み:http://kokucheese.com/event/index/270160/

• OpsWorksを実際にご活用頂いているユーザー様に、活用例をご紹介頂きます。

よくわかるAWS OpsWorksで検索!

Page 51: JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介

ご清聴頂きありがとうございました!