Пример шаблона CloudFormation для Amazon EC2
Следующий шаблон CloudFormation может быть использован для запуска сайта ArcGIS Server с высокой доступностью на Amazon EC2. См. 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 – это максимальное количество экземпляров, которые могут участвовать в вашем стэке в любой момент времени, вне зависимости от того, используйте ли вы триггеры автомасштабирования или загрузку процессора экземпляра.
Ресурсы данного шаблона
Ресурс ELB описывает Elastic Load Balancer (ELB), помещенный в данный стэк. ELB является точкой входа для всех веб-запросов к ArcGIS Server. Он распределяет запросы по доступным экземплярам ArcGIS Server. Вы можете использовать свойства для ELB, чтобы настроить порт балансировщика нагрузки, порт экземпляра (который может быть изменен со значения по умолчанию 6080 на 6443 в случае сайта, защищенного с помощью SSL) и настройки проверки состояния.
Ресурс InstanceSecurityGroup определяет правила доступа, которые будут применяться к любому экземпляру, запущенному в данном стэке. Обратите внимание, что вы можете задать правила входа, определяющие, какие порты будут открыты для экземпляров. В этом шаблоне группе Elastic Load Balancer разрешено иметь доступ к экземплярам с портом 6080.
Ресурс LaunchConfig использует некоторые из параметров, заданных пользователем шаблона, чтобы определить тип запускаемого экземпляра и применяемых AMI.
Ресурс AutoScalingGroup задает правила, управляющие добавлением и удалением экземпляров из стэка в качестве ответа на триггеры, такие как использование процессора. Этот ресурс также содержит политику обновления, которая определяет, сколько экземпляров будет добавлено единовременно при выполнении обновления AMI. Обновления применяются на базисе отмены, так что ваш стэк не будет отключен целиком во время обновления. Ваше значение MaxBatchSize отображает количество экземпляров, обновляемых за один раз, и в идеале должно быть меньше, чем значение MinSize для вашего стэка, тем самым обеспечивая, что экземпляр останется доступным во время обновления.
Ресурс ScaleUpPolicy определяет, как экземпляр будет добавлен в стэк в случае большой нагрузки. Далее в шаблоне на это ссылается ресурс CPUAlarmHigh.
Ресурс ScaleDownPolicy определяет, как экземпляр будет удален из стэка в случае недостаточной нагрузки. Далее в шаблоне на это ссылается ресурс CPUAlarmLow.
Ресурс CPUAlarmHigh задает определенные параметры для предупреждения (alarm), которое вызовет добавление экземпляра в стэк. В данном шаблоне экземпляр добавляется, когда использование процессора превышает 80 процентов на протяжении 10 минут.
Ресурс CPUAlarmLow задает определенные параметры для предупреждения (alarm), которое вызовет удаление экземпляра из стэка. В данном шаблоне экземпляр удаляется, когда использование процессора держится ниже 20 процентов на протяжении 10 минут.
Подробные примеры всех свойств JSON, которые вы можете добавить в шаблон CloudFormation, доступны в разделе Работа с шаблонами в документации AWS.