JAWSUG初心者向けトラック 【Deploy&Ops】

1,550 views

Published on

夏のJAWS-UG三都物語 July 5 2014 の資料です

JAWSUG初心者向けトラック 【Deploy&Ops】

  1. 1. Elastic Beanstalk / CloudFormation / OpsWorks / CloudWatch など JAWSUG初心者向けトラック 【Deploy&Ops】 夏のJAWS-UG三都物語 July 5 2014 @sawanoboly (HiganWoks LLC, OpsRock LLC)
  2. 2. 運営組織 2 • 業務執行社員をつとめる合同会社 • アプリケーションのためのプラットフォーム構築/運 用自動化をテーマにした活動を担当 • http://opsrock.in 共同開発・運営 • Chefをはじめ、Infrastracture as Code 関連を主に取り扱うソリューションを提供 • 導入支援・トレーニングも
  3. 3. 自動化サービス比較(0/3) 3 インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法 CloudFormation ? ? ? OpsWorks ? ? ? Elastic Beanstalk ? ? ?
  4. 4. AWS CloudFormation 4 AWS CloudFormation Template Stack
  5. 5. CloudFormationは AWSのほぼ全て※の リソースが対象 ※インフラ・プラットフォーム系AWS CloudFormation
  6. 6. CloudFormationリソース一覧(1/6) (User-Guideより) • Compute & Networking • AWS::Route53::*** • AWS::ElasticLoadBalancing::LoadBalan cer • AWS::EC2::*** • AWS::EC2::VPC*** • AWS::EC2::VPN*** 6 AWS CloudFormation
  7. 7. CloudFormationリソース一覧(2/6) (User-Guideより) • Storage & Content Delivery • AWS::CloudFront::Distribution • AWS::S3::*** 7 AWS CloudFormation
  8. 8. CloudFormationリソース一覧(3/6) (User-Guideより) • Database • AWS::DynamoDB::Table • AWS::ElastiCache::*** • AWS::RDS::*** • AWS::Redshift::Cluster*** • AWS::SDB::Domain
 (※SimpleDB) 8 AWS CloudFormation
  9. 9. CloudFormationリソース一覧(4/6) (User-Guideより) • Deployment & Management • AWS::CloudFormation::*** • AWS::CloudTrail::Trail • AWS::CloudWatch::Alarm • AWS::ElasticBeanstalk::*** • AWS::IAM::*** • AWS::OpsWorks::*** 9 AWS CloudFormation
  10. 10. CloudFormationリソース一覧(5/6) (User-Guideより) • Analytics • AWS::Kinesis::Stream 10 AWS CloudFormation
  11. 11. CloudFormationリソース一覧(6/6) (User-Guideより) • App Services • AWS::SNS::Topic*** • AWS::SQS::Queue*** 11 AWS CloudFormation
  12. 12. 全84リソース ※User Guide (API Version 2010-05-15)AWS CloudFormation
  13. 13. JSONテンプレートで環境定義 • AWSリソース名:プロパティ:値のセットで
 定義 => スタック • 外部テンプレートの読み込み可能 • 環境依存を解決するリソースやマクロ • Parameters: 作成時の入力項目 • Mappings: ユーザー定義の連想配列 • Conditions: リソース作成フラグなど • Outputs: 戻り値 • Function: 値に使えるマクロ 13 AWS CloudFormation
  14. 14. EC2インスタンス作成 テンプレートの例 14 AWS CloudFormation
  15. 15. マクロを使用する例 • 作成する他のリソースのID(arn)を使用する 指定 • 依存関係となり、元のIDが用意されるまで は実行されない 15 AWS CloudFormation
  16. 16. テンプレートをアップロードして 環境作成 16 $ aws cloudformation create-stack 
 --stack-name sample002 
 --template-body file://./single_is.json GUIから AWS CLIから AWS CloudFormation
  17. 17. EC2の設定:Cloud-Init • Config: プリセットの起動時タスク定義 • packages: 起動時に追加するパッケージ • sources: 展開するアーカイブ(外部URL) • files: 設置するファイル(テンプレート可) • services: (自動)起動するサービス • User-Dataとfilesを組み合わせてプロビジョ ニング(Chef, Puppet, Ansible) 17 AWS CloudFormation
  18. 18. JSON作成が大変? ではツールを AWS CloudFormation
  19. 19. CloudFormation 対策ツール達 • CloudFormer(公式) • テンプレート雛形作成ツール • EC2にアプリを起動、今あるリソースを選 択するとテンプレートにしてくれる • そのまま使うものではなく、あくまで雛形 作成に 19 AWS CloudFormation
  20. 20. CloudFormation 対策ツール達 • coffin (https://github.com/chrisfjones/coffin) • coffee-script でJSON生成 ! ! • CoffeeFormation(https://github.com/j3tm0t0/csfn) • coffee-script でJSON生成 20 AWS CloudFormation
  21. 21. CloudFormation 対策ツール達 • Kumogata (https://github.com/winebarrel/kumogata) • Ruby DSLで記述(直接作成/JSON変換) • またはYAMLから 21 AWS CloudFormation
  22. 22. AWS CloudFormation 自動化サービス比較(1/3) 22 インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法 CloudFormation AWSのリソース ほとんどOK ミドルウェアやや難 単体では厳しい Cloud-Init (+なにか) OpsWorks ? ? ? Elastic Beanstalk ? ? ?
  23. 23. AWS OpsWorks 23 OpsWorks
  24. 24. OpsWorksは 特定アプリケーションの プラットフォーム管理 & Deployタスク OpsWorks
  25. 25. 注: OpsWorks部分は 3月(東京)の使い回し多いです 25 OpsWorks
  26. 26. レイヤとアプリケーション • レイヤ: 役割・プロトコルを元に定義する • EC2インスタンス群でクラスタを組むなど • 例えると、自分で作るRDS ! • アプリケーション • 配布サーバやリポジトリから取得し、任意のラ ンタイムで実行されるコード • OpsWorksのデプロイタスクによりライフサイ クルイベントを実行 26 OpsWorks
  27. 27. OpsWorks 『スタック』 1システムをまとめた単位 アプリケーションのプラットフォーム全体 『レイヤ』 役割別インスタンスの集合 DB HTTPServer Application System A ←ここに
 デプロイ
  28. 28. プラットフォームと アプリケーションの ライフサイクル OpsWorks
  29. 29. プラットフォームの構成管理 • スタックのメタデータを保持するOpsWorks • ミドルウェアの構成管理を行なうChef • コードはgit(svnも)リポジトリかS3から • スタックではVPCやRDSの情報を使用できる 29 OpsWorks AgentAmazon S3 OpsWorks
  30. 30. アプリケーションデプロイ • アプリケーションのレイヤはイベントによっ てDeploy用のタスクを起動 • これもChef 30 OpsWorks AgentAmazon S3 OpsWorks
  31. 31. OpsWorks 【販促】日本語Chefの本が出ていますので
  32. 32. OpsWorksのライフサイクル定義 1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown 32 プラットフォーム部分 OpsWorks
  33. 33. プラットフォーム部分 • Setup • インスタンスの起動 • 専用AMIか、それを元に作成したAMI • 関連パッケージのインストール • Configure (構成変更時にも自動実行) • ミドルウェアの設定 • OpsWorksメタデータへの情報登録 33 OpsWorks
  34. 34. 設定情報登録例:Mysql "opsworks": {! "stack": {! "name": "sample_stack"! },! "layers": {! "db-master": {! "id": "e554fc61-25f0-4cde-ab21-0fb890f586b6",! "name": "MySQL Master",! "instances": {! "db-master1": {! "public_dns_name": "ec2-54-250-66-243.xxx",! "ip": "54.250.66.243",! "private_ip": "10.154.17.254",! "private_dns_name": "ip-10-154-17-254.xxx"! }! }! }! "mysql": {! "server_root_password": "root_password"! }! } ※一部抜粋 34 OpsWorks
  35. 35. OpsWorksのライフサイクル定義 1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown 35 アプリケーション部分 OpsWorks
  36. 36. アプリケーション部分 1/2 • Deploy • デプロイツール※風のタスクを実行
 ※Capistrano/Chef::Deploy • レイヤ情報に基づいてアプリケーションコ ンフィグの設定 • アプリケーションの起動 • ELB/HAProxy等のバックエンドに参加 36 OpsWorks
  37. 37. アプリケーション部分 2/2 • UnDeploy • ELB/HAProxy等のバックエンドから除外 • アプリケーションの停止 37 OpsWorks
  38. 38. OpsWorksその他 • AutoScale標準装備 • レイヤ単位でインスタンス数の増減 • レイヤ用のCloudWatchモニタ • CloudFormationから作成可能 38 OpsWorks
  39. 39. OpsWorksは 補助ツール特になし… OpsWorks
  40. 40. 実機で挙動確認は一応可能 40 http://qiita.com/sawanoboly/items/147f550878477ff7723e OpsWorks
  41. 41. OpsWorks 自動化サービス比較(2/3) 41 インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法 CloudFormation AWSのリソース ほとんどOK ミドルウェアやや難 単体では厳しい Cloud-Init (+なにか) OpsWorks ネットワークより上 に特化 OSSでのクラスタは 比較的作りやすい 要Chef(Ruby)力 大抵の事は可能 Blue-Greenやや難 主にChef + Cloud-Init Elastic Beanstalk ? ? ?
  42. 42. AWS Elastic Beanstalk 42 Elastic Beanstalk Application Deployment
  43. 43. Elastic Beanstalkは 固定プラットフォームへの アプリケーション設置 Elastic Beanstalk
  44. 44. Elastic Beanstalk まず プラットフォームを 決めます
  45. 45. 動かすまで3ステップ 45 Elastic Beanstalk
  46. 46. No more thing… Elastic Beanstalk
  47. 47. Elastic Beanstalk Elastic Beanstalk概要 • Webアプリ、またはワーカー用のプラット フォームが作られます • アプリケーションをアップロードすると起動 します 47 ※AWS Elastic Beanstalk 開発者ガイド より
  48. 48. Elastic Beanstalk アプリケーションコード • コードは`zip`か`war`で、バージョンラベル を付けてアップロード (※一部 S3サポート) • またはEclipse、gitの拡張でPush • サンプルアプリも用意されている • スケールできるように作っておく 48
  49. 49. バージョン管理 • ソースアーカイブは任意のバージョンを選ん でデプロイ可能 • デプロイ対象の環境も任意 49 Elastic Beanstalk
  50. 50. Elastic Beanstalk Environment • 環境の単位、個別設定やアプリのデプロイ • 他AWS関連付け情報のセット • CloudWatchやアラームのセット • 環境ごとのエンドポイントDNS
 (任意に入れ替え可(Swap)) 50
  51. 51. うまくハマれば非常に楽 • PaaS(Platform as a service) • インフラ管理一切なし • RDSは連携作成 • VPCは既存と関連付けになる • AutoScale勝手に対応 (Offも可) • CloudWatchによる監視 51 Elastic Beanstalk
  52. 52. スタートアップ/開発者が Ops Freeな運用を できる(かも)
  53. 53. うまくハマる環境は やや限られていたが…?
  54. 54. Dockerサポート • Dockerfile • Dockerrun.aws.json ※ • AWS用追加情報 • バージョン等 • .dockercfg ※ • プライベートレジストリ情報 54 Elastic Beanstalk
  55. 55. Elastic Beanstalkに 役立つツール Elastic Beanstalk
  56. 56. Elastic Beanstalk Eclipse
  57. 57. eb, git aws (Elastic Beanstalk CLI) Elastic Beanstalk
  58. 58. Elastic Beanstalk 自動化サービス比較(3/3) 58 インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法 CloudFormation AWSのリソース ほとんどOK ミドルウェアやや難 単体では厳しい Cloud-Init (+なにか) OpsWorks ネットワークより上 に特化 OSSでのクラスタは 比較的作りやすい 要Chef(Ruby)力 大抵の事は可能 Blue-Greenやや難 主にChef + Cloud-Init Elastic Beanstalk なし(必要十分) ※関連付けは可能 プリセットで多少 ※Dockerを除く YAMLで記述 Cloud-Init拡張ぽい ほぼアプリ起動特化 ※Dockerを除く
  59. 59. Amazon CloudWatch 59 CloudWatch AlarmAuto Scaling
  60. 60. 既に結構CloudWatch • OpsWorksで • モニタリング/AutoScale • Elastic Beanstalkで • モニタリング/AutoScale ! • メトリクスの収集とAlarmによるトリガ • SNS, Auto Scaling Policy, EC2の停止 60 CloudWatch
  61. 61. CloudWatchの仕様 • データ保存期間は2週間 • カスタムメトリクスのサイズは • POST / 40KB • GET / 8KB • 登録は1分間隔 61 CloudWatch
  62. 62. 請求もWatch 62 『[AWSマイスターシリーズ]Amazon CloudWatch & Auto Scaling』よりCloudWatch
  63. 63. カスタムメトリクス&AutoScale • 任意のメトリクスからAutoScaleのポリシー を更新 • 例: キャパシティ設計をしているホスティン グで、サーバの負荷でなく収容数に応じてイ ンスタンス数を変えたい 63 CloudWatch
  64. 64. AWSプラットフォーム管理で 全体的に有用なお勧めツールを 適当にピックアップ 【おまけ】
  65. 65. AWS CLI & jq
  66. 66. Vagrant
  67. 67. Packer
  68. 68. AWS-SDK
  69. 69. おわり

×