1/26 ページ cloud design patterncloud design pattern( ((( …€¦ ·...

26
2013/05/20 2013/05/20 2013/05/20 2013/05/20 Cloud Design Pattern Cloud Design Pattern Cloud Design Pattern Cloud Design Pattern(監視 監視 監視 監視& 編) ...とあ姉妹の会話。 おねえちゃ!って何? あたにないでし。 おねえちゃなだか教えて! のは仕事の話したくないの。 ひとくちあげか。 で動くのは去年まで。私成長したの。 半分あげか。 全部だったいい。 で、何なの? って。 って誰が初に考えたのかし? 賊に決まって! 組み合せの。色々と。 ととみたいに。 どうやって? お好きなうに! 返せ! 1 つ 1 つのは使い方が決まっての。 だけどみたいに組み合せと、高性能の出上がってけ。 は(私の知っては近だけどね)導入すのに性能設計、購入、構築、 停止&、 ...勇気と覚悟のい大航だったの。 今はで作成して、くっつけだけ。 しておいて、性能が足なかったで自動追加( )だって出。 定義して、機能にしておくだけでね。 皆が自分の仕事すだけで、船は簡単に大原へ漕ぎ出せの! 色々機能付けた結局お金かかじゃ。 酒がいくあっても足ない。 負荷が少ないは自動削除()してくか勝手に節約すの。 働かない賊かに捨ての。 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 妹: 姉: 1/26 ページ サンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ... 2013/06/24 file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Upload: others

Post on 01-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

2013/05/202013/05/202013/05/202013/05/20

Cloud Design PatternCloud Design PatternCloud Design PatternCloud Design Pattern((((監視監視監視監視&&&&スケールアウトスケールアウトスケールアウトスケールアウト&&&&スケールイン スケールイン スケールイン スケールイン 編編編編))))

...とある姉妹の会話。

おねえちゃん!クラウドデザインパターンって何?

あんたにカンケーないでしょ。

おねえちゃんプロなんだから教えてよ!

オフの時は仕事カンケーの話したくないの。

プリンひとくちあげるから。

プリンで動くのは去年までよ。私成長したの。

チョコ半分あげるから。

全部だったらいいわよ。

で、何なの? デザインパターンって。

ラムレーズンって誰が最初に考えたのかしら?

海賊に決まってるわ!

組み合わせるの。クラウドサービスを色々と。

ラムとレーズンとチョコみたいに。

どうやって?

お好きなように!

チョコ返せ!

1 つ 1 つのクラウドサービスは使い方が決まってるのよ。

だけどパズルみたいにパチパチ組み合わせると、高性能システムの出来上がりってわけ。

昔は(私の知ってる昔はゴクゴク最近だけどね)ローバラ導入するのに性能設計、購入、構築、シ

ステム停止&ネットワーキング、チューニング ...勇気と覚悟のいる大航海だったの。

今はクラウドでローバラ作成して、インスタンスくっつけるだけ。

モニタリングしておいて、性能が足りなかったらオートスケーリングでインスタンス自動追加(ス

ケールアウト)だって出来るわ。

パラメータ定義して、機能オンにしておくだけでね。

皆が自分の仕事をするだけで、船は簡単に大海原へ漕ぎ出せるの!

色々機能付けたら結局お金かかるじゃん。

ラム酒がいくらあっても足りないわ。

負荷が少ない時はインスタンス自動削除(スケールイン)してくれるから勝手に節約するの。

働かない海賊から海に捨てるのよ。

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

1/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 2: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

やって見せてよ。

何をよ。

デザインパターンを。

説明だけって言ったわよね。

言ってないわ。口だけじゃ全然わかんなぃー。

ラムレーズンが期間限定ってことわかってるわよね?

そもそもあんた Cloud(n) 使えるの?

私だってカードぐらい持ってるわよ。

そ、じゃあんたの鍵束出しなさい。その環境で作るわ。

使うのは Java API よ。

サンプルコード使用例(インストール& DNS 編)を御参照下さい。

海賊は何人必要?

ゼロからでいいわ。

まずは Compute でインスタンス(仮想サーバー)を 1 つ作って。

スペック、OS は何でもいいわ。

この ボツワナ産 ダイヤ をインスタンスだと思ってね。

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

2/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 3: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

楽勝よ。

jp-e1a の Zone に、

CentOS 6.3 64bit のオフィシャルテンプレートで、

m1.small インスタンスを作るわ。

Security Group は Compute GUI(ネットワーク - セキュリティ グループ)で設定した default

にしよっと。

(実行環境が Windows 日本時間だと ParseException 出るけど気にしない。)

C:\CloudnAPI>java CloudnAPIService

=== Start ===[2013/05/21 21:18:07]

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

Compute

Service =[Compute]

URL =[https://comp-apia.jp-e1.cloudn-service.com/awsapi/]

=== Start:CloudnAPICompute:publicMain ===[2013/05/21 21:18:11]

> Which Command ? (Describe / Create / Start / Stop / Delete / CreateTemplate /

CreateTag / Exit) :

Create

Command =[Create]

DescribeZonesResult:

{AvailabilityZones: [

{ZoneName: jp-e1a, State: available, RegionName: , Messages: [{Message:

Enabled, }], },

{ZoneName: jp-e1b, State: available, RegionName: , Messages: [{Message:

Enabled, }], }], }

> Enter Zone Name :

妹:

3/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 4: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

jp-e1a

Availability Zone =[jp-e1a]

DescribeSecGroupsResult:

{SecurityGroups: [{OwnerId: b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054,

GroupName: default, GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, Description:

Default Security Group, IpPermissions: [

{IpProtocol: icmp, FromPort: -1, ToPort: -1, IpRanges: [192.0.2.1/32], },

{IpProtocol: tcp, FromPort: 22, ToPort: 22, IpRanges: [192.0.2.1/32], },

{IpProtocol: tcp, FromPort: 80, ToPort: 80, IpRanges: [192.0.2.1/32], }, ], }], }

> Enter Security Group ID :

a7e842c0-84f4-4731-862a-04235397f4dc

Security Group ID =[a7e842c0-84f4-4731-862a-04235397f4dc]

DescribeImagesResult:

{Images: [

{ImageId: 8fdc326b-6e82-49a3-af22-69b0e3ab0cd7, ImageLocation: , State: available,

OwnerId: 1:admin, Public: true, ProductCodes: [{ProductCodeId: , ProductCodeType:

, }], Architecture: , ImageType: machine, KernelId: , RamdiskId: , Platform: ,

StateReason: {Code: , Message: , }, ImageOwnerAlias: , Name: CentOS 6.3 64bit,

Description: CentOS 6.3 64bit, RootDeviceType: , RootDeviceName: ,

BlockDeviceMappings: [{DeviceName: , Ebs: {SnapshotId: , VolumeSize: 0,

DeleteOnTermination: false, }, }], Tags: [{Key: , Value: , }], Hypervisor: , },

> Enter Image ID :

8fdc326b-6e82-49a3-af22-69b0e3ab0cd7

Image ID =[8fdc326b-6e82-49a3-af22-69b0e3ab0cd7]

> Enter Create Instance Type (t1.micro / m1.small / m1.medium / m1.large /

m1.xlarge) :

m1.small

Instance Type =[m1.small]

> Enter Minimum Count:

1

Minimum Count =[1]

> Enter Maximum Count:

1

Maximum Count =[1]

RunInstancesRequest:

{ImageId: 8fdc326b-6e82-49a3-af22-69b0e3ab0cd7, MinCount: 1, MaxCount: 1,

InstanceType: m1.small, }

Instance Create Start =[2013/05/21 21:19:06]

Instance Create Finish =[2013/05/21 21:19:31]

RunInstancesResult:

4/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 5: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

{Reservation: {ReservationId: , OwnerId: b796b2ab-1c66-4c92-91f4-

031d1bc36140:cln100053054, RequesterId: , Groups: [{GroupName: default, GroupId:

a7e842c0-84f4-4731-862a-04235397f4dc, }], GroupNames: [default], Instances:

[{InstanceId: a307b88d-eaf3-459d-adf6-922dbb3d9308, ImageId: 8fdc326b-6e82-49a3-

af22-69b0e3ab0cd7, State: {Code: 16, Name: running, }, PrivateDnsName: ,

PublicDnsName: , StateTransitionReason: , ProductCodes: [{ProductCodeId: ,

ProductCodeType: , }], InstanceType: m1.small, Placement: {AvailabilityZone: jp-

e1a, }, KernelId: , RamdiskId: , Platform: , Monitoring: {State: , }, SubnetId: ,

VpcId: , PrivateIpAddress: 192.0.2.2, StateReason: {Code: , Message: , },

Architecture: , RootDeviceType: , RootDeviceName: , VirtualizationType: ,

InstanceLifecycle: , SpotInstanceRequestId: , ClientToken: , Tags: [{Key: , Value:

, }], SecurityGroups: [{GroupName: , GroupId: , }], Hypervisor: , }], }, }

a307b88d-eaf3-459d-adf6-922dbb3d9308 っていうインスタンスができたわ。

API で作ると ID が乱数作成だから人に優しくないわね。

捕まった海賊の囚人番号みたいね。

Compute GUI でインスタンス作ってもいいわよ。

先に言ってよ!

作ったインスタンスにログインして、アプリケーションを設定して。

2日かかるわ。

2分でやりなさい。

鬼!海賊!

# yum -y install httpd php mysql mysql-server php-mysql

# chkconfig httpd on

# wget http://ja.wordpress.org/latest-ja.zip

などなど。。。

もういいわ。私待てない。

デザインパターン試すだけならインスタンスの中身なんてどうでもいいわ!

インスタンスを停止して。

何?キレたの? 最近のジョシってキレやすいわよね。

いいのよ、デザインパターン試すだけなんだから、作り込まなくて。

Security Group とインスタンスの Fire Wall(iptables 等)を設定して、インスタンスに HTTP

(TCP port 80)が通るようにしておいてね。

最悪 ping だけ通るでもいいわ。

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

姉:

5/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 6: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

インスタンスを停止して。

はいはい。

> Which Command ? (Describe / Create / Start / Stop / Delete / CreateTemplate /

CreateTag / Exit) :

Stop

DescribeInstancesResult:

{Reservations: [{ReservationId: a307b88d-eaf3-459d-adf6-922dbb3d9308, OwnerId:

b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054, RequesterId: , Groups:

[{GroupName: default, GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, }],

GroupNames: [default], Instances: [

{InstanceId: a307b88d-eaf3-459d-adf6-922dbb3d9308, ImageId: 8fdc326b-6e82-49a3-

af22-69b0e3ab0cd7, State: {Code: 16, Name: running, }, PrivateDnsName: ,

PublicDnsName: , StateTransitionReason: , ProductCodes: [{ProductCodeId: ,

ProductCodeType: , }], InstanceType: m1.small, Placement: {AvailabilityZone: jp-

e1a, GroupName: , }, KernelId: , RamdiskId: , Platform: , Monitoring: {State: , },

SubnetId: , VpcId: , PrivateIpAddress: 192.0.2.2, StateReason: {Code: , Message:

, }, Architecture: , RootDeviceType: , RootDeviceName: 0, InstanceLifecycle: ,

SpotInstanceRequestId: , Tags: [{Key: , Value: , }], SecurityGroups: [{GroupName:

, }], Hypervisor: , }], }, {ReservationId: 7df5211d-e3d9-436b-b5cd-b92cb7b614a2,

OwnerId: b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054, RequesterId: , Groups:

[{GroupName: default, GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, }],

GroupNames: [default], Instances: [

> Enter Stop Instance ID :

a307b88d-eaf3-459d-adf6-922dbb3d9308

妹:

6/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 7: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

Instance ID =[a307b88d-eaf3-459d-adf6-922dbb3d9308]

StopInstancesRequest:

{InstanceIds: [a307b88d-eaf3-459d-adf6-922dbb3d9308], }

StopInstancesResult:

{StoppingInstances: [{InstanceId: a307b88d-eaf3-459d-adf6-922dbb3d9308,

CurrentState: {Code: 80, Name: stopped, }, PreviousState: {Code: 16, Name:

running, }, }], }

そのインスタンスのイメージをテンプレート化するのよ。

インスタンス複製の "もとネタ" 作りね。

じゃあ、piratesTemplate001 っていう名前で、

Template For Pirates っていうコメントもついでに付けちゃお♪

(Exception 発生しても Compute GUI で見てできてるからいいや。最悪 Compute GUI からテンプ

レート作成よ!)

> Which Command ? (Describe / Create / Start / Stop / Delete / CreateTemplate /

CreateTag / Exit) :

CreateTemplate

DescribeInstancesResult:

{Reservations: [{ReservationId: a307b88d-eaf3-459d-adf6-922dbb3d9308, OwnerId:

b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054, RequesterId: , Groups:

[{GroupName: default, GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, }], GroupNames:

[default], Instances: [

{InstanceId: a307b88d-eaf3-459d-adf6-922dbb3d9308, ImageId: 8fdc326b-6e82-49a3-af22-

69b0e3ab0cd7, State: {Code: 80, Name: stopped, }, PrivateDnsName: , PublicDnsName: ,

StateTransitionReason: , ProductCodes: [{ProductCodeId: , ProductCodeType: , }],

InstanceType: m1.small, Placement: {AvailabilityZone: jp-e1a, GroupName: , },

KernelId: , RamdiskId: , Platform: , Monitoring: {State: , }, SubnetId: , VpcId: ,

姉:

妹:

7/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 8: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

PrivateIpAddress: 192.0.2.2, StateReason: {Code: , Message: , }, Architecture: ,

RootDeviceType: , RootDeviceName: 0, InstanceLifecycle: , SpotInstanceRequestId: ,

Tags: [{Key: , Value: , }], SecurityGroups: [{GroupName: , }], Hypervisor: , }], },

{ReservationId: 7df5211d-e3d9-436b-b5cd-b92cb7b614a2, OwnerId: b796b2ab-1c66-4c92-

91f4-031d1bc36140:cln100053054, RequesterId: , Groups: [{GroupName: default,

GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, }], GroupNames: [default], Instances:

[

> Enter Instance ID (for Template) :

a307b88d-eaf3-459d-adf6-922dbb3d9308

Instance ID =[a307b88d-eaf3-459d-adf6-922dbb3d9308]

> Enter Create Template Name :

piratesTemplate001

Temaplate Name =[piratesTemplate001]

> Enter Description (empty is available) :

Template For Pirates

Description =[Template For Pirates]

CreateImageRequest:

{InstanceId: a307b88d-eaf3-459d-adf6-922dbb3d9308, Name: piratesTemplate001,

Description: Template For Pirates, }

Template Create Start =[2013/05/21 21:31:13]

Template Create Finish =[2013/05/21 21:32:10]

> Which Command ? (Describe / Create / Start / Stop / Delete / CreateTemplate /

CreateTag / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPICompute:createTemplate ===[2013/05/21 21:33:05]

次に LBA を作って。

インスタンスと紐付けはしないでいいわ。

LBA は カシミール産 サファイア。

姉:

8/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 9: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

アイアイサー!

名前は当然 piratesLBA001 で決まりね!

LBA(ロードバランサー)が HTTP 80 port で受けて、横流しして

インスタンスが HTTP 80 port で受ける設定にするわ。

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

LBA

Service =[LBA]

URL =[https://lba-api.jp-e1.cloudn-service.com/]

URL =[https://comp-apia.jp-e1.cloudn-service.com/awsapi/]

=== Start:CloudnAPILBA:publicMain ===[2013/05/21 21:36:30]

> Which Command ? (Describe / Create / Delete / RegisterInstance / CreateListener /

DefineHealth / HealthCheck / Exit) :

Create

Command =[Create]

> Enter Create LBA Name :

piratesLBA001

Create LBA Name =[piratesLBA001]

DescribeZonesResult:

{AvailabilityZones: [

{ZoneName: jp-e1a, State: available, RegionName: , Messages: [{Message:

Enabled, }], },

{ZoneName: jp-e1b, State: available, RegionName: , Messages: [{Message:

Enabled, }], }], }

> Enter Zone Name :

jp-e1a

Availability Zone =[jp-e1a]

妹:

9/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 10: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

DescribeSecGroupsResult:

{SecurityGroups: [{OwnerId: b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054,

GroupName: default, GroupId: a7e842c0-84f4-4731-862a-04235397f4dc, Description:

Default Security Group, IpPermissions: [

{IpProtocol: icmp, FromPort: -1, ToPort: -1, IpRanges: [192.0.2.1/32], },

{IpProtocol: tcp, FromPort: 22, ToPort: 22, IpRanges: [192.0.2.1/32], },

{IpProtocol: tcp, FromPort: 80, ToPort: 80, IpRanges: [192.0.2.1/32], }, ], }], }

> Enter Security Group ID :

a7e842c0-84f4-4731-862a-04235397f4dc

Security Group ID =[a7e842c0-84f4-4731-862a-04235397f4dc]

> Enter LBA Protocol (HTTP / HTTPS / TCP / SSL) :

HTTP

LBA Protocol =[HTTP]

> Enter LBA Port :

80

LBA Port =[80]

> Enter Instance Protocol (HTTP / HTTPS / TCP / SSL) :

HTTP

Instance Protocol =[HTTP]

> Enter Instance Port :

80

Instance Port =[80]

CreateLoadBalancerRequest:

{LoadBalancerName: piratesLBA001, Listeners: [{Protocol: HTTP, LoadBalancerPort: 80,

InstanceProtocol: HTTP, InstancePort: 80, }], AvailabilityZones: [jp-e1a],

SecurityGroups: [a7e842c0-84f4-4731-862a-04235397f4dc], }

CreateLoadBalancerResult:

{DNSName: piratesLBA001-1369139900.lba.jp-e1.cloudn-service.com, }

できたかな? Describe で確認してみよう。

> Which Command ? (Describe / Create / Delete / RegisterInstance / CreateListener /

DefineHealth / HealthCheck / Exit) :

Describe

Command =[Describe]

DescribeLoadBalancersResult:

{LoadBalancerDescriptions: [

{LoadBalancerName: piratesLBA001, DNSName: piratesLBA001-1369139900.lba.jp-

e1.cloudn-service.com, CanonicalHostedZoneName: piratesLBA001-1369139900.lba.jp-

e1.cloudn-service.com, CanonicalHostedZoneNameID: BBB1874A1E3A46,

ListenerDescriptions: [{Listener: {Protocol: HTTP, LoadBalancerPort: 80,

InstanceProtocol: HTTP, InstancePort: 80, SSLCertificateId: , }, }], Policies: {},

BackendServerDescriptions: [{InstancePort: 80, }], AvailabilityZones: [jp-e1a],

妹:

10/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 11: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

VPCId: , HealthCheck: {Target: HTTP:80/index.html, Interval: 5, Timeout: 3,

UnhealthyThreshold: 2, HealthyThreshold: 10, }, SourceSecurityGroup: {OwnerAlias: ,

GroupName: , }, SecurityGroups: [a7e842c0-84f4-4731-862a-04235397f4dc], CreatedTime:

Tue May 21 21:38:21 JST 2013, Scheme: internet-facing, }], }

> Which Command ? (Describe / Create / Delete / RegisterInstance / CreateListener /

DefineHealth / HealthCheck / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPILBA:describeLBA ===[2013/05/21 21:41:05]

Auto Scaling Group を作って。

Launch Configuration でさっきのテンプレート("もとネタ")の Image ID を指定して。

Minimum Size は 1 以上にしてね。

Auto Scaling Group に今作った LBA を紐付けるのよ。

イエッサー!

"もとネタ" は Template For Pirates っていうコメントで見つけられるわ。

それにしてもこの長ったらしい ID どうにかならないのかしら!

起動するインスタンスは m1.small でいいわ、適当が一番!

最小 1 インスタンス、

最大 5 インスタンスの Auto Scaling Group を定義するわ。

LBA ってことは piratesLBA001 ね!

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

AutoScaling

Service =[AutoScaling]

URL =[https://as-api.jp-e1.cloudn-service.com/]

URL =[https://comp-apia.jp-e1.cloudn-service.com/awsapi/]

姉:

妹:

11/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 12: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

=== Start:CloudnAPIAutoScaling:publicMain ===[2013/05/21 21:41:28]

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

Create

Command =[Create]

> Enter Launch Configuration Name :

piratesLaunchConfiguration001

Launch Configuration Name =[piratesLaunchConfiguration001]

> List Image? (Y/N) :

Y

DescribeImagesResult:

{Images: [

{ImageId: d6a9fd98-c351-40b9-b8e5-728a5c5338ef, ImageLocation: , State: available,

OwnerId: b796b2ab-1c66-4c92-91f4-031d1bc36140:cln100053054, Public: false,

ProductCodes: [{ProductCodeId: , ProductCodeType: , }], Architecture: , ImageType:

machine, KernelId: , RamdiskId: , Platform: , StateReason: {Code: , Message: , },

ImageOwnerAlias: , Name: piratesTemplate001, Description: Template For Pirates,

RootDeviceType: , RootDeviceName: , BlockDeviceMappings: [{DeviceName: , Ebs:

{SnapshotId: , VolumeSize: 0, DeleteOnTermination: false, }, }], Tags: [{Key: ,

Value: , }], Hypervisor: , },

> Enter Image ID :

d6a9fd98-c351-40b9-b8e5-728a5c5338ef

Image ID =[d6a9fd98-c351-40b9-b8e5-728a5c5338ef]

> Enter Instance Type (t1.micro / m1.small / m1.medium / m1.large / m1.xlarge) :

m1.small

Instance Type =[m1.small]

CreateLaunchConfigurationRequest:

{LaunchConfigurationName: piratesLaunchConfiguration001, ImageId: d6a9fd98-c351-

40b9-b8e5-728a5c5338ef, InstanceType: m1.small, }

> Enter Create Auto Scaling Group Name :

piratesAutoScalingGroup001

Create Auto Scaling Group Name =[piratesAutoScalingGroup001]

DescribeZonesResult:

{AvailabilityZones: [

{ZoneName: jp-e1a, State: available, RegionName: , Messages: [{Message:

Enabled, }], },

{ZoneName: jp-e1b, State: available, RegionName: , Messages: [{Message:

Enabled, }], }], }

> Enter Availability Zone :

jp-e1a

Availazbility Zone =[jp-e1a]

12/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 13: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

> Enter Minimum Size :

1

Minimum Size =[1]

> Enter Maximum Size :

5

Maximum Size =[5]

> Enter LBA Name (empty is available) :

piratesLBA001

Create LBA =[piratesLBA001]

> Enable Scale In? (Terminate from Newest Instance) (Y/N) :

Y

Enabled Scale In

CreateAutoScalingGroupRequest:

{AutoScalingGroupName: piratesAutoScalingGroup001, LaunchConfigurationName:

piratesLaunchConfiguration001, MinSize: 1, MaxSize: 5, AvailabilityZones: [jp-e1a],

LoadBalancerNames: [piratesLBA001], TerminationPolicies: [NewestInstance], }

次がポイントよ!

AutoScaling で Policy を作るの。

Policy っていうのは、AutoScaling 機能が「どう動作するか」の定義なの。

具体的には Auto Scaling Group の Desired Capacity というパラメータの動きを定義するのよ。

スケールアウトの時にインスタンスが +1。

スケールインの時にインスタンスが -1。

それぞれの Policy 定義をしてみて。

スケールアウト +5、スケールイン -3 とかいろいろ応用ができそうね♪

まずはスケールアウトから~

1 個ずつ変化(ChangeInCapacity)を選べばいいわね。

(ExactCapacity は ~個に強制適応。PercentChangeInCapacity は ~% ずつ変化)

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

PutPolicy

Command =[PutPolicy]

> Enter Policy Name:

piratesPolicyScaleOut001

Policy Name =[piratesPolicyScaleOut001]

DescribeAutoScalingGroupsResult:

{AutoScalingGroups: [

{AutoScalingGroupName: piratesAutoScalingGroup001, AutoScalingGroupARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:autoScalingGroup:autoScalingGroupName/piratesAutoScalingGroup001,

LaunchConfigurationName: piratesLaunchConfiguration001, MinSize: 1, MaxSize: 5,

DesiredCapacity: 1, DefaultCooldown: 300, AvailabilityZones: [jp-e1a],

姉:

妹:

13/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 14: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

LoadBalancerNames: [piratesLBA001], HealthCheckType: CnC, HealthCheckGracePeriod: 0,

Instances: [{InstanceId: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, AvailabilityZone: jp-

e1a, LifecycleState: Running, HealthStatus: HEALTHY, LaunchConfigurationName:

piratesLaunchConfiguration001, }], CreatedTime: Wed May 22 21:29:43 JST 2013,

VPCZoneIdentifier: , TerminationPolicies: [NewestInstance], }], }

> Enter Auto Scaling Group Name (for Put Policy):

piratesAutoScalingGroup001

Auto Scaling Group Name =[piratesAutoScalingGroup001]

> Enter Adjustment Type (ChangeInCapacity / ExactCapacity /

PercentChangeInCapacity):

ChangeInCapacity

Adjustment Type =[ChangeInCapacity]

> Enter Scaling Adjustment:

1

Scaling Adjustment =[1]

PutScalingPolicyRequest:

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleOut001, ScalingAdjustment: 1, AdjustmentType: ChangeInCapacity, }

PutScalingPolicyResult:

{PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001

お次はスケールイン!

-1 個ずつ変化 を指定すればいいわね。

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

PutPolicy

Command =[PutPolicy]

> Enter Policy Name:

piratesPolicyScaleIn001

Policy Name =[piratesPolicyScaleIn001]

DescribeAutoScalingGroupsResult:

{AutoScalingGroups: [

{AutoScalingGroupName: piratesAutoScalingGroup001, AutoScalingGroupARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:autoScalingGroup:autoScalingGroupName/piratesAutoScalingGroup001,

LaunchConfigurationName: piratesLaunchConfiguration001, MinSize: 1, MaxSize: 5,

DesiredCapacity: 1, DefaultCooldown: 300, AvailabilityZones: [jp-e1a],

LoadBalancerNames: [piratesLBA001], HealthCheckType: CnC, HealthCheckGracePeriod: 0,

Instances: [{InstanceId: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, AvailabilityZone: jp-

e1a, LifecycleState: Running, HealthStatus: HEALTHY, LaunchConfigurationName:

piratesLaunchConfiguration001, }], CreatedTime: Wed May 22 21:29:43 JST 2013,

VPCZoneIdentifier: , TerminationPolicies: [NewestInstance], }], }

妹:

14/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 15: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

> Enter Auto Scaling Group Name (for Put Policy):

piratesAutoScalingGroup001

Auto Scaling Group Name =[piratesAutoScalingGroup001]

> Enter Adjustment Type (ChangeInCapacity / ExactCapacity /

PercentChangeInCapacity):

ChangeInCapacity

Adjustment Type =[ChangeInCapacity]

> Enter Scaling Adjustment:

-1

Scaling Adjustment =[-1]

PutScalingPolicyRequest:

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleIn001, ScalingAdjustment: -1, AdjustmentType: ChangeInCapacity, }

PutScalingPolicyResult:

{PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001

ホイできた! Describe で確認!

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

Describe

Command =[Describe]

DescribeLaunchConfigurationsResult:

{LaunchConfigurations: [

{LaunchConfigurationName: piratesLaunchConfiguration001, LaunchConfigurationARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:launchConfiguration:launchConfigurationName/piratesLaunchConfiguration001,

ImageId: d6a9fd98-c351-40b9-b8e5-728a5c5338ef, KeyName: , UserData: , InstanceType:

m1.small, KernelId: , RamdiskId: , InstanceMonitoring: {Enabled: true, },

CreatedTime: Wed May 22 21:28:33 JST 2013, }], }

DescribeAutoScalingGroupsResult:

{AutoScalingGroups: [

{AutoScalingGroupName: piratesAutoScalingGroup001, AutoScalingGroupARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:autoScalingGroup:autoScalingGroupName/piratesAutoScalingGroup001,

LaunchConfigurationName: piratesLaunchConfiguration001, MinSize: 1, MaxSize: 5,

DesiredCapacity: 1, DefaultCooldown: 300, AvailabilityZones: [jp-e1a],

LoadBalancerNames: [piratesLBA001], HealthCheckType: CnC, HealthCheckGracePeriod: 0,

Instances: [{InstanceId: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, AvailabilityZone: jp-

e1a, LifecycleState: Running, HealthStatus: HEALTHY, LaunchConfigurationName:

piratesLaunchConfiguration001, }], CreatedTime: Wed May 22 21:29:43 JST 2013,

VPCZoneIdentifier: , TerminationPolicies: [NewestInstance], }], }

DescribePoliciesResult:

{ScalingPolicies: [

妹:

15/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 16: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleIn001, ScalingAdjustment: -1, AdjustmentType: ChangeInCapacity,

PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleOut001, ScalingAdjustment: 1, AdjustmentType: ChangeInCapacity,

PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPIAutoScaling:describeAutoScalingGroup ===[2013/05/22 21:36:04]

ちょっとブレイク。

チョコターイム!

今作った AutoScaling がちゃんと動いていれば 最初のインスタンス が起動しているはずよ。

(上記 AutoScaling Describe 結果、ピンクのインスタンス)

Minimum Size を 1 にしたから最低でも 1 インスタンス居なければならないの。

Compute GUI の仮想サーバー一覧にも出てきたわ!

ログインすると... おー!私が設定したアプリが動いてる!

このインスタンスが高負荷になっても何も起こらないわ。

ダウンしたら Minimum Size を満たす為に別のが起動するけどね。

死ぬまで 1 人で戦うのね。

Monitoring で Alarm を作って。

ピンチの時、援軍の呼び方を教えてあげるわ。

監視対象はさっきの Auto Scaling Group 内で起動した 最初のインスタンス よ。(AutoScaling

Describe 結果参照)

Auto Scaling Group のスケールアウト/インの PolicyARN を紐付ければ完成!

姉:

妹:

姉:

妹:

姉:

16/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 17: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

O Captain! My Captain!

Auto Scaling Group 内の 最初のインスタンス の Network Input(受信パケット) が 3,000

byte(3 KB)を 超えた 時にスケールアウト、下回った時にスケールインしてみるわ。

スケールアウト の PolicyARN = arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001

スケールイン の PolicyARN = arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001

ね。

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

Monitoring

Service =[Monitoring]

URL =[https://mon-api.jp-e1.cloudn-service.com/]

=== Start:CloudnAPIMonitoring:publicMain ===[2013/05/22 21:36:09]

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Create

Command =[Create]

> Enter Create Alarm Name :

piratesAlarm001

Create Alarm Name =[piratesAlarm001]

ListMetricsResult:

{Metrics: [

{Namespace: Cloudn/Compute, MetricName: StatusCheckFailed_System, Dimensions:

[{Name: InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: StatusCheckFailed_Instance, Dimensions:

[{Name: InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: StatusCheckFailed, Dimensions: [{Name:

妹:

17/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 18: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: NetworkOut, Dimensions: [{Name: InstanceId,

Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: NetworkIn, Dimensions: [{Name: InstanceId,

Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: DiskWriteOps, Dimensions: [{Name:

InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: DiskWriteBytes, Dimensions: [{Name:

InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: DiskReadOps, Dimensions: [{Name: InstanceId,

Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: DiskReadBytes, Dimensions: [{Name:

InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], },

{Namespace: Cloudn/Compute, MetricName: CPUUtilization, Dimensions: [{Name:

InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], }, ], }

> Enter Namespace :

Cloudn/Compute

Namespace =[Cloudn/Compute]

> Enter Metric Name :

NetworkIn

Metric Name =[NetworkIn]

> Enter Dimensions Name :

InstanceId

Dimensions Name =[InstanceId]

> Enter Dimensions Value :

7a55d26d-bcf4-40a4-8d38-2eb0659d0eea

Dimensions Value =[7a55d26d-bcf4-40a4-8d38-2eb0659d0eea]

> Enter Threshold :

3000

Threshold =[3000]

> Enter Comparison Operator ( >= or > or <= or < ) :

>

Comparison Operator =[>]

> Enter Statistic (SampleCount / Average / Sum / Minimum / Maximum) :

Average

Statistic =[Average]

> Enter Periods (for statistic) :

300

Period =[300]

> Enter Evaluation Periods (number of periods) :

1

Evaluation Periods =[1]

18/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 19: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

> Enter ALARM Action (Mail Address or Auto Scale PolicyARN) :

arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001

Action =[arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001]

> Enter OK Action (Mail Address or Auto Scale PolicyARN) (empty is available) :

arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001

OK Action =[arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001]

PutMetricAlarmRequest:

{AlarmName: piratesAlarm001, OKActions: [arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001],

AlarmActions: [arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001],

MetricName: NetworkIn, Namespace: Cloudn/Compute, Statistic: Average, Dimensions:

[{Name: InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], Period: 300,

EvaluationPeriods: 1, Threshold: 3000.0, ComparisonOperator: GreaterThanThreshold, }

カンタン、カンタン。 Describe で確認~ん。

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Describe

Command =[Describe]

DescribeAlarmsResult:

{MetricAlarms: [

{AlarmName: piratesAlarm001, AlarmArn: arn:cloudn:monitoring:jp-

e1:187:alarm:piratesAlarm001, AlarmDescription: ,

AlarmConfigurationUpdatedTimestamp: Wed May 22 21:55:14 JST 2013, ActionsEnabled:

true, StateValue: , StateReason: , StateReasonData: , StateUpdatedTimestamp: Wed May

22 21:55:14 JST 2013, MetricName: NetworkIn, Namespace: Cloudn/Compute, Statistic:

Average, Dimensions: [{Name: InstanceId, Value: 7a55d26d-bcf4-40a4-8d38-

2eb0659d0eea, }], Period: 300, Unit: , EvaluationPeriods: 1, Threshold: 3000.0,

ComparisonOperator: GreaterThanThreshold, }], }

DescribeAlarmHistoryResult:

{AlarmHistoryItems: [

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: ConfigurationUpdate, HistorySummary: Alarm "piratesAlarm001"

created, HistoryData:

{"version":"1.0","type":"Create","threshold":3000,"namespace":"Cloudn/Compute","unit":null,"stateValue":"ALARM","dimensions":

{"name":"InstanceId","value":"7a55d26d-bcf4-40a4-8d38-

2eb0659d0eea"},"okactions":"[arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001

-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001

-e1:187:alarm:piratesAlarm001","alarmConfigurationUpdatedTimestamp":"2013-05-

22T12:55:14Z","stateUpdatedTimestamp":"2013-05-

妹:

19/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 20: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

22T12:55:14Z","insufficientDataActions":"[]","alarmDescription":null,"actionEnabled":"true"}, }], }

Monitoring の設定が出来たら、最初のインスタンスをいじめてみましょう~。

かわいそうだからおねえちゃんやって。

ガラにもないこと言わないの。

LBA にトラフィック負荷をかけると、Monitoring が OK から ALARM 状態になって、AutoScaling

で定義した Scale Out の Pulicy が発動するわ。

援軍がやってくるのよ!

何分間負荷をかけるの?

5 分間よ。平均 Input が 3KB 以上必要になるわ。

負荷をかける対象は LBA を作った時に表示された DNSName ね。

(LBA Describe でも表示されるわ。)

Web をイジメルとしたら Apache Bench か、JMeter か、F5 アタックか、、、

負荷端末 Linux # yum -y install httpd

負荷端末 Linux # ab -t 600 -c 100 piratesLBA001-1369139900.lba.jp-e1.cloudn-

service.com

最初のインスタンスに HTTP サーバが立ってないと LBA の HealthCheck で振り分け先から外され

るから注意してね。

最初のインスタンスの Network Input が 3 KB より大きくなればいいから LBA でなく、インスタ

ンス自体に ping を打ち込んでも ALARM 状態になるわ。

インスタンスの IP アドレスは Compute Describe か Compute GUI の仮想サーバー一覧でインス

タンスを選択して「NIC」タブを見ればわかるわ。

姉:

妹:

姉:

妹:

姉:

妹:

姉:

20/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 21: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

オラオラオラオラ!

負荷端末 Linux # ping -s 4000 [最初のインスタンスの IP]

負荷端末 Windows > ping -t [最初のインスタンスの IP] -l 4000

本性が出たわね。

わお! 2 つ目のインスタンスが起動したわ!!!

(Compute GUI の仮想サーバー一覧に出てきた!)

スケールアウト!

ボツワナ産 ダイヤ がどんどん増えていくわ!

Monitoring の Describe で Alarm History が見られるわ。

「Alarm updated from OK to ALARM」って履歴が出てきたわ!

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Describe

Command =[Describe]

DescribeAlarmsResult:

{MetricAlarms: [

{AlarmName: piratesAlarm001, AlarmArn: arn:cloudn:monitoring:jp-

e1:187:alarm:piratesAlarm001, AlarmDescription: ,

AlarmConfigurationUpdatedTimestamp: Wed May 22 21:55:14 JST 2013, ActionsEnabled:

true, StateValue: ALARM, StateReason: Alarm updated from OK to ALARM. Reason:

Threshold Crossed: 1 datapoint (3261.8523) was not GreaterThanThreshold to the

threshold (3000)., StateReasonData:

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:07:05Z","statistic":"Average","period":300,"recentDatapoints":"3261.8523","threshold":3000},

StateUpdatedTimestamp: Thu May 23 07:07:05 JST 2013, MetricName: NetworkIn,

Namespace: Cloudn/Compute, Statistic: Average, Dimensions: [{Name: InstanceId,

Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], Period: 300, Unit: ,

EvaluationPeriods: 1, Threshold: 3000.0, ComparisonOperator:

GreaterThanThreshold, }], }

DescribeAlarmHistoryResult:

{AlarmHistoryItems: [

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: StateUpdate, HistorySummary: Alarm updated from OK to ALARM,

HistoryData: {"version":"1.0","oldState":{"stateValue":"OK","stateReason":"Alarm

updated to OK. Reason: Threshold Crossed: 1 datapoint (99.7662) was not

GreaterThanThreshold to the threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T21:56:47Z","statistic":"Average","period":300,"recentDatapoints":"99.7662","threshold":3000}},"newState":

{"stateValue":"ALARM","stateReason":"Alarm updated from OK to ALARM. Reason:

Threshold Crossed: 1 datapoint (3261.8523) was not GreaterThanThreshold to the

threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:07:05Z","statistic":"Average","period":300,"recentDatapoints":"3261.8523","threshold":3000}}},

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: StateUpdate, HistorySummary: Alarm updated to OK, HistoryData:

{"version":"1.0","newState":{"stateValue":"OK","stateReason":"Alarm updated to OK.

Reason: Threshold Crossed: 1 datapoint (99.7662) was not GreaterThanThreshold to

the threshold (3000).","stateReasonData":

妹:

姉:

妹:

姉:

妹:

21/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 22: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T21:56:47Z","statistic":"Average","period":300,"recentDatapoints":"99.7662","threshold":3000}}},

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: ConfigurationUpdate, HistorySummary: Alarm "piratesAlarm001"

created, HistoryData:

{"version":"1.0","type":"Create","threshold":3000,"namespace":"Cloudn/Compute","unit":null,"stateValue":"ALARM","dimensions":

{"name":"InstanceId","value":"7a55d26d-bcf4-40a4-8d38-

2eb0659d0eea"},"okactions":"[arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001]","alarmActions":"[arn:cloudn:autoscale:jp

-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001]","evaluationPeriods":1,"comparisonOperator":"GreaterThanThreshold","metricName":"NetworkIn","period":300,"alarmName":"piratesAlarm001","statistic":"Average","alarmArn":"arn:cloudn:monitoring:jp

-e1:187:alarm:piratesAlarm001","alarmConfigurationUpdatedTimestamp":"2013-05-

22T12:55:14Z","stateUpdatedTimestamp":"2013-05-

22T12:55:14Z","insufficientDataActions":"[]","alarmDescription":null,"actionEnabled":"true"}, }], }

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPIMonitoring:describeAlarm ===[2013/05/22 22:08:01]

AutoScaling の Describe で 2 つ目のインスタンスが見られるわ。

GUI ないの~!?

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

AutoScaling

Service =[AutoScaling]

URL =[https://as-api.jp-e1.cloudn-service.com/]

URL =[https://comp-apia.jp-e1.cloudn-service.com/awsapi/]

=== Start:CloudnAPIAutoScaling:publicMain ===[2013/05/22 22:08:08]

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

Describe

Command =[Describe]

DescribeLaunchConfigurationsResult:

{LaunchConfigurations: [

{LaunchConfigurationName: piratesLaunchConfiguration001, LaunchConfigurationARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:launchConfiguration:launchConfigurationName/piratesLaunchConfiguration001,

ImageId: d6a9fd98-c351-40b9-b8e5-728a5c5338ef, KeyName: , UserData: , InstanceType:

m1.small, KernelId: , RamdiskId: , InstanceMonitoring: {Enabled: true, },

CreatedTime: Wed May 22 21:28:33 JST 2013, }], }

DescribeAutoScalingGroupsResult:

{AutoScalingGroups: [

{AutoScalingGroupName: piratesAutoScalingGroup001, AutoScalingGroupARN:

arn:cloudn:autoscale:jp-

e1:cln100053054:autoScalingGroup:autoScalingGroupName/piratesAutoScalingGroup001,

姉:

妹:

22/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 23: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

LaunchConfigurationName: piratesLaunchConfiguration001, MinSize: 1, MaxSize: 5,

DesiredCapacity: 2, DefaultCooldown: 300, AvailabilityZones: [jp-e1a],

LoadBalancerNames: [piratesLBA001], HealthCheckType: CnC, HealthCheckGracePeriod: 0,

Instances: [{InstanceId: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, AvailabilityZone: jp-

e1a, LifecycleState: Running, HealthStatus: HEALTHY, LaunchConfigurationName:

piratesLaunchConfiguration001, }, {InstanceId: ba57185e-7911-45ca-b033-63e5a886e535,

AvailabilityZone: jp-e1a, LifecycleState: Running, HealthStatus: HEALTHY,

LaunchConfigurationName: piratesLaunchConfiguration001, }], CreatedTime: Wed May 22

21:29:43 JST 2013, VPCZoneIdentifier: , TerminationPolicies: [NewestInstance], }], }

DescribePoliciesResult:

{ScalingPolicies: [

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleIn001, ScalingAdjustment: -1, AdjustmentType: ChangeInCapacity,

PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001,

Alarms: [{AlarmName: piratesAlarm001, AlarmARN: arn:cloudn:monitoring:jp-

e1:187:alarm:piratesAlarm001, }], },

{AutoScalingGroupName: piratesAutoScalingGroup001, PolicyName:

piratesPolicyScaleOut001, ScalingAdjustment: 1, AdjustmentType: ChangeInCapacity,

PolicyARN: arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001,

Alarms: [{AlarmName: piratesAlarm001, AlarmARN: arn:cloudn:monitoring:jp-

e1:187:alarm:piratesAlarm001, }], }], }

> Which Command ? (Describe / Create / Update / Delete / DeleteLaunchConfiguration /

PutPolicy / DeletePolicy / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPIAutoScaling:describeAutoScalingGroup ===[2013/05/22 22:08:26]

LBA の Describe で 2 つ目のインスタンスが負荷分散対象になってるのもわかるわ。

GUI 欲しい~!

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

LBA

Service =[LBA]

URL =[https://lba-api.jp-e1.cloudn-service.com/]

URL =[https://comp-apia.jp-e1.cloudn-service.com/awsapi/]

=== Start:CloudnAPILBA:publicMain ===[2013/05/22 22:08:30]

> Which Command ? (Describe / Create / Delete / RegisterInstance / CreateListener /

DefineHealth / HealthCheck / Exit) :

Describe

Command =[Describe]

DescribeLoadBalancersResult:

{LoadBalancerDescriptions: [

{LoadBalancerName: piratesLBA001, DNSName: piratesLBA001-1369139900.lba.jp-

姉:

妹:

23/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 24: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

e1.cloudn-service.com, CanonicalHostedZoneName: piratesLBA001-1369139900.lba.jp-

e1.cloudn-service.com, CanonicalHostedZoneNameID: BBB1874A1E3A46,

ListenerDescriptions: [{Listener: {Protocol: HTTP, LoadBalancerPort: 80,

InstanceProtocol: HTTP, InstancePort: 80, SSLCertificateId: , }, }], Policies: {},

BackendServerDescriptions: [{InstancePort: 80, }], AvailabilityZones: [jp-e1a],

VPCId: , Instances: [{InstanceId: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, },

{InstanceId: ba57185e-7911-45ca-b033-63e5a886e535, }], HealthCheck: {Target:

HTTP:80/index.html, Interval: 5, Timeout: 3, UnhealthyThreshold: 2,

HealthyThreshold: 10, }, SourceSecurityGroup: {OwnerAlias: cln100053054, GroupName:

default, }, SecurityGroups: [a7e842c0-84f4-4731-862a-04235397f4dc], CreatedTime: Tue

May 21 21:38:21 JST 2013, Scheme: internet-facing, }], }

> Which Command ? (Describe / Create / Delete / RegisterInstance / CreateListener /

DefineHealth / HealthCheck / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPILBA:describeLBA ===[2013/05/22 22:09:00]

負荷を止めてみなさい。

5 分後に Monitoring の ALARM 状態が OK 状態になって、スケールイン が発動して 2 つ目のイ

ンスタンスが削除(Destroyed)されるわ。

「Alarm updated from ALARM to OK」って履歴が出てきたわ!

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

Monitoring

Service =[Monitoring]

URL =[https://mon-api.jp-e1.cloudn-service.com/]

=== Start:CloudnAPIMonitoring:publicMain ===[2013/05/22 22:09:06]

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Describe

Command =[Describe]

DescribeAlarmsResult:

{MetricAlarms: [

{AlarmName: piratesAlarm001, AlarmArn: arn:cloudn:monitoring:jp-

e1:187:alarm:piratesAlarm001, AlarmDescription: ,

AlarmConfigurationUpdatedTimestamp: Wed May 22 21:55:14 JST 2013, ActionsEnabled:

true, StateValue: OK, StateReason: Alarm updated from ALARM to OK. Reason: Threshold

Crossed: 1 datapoint (89.0366) was not GreaterThanThreshold to the threshold

(3000)., StateReasonData: {"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:16:52Z","statistic":"Average","period":300,"recentDatapoints":"89.0366","threshold":3000},

StateUpdatedTimestamp: Thu May 23 07:16:52 JST 2013, MetricName: NetworkIn,

Namespace: Cloudn/Compute, Statistic: Average, Dimensions: [{Name: InstanceId,

Value: 7a55d26d-bcf4-40a4-8d38-2eb0659d0eea, }], Period: 300, Unit: ,

EvaluationPeriods: 1, Threshold: 3000.0, ComparisonOperator:

GreaterThanThreshold, }], }

姉:

妹:

24/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 25: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

DescribeAlarmHistoryResult:

{AlarmHistoryItems: [

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: StateUpdate, HistorySummary: Alarm updated from ALARM to OK,

HistoryData: {"version":"1.0","oldState":{"stateValue":"ALARM","stateReason":"Alarm

updated from OK to ALARM. Reason: Threshold Crossed: 1 datapoint (3261.8523) was not

GreaterThanThreshold to the threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:07:05Z","statistic":"Average","period":300,"recentDatapoints":"3261.8523","threshold":3000}},"newState":

{"stateValue":"OK","stateReason":"Alarm updated from ALARM to OK. Reason: Threshold

Crossed: 1 datapoint (89.0366) was not GreaterThanThreshold to the threshold

(3000).","stateReasonData":{"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:16:52Z","statistic":"Average","period":300,"recentDatapoints":"89.0366","threshold":3000}}},

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: StateUpdate, HistorySummary: Alarm updated from OK to ALARM,

HistoryData: {"version":"1.0","oldState":{"stateValue":"OK","stateReason":"Alarm

updated to OK. Reason: Threshold Crossed: 1 datapoint (99.7662) was not

GreaterThanThreshold to the threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T21:56:47Z","statistic":"Average","period":300,"recentDatapoints":"99.7662","threshold":3000}},"newState":

{"stateValue":"ALARM","stateReason":"Alarm updated from OK to ALARM. Reason:

Threshold Crossed: 1 datapoint (3261.8523) was not GreaterThanThreshold to the

threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T22:07:05Z","statistic":"Average","period":300,"recentDatapoints":"3261.8523","threshold":3000}}},

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: StateUpdate, HistorySummary: Alarm updated to OK, HistoryData:

{"version":"1.0","newState":{"stateValue":"OK","stateReason":"Alarm updated to OK.

Reason: Threshold Crossed: 1 datapoint (99.7662) was not GreaterThanThreshold to the

threshold (3000).","stateReasonData":

{"version":"1.0","startDate":"","queryDate":"2013-05-

22T21:56:47Z","statistic":"Average","period":300,"recentDatapoints":"99.7662","threshold":3000}}},

{AlarmName: piratesAlarm001, Timestamp: Wed May 22 21:55:14 JST 2013,

HistoryItemType: ConfigurationUpdate, HistorySummary: Alarm "piratesAlarm001"

created, HistoryData:

{"version":"1.0","type":"Create","threshold":3000,"namespace":"Cloudn/Compute","unit":null,"stateValue":"ALARM","dimensions":

{"name":"InstanceId","value":"7a55d26d-bcf4-40a4-8d38-

2eb0659d0eea"},"okactions":"[arn:cloudn:autoscale:jp-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleIn001]","alarmActions":"[arn:cloudn:autoscale:jp

-

e1:cln100053054:scalingPolicy:autoScalingGroupName/piratesAutoScalingGroup001:policyName/piratesPolicyScaleOut001]","evaluationPeriods":1,"comparisonOperator":"GreaterThanThreshold","metricName":"NetworkIn","period":300,"alarmName":"piratesAlarm001","statistic":"Average","alarmArn":"arn:cloudn:monitoring:jp

-e1:187:alarm:piratesAlarm001","alarmConfigurationUpdatedTimestamp":"2013-05-

22T12:55:14Z","stateUpdatedTimestamp":"2013-05-

22T12:55:14Z","insufficientDataActions":"[]","alarmDescription":null,"actionEnabled":"true"}, }], }

> Which Command ? (Describe / Create / Delete / GetMetricStatistics / Exit) :

Exit

Command =[Exit]

=== End:CloudnAPIMonitoring:describeAlarm ===[2013/05/22 22:19:12]

25/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...

Page 26: 1/26 ページ Cloud Design PatternCloud Design Pattern( ((( …€¦ · 2013/05/202013/05/20 Cloud Design PatternCloud Design Pattern( (((監視監監視視監視&

> Which Service ? (Compute / LBA / ObjectStorage / AutoScaling / DNS / Monitoring /

Exit) :

Exit

Service =[Exit]

=== End ===[2013/05/22 22:27:51]

C:\CloudnAPI>

AutoScaling や LBA の Describe で 2 つ目のインスタンスがなくなっているのがわかるわ。後は

テキトーに見て。

これが世に言う スケールイン なのね。

嵐が去ってまた独りになったわ。

ついでにゴミの消し方も教えて。

ゴミって何よ!せっかく作ったのに!

放置すると課金されちゃうわ!

浮いたお金でチョコもう 1 枚あげるから。

Auto Scaling Group を消す時、Delete の前に Update で Desired Capacity、Minimum Size、

Maximum size をすべて 0 にするの。

そうすると Auto Scaling Group 内のインスタンスがすべて自動的に削除されるわ。

Auto Scaling Group の定義が 0 ~ 0 なので、インスタンスが 1 つも存在するわけにはいかない

から、居たたまれなくなって退場するのね。

大西洋から太平洋へ。

あとは各サービス Delete でカンタンに消せるわよ。

クラウドって儚いわね。

姉:

妹:

姉:

妹:

姉:

妹:

姉:

妹:

26/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケール...

2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...