Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
やって見せてよ。
何をよ。
デザインパターンを。
説明だけって言ったわよね。
言ってないわ。口だけじゃ全然わかんなぃー。
ラムレーズンが期間限定ってことわかってるわよね?
そもそもあんた Cloud(n) 使えるの?
私だってカードぐらい持ってるわよ。
そ、じゃあんたの鍵束出しなさい。その環境で作るわ。
使うのは Java API よ。
サンプルコード使用例(インストール& DNS 編)を御参照下さい。
海賊は何人必要?
ゼロからでいいわ。
まずは Compute でインスタンス(仮想サーバー)を 1 つ作って。
スペック、OS は何でもいいわ。
この ボツワナ産 ダイヤ をインスタンスだと思ってね。
妹:
姉:
妹:
姉:
妹:
姉:
妹:
姉:
妹:
姉:
2/26 ページサンプルコード使用例: Cloud Design Pattern(監視&スケールアウト&スケールイ...
2013/06/24file://C:\20130520_CDP_監視_オートスケール\サンプルコード使用例(監視&スケ...
楽勝よ。
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
{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_監視_オートスケール\サンプルコード使用例(監視&スケ...
インスタンスを停止して。
はいはい。
> 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
アイアイサー!
名前は当然 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
=== 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
> 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
> 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
{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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
> 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
オラオラオラオラ!
負荷端末 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_監視_オートスケール\サンプルコード使用例(監視&スケ...
{"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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
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_監視_オートスケール\サンプルコード使用例(監視&スケ...
> 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_監視_オートスケール\サンプルコード使用例(監視&スケ...