69
Elastic Beanstalk / CloudFormation / OpsWorks / CloudWatch など JAWSUG初心者向けトラック 【Deploy&Ops】 夏のJAWS-UG三都物語 July 5 2014 @sawanoboly (HiganWoks LLC, OpsRock LLC)

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Elastic Beanstalk / CloudFormation /

OpsWorks / CloudWatch など

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

夏のJAWS-UG三都物語 July 5 2014 @sawanoboly (HiganWoks LLC, OpsRock LLC)

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

運営組織

2

• 業務執行社員をつとめる合同会社

• アプリケーションのためのプラットフォーム構築/運用自動化をテーマにした活動を担当

• http://opsrock.in 共同開発・運営

• Chefをはじめ、Infrastracture as Code関連を主に取り扱うソリューションを提供

• 導入支援・トレーニングも

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

自動化サービス比較(0/3)

3

インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法

CloudFormation ? ? ?

OpsWorks ? ? ?

Elastic Beanstalk ? ? ?

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

AWS CloudFormation

4

AWS CloudFormation Template Stack

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

CloudFormationは AWSのほぼ全て※の

リソースが対象

※インフラ・プラットフォーム系AWS CloudFormation

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

CloudFormationリソース一覧(1/6) (User-Guideより)

• Compute & Networking

• AWS::Route53::***

• AWS::ElasticLoadBalancing::LoadBalancer

• AWS::EC2::***

• AWS::EC2::VPC***

• AWS::EC2::VPN***

6

AWS CloudFormation

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

CloudFormationリソース一覧(2/6) (User-Guideより)

• Storage & Content Delivery

• AWS::CloudFront::Distribution

• AWS::S3::***

7

AWS CloudFormation

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

CloudFormationリソース一覧(3/6) (User-Guideより)

• Database

• AWS::DynamoDB::Table

• AWS::ElastiCache::***

• AWS::RDS::***

• AWS::Redshift::Cluster***

• AWS::SDB::Domain(※SimpleDB)

8

AWS CloudFormation

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

CloudFormationリソース一覧(4/6) (User-Guideより)

• Deployment & Management

• AWS::CloudFormation::***

• AWS::CloudTrail::Trail

• AWS::CloudWatch::Alarm

• AWS::ElasticBeanstalk::***

• AWS::IAM::***

• AWS::OpsWorks::***

9

AWS CloudFormation

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

CloudFormationリソース一覧(5/6) (User-Guideより)

• Analytics

• AWS::Kinesis::Stream

10

AWS CloudFormation

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

CloudFormationリソース一覧(6/6) (User-Guideより)

• App Services

• AWS::SNS::Topic***

• AWS::SQS::Queue***

11

AWS CloudFormation

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

全84リソース

※User Guide (API Version 2010-05-15)AWS CloudFormation

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

JSONテンプレートで環境定義• AWSリソース名:プロパティ:値のセットで

定義 => スタック

• 外部テンプレートの読み込み可能

• 環境依存を解決するリソースやマクロ

• Parameters: 作成時の入力項目

• Mappings: ユーザー定義の連想配列

• Conditions: リソース作成フラグなど

• Outputs: 戻り値

• Function: 値に使えるマクロ

13

AWS CloudFormation

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

EC2インスタンス作成 テンプレートの例

14

AWS CloudFormation

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

マクロを使用する例

• 作成する他のリソースのID(arn)を使用する指定

• 依存関係となり、元のIDが用意されるまでは実行されない

15

AWS CloudFormation

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

テンプレートをアップロードして 環境作成

16

$ aws cloudformation create-stack \ --stack-name sample002 \ --template-body file://./single_is.json

GUIから

AWS CLIから

AWS CloudFormation

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

EC2の設定:Cloud-Init• Config: プリセットの起動時タスク定義

• packages: 起動時に追加するパッケージ

• sources: 展開するアーカイブ(外部URL)

• files: 設置するファイル(テンプレート可)

• services: (自動)起動するサービス

• User-Dataとfilesを組み合わせてプロビジョニング(Chef, Puppet, Ansible)

17

AWS CloudFormation

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

JSON作成が大変? ではツールを

AWS CloudFormation

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

CloudFormation 対策ツール達

• CloudFormer(公式)

• テンプレート雛形作成ツール

• EC2にアプリを起動、今あるリソースを選択するとテンプレートにしてくれる

• そのまま使うものではなく、あくまで雛形作成に

19

AWS CloudFormation

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

CloudFormation 対策ツール達

• coffin (https://github.com/chrisfjones/coffin)

• coffee-script でJSON生成 !

!

• CoffeeFormation(https://github.com/j3tm0t0/csfn)

• coffee-script でJSON生成

20

AWS CloudFormation

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

CloudFormation 対策ツール達

• Kumogata (https://github.com/winebarrel/kumogata)

• Ruby DSLで記述(直接作成/JSON変換)

• またはYAMLから

21

AWS CloudFormation

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

AWS CloudFormation

自動化サービス比較(1/3)

22

インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法

CloudFormationAWSのリソース ほとんどOK

ミドルウェアやや難単体では厳しい Cloud-Init

(+なにか)

OpsWorks ? ? ?

Elastic Beanstalk ? ? ?

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

AWS OpsWorks

23

OpsWorks

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

OpsWorksは 特定アプリケーションの プラットフォーム管理

& DeployタスクOpsWorks

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

注: OpsWorks部分は 3月(東京)の使い回し多いです

25

OpsWorks

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

レイヤとアプリケーション• レイヤ: 役割・プロトコルを元に定義する

• EC2インスタンス群でクラスタを組むなど

• 例えると、自分で作るRDS !

• アプリケーション

• 配布サーバやリポジトリから取得し、任意のランタイムで実行されるコード

• OpsWorksのデプロイタスクによりライフサイクルイベントを実行

26

OpsWorks

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

OpsWorks

『スタック』 1システムをまとめた単位

アプリケーションのプラットフォーム全体

『レイヤ』 役割別インスタンスの集合

DB

HTTPServer

Application

System A

←ここにデプロイ

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

プラットフォームと アプリケーションの ライフサイクル

OpsWorks

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

プラットフォームの構成管理

• スタックのメタデータを保持するOpsWorks

• ミドルウェアの構成管理を行なうChef

• コードはgit(svnも)リポジトリかS3から

• スタックではVPCやRDSの情報を使用できる

29

OpsWorks AgentAmazon S3

OpsWorks

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

アプリケーションデプロイ

• アプリケーションのレイヤはイベントによってDeploy用のタスクを起動

• これもChef

30

OpsWorks AgentAmazon S3

OpsWorks

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

OpsWorks

【販促】日本語Chefの本が出ていますので

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

OpsWorksのライフサイクル定義

1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown

32

プラットフォーム部分

OpsWorks

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

プラットフォーム部分• Setup

• インスタンスの起動

• 専用AMIか、それを元に作成したAMI

• 関連パッケージのインストール

• Configure (構成変更時にも自動実行)

• ミドルウェアの設定

• OpsWorksメタデータへの情報登録

33

OpsWorks

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

設定情報登録例: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

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

OpsWorksのライフサイクル定義

1.Setup 2.Configure 3.Deploy 4.UnDeploy 5.Shutdown

35

アプリケーション部分

OpsWorks

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

アプリケーション部分 1/2• Deploy

• デプロイツール※風のタスクを実行 ※Capistrano/Chef::Deploy

• レイヤ情報に基づいてアプリケーションコンフィグの設定

• アプリケーションの起動

• ELB/HAProxy等のバックエンドに参加

36

OpsWorks

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

アプリケーション部分 2/2• UnDeploy

• ELB/HAProxy等のバックエンドから除外

• アプリケーションの停止

37

OpsWorks

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

OpsWorksその他• AutoScale標準装備

• レイヤ単位でインスタンス数の増減

• レイヤ用のCloudWatchモニタ

• CloudFormationから作成可能

38

OpsWorks

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

OpsWorksは 補助ツール特になし…

OpsWorks

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

実機で挙動確認は一応可能

40

http://qiita.com/sawanoboly/items/147f550878477ff7723e

OpsWorks

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

OpsWorks

自動化サービス比較(2/3)

41

インフラ自由度 アプリデプロイ 対応柔軟性 EC2設定手法

CloudFormationAWSのリソース ほとんどOK

ミドルウェアやや難単体では厳しい Cloud-Init

(+なにか)

OpsWorks

ネットワークより上 に特化

OSSでのクラスタは 比較的作りやすい

要Chef(Ruby)力 大抵の事は可能

Blue-Greenやや難

主にChef + Cloud-Init

Elastic Beanstalk ? ? ?

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

AWS Elastic Beanstalk

42

Elastic Beanstalk Application Deployment

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

Elastic Beanstalkは 固定プラットフォームへの アプリケーション設置

Elastic Beanstalk

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

Elastic Beanstalk

まず プラットフォームを

決めます

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

動かすまで3ステップ

45

Elastic Beanstalk

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

No more thing…

Elastic Beanstalk

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

Elastic Beanstalk

Elastic Beanstalk概要• Webアプリ、またはワーカー用のプラット

フォームが作られます

• アプリケーションをアップロードすると起動します

47

※AWS Elastic Beanstalk 開発者ガイド より

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

Elastic Beanstalk

アプリケーションコード• コードは`zip`か`war`で、バージョンラベル

を付けてアップロード (※一部 S3サポート)

• またはEclipse、gitの拡張でPush

• サンプルアプリも用意されている

• スケールできるように作っておく

48

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

バージョン管理• ソースアーカイブは任意のバージョンを選ん

でデプロイ可能

• デプロイ対象の環境も任意

49

Elastic Beanstalk

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

Elastic Beanstalk

Environment• 環境の単位、個別設定やアプリのデプロイ

• 他AWS関連付け情報のセット

• CloudWatchやアラームのセット

• 環境ごとのエンドポイントDNS (任意に入れ替え可(Swap))

50

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

うまくハマれば非常に楽• PaaS(Platform as a service)

• インフラ管理一切なし

• RDSは連携作成

• VPCは既存と関連付けになる

• AutoScale勝手に対応 (Offも可)

• CloudWatchによる監視

51

Elastic Beanstalk

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

スタートアップ/開発者が Ops Freeな運用を

できる(かも)

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

うまくハマる環境は やや限られていたが…?

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

Dockerサポート• Dockerfile

• Dockerrun.aws.json ※

• AWS用追加情報

• バージョン等

• .dockercfg ※

• プライベートレジストリ情報

54

Elastic Beanstalk

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

Elastic Beanstalkに 役立つツール

Elastic Beanstalk

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

Elastic Beanstalk

Eclipse

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

eb, git aws (Elastic Beanstalk CLI)

Elastic Beanstalk

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

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を除く

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

Amazon CloudWatch

59

CloudWatch Alarm Auto Scaling

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

既に結構CloudWatch• OpsWorksで

• モニタリング/AutoScale

• Elastic Beanstalkで

• モニタリング/AutoScale !

• メトリクスの収集とAlarmによるトリガ

• SNS, Auto Scaling Policy, EC2の停止

60

CloudWatch

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

CloudWatchの仕様• データ保存期間は2週間

• カスタムメトリクスのサイズは

• POST / 40KB

• GET / 8KB

• 登録は1分間隔

61

CloudWatch

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

請求もWatch

62

『[AWSマイスターシリーズ]Amazon CloudWatch & Auto Scaling』よりCloudWatch

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

カスタムメトリクス&AutoScale

• 任意のメトリクスからAutoScaleのポリシーを更新

• 例: キャパシティ設計をしているホスティングで、サーバの負荷でなく収容数に応じてインスタンス数を変えたい

63

CloudWatch

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

AWSプラットフォーム管理で 全体的に有用なお勧めツールを

適当にピックアップ

【おまけ】

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

AWS CLI & jq

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

Vagrant

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

Packer

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

AWS-SDK

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

おわり