Exemple de modèle CloudFormation pour Amazon EC2
Le modèle CloudFormation suivant permet de lancer un site ArcGIS Server hautement disponible dans Amazon EC2. Consultez la rubrique AWS CloudFormation et haute disponibilité avec ArcGIS Server.
Copiez ce code, collez-le dans un fichier de texte et adaptez-le à vos besoins. Naviguez ensuite vers le fichier de texte lorsque vous créez une pile ArcGIS Server.
Dans cette rubrique :
Code du modèle
{
"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."
}
}
}
Paramètres contenus dans ce modèle
Le paramètre AMI définit l'ID de l'image AMI qui sera utilisé lors du lancement d'instances dans cette pile. Vous le pointez sur votre propre image AMI personnalisée exécutant ArcGIS Server.
Le paramètre InstanceType définit le type d'instance EC2 qui sera utilisé lors du lancement d'instances dans la pile. Soyez vigilant lors de la définition de ce paramètre, car il peut affecter les coûts AWS et les coûts de licence Esri. En effet, les coûts seront multipliés par le nombre d'instances que vous lancez grâce aux groupes de mise à l'échelle automatique.
KeyName est le nom d'une paire de clés qui permet de récupérer le mot de passe d'administrateur pour vos instances. Vous devrez créer le fichier de paires de clés avant d'utiliser le modèle. Cette option est nécessaire si vous prévoyez de vous connecter à vos instances via Bureau à distance ou SSH.
MinSize est le nombre minimal d'instances faisant partie de votre pile à tout moment. Ces instances sont lancées simultanément lorsque vous créez votre pile. Si vous conservez cette valeur à 2 ou plus, vous vous prémunissez contre l'indisponibilité d'ArcGIS Server si une instance s'arrête. CloudFormation créée immédiatement une seconde instance si une seule est détectée.
MaxSize est le nombre maximal d'instances autorisées à faire partie de la pile à tout moment, indépendamment de vos déclencheurs de mise à l'échelle automatique ou de l'utilisation du processeur de l'instance.
Ressources contenues dans ce modèle
La ressource ELB décrit l'équilibreur de charges élastiques (ELB) placé dans la pile. L'ELB constitue le point d'entrée de toutes les demandes Web dans ArcGIS Server. Il distribue les demandes aux instances ArcGIS Server disponibles. Vous pouvez faire appel aux propriétés dans l'ELB pour ajuster le port d'équilibreur de charges, le port d'instance (qui peut s'écarter de la valeur par défaut 6080 pour être 6443 dans le cas d'un site sécurisé SSL) et les paramètres de contrôle de l'intégrité.
La ressource InstanceSecurityGroup détermine les règles d'accès qui seront appliquées à toutes les instances lancées dans cette pile. Notez que vous pouvez définir des règles Ingress définissant quels ports sont ouverts pour les instances. Dans ce modèle, le groupe Équilibreur de charges élastiques est autorisé à accéder aux instances sur le port 6080.
La ressource LaunchConfig intègre certains des paramètres définis par l'utilisateur du modèle pour déterminer le type d'instance à lancer et l'image AMI à appliquer.
La ressource AutoScalingGroup configure les règles définissant le moment où les instances seront ajoutées et supprimées de la pile en réponse à des déclencheurs tels que l'utilisation du processeur. Cette ressource contient également une stratégie de mise à jour qui détermine le nombre d'instances à mettre à jour simultanément lorsque vous mettez à jour l'image AMI. Les mises à jour sont appliquées à tour de rôle, de sorte que la pile dans son intégralité ne soit pas déconnectée par la mise à jour. Votre paramètre MaxBatchSize représente le nombre d'instances mises à jour simultanément et doit dans l'idéal être défini comme étant inférieur à la propriété MinSize de votre pile, ce qui garantit la disponibilité d'une instance lors d'une mise à jour.
La ressource ScaleUpPolicy définit la façon dont une instance sera ajoutée à la pile en cas de charge lourde. Elle est référencée plus loin dans le modèle par la ressource CPUAlarmHigh.
La ressource ScaleDownPolicy définit la façon dont une instance sera supprimée de la pile en cas de charge légère. Elle est référencée plus loin dans le modèle par la ressource CPUAlarmLow.
La ressource CPUAlarmHigh définit des paramètres spécifiques pour une alarme qui entraînera l'ajout d'une instance à la pile. Dans ce modèle, une instance est ajoutée lorsque l'utilisation du processeur dépasse 80 % pendant 10 minutes.
La ressource CPUAlarmLow définit des paramètres spécifiques pour une alarme qui entraînera la suppression d'une instance de la pile. Dans ce modèle, une instance est supprimée lorsque l'utilisation du processeur tombe sous 20 % pendant 10 minutes.
Des exemples détaillés de toutes les propriétés JSON que vous pouvez placer dans un modèle CloudFormation sont disponibles dans la section Utilisation de modèles de la documentation AWS.