Anzeige

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

Solution Architect um Amazon Web Services
22. Mar 2015
Anzeige

Más contenido relacionado

Presentaciones para ti(20)

Similar a JAWS DAYS 2015 AWS OpsWorksの仕組みと活用方法のご紹介(20)

Anzeige

Último(20)

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

  1. JAWS DAYS 2015 AWS OpsWorksの仕組みと 活用方法のご紹介 2015/03/22 アマゾン データ サービス ジャパン株式会社 ソリューションアーキテクト 舟崎健治
  2. 自己紹介 • 名前:舟崎 健治(ふなさき けんじ) • 所属:アマゾン データ サービスジャパン • 職種:ソリューションアーキテクト • 好きなAWSのサービス:AWS OpsWorks • 最近1児のパパになりました。イクメン修行中です。 AWS初心者向けWebinarの活動に取り組んでいます!
  3. Amazon EC2を 使っていますか!?
  4. AWS OpsWorksを 使っていますか!?
  5. なぜAWS OpsWorksを使うと 良いのでしょうか!?
  6. なぜAWS OpsWorksを使うと良いのでしょうか? 自動化できる領域が多くなる デプロイ自動化 運用タスクの自動化 運用負荷を軽減できる
  7. EC2インスタンスの構築例 インスタンス起動 ソフトウェアインストール・構 成用のスクリプトを実行 アプリケーションのデプロイ EC2のAPIで自動化が可能 ユーザー側でインスタンス内部 で起動スクリプト等を使って、 自動化が可能
  8. OpsWorksインスタンスの構築例 インスタンス起動 ソフトウェアインストール・構 成用のChefレシピを実行 アプリケーションのデプロイ用 のChefレシピを実行 OpsWorksのAPIで 自動化が可能
  9. なぜ、OpsWorksでインスタンス内部のChefレシピを実 行可能か? OpsWorksインスタンス内で、 OpsWorksエージェントがインストール・動作 しているため
  10. OpsWorksの基本的な仕組み(1) EC2インスタンス上の OpsWorksエージェント OpsWorks talks with OpsWorks エージェントから OpsWorks エンドポイントに対し てPolling(アウトバウンド通信)
  11. OpsWorksの基本的な仕組み(2) OpsWorksによって発行された一連の コマンドを取得 AgentがChef solo(Chef Zero)で レシピを実行 EC2インスタンス上の OpsWorks Agent Chef 11.10ではChef Client のlocal modeにて動作
  12. Chefのレシピやアプリケーションのコードは指定した コードリポジトリから展開 EC2インスタンス上の OpsWorks Agent Chefのレシピ用の コードリポジトリ アプリケーション用の コードリポジトリ 別々に指定 可能
  13. OpsWorksで実行可能なコマンド  以下の2種類がある  スタックコマンド  スタック全体の構成を変更・管理するためのコマンド  AWSマネージメントコンソール、AWS SDK、AWS CLIでリモートから実 行可能  エージェントコマンド  デバッグやトラブルシューティングのために利用するコマンド  それ以外の用途の場合は、スタックコマンドの利用を推奨  インスタンス内部にログインして実行可能。  sudoもしくはroot権限が必要
  14. OpsWorksインスタンスに対して リモートからChefレシピ実行コマンドを発行 実行するスタックコマンドを 選択 実行するCookbook/レシピ名 を選択 実行するインスタンスを選択
  15. スタックコマンドを使ってリモートから任意のタイミング でインスタンスにコマンドを実行可能 スタックコマンド 内容 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 実行リクエスト
  16. レシピを自動で実行させるには? • Execute Recipesのスタックコマンドをcron等のタスク スケジューラを使って自動実行 • OpsWorksのライフサイクルイベントにレシピを登録し て、適切なタイミングで自動実行
  17. OpsWorksの 5 つのライフサイクルイベント Setup Configure Deploy Undeploy Shutdown
  18. どのタイミングで ライフサイクルイベントが 実行されるか?
  19. 最初のインスタンスを追加 App サーバー Setup Deploy Configure Execute Recipe Shutdown
  20. 最初のインスタンスを起動すると、Setupが 自動実行されるAppサーバー の起動 App サーバー Setup Deploy Configure Execute Recipe Shutdown
  21. Setupが実行された後にDeployが自動実行 されるAppサーバー の起動 App サーバー Setup Deploy Configure Execute Recipe Shutdown
  22. インスタンスがonlineになるとConfigure が自動実行されるAppサーバー の起動 App サーバー Setup Deploy Configure Execute Recipe Shutdown
  23. データベースインスタンスの追加 Appサーバー の起動 App サーバー DB サーバー Setup Deploy Configure Execute Recipe Shutdown
  24. Setup, Deployが自動実行される Appサーバー の起動 App サーバー DB サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown
  25. DBサーバーがonlineになるとスタック内の全イン スタンスでConfigureが自動実行される Appサーバー の起動 App サーバー DB サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown
  26. さらにインスタンスを追加 Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown
  27. Setup、Deployが自動実行される Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動
  28. インスタンスがonlineになるとスタック内の全イ ンスタンスでconfigureが自動実行される Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動
  29. 手動でデプロイを実行 Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動 手動で デプロイを 実行
  30. レシピを手動で実行 Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動 手動で デプロイを 実行 レシピ単体を 実行
  31. インスタンスを停止 Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動 手動で デプロイを 実行 レシピ単体を 実行 Appサーバーの シャットダウン
  32. インスタンスがonlineでなくなると、Configure が自動実行される Appサーバー の起動 App サーバー DB サーバー App サーバー DBサーバー の起動 Setup Deploy Configure Execute Recipe Shutdown Appサーバー の起動 手動で デプロイを 実行 レシピ単体を 実行 Appサーバーの シャットダウン
  33. ライフサイクルイベントに登録するレシピの 例(レイヤー別) Setup Configure Deploy Undeploy Shutdown ロードバラン サーレイヤー ロードバラ ンサーをイ ンストール アプリケーショ ンサーバーのIP をアップデート コネクション をDrainする アプリケー ションサー バーレイヤー アプリケー ションサー バーをイン ストール DB接続先をアッ プデートしてリ スタート アプリケー ションコード をアップデー トしてリス タート アプリケー ションを削 除してリス タート ログを保存 データベース レイヤー データベー スをインス トール アプリケーショ ンサーバーのIP のACLをアップ デート スナップ ショットの作 成
  34. さらに、AWS OpsWorksでは 継続的な構成管理が可能です。
  35. 構成情報の管理 (途中省略) "instance": { "id": "b29e44ed-6245-40a6-9575-eaa97a3a3d49", "hostname": "custom12", "instance_type": "t2.micro", "public_dns_name": "ec2-54-65-253-240.ap-northeast-1.co "private_dns_name": "ip-10-0-0-15.ap-northeast-1.comput "ip": "54.65.253.240", "private_ip": "10.0.0.15", "architecture": "x86_64", "layers": [ "custom1", "php-app" ], (以下省略) OpsWorks 構成情報をキャッシュ として保持 構成情報 (JSON) スタック内の インスタンス 構成情報をJSON形式で保持 ホスト名 IP レイヤー等
  36. 構成情報(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が実行されるたびに上記値を更新する
  37. ElastiCacheとの連携例 スタック App Serverレイヤー ElastiCache Redis 構成情報 (JSON) { "deploy": { "elasticacheredisexample": { "redis": { "host": "mycluster.XXX.amazonaws.com", "port": "6379" } } } } ElastiCache Redisを事前 に作成 Chefレシピから上記パラメータを取得する 詳細 http://aws.amazon.com/blogs/aws/using-aws- elasticache-for-redis-with-aws-opsworks/ ElastiCache以外のデータストアを利用する場合も 上記方法と同様に連携が可能 • OpsWorksではElastiCacheは未サポートだが、スタック JSONに接続情報を追加することで連携可能
  38. プライベートサブネット内にOpsWorksインスタンス を配置可能 VPC Public Subnet VPC Private Subnet Internet Gateway NAT App Code Repository • OpsWorksにより起動された インスタンスはOpsWorks サービスエンドポイントと接 続が必須 (Privateサブネット利用時は NAT必須) • プライベートサブネット内の コードリポジトリを利用可能 OpsWorks instances アウトバウンド 通信が必要
  39. OpsWorksインスタンスの動作の仕組みに ついてご理解頂けましたでしょうか? 大まかに、ざっくりとでも良いですので。
  40. 次にOpsWorksの利用例についてご説明し ます。
  41. アプリケーションのデプロイ自動化 • デプロイ用のスタックコマンドを実行するだけで、指定 したインスタンスに自動デプロイ • Cron等のタスクスケジューラでデプロイ用のスタック コマンドを自動実行 • ライフサイクルイベントにより、インスタンス起動時に 自動デプロイ
  42. 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 インスタンス
  43. 運用関連タスクの自動化の例 ソフトウェアパッケージアップデート (Heart Bleed、Bash脆弱性対策等) バッチ実行 ログファイルをAmazon S3へ転送 監視対象サーバの登録・削除 OpsWorksスタックコマンドで上記用途のChefレシピを実行するだけ!
  44. 同じ役割のレイヤーを複数個作成可能 • カスタムレイヤーを作成して、同じレシピを登録する ことで同じ役割のレイヤーを作成可能
  45. インスタンス台数の少ない小規模構成時には? • 1インスタンスでAPとDBの同梱構成例 異なるレイヤー 同じインスタンス 1つのインスタンスを複数のレイヤーにアサイン可能 (複数の役割を割り当て可能) ※小規模構成でも OpsWorksをご利用 頂けます!
  46. AWSとオンプレミスのハイブリッド構成 • オンプレミス環境の仮想サーバ、あるい は物理サーバにOpsWorksエージェント をインストールして、管理可能 Instance A Instance B Instance C Instance D オンプレミス環境 AWS Cloud オンプレミス環境での対応 オペレーティングシステム • Ubuntu 12.04 LTS • Ubuntu 14.04 LTS 2015/3/22現在
  47. いかがでしょうか? 皆様が管理されているシステムに AWS OpsWorksを活用できそう! と思って頂けると幸いです。
  48. まとめ • OpsWorksを使うことで自動化できる領域が多くなり、 運用負荷を軽減可能 • デプロイや運用管理タスクをスタックコマンドやライフ サイクルイベントにより自動実行可能 • スタックの構成情報を使って動的な構成変更に対応可能 • AWSとオンプレミスのハイブリッドなど、さまざまな 構成で利用が可能 新しいDevOpsソリューションを是非お試しください!
  49. AWS OpsWorksのハンズオン資料が公開されています • OpsWorksを使ってWordpressを構築するハン ズオンを是非お試しください! – http://www.slideshare.net/AmazonWebServicesJapan/aw s-opsworks
  50. 2015/3/26 「よくわかるAWS OpsWorks」セミナーを開催します • 日時:2015/3/26(木) 14:00-16:20 • 場所:アマゾン目黒オフィス • お申込み: http://kokucheese.com/event/index/270160/ • OpsWorksを実際にご活用頂いているユーザー様に、活 用例をご紹介頂きます。 よくわかるAWS OpsWorksで検索!
  51. ご清聴頂きありがとうございました!
Anzeige