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