Beispiel für eine CloudFormation-Vorlage für Amazon VPC
Mit der folgenden CloudFormation-Vorlage kann ein hoch verfügbarer ArcGIS-Server-Stack in Amazon Virtual Private Cloud (VPC) gestartet werden. Weitere Informationen finden Sie unter AWS Cloud Formation und hohe Verfügbarkeit mit ArcGIS for Server.
Kopieren Sie diesen Code, fügen Sie in eine Textdatei ein, und passen Sie ihn Ihren Anforderungen entsprechend an. Navigieren Sie anschließend zu der Textdatei, wenn Sie einen ArcGIS-Server-Stack mit CloudFormation erstellen.
Dieses Thema umfasst Folgendes:
Vorlagen-Code
{ "AWSTemplateFormatVersion": "2010-09-09",
"Description": "CloudFormation template to launch a highly available ArcGIS Server stack in Amazon VPC",
"Parameters" : {
"AMI" : {
"Description" : "Your ArcGIS Server AMI ID.",
"Type" : "String"
},
"VpcId" : {
"Type" : "String",
"Description" : "VpcId of your existing Virtual Private Cloud (VPC).",
"Default" : "vpc-4adfc123"
},
"Subnets" : {
"Type" : "CommaDelimitedList",
"Default" : "subnet-8ec5b8e6,subnet-1edcc277",
"Description" : "The list of SubnetIds where the stack will be launched"
},
"AZs" : {
"Type" : "CommaDelimitedList",
"Default" : "us-west-2b,us-west-2c",
"Description" : "The list of AvailabilityZones for your Virtual Private Cloud (VPC). It needs to be consistent with the AZ of your subnets."
},
"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": {
"LoadBalancerSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Enable HTTP access on port 80 and 443.",
"VpcId" : { "Ref" : "VpcId" },
"SecurityGroupIngress": [{
"IpProtocol": "tcp",
"FromPort": "80" ,
"ToPort": "80" ,
"CidrIp" : "0.0.0.0/0"
},{
"IpProtocol": "tcp",
"FromPort": "443" ,
"ToPort": "443" ,
"CidrIp" : "0.0.0.0/0"
}],
"SecurityGroupEgress" : [{
"IpProtocol" : "tcp",
"FromPort" : "6080",
"ToPort" : "6080",
"CidrIp" : "0.0.0.0/0"
},{
"IpProtocol": "tcp",
"FromPort": "6443" ,
"ToPort": "6443" ,
"CidrIp" : "0.0.0.0/0"
}]
}
},
"ELB" : {
"Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties" : {
"Subnets" : { "Ref" : "Subnets" },
"SecurityGroups" : [ { "Ref" : "LoadBalancerSecurityGroup" } ],
"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": "Enable HTTP access on 6080 and 6443 from ELB.",
"VpcId" : { "Ref" : "VpcId" },
"SecurityGroupIngress": [{
"IpProtocol": "tcp",
"FromPort": "6080" ,
"ToPort": "6080" ,
"SourceSecurityGroupId": { "Ref" : "LoadBalancerSecurityGroup" }
},{
"IpProtocol": "tcp",
"FromPort": "6443" ,
"ToPort": "6443" ,
"SourceSecurityGroupId": { "Ref" : "LoadBalancerSecurityGroup" }
}]
}
},
"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" : "3",
"PauseTime" : "PT15M"
}
},
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"AvailabilityZones" : { "Ref" : "AZs" },
"VPCZoneIdentifier" : { "Ref" : "Subnets" },
"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 Server REST Services Directory URL"
}
}
}
Parameter in dieser Vorlage
Der Parameter AMI legt die AMI-ID fest, die beim Starten von Instanzen in diesem Stack verwendet wird. Darauf wird über das eigene benutzerdefinierte AMI verwiesen, auf dem ArcGIS-Server ausgeführt wird.
Der Parameter VPCId ist die physische ID der Virtual Private Cloud zum Starten des Stacks.
Der Parameter Subnets legt eine durch Kommas getrennte Liste der VPC-Subnets fest, in denen Sie den Stack starten möchten. Um eine hohe Verfügbarkeit zu erzielen, können Sie Subnets in mehreren Zonen angeben. Die Instanzen in Ihrem Stack werden auf die Zonen verteilt.
Der Parameter AZs ist eine durch Kommas getrennte Liste mit den Namen der verfügbaren Zonen, in denen sich die von Ihnen aufgelisteten Subnets befinden.
Der Parameter InstanceType legt den EC2-Instanztyp fest, der beim Starten von Instanzen in dem Stack verwendet wird. Legen Sie dies aufgrund etwaiger Auswirkungen auf AWS-Kosten und Esri Lizenzierungskosten mit Vorsicht fest. Die Kosten werden mit der Anzahl der Instanzen multipliziert, die Sie mithilfe Ihrer AutoScaling-Gruppen starten.
Der KeyName ist der Name eines Schlüsselpaars, mit dem Sie das Administratorkennwort für Ihre Instanzen abrufen können. Sie müssen die Schlüsselpaardatei erstellen, bevor Sie die Vorlage verwenden. Diese Option ist erforderlich, wenn Sie die Instanzen per Remote Desktop oder SSH verbinden.
MinSize ist die minimale Anzahl von Instanzen, die immer zu Ihrem Stack gehören. Diese Anzahl von Instanzen wird sofort gestartet, wenn Sie den Stack erstellen. Wenn Sie diesen Wert auf 2 oder höher festlegen, wird verhindert, dass ArcGIS-Server nicht verfügbar ist, wenn eine Instanz ausfällt. CloudFormation erstellt umgehend eine zweite Instanz, wenn nur eine gefunden wird.
MaxSize ist die maximale Anzahl von Instanzen, die immer zu Ihrem Stack gehören, und zwar unabhängig von den Triggern zur automatischen Skalierung oder der CPU-Auslastung der Instanzen.
Ressourcen in dieser Vorlage
Die Ressource LoadBalancerSecurityGroup bestimmt die Zugriffsregeln für den Elastic Load Balancer, einschließlich der Ports für den Empfang und die Weiterleitung des Datenverkehrs.
Die ELB-Ressource beschreibt den Elastic Load Balancer (ELB) im Stack. Beim ELB gehen alle Webanforderungen an ArcGIS-Server ein. Er verteilt Anforderungen an die verfügbaren ArcGIS-Server-Instanzen. Sie können Eigenschaften im ELB verwenden, um den Load Balancer-Port, den Instanz-Port (der im Fall einer SSL-gesicherten Site nicht dem Standard-Port 6080, sondern dem Port 6443 entspricht) und die Systemdiagnose-Einstellungen anzupassen.
Anhand der InstanceSecurityGroup-Ressource werden die Zugriffsregeln festgelegt, die auf alle in diesem Stack gestarteten Instanzen angewendet werden. Beachten Sie, dass Sie Ingress-Regeln festlegen können, um festzulegen, welche Ports für die Instanzen geöffnet werden. In dieser Vorlage hat die Elastic Load Balancer-Gruppe Zugriff auf die Instanzen über Port 6080.
Die Ressource LaunchConfig stellt einige der Parameter zur Verfügung, die vom Benutzer der Vorlage festgelegt wurden, um den zu startenden Instanztyp und das anzuwendende AMI zu bestimmen.
Im Zusammenhang mit Triggern wie der CPU-Auslastung richtet die Ressource AutoScalingGroup Regeln dazu ein, wann Instanzen dem Stack hinzugefügt und daraus entfernt werden sollen. Diese Ressource enthält auch eine Aktualisierungsrichtlinie, um festzulegen, wie viele Instanzen gleichzeitig aktualisiert werden sollen, wenn Sie das AMI aktualisieren. Die Aktualisierungen werden kontinuierlich angewendet, sodass der gesamte Stack durch die Aktualisierung nicht offline geht. MaxBatchSize stellt die Anzahl der gleichzeitig aktualisierten Instanzen dar und sollte idealerweise auf einen kleineren Wert festgelegt werden als die Eigenschaft "MinSize" des Stacks, wodurch sichergestellt wird, dass eine Instanz während einer Aktualisierung stets verfügbar bleibt.
Die Ressource ScaleUpPolicy definiert, wie dem Stack eine Instanz bei starker Belastung hinzugefügt wird. Darauf wird später in der Vorlage durch die Ressource "CPUAlarmHigh" verwiesen.
Die Ressource ScaleDownPolicy definiert, wie eine Instanz bei geringer Belastung aus dem Stack entfernt wird. Darauf wird später in der Vorlage durch die Ressource "CPUAlarmLow" verwiesen.
Die Ressource CPUAlarmHigh legt bestimmte Parameter für einen Alarm fest, der dazu führt, dass dem Stack eine Instanz hinzugefügt wird. In dieser Vorlage wird eine Instanz hinzugefügt, wenn die CPU-Auslastung 10 Minuten lang den Wert von 80 Prozent übersteigt.
Die Ressource CPUAlarmLow legt bestimmte Parameter für einen Alarm fest, der dazu führt, dass eine Instanz aus dem Stack entfernt wird. In dieser Vorlage wird eine Instanz entfernt, wenn die CPU-Auslastung 10 Minuten lang den Wert von 20 Prozent unterschreitet.
Detaillierte Beispiele aller JSON-Eigenschaften, die Sie in einer CloudFormation-Vorlage bereitstellen können, finden Sie im Abschnitt Arbeiten mit Vorlagen in der AWS-Dokumentation.