よくわかるaws opsworks: aws opsworksの概要&アップデート紹介
TRANSCRIPT
自己紹介
• 名前:舟崎 健治(ふなさき けんじ)
• 所属:アマゾン データ サービスジャパン
• 職種:ソリューションアーキテクト
• 好きなAWSのサービス:AWS OpsWorks
AWS初心者向けWebinarの活動に取り組んでいます!
AWS OpsWorksとは
アプリケーションのライフサイクル管理サービス
デプロイを頻繁に、早く、セキュアに実行可能
スケーラブルで複雑なインフラストラクチャを管理、モデル化、自動化
することが可能
ビルトイン構成を使って簡単に開始可能
追加コストは不要
EC2インスタンスの構築例
インスタンス起動
ソフトウェアインストール・構成用のスクリプトを実行
アプリケーションのデプロイ
EC2のAPIで自動化が可能
ユーザー側でインスタンス内部で起動スクリプト等を使って、自動化が可能
OpsWorksインスタンスの構築例
インスタンス起動
ソフトウェアインストール・構成用のChefレシピを実行
アプリケーションのデプロイ用のChefレシピを実行
OpsWorksのAPIで自動化が可能
なぜ、OpsWorksでインスタンス内部のChefレシピをリモートからOpsWorks APIで実行可能か?
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にて動作
OpsWorksの動作要件
• Amazon LinuxまたはUbuntu 12.04LTS,14.04LTSベース– AMIをカスタマイズ可能
• Chefバージョン0.9, 11.4, 11.10に対応
• VPC対応– デフォルトVPC, 自作VPC共に利用可能
• ELB、RDS、CloudFormation、CloudTrailに対応
• 起動したインスタンスからOpsWorksサービスエンドポイントへアウトバウンド通信が可能であること
Stack
OpsWorks利用の流れ
User AWS Management Console
Load Balancerレイヤー
App Serverレイヤー
Databaseレイヤー
構成情報(JSON)
①スタックの作成
②レイヤーの作成
Stack
OpsWorks利用の流れ
User AWS Management Console
Load Balancerレイヤー
App Serverレイヤー
Databaseレイヤー
レシピ
レシピ
レシピ
構成情報(JSON)
①スタックの作成
②レイヤーの作成
③レシピの設定(Appの設定)
Stack
OpsWorks利用の流れ
User AWS Management Console
Load Balancerレイヤー
App Serverレイヤー
Databaseレイヤー
レシピ
レシピ
レシピ
構成情報(JSON)
①スタックの作成
②レイヤーの作成
③レシピの設定(Appの設定)
④レイヤーにインスタンス追加・起動
Stack
OpsWorks利用の流れ
User AWS Management Console
Load Balancerレイヤー
App Serverレイヤー
Databaseレイヤー
レシピ
レシピ
レシピDB
Web/App
LB
①スタックの作成
②レイヤーの作成
③レシピの設定(Appの設定)
④レイヤーにインスタンス追加・起動
⑤ライフサイクルイベントにより、レシピが自動実行される
構成情報(JSON)
Web/App
スタックとは
• OpsWorksのトップエンティティ
• 属する全インスタンスの構成を管理– OSの種類、リージョン、インスタンスのIPアドレスなど
• カスタムレシピを保存する任意のリポジトリを指定可能
• VPC内部に作成可能
• スタックをコピー可能– リージョン間でも可能
ビルトインレイヤーの種類
• Load Balancer– HAProxy
– ELB(各レイヤーに個別にアタッチ可能)
• App Server– Static Web Server
– Rails App Server
– PHP App Server
– Node.js App Server
• DB– MySQL– RDS
• Other– Memcached– Ganglia– Custom
• ビルトインレイヤー以外にもカスタムレイヤーを使って任意の役割を持つレイヤーを作成可能(Jenkinsレイヤーなど)
インスタンスとは
• アプリケーションを提供するためのEC2インスタンスのこと
• 起動時にインスタンスサイズやAZ(VPC内の場合はサブネット)を指定
• インスタンス内部にOpsWorks Agentが動作している
インスタンスのスケーリングタイプ
• インスタンスを(自動)追加起動・終了する方法として以下の3パターンがある– 24/7 インスタンス
• 常時稼働
– 負荷ベースのインスタンス
– 時間ベースのインスタンス
Appとは
• アプリケーションサーバーにデプロイするアプリケーションのこと
• 利用可能なアプリケーションの種類(標準のアプリケーションサーバーレイヤーに相当する)– Ruby on Rails / PHP / Node.js(JavaScript) /
Static(HTML) / Java / AWS Flow(Ruby) / Other
• サポートするリポジトリ– Git / Subversion / HTTP archive / S3 Archive / Other– GithubやBitBucketも使用可能
インスタンスがonlineになるとConfigureが自動実行される
Appサーバーの起動
Appサーバー
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アップデート内容
• 2015/12/8
既存のEC2インスタンスとオンプレミスサーバのサポート
• 2014/12/15カスタムシャットダウンとELBのコネクションドレイン機能のサポート
• 2015/3/2Ruby 2.2サポート
AWSとオンプレミスのハイブリッド構成
• オンプレミス環境の仮想サーバ、あるいは物理サーバにOpsWorksエージェントをインストールして、管理可能
• サーバ1台あたり$0.02/hour
Instance A Instance B Instance C Instance D
オンプレミス環境 AWS Cloud
オンプレミス環境での対応オペレーティングシステム• Ubuntu 12.04 LTS• Ubuntu 14.04 LTS
2015/3/22現在
まとめ
• AWS OpsWorksを使って、デプロイ・運用タスクを自動化可能
• ライフサイクルイベントにより、適切なタイミングでChefレシピを自動実行可能
• オンプレとAWSのハイブリッド構成が可能
新しいDevOpsソリューションをお試しください!
OpsWorksで実行可能なコマンド
以下の2種類がある
スタックコマンド
スタック全体の構成を変更・管理するためのコマンド
AWSマネージメントコンソール、AWS SDK、AWS CLIでリモートから実行可能
エージェントコマンド
デバッグやトラブルシューティングのために利用するコマンド
それ以外の用途の場合は、スタックコマンドの利用を推奨
インスタンス内部にログインして実行可能。
sudoもしくはroot権限が必要
スタックコマンドを使ってリモートから任意のタイミングでインスタンスにコマンドを実行可能
スタックコマンド 内容
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のライフサイクルイベントにレシピを登録して、適切なタイミングで自動実行
構成情報の管理
(途中省略)"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に接続情報を追加することで連携可能