Upload
kenji-funasaki
View
1.483
Download
1
Embed Size (px)
Citation preview
JAWS DAYS 2015
AWS OpsWorksの仕組みと活用方法のご紹介
2015/03/22
アマゾン データ サービス ジャパン株式会社
ソリューションアーキテクト 舟崎健治
自己紹介
• 名前:舟崎 健治(ふなさき けんじ)
• 所属:アマゾン データ サービスジャパン
• 職種:ソリューションアーキテクト
• 好きなAWSのサービス:AWS OpsWorks
• 最近1児のパパになりました。イクメン修行中です。
AWS初心者向けWebinarの活動に取り組んでいます!
Amazon EC2を使っていますか!?
AWS OpsWorksを使っていますか!?
なぜAWS OpsWorksを使うと良いのでしょうか!?
なぜAWS OpsWorksを使うと良いのでしょうか?
自動化できる領域が多くなる
デプロイ自動化 運用タスクの自動化
運用負荷を軽減できる
EC2インスタンスの構築例
インスタンス起動
ソフトウェアインストール・構成用のスクリプトを実行
アプリケーションのデプロイ
EC2のAPIで自動化が可能
ユーザー側でインスタンス内部で起動スクリプト等を使って、自動化が可能
OpsWorksインスタンスの構築例
インスタンス起動
ソフトウェアインストール・構成用のChefレシピを実行
アプリケーションのデプロイ用のChefレシピを実行
OpsWorksのAPIで自動化が可能
なぜ、OpsWorksでインスタンス内部のChefレシピを実行可能か?
OpsWorksインスタンス内で、OpsWorksエージェントがインストール・動作しているため
OpsWorksの基本的な仕組み(1)
EC2インスタンス上のOpsWorksエージェント
OpsWorks
talks with
OpsWorks エージェントからOpsWorks エンドポイントに対してPolling(アウトバウンド通信)
OpsWorksの基本的な仕組み(2)
OpsWorksによって発行された一連のコマンドを取得AgentがChef solo(Chef Zero)でレシピを実行
EC2インスタンス上のOpsWorks Agent
Chef 11.10ではChef Clientのlocal modeにて動作
Chefのレシピやアプリケーションのコードは指定したコードリポジトリから展開
EC2インスタンス上のOpsWorks Agent Chefのレシピ用の
コードリポジトリ
アプリケーション用のコードリポジトリ
別々に指定可能
OpsWorksで実行可能なコマンド
以下の2種類がある
スタックコマンド
スタック全体の構成を変更・管理するためのコマンド
AWSマネージメントコンソール、AWS SDK、AWS CLIでリモートから実行可能
エージェントコマンド
デバッグやトラブルシューティングのために利用するコマンド
それ以外の用途の場合は、スタックコマンドの利用を推奨
インスタンス内部にログインして実行可能。
sudoもしくはroot権限が必要
OpsWorksインスタンスに対してリモートからChefレシピ実行コマンドを発行
実行するスタックコマンドを選択
実行するCookbook/レシピ名を選択
実行するインスタンスを選択
スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行可能
スタックコマンド 内容
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
実行リクエスト
レシピを自動で実行させるには?
• Execute Recipesのスタックコマンドをcron等のタスクスケジューラを使って自動実行
• OpsWorksのライフサイクルイベントにレシピを登録して、適切なタイミングで自動実行
OpsWorksの 5 つのライフサイクルイベント
Setup
Configure
Deploy
Undeploy
Shutdown
どのタイミングでライフサイクルイベントが実行されるか?
最初のインスタンスを追加
Appサーバー
Setup Deploy Configure Execute Recipe
Shutdown
最初のインスタンスを起動すると、Setupが自動実行される
Appサーバーの起動
Appサーバー
Setup Deploy Configure Execute Recipe
Shutdown
Setupが実行された後にDeployが自動実行される
Appサーバーの起動
Appサーバー
Setup Deploy Configure Execute Recipe
Shutdown
インスタンスがonlineになるとConfigureが自動実行される
Appサーバーの起動
Appサーバー
Setup Deploy Configure Execute Recipe
Shutdown
データベースインスタンスの追加
Appサーバーの起動
Appサーバー
DBサーバー
Setup Deploy Configure Execute Recipe
Shutdown
Setup, Deployが自動実行される
Appサーバーの起動
Appサーバー
DBサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
DBサーバーがonlineになるとスタック内の全インスタンスでConfigureが自動実行される
Appサーバーの起動
Appサーバー
DBサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
さらにインスタンスを追加
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Setup、Deployが自動実行される
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
インスタンスがonlineになるとスタック内の全インスタンスでconfigureが自動実行される
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
手動でデプロイを実行
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
手動でデプロイを実行
レシピを手動で実行
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
手動でデプロイを実行
レシピ単体を実行
インスタンスを停止
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
手動でデプロイを実行
レシピ単体を実行
Appサーバーのシャットダウン
インスタンスがonlineでなくなると、Configureが自動実行される
Appサーバーの起動
Appサーバー
DBサーバー
Appサーバー
DBサーバーの起動
Setup Deploy Configure Execute Recipe
Shutdown
Appサーバーの起動
手動でデプロイを実行
レシピ単体を実行
Appサーバーのシャットダウン
ライフサイクルイベントに登録するレシピの例(レイヤー別)
Setup Configure Deploy Undeploy Shutdown
ロードバランサーレイヤー
ロードバランサーをインストール
アプリケーションサーバーのIPをアップデート
コネクションをDrainする
アプリケーションサーバーレイヤー
アプリケーションサーバーをインストール
DB接続先をアップデートしてリスタート
アプリケーションコードをアップデートしてリスタート
アプリケーションを削除してリスタート
ログを保存
データベースレイヤー
データベースをインストール
アプリケーションサーバーのIPのACLをアップデート
スナップショットの作成
さらに、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レイヤー等
構成情報(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が実行されるたびに上記値を更新する
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に接続情報を追加することで連携可能
プライベートサブネット内にOpsWorksインスタンスを配置可能
VPC Public Subnet
VPC Private Subnet
Internet Gateway
NAT
App Code Repository
• OpsWorksにより起動されたインスタンスはOpsWorksサービスエンドポイントと接続が必須(Privateサブネット利用時はNAT必須)
• プライベートサブネット内のコードリポジトリを利用可能
OpsWorks
instances
アウトバウンド通信が必要
OpsWorksインスタンスの動作の仕組みについてご理解頂けましたでしょうか?
大まかに、ざっくりとでも良いですので。
次にOpsWorksの利用例についてご説明します。
アプリケーションのデプロイ自動化
• デプロイ用のスタックコマンドを実行するだけで、指定したインスタンスに自動デプロイ
• Cron等のタスクスケジューラでデプロイ用のスタックコマンドを自動実行
• ライフサイクルイベントにより、インスタンス起動時に自動デプロイ
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インスタンス
運用関連タスクの自動化の例
ソフトウェアパッケージアップデート(Heart Bleed、Bash脆弱性対策等)
バッチ実行
ログファイルをAmazon S3へ転送
監視対象サーバの登録・削除
OpsWorksスタックコマンドで上記用途のChefレシピを実行するだけ!
同じ役割のレイヤーを複数個作成可能
• カスタムレイヤーを作成して、同じレシピを登録することで同じ役割のレイヤーを作成可能
インスタンス台数の少ない小規模構成時には?
• 1インスタンスでAPとDBの同梱構成例
異なるレイヤー同じインスタンス
1つのインスタンスを複数のレイヤーにアサイン可能(複数の役割を割り当て可能)
※小規模構成でもOpsWorksをご利用頂けます!
AWSとオンプレミスのハイブリッド構成
• オンプレミス環境の仮想サーバ、あるいは物理サーバにOpsWorksエージェントをインストールして、管理可能
Instance A Instance B Instance C Instance D
オンプレミス環境 AWS Cloud
オンプレミス環境での対応オペレーティングシステム• Ubuntu 12.04 LTS• Ubuntu 14.04 LTS
2015/3/22現在
いかがでしょうか?
皆様が管理されているシステムにAWS OpsWorksを活用できそう!と思って頂けると幸いです。
まとめ
• OpsWorksを使うことで自動化できる領域が多くなり、運用負荷を軽減可能
• デプロイや運用管理タスクをスタックコマンドやライフサイクルイベントにより自動実行可能
• スタックの構成情報を使って動的な構成変更に対応可能
• AWSとオンプレミスのハイブリッドなど、さまざまな構成で利用が可能
新しいDevOpsソリューションを是非お試しください!
AWS OpsWorksのハンズオン資料が公開されています
• OpsWorksを使ってWordpressを構築するハンズオンを是非お試しください!
– http://www.slideshare.net/AmazonWebServicesJapan/aws-opsworks
2015/3/26「よくわかるAWS OpsWorks」セミナーを開催します
• 日時:2015/3/26(木) 14:00-16:20
• 場所:アマゾン目黒オフィス
• お申込み:http://kokucheese.com/event/index/270160/
• OpsWorksを実際にご活用頂いているユーザー様に、活用例をご紹介頂きます。
よくわかるAWS OpsWorksで検索!
ご清聴頂きありがとうございました!