Amazon EC2 的 CloudFormation 示例模板

下面的 CloudFormation 模板可用于启动 Amazon EC2 中的高可用性 ArcGIS Server 站点。请参阅 AWS Cloud Formation 和 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 不可用。如果仅找到一个实例,CloudFormation 将立即创建第二个实例。

MaxSize 是指在不考虑自动伸缩触发器或实例 CPU 使用率的情况下,任意时间允许参与堆栈的最大实例数。

此模板中的资源

ELB 资源描述堆栈中的弹性负载均衡器 (ELB)。ELB 是向 ArcGIS Server 发出的所有 web 请求的入口点。它将请求分配至可用的 ArcGIS Server 实例。可以使用 ELB 的属性来调整负载均衡器端口、实例端口(对于受 SSL 保护的站点,可能不是默认的 6080,而变为 6443)以及健康检查设置。

InstanceSecurityGroup 资源确定将应用到此堆栈中启动的所有实例的访问规则。请注意,您可以设置入口规则,用于确定对实例开放的端口。在此模板中,允许弹性负载均衡器组访问端口 6080 上的实例。

LaunchConfig 资源引入模板用户设置的一些参数,用于确定要启动的实例类型以及要应用的 AMI。

AutoScalingGroup 资源用于设置为响应触发器(例如 CPU 使用率)而在堆栈中添加和移除实例的时间方面的规则。此资源还包含更新策略,此策略用于确定更新 AMI 时,立即更新的实例数。这些更新按滚动形式加以应用,这样,整个堆栈便不会因更新而离线。MaxBatchSize 表示立即更新的实例数,最好设置为小于堆栈的 MinSize 属性,这样可确保更新期间实例始终可用。

ScaleUpPolicy 资源定义在负荷较高的情况下如何向堆栈添加实例。稍后,CPUAlarmHigh 资源会在模板中引用此资源。

ScaleDownPolicy 资源定义在负荷较低的情况下如何从堆栈中移除实例。稍后,CPUAlarmLow 资源会在模板中引用此资源。

CPUAlarmHigh 资源用于为将导致实例添加到堆栈的警报设置特定参数。在此模板中,当 CPU 使用率连续 10 分钟超过 80% 时,将添加实例。

CPUAlarmLow 资源用于为将导致实例从堆栈中移除的警报设置特定参数。在此模板中,当 CPU 使用率连续 10 分钟低于 20% 时,将移除实例。

有关可在 CloudFormation 模板中加入的所有 JSON 属性的详细示例,请参阅 AWS 文档中的使用模板部分。

5/15/2014