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

Preview:

DESCRIPTION

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

Citation preview

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

おわり