Amazon EC2 用の CloudFormation テンプレートの例

以下の CloudFormation テンプレートを使用すると、Amazon EC2 で可用性の高い ArcGIS Server サイトを起動できます。「AWS CloudFormation と ArcGIS Server での高可用性」をご参照ください。

このコードをコピーし、テキスト ファイルに貼り付け、必要に応じて変更します。ArcGIS Server スタックの作成時にテキスト ファイルを参照します。

このトピックでは以下のようになっています。

テンプレート コード

{
	"AWSTemplateFormatVersion": "2010-09-09",

	"Description": "CloudFormation template to launch a highly available ArcGIS Server stack in Amazon EC2",

	"Parameters" : {
		"AMI" : {
			"Description" : "Your ArcGIS Server AMI ID.",
			"Type" : "String"
		},
		"InstanceType" : {
			"Description" : "Type of EC2 instance to launch.",
			"Type" : "String",
			"Default" : "m1.medium",
			"AllowedValues" : [ "m1.medium","m1.large","m1.xlarge","m2.xlarge","m2.2xlarge","m2.4xlarge","m3.xlarge","m3.2xlarge","c1.xlarge","cc2.8xlarge","cg1.4xlarge", "cr1.8xlarge","hi1.4xlarge","hs1.8xlarge"],
			"ConstraintDescription" : "must be a valid EC2 instance type."			
		},
		"KeyName" : {
			"Description" : "The EC2 Key Pair to allow Remote Desktop access or SSH to the instances.",
			"Type" : "String",
			"Default" : "Your_KeyPair_Name"
		},
		"MinSize" : {
			"Description" : "Minimum number of EC2 instances.",
			"Type" : "Number",
			"Default" : "2"
		},
		"MaxSize" : {
			"Description" : "Maximum number of EC2 instances.",
			"Type" : "Number",
			"Default" : "4"
		}
	},

	"Resources": {
		
		"ELB" : {
			"Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
			"Properties" : {
				"AvailabilityZones" : { "Fn::GetAZs" : "" },
				"Listeners" : [ {
					"LoadBalancerPort" : "80",
					"InstancePort" : "6080" ,
					"Protocol" : "HTTP"
				}],
				"HealthCheck" : {
					"Target" : "HTTP:6080/arcgis/rest/info/healthcheck",
					"HealthyThreshold" : "3",
					"UnhealthyThreshold" : "5",
					"Interval" : "30",
					"Timeout" : "5"
				}
			}
		},
		
		"InstanceSecurityGroup": {
			"Type": "AWS::EC2::SecurityGroup",
			"Properties": {
				"GroupDescription": "Security group for highly available ArcGIS Server architecture",
				"SecurityGroupIngress": [{
				                        	 "IpProtocol": "tcp",
				                        	 "FromPort": "6080" ,
				                        	 "ToPort": "6080" ,
				                        	 "SourceSecurityGroupName": { "Fn::GetAtt" : [ "ELB" , "SourceSecurityGroup.GroupName" ]},
											 "SourceSecurityGroupOwnerId": { "Fn::GetAtt" : [ "ELB" , "SourceSecurityGroup.OwnerAlias" ]}
				                         }]
			}
		},
		
		"LaunchConfig": {
			"Type": "AWS::AutoScaling::LaunchConfiguration",
			"Properties": {
				"ImageId": {"Ref" : "AMI"},
				"InstanceType": {"Ref": "InstanceType"},
				"KeyName": {"Ref": "KeyName"},
				"SecurityGroups": [{"Ref": "InstanceSecurityGroup"}],
				"InstanceMonitoring": true
			}
		},
		
		"AutoScalingGroup": {
			"UpdatePolicy" : {
				"AutoScalingRollingUpdate" : {
					"MinInstancesInService" : {"Ref" : "MinSize"},
					"MaxBatchSize" : "1",
					"PauseTime" : "PT15M"
				}
			},
			"Type": "AWS::AutoScaling::AutoScalingGroup",
			"Properties": {
				"AvailabilityZones": { "Fn::GetAZs" : ""},
				"Cooldown": "300",
				"MaxSize": {"Ref" : "MaxSize"},
				"MinSize": {"Ref" : "MinSize"},
				"LaunchConfigurationName": {"Ref": "LaunchConfig"},
                                "HealthCheckType" : "EC2",
                                "HealthCheckGracePeriod" : "3600",
				"LoadBalancerNames": [{"Ref": "ELB"}],
				"Tags": [{"Key": "Name", "Value": {"Ref": "AWS::StackName"}, "PropagateAtLaunch" : true}]
			}
		},

		"ScaleUpPolicy" : {
			"Type" : "AWS::AutoScaling::ScalingPolicy",
			"Properties" : {
				"AdjustmentType" : "ChangeInCapacity",
				"AutoScalingGroupName" : { "Ref" : "AutoScalingGroup" },
				"Cooldown" : "60",
				"ScalingAdjustment" : "1"
			}
		},

		"ScaleDownPolicy" : {
			"Type" : "AWS::AutoScaling::ScalingPolicy",
			"Properties" : {
				"AdjustmentType" : "ChangeInCapacity",
				"AutoScalingGroupName" : { "Ref" : "AutoScalingGroup" },
				"Cooldown" : "60",
				"ScalingAdjustment" : "-1"
			}
		},

		"CPUAlarmHigh": {
			"Type": "AWS::CloudWatch::Alarm",
			"Properties": {
				"AlarmDescription": "Scale-up if CPU > 80% for 10 minutes",
				"MetricName": "CPUUtilization",
				"Namespace": "AWS/EC2",
				"Statistic": "Average",
				"Period": "300",
				"EvaluationPeriods": "2",
				"Threshold": "80",
				"AlarmActions": [ { "Ref": "ScaleUpPolicy" } ],
				"Dimensions": [
				               {
				            	   "Name": "AutoScalingGroupName",
				            	   "Value": { "Ref": "AutoScalingGroup" }
				               }
				               ],
				               "ComparisonOperator": "GreaterThanThreshold"
			}
		},

		"CPUAlarmLow": {
			"Type": "AWS::CloudWatch::Alarm",
			"Properties": {
				"AlarmDescription": "Scale-down if CPU < 20% for 10 minutes",
				"MetricName": "CPUUtilization",
				"Namespace": "AWS/EC2",
				"Statistic": "Average",
				"Period": "300",
				"EvaluationPeriods": "2",
				"Threshold": "20",
				"AlarmActions": [ { "Ref": "ScaleDownPolicy" } ],
				"Dimensions": [
				               {
				            	   "Name": "AutoScalingGroupName",
				            	   "Value": { "Ref": "AutoScalingGroup" }
				               }
				               ],
				               "ComparisonOperator": "LessThanThreshold"
			}
		}
	},

	"Outputs": {
		"RestURL": {
			"Value": {
				"Fn::Join": ["", ["http://", {"Fn::GetAtt": ["ELB", "DNSName" ]}, "/arcgis/rest"]]
			},
			"Description" : "ArcGIS REST Services Directory URL."
		}
	}   

}

このテンプレートのパラメータ

[AMI] パラメータは、このスタックでインスタンスを起動する際に使用される AMI ID を設定します。ArcGIS Server を実行するカスタマイズされた独自の AMI でこれをポイントします。

[InstanceType] パラメータは、このスタックでインスタンスを起動する際に使用される EC2 インスタンス タイプを設定します。これは、AWS のコストと Esri のライセンス コストの両方に影響を与える可能性があるため、慎重に設定します。コストは、自動スケーリング グループを使用して起動するインスタンスの数をかけたものになります。

[KeyName] は、キー ペアの名前で、これを使用すると、インスタンスの管理者パスワードを取得できます。テンプレートを使用する前に、キー ペア ファイルを作成する必要があります。このオプションは、リモート デスクトップまたは SSH 経由でインスタンスに接続する場合に必要です。

[MinSize] は、スタックに常時属しているインスタンスの最小数です。この数のインスタンスが、スタックの作成時に即座に起動します。この値を 2 以上にしておくと、インスタンスがダウンした場合に ArcGIS Server が使用できなくなることを防ぐことができます。インスタンスが 1 つだけ検出された場合、CloudFormation は 即座に2 つ目のインスタンスを作成します。

[MaxSize] は、自動スケーリング トリガやインスタンスの CPU 使用量にかかわらず、スタックに常時属すことが許可されるインスタンスの最大数です。

このテンプレートのリソース

[ELB] リソースは、スタックに配置される ELB(Elastic Load Balancer)を指定します。ELB は、ArcGIS Server への すべての Web リクエストのエントリ ポイントです。使用可能な ArcGIS Server インスタンスへのリクエストを分散します。ELB のプロパティを使用して、ロード バランサ ポート、インスタンス ポート(SSL でセキュリティ保護されたサイトの場合、デフォルトの 6080 から 6443 に変更される可能性がある)、状態チェック設定を調整できます。

[InstanceSecurityGroup] リソースは、このスタックに起動されたインスタンスに適用されるアクセス ルールを決定します。ingress ルールを設定すると、インスタンスに対して開くポートを決定できます。このテンプレートでは、Elastic Load Balancer グループが、ポート 6080 上のインスタンスにアクセスできます。

[LaunchConfig] リソースは、起動されるインスタンスのタイプと適用される AMI を決定するために、テンプレート ユーザが設定するパラメータの一部を取り込みます。

[AutoScalingGroup] リソースは、CPU 使用量などのトリガに応じて、どのようなときにインスタンスをスタックに追加またはスタックから削除するかについてのルールを設定します。このリソースには、AMI を更新したときに一度にいくつのインスタンスを更新するかを決定する更新ポリシーも含まれます。スタック全体が更新によってオフラインになることのないように、更新は順に適用されます。[MaxBatchSize] は、一度に更新されるインスタンスの数を表しますが、スタックの [MinSize] プロパティよりも少なく設定することを推奨します。そうすることで、更新中にインスタンスが常時利用可能な状態を維持できます。

[ScaleUpPolicy] リソースは、負荷が高い場合に、インスタンスをスタックに追加する方法を定義します。これは、[CPUAlarmHigh] リソースが後でテンプレートで参照します。

[ScaleDownPolicy] リソースは、負荷が低い場合に、インスタンスをスタックから削除する方法を定義します。これは、[CPUAlarmLow] リソースが後でテンプレートで参照します。

[CPUAlarmHigh] リソースは、インスタンスがスタックに追加されるようにするアラームの特定のパラメータを設定します。このテンプレートでは、CPU の使用量が 10 分間 80 パーセントを超えたときにインスタンスが追加されます。

[CPUAlarmLow] リソースは、インスタンスがスタックから削除されるようにするアラームの特定のパラメータを設定します。このテンプレートでは、CPU の使用量が 10 分間 20 パーセントを下回ったときにインスタンスが削除されます。

CloudFormation テンプレートで指定するすべての JSON プロパティの詳細な例については、AWS ドキュメントの「テンプレートの操作」をご参照ください。

5/16/2014