Plantilla de CloudFormation de ejemplo para Amazon EC2

La plantilla CloudFormation siguiente se puede usar para iniciar un sitio de ArcGIS Server de alta disponibilidad en Amazon EC2. Consulte AWS Cloud Formation y alta disponibilidad con ArcGIS Server.

Copie este código, péguelo en un archivo de texto y adáptelo a sus necesidades. A continuación, vaya al archivo de texto cuando vaya a crear la pila de ArcGIS Server.

En este tema:

Código de la plantilla

{
	"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."
		}
	}   

}

Parámetros de la plantilla

El parámetro AMI establece el ID de AMI que se utilizará al iniciar instancias en la pila. Esto apunta a su propia AMI personalizada que ejecuta ArcGIS Server.

El parámetro InstanceType establece el tipo de instancia EC2 que se utilizará al iniciar instancias en la pila. Establezca este parámetro con cuidado ya que podría afectar a los costes de AWS y los costes de licencia de Esri. Los costes se multiplicarán por el número de instancias que se inicien utilizando los grupos con escalado automático.

KeyName es el nombre de un par de claves que le permitirá recuperar la contraseña de administrador para sus instancias. Deberá crear el archivo del par de claves antes de usar la plantilla. Esta opción es necesaria para conectar con las instancias mediante Escritorio Remoto o SSH.

MinSize es el número mínimo de instancias que participan en la pila en cualquier instante de tiempo. Este número de instancias se iniciará inmediatamente al crear la pila. Si el valor se mantiene en 2 o más, se protegerá frente a la posibilidad de que ArcGIS Server no esté disponible si una instancia cae. Si solo se encuentra una instancia, CloudFormation creará inmediatamente una segunda.

MaxSize es el número máximo de instancias que puede haber en la pila en cualquier instante de tiempo, independientemente de los activadores de escala automática o del uso de CPU por parte de las instancias.

Recursos de la plantilla

El recurso ELB describe el Elastic Load Balancer (ELB) en la pila. El ELB es el punto de entrada de todas las solicitudes web a ArcGIS Server. Distribuye las solicitudes hacia las instancias disponibles de ArcGIS Server. Puede usar las propiedades del ELB para ajustar al puerto del equilibrador de carga, el puerto de la instancia (que podría cambiar del valor predeterminado 6080 a 6443 en el caso de un sitio protegido con SSL) y los ajustes de comprobación del estado.

El recurso InstanceSecurityGroup determina las reglas de acceso que se aplicarán a todas las instancias iniciadas en la pila. Tenga en cuenta que pueden establecerse reglas que determinen qué puertos se abren a qué instancias. En esta plantilla, el grupo Elastic Load Balancer tiene permiso para acceder a las instancias en el puerto 6080.

El recurso LaunchConfig contiene algunos de los parámetros establecidos por el usuario de la plantilla con el fin de determinar el tipo de instancia que se debe iniciar y la AMI que se debe aplicar.

El recurso AutoScalingGroup establece reglas relacionadas con cuándo se agregan y eliminan instancias de la pila como respuesta a activadores como el uso de la CPU. Este recurso también contiene una política de actualización que determina cuántas instancias se deben actualizar simultáneamente cuando se actualiza la AMI. Las actualizaciones se aplican de forma rotativa para que la pila completa no quede sin conexión debido a la actualización. MaxBatchSize representa el número de instancias actualizadas simultáneamente e idealmente debería ser menor que la propiedad MinSize de la pila, lo cual garantiza que siempre quede una instancia disponible durante la actualización.

El recurso ScaleUpPolicy define de qué modo se agrega una instancia a la pila en caso de mucha carga. Se hace referencia a ello más adelante en la plantilla, en el recurso CPUAlarmHigh.

El recurso ScaleDownPolicy define cómo se debe eliminar una instancia de la pila en caso de que la carga sea muy reducida. Se hace referencia a ello más adelante en la plantilla, en el recurso CPUAlarmLow.

El recurso CPUAlarmHigh establece parámetros específicos de alarma que provocarán que una instancia se agregue a la pila. En esta plantilla, se agregará una instancia cuando el uso de la CPU supere el 80 por ciento durante 10 minutos.

El recurso CPUAlarmLow establece parámetros específicos de una alarma que provocará que se elimine una instancia de la pila. En esta plantilla, por ejemplo, se eliminará una instancia cuando el uso de la CPU sea menor del 20 por ciento durante 10 minutos.

En la sección Trabajar con plantillas de la documentación de AWS encontrará ejemplos detallados de todas las propiedades JSON que se pueden usar en una plantilla CloudFormation.

6/16/2014