Configurez les ressources Amazon EC2 Auto Scaling avec AWS CloudFormation - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurez les ressources Amazon EC2 Auto Scaling avec AWS CloudFormation

Les exemples suivants montrent les différents extraits à inclure dans les modèles à utiliser avec Amazon EC2 Auto Scaling.

Création d'un groupe Auto Scaling à instance unique

Cet exemple montre une AWS::AutoScaling::AutoScalingGroupressource avec une seule instance pour vous aider à démarrer. La propriété VPCZoneIdentifier du groupe Auto Scaling spécifie une liste de sous-réseaux existants dans trois zones de disponibilité différentes. Vous devez spécifier le sous-réseau applicable IDs depuis votre compte avant de créer votre stack. La LaunchTemplate propriété fait référence à une AWS::EC2::LaunchTemplateressource myLaunchTemplate dont le nom logique est défini ailleurs dans votre modèle.

Note

Pour des exemples de modèles de lancement, consultez Créez des modèles de lancement avec AWS CloudFormation la section Amazon EC2 snippets et la section Exemples de la AWS::EC2::LaunchTemplate ressource.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize" : "1", "MinSize" : "1" } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MaxSize: '1' MinSize: '1'

Création d'un groupe Auto Scaling avec un équilibreur de charge attaché

Cet exemple montre une AWS::AutoScaling::AutoScalingGroupressource pour l'équilibrage de charge sur plusieurs serveurs. Il spécifie les noms logiques des AWS ressources déclarées ailleurs dans le même modèle.

  1. La VPCZoneIdentifier propriété spécifie les noms logiques des deux AWS::EC2::Subnetressources dans lesquelles les EC2 instances du groupe Auto Scaling seront créées : myPublicSubnet1 etmyPublicSubnet2.

  2. La LaunchTemplate propriété spécifie une AWS::EC2::LaunchTemplateressource avec le nom logiquemyLaunchTemplate.

  3. La propriété TargetGroupARNs répertorie les groupes cibles d'un Application Load Balancer ou Network Load Balancer utilisés pour acheminer le trafic vers le groupe Auto Scaling. Dans cet exemple, un groupe cible est spécifié, une AWS::ElasticLoadBalancingV2::TargetGroupressource portant le nom logiquemyTargetGroup.

JSON

"myServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ { "Ref" : "myPublicSubnet1" }, { "Ref" : "myPublicSubnet2" } ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "TargetGroupARNs" : [ { "Ref" : "myTargetGroup" } ] } }

YAML

myServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - !Ref myPublicSubnet1 - !Ref myPublicSubnet2 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !Ref myTargetGroup

Consultez aussi

Pour un exemple détaillé qui crée un groupe Auto Scaling avec une politique de suivi des objectifs et d'échelonnement basée sur la métrique prédéfinie ALBRequestCountPerTarget pour votre Application Load Balancer, veuillez consulter la rubrique Exemples de la ressource AWS::AutoScaling::ScalingPolicy.

Création d'un groupe Auto Scaling avec notifications

Cet exemple montre une AWS::AutoScaling::AutoScalingGroupressource qui envoie SNS des notifications à Amazon lorsque les événements spécifiés se produisent. La NotificationConfigurations propriété indique le SNS sujet dans lequel AWS CloudFormation une notification est envoyée et les événements qui provoqueront AWS CloudFormation l'envoi de notifications. Lorsque les événements spécifiés par NotificationTypes se produisent, AWS CloudFormation envoie une notification au SNS sujet spécifié parTopicARN. Lorsque vous lancez la pile, elle AWS CloudFormation crée une AWS::SNS::Subscriptionressource (snsTopicForAutoScalingGroup) déclarée dans le même modèle.

La propriété VPCZoneIdentifier du groupe Auto Scaling spécifie une liste de sous-réseaux existants dans trois zones de disponibilité différentes. Vous devez spécifier le sous-réseau applicable IDs depuis votre compte avant de créer votre stack. La LaunchTemplate propriété fait référence au nom logique d'une AWS::EC2::LaunchTemplateressource déclarée ailleurs dans le même modèle.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "DependsOn": [ "snsTopicForAutoScalingGroup" ], "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "NotificationConfigurations" : [ { "TopicARN" : { "Ref" : "snsTopicForAutoScalingGroup" }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR", "autoscaling:TEST_NOTIFICATION" ] } ] } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup DependsOn: - snsTopicForAutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '5' MinSize: '1' NotificationConfigurations: - TopicARN: !Ref snsTopicForAutoScalingGroup NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR - autoscaling:TEST_NOTIFICATION

Créez un groupe Auto Scaling qui utilise un CreationPolicy et un UpdatePolicy

L'exemple suivant montre comment ajouter Attribut CreationPolicy des UpdatePolicy attributs à une AWS::AutoScaling::AutoScalingGroupressource.

La politique de création d'échantillons empêche le groupe Auto Scaling d'atteindre le CREATE_COMPLETE statut tant qu'il n'a Count pas AWS CloudFormation reçu un certain nombre de signaux de réussite lorsque le groupe est prêt. Pour signaler que le groupe Auto Scaling est prêt, un script d'assistant cfn-signal ajouté aux données utilisateur du modèle de lancement (non affiché) est exécuté sur les instances. Si les instances n'envoient pas de signal dans les limites spécifiéesTimeout, cela CloudFormation suppose que les instances n'ont pas été créées, que la création de ressources échoue et CloudFormation annule la pile.

L'exemple de politique de mise à jour indique d'effectuer une mise CloudFormation à jour continue à l'aide de la AutoScalingRollingUpdate propriété. La mise à jour continue modifie le groupe Auto Scaling par petits lots (dans cet exemple, instance par instance) en fonction de MaxBatchSize et d'un temps d'interruption entre les lots de mises à jour basé sur PauseTime. L'MinInstancesInServiceattribut indique le nombre minimum d'instances qui doivent être en service au sein du groupe Auto Scaling lors de la mise CloudFormation à jour des anciennes instances.

L'WaitOnResourceSignalsattribut est défini surtrue. CloudFormationdoit recevoir un signal de chaque nouvelle instance dans les limites spécifiées PauseTime avant de poursuivre la mise à jour. Pendant la mise à jour de la pile, les processus EC2 Auto Scaling suivants sont suspendus : HealthCheckReplaceUnhealthy,AZRebalance,AlarmNotification, etScheduledActions. Remarque : ne suspendez pas les types de processus Launch, Terminate ou AddToLoadBalancer (si le groupe Auto Scaling est utilisé avec Elastic Load Balancing) car cela peut empêcher le fonctionnement correct de la mise à jour continue.

La propriété VPCZoneIdentifier du groupe Auto Scaling spécifie une liste de sous-réseaux existants dans trois zones de disponibilité différentes. Vous devez spécifier le sous-réseau applicable IDs depuis votre compte avant de créer votre stack. La LaunchTemplate propriété fait référence au nom logique d'une AWS::EC2::LaunchTemplateressource déclarée ailleurs dans le même modèle.

JSON

{ "Resources":{ "myASG":{ "CreationPolicy":{ "ResourceSignal":{ "Count":"3", "Timeout":"PT15M" } }, "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"3", "MaxBatchSize":"1", "PauseTime":"PT12M5S", "WaitOnResourceSignals":"true", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh" ] } }, "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "MaxSize":"5", "MinSize":"3" } } } }

YAML

--- Resources: myASG: CreationPolicy: ResourceSignal: Count: '3' Timeout: PT15M UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '3' MaxBatchSize: '1' PauseTime: PT12M5S WaitOnResourceSignals: true SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions - InstanceRefresh Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '5' MinSize: '3'

Création d'une politique de mise à l'échelle par étapes

Cet exemple montre une AWS::AutoScaling::ScalingPolicyressource qui étend le groupe Auto Scaling à l'aide d'une politique de dimensionnement par étapes. La propriété AdjustmentType spécifie ChangeInCapacity, ce qui signifie que ScalingAdjustment représente le nombre d'instances à ajouter (si ScalingAdjustment est positif) ou à supprimer (s'il est négatif). Dans cet exemple, ScalingAdjustment c'est 1 ; par conséquent, la politique augmente le nombre d'EC2instances du groupe de 1 lorsque le seuil d'alarme est dépassé.

La AWS::CloudWatch::Alarmressource CPUAlarmHigh spécifie la politique de dimensionnement ASGScalingPolicyHigh comme l'action à exécuter lorsque l'alarme est dans un ALARM état (AlarmActions). La Dimensions propriété fait référence au nom logique d'une AWS::AutoScaling::AutoScalingGroupressource déclarée ailleurs dans le même modèle.

JSON

{ "Resources":{ "ASGScalingPolicyHigh":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AutoScalingGroupName":{ "Ref":"logicalName" }, "PolicyType":"StepScaling", "AdjustmentType":"ChangeInCapacity", "StepAdjustments":[ { "MetricIntervalLowerBound":0, "ScalingAdjustment":1 } ] } }, "CPUAlarmHigh":{ "Type":"AWS::CloudWatch::Alarm", "Properties":{ "EvaluationPeriods":"2", "Statistic":"Average", "Threshold":"90", "AlarmDescription":"Scale out if CPU > 90% for 2 minutes", "Period":"60", "AlarmActions":[ { "Ref":"ASGScalingPolicyHigh" } ], "Namespace":"AWS/EC2", "Dimensions":[ { "Name":"AutoScalingGroupName", "Value":{ "Ref":"logicalName" } } ], "ComparisonOperator":"GreaterThanThreshold", "MetricName":"CPUUtilization" } } } }

YAML

--- Resources: ASGScalingPolicyHigh: Type: AWS::AutoScaling::ScalingPolicy Properties: AutoScalingGroupName: !Ref logicalName PolicyType: StepScaling AdjustmentType: ChangeInCapacity StepAdjustments: - MetricIntervalLowerBound: 0 ScalingAdjustment: 1 CPUAlarmHigh: Type: AWS::CloudWatch::Alarm Properties: EvaluationPeriods: 2 Statistic: Average Threshold: 90 AlarmDescription: 'Scale out if CPU > 90% for 2 minutes' Period: 60 AlarmActions: - !Ref ASGScalingPolicyHigh Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: !Ref logicalName ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization

Consultez aussi

Pour plus d'exemples de modèles de politiques de mise à l'échelle, veuillez consulter la rubrique Exemples dans la ressource AWS::AutoScaling::ScalingPolicy.

Exemples de groupes d'instances mixtes

Créer un groupe Auto Scaling en utilisant la sélection du type d'instance basée sur des attributs

Cet exemple montre une AWS::AutoScaling::AutoScalingGroupressource contenant les informations permettant de lancer un groupe d'instances mixtes à l'aide de la sélection du type d'instance basée sur les attributs. Vous spécifiez les valeurs minimales et maximales pour la propriété VCpuCount et la valeur minimale pour la propriété MemoryMiB. Tous les types d'instance utilisés par le groupe Auto Scaling doivent correspondre à vos attributs d'instance requis.

La propriété VPCZoneIdentifier du groupe Auto Scaling spécifie une liste de sous-réseaux existants dans trois zones de disponibilité différentes. Vous devez spécifier le sous-réseau applicable IDs depuis votre compte avant de créer votre stack. La LaunchTemplate propriété fait référence au nom logique d'une AWS::EC2::LaunchTemplateressource déclarée ailleurs dans le même modèle.

JSON

{ "Resources":{ "myASG":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "Overrides":[ { "InstanceRequirements":{ "VCpuCount":{ "Min":2, "Max":4 }, "MemoryMiB":{ "Min":2048 } } } ] } }, "MaxSize":"5", "MinSize":"1" } } } }

YAML

--- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min: 2 Max: 4 MemoryMiB: Min: 2048 MaxSize: '5' MinSize: '1'

Exemples de configuration de lancement

Créez une configuration de lancement

Cet exemple montre une AWS::AutoScaling::LaunchConfigurationressource pour un groupe Auto Scaling dans laquelle vous spécifiez des valeurs pour les SecurityGroups propriétés ImageIdInstanceType, et. La SecurityGroups propriété spécifie à la fois le nom logique d'une AWS::EC2::SecurityGroupressource spécifiée ailleurs dans le modèle et un groupe EC2 de sécurité existant nommémyExistingEC2SecurityGroup.

JSON

"mySimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "ami-02354e95b3example", "InstanceType" : "t3.micro", "SecurityGroups" : [ { "Ref" : "logicalName" }, "myExistingEC2SecurityGroup" ] } }

YAML

mySimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref logicalName - myExistingEC2SecurityGroup

Créez un groupe Auto Scaling qui utilise une configuration de lancement

Cet exemple montre une AWS::AutoScaling::AutoScalingGroupressource avec une seule instance. La propriété VPCZoneIdentifier du groupe Auto Scaling spécifie une liste de sous-réseaux existants dans trois zones de disponibilité différentes. Vous devez spécifier le sous-réseau applicable IDs depuis votre compte avant de créer votre stack. La LaunchConfigurationName propriété fait référence à une AWS::AutoScaling::LaunchConfigurationressource mySimpleConfig dont le nom logique est défini dans votre modèle.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig" }, "MaxSize" : "1", "MinSize" : "1" } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchConfigurationName: !Ref mySimpleConfig MaxSize: '1' MinSize: '1'