Configurazione delle risorse Amazon EC2 Auto Scaling con CloudFormation - AWS CloudFormation

Configurazione delle risorse Amazon EC2 Auto Scaling con CloudFormation

Negli esempi seguenti vengono illustrati frammenti diversi da includere nei modelli da utilizzare con Amazon EC2 Auto Scaling.

Creazione di un gruppo Auto Scaling con una singola istanza

Questo esempio mostra una risorsa AWS::AutoScaling::AutoScalingGroup con una singola istanza per aiutarti a iniziare. La proprietà VPCZoneIdentifier del gruppo Auto Scaling specifica un elenco di sottoreti esistenti in diverse zone di disponibilità. È necessario specificare gli ID di sottorete applicabili dal proprio account prima di creare lo stack. La proprietà LaunchTemplate fa riferimento a una risorsa AWS::EC2::LaunchTemplate con il nome logico myLaunchTemplate definito altrove nel modello.

Nota

Per altri esempi di modelli di avvio, consulta Creazione di modelli di avvio con CloudFormation nella sezione relativa ai frammenti Amazon EC2 e la sezione Esempi nella risorsa AWS::EC2::LaunchTemplate.

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'

Creazione di un gruppo Auto Scaling con un bilanciatore del carico allegato

Questo esempio mostra una risorsa AWS::AutoScaling::AutoScalingGroup per il bilanciamento del carico su più server. Specifica i nomi logici delle risorse AWS dichiarate altrove nello stesso modello.

  1. La proprietà VPCZoneIdentifier specifica i nomi logici di due risorse AWS::EC2::Subnet in cui verranno create le istanze EC2 del gruppo Auto Scaling: myPublicSubnet1 e myPublicSubnet2.

  2. La proprietà LaunchTemplate specifica una risorsa AWS::EC2::LaunchTemplate con il nome logico myLaunchTemplate.

  3. La proprietà TargetGroupARNs elenca i gruppi di destinazione per Application Load Balancer o Network Load Balancer utilizzati per instradare il traffico al gruppo Auto Scaling. In questo esempio viene specificato un gruppo di destinazione, una risorsa AWS::ElasticLoadBalancingV2::TargetGroup con il nome logico myTargetGroup.

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

Consulta anche

Per un esempio dettagliato nel quale viene creato un gruppo Auto Scaling con una policy di dimensionamento di tracciamento della destinazione basato sul parametro predefinito ALBRequestCountPerTarget per Application Load Balancer, consulta la sezione Esempi nella risorsa AWS::AutoScaling::ScalingPolicy.

Creazione di un gruppo Auto Scaling con notifiche

Questo esempio illustra una risorsa AWS::AutoScaling::AutoScalingGroup che invia notifiche Amazon SNS quando hanno luogo gli eventi specificati. La proprietà NotificationConfigurations specifica l’argomento SNS dove CloudFormation invia una notifica e gli eventi che porteranno CloudFormation a inviare notifiche. Quando si verificano gli eventi specificati da NotificationTypes, CloudFormation invierà una notifica all’argomento SNS specificato da TopicARN. Quando avvii lo stack, CloudFormation crea una risorsa AWS::SNS::Subscription (snsTopicForAutoScalingGroup) dichiarata all’interno dello stesso modello.

La proprietà VPCZoneIdentifier del gruppo Auto Scaling specifica un elenco di sottoreti esistenti in diverse zone di disponibilità. È necessario specificare gli ID di sottorete applicabili dal proprio account prima di creare lo stack. La proprietà LaunchTemplate fa riferimento al nome logico di una risorsa AWS::EC2::LaunchTemplate dichiarata altrove nello stesso modello.

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

Creazione di un gruppo Auto Scaling usando una CreationPolicy e una UpdatePolicy

L’esempio seguente mostra come aggiungere attributi CreationPolicy e UpdatePolicy a una risorsa AWS::AutoScaling::AutoScalingGroup.

La policy di creazione di esempio impedisce al gruppo Auto Scaling di raggiungere lo stato CREATE_COMPLETE fino a quando CloudFormation riceve il numero Count di segnali di successo quando il gruppo è pronto. Per segnalare che il gruppo Auto Scaling è pronto, sulle istanze viene eseguito uno script helper cfn-signal aggiunto ai dati utente del modello di avvio (non visualizzato). Se le istanze non inviano un segnale entro il limite specificato Timeout, CloudFormation presuppone che le istanze non siano state create, che la creazione delle risorse abbia esito negativo e CloudFormation esegua il rollback dello stack.

La policy di aggiornamento di esempio istruisce CloudFormation per eseguire un aggiornamento in sequenza utilizzando la proprietà AutoScalingRollingUpdate. L’aggiornamento in sequenza modifica il gruppo Auto Scaling in piccoli batch (per questo esempio, istanza per istanza) in base a MaxBatchSize e alla pausa che intercorre tra i batch di aggiornamento in base al PauseTime. L’attributo MinInstancesInService specifica il numero minimo di istanze che devono essere in servizio all’interno del gruppo Auto Scaling mentre CloudFormation aggiorna le istanze precedenti.

L’attributo WaitOnResourceSignals viene impostato su true. CloudFormation deve ricevere un segnale da ogni nuova istanza entro il PauseTime specificato prima di procedere con l’aggiornamento. Durante l’aggiornamento dello stack, vengono sospesi i seguenti processi di EC2 Auto Scaling: HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification e ScheduledActions. Nota: non sospendere i tipi di processo Launch, Terminate, o AddToLoadBalancer (se il gruppo Auto Scaling viene utilizzato con Elastic Load Balancing) perché in tal modo è possibile impedire il corretto funzionamento dell’aggiornamento in sequenza.

La proprietà VPCZoneIdentifier del gruppo Auto Scaling specifica un elenco di sottoreti esistenti in diverse zone di disponibilità. È necessario specificare gli ID di sottorete applicabili dal proprio account prima di creare lo stack. La proprietà LaunchTemplate fa riferimento al nome logico di una risorsa AWS::EC2::LaunchTemplate dichiarata altrove nello stesso modello.

Per ulteriori informazioni sugli attributi CreationPolicy e UpdatePolicy, consulta Riferimento attributo della risorsa.

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'

Creazione di una policy di dimensionamento per fasi

Questo esempio illustra una AWS::AutoScaling::ScalingPolicy che aumenta orizzontalmente il gruppo Auto Scaling utilizzando una semplice policy di dimensionamento. La proprietà AdjustmentType specifica ChangeInCapacity, il che significa che ScalingAdjustment rappresenta il numero di istanze da aggiungere (se ScalingAdjustment è positiva) o eliminare (se è negativa). In questo esempio, ScalingAdjustment corrisponde a 1, perciò la policy aumenta il numero di istanze EC2 nel gruppo di 1 quando viene toccata la soglia dell’allarme.

La risorsa AWS::CloudWatch::Alarm CPUAlarmHigh specifica la policy di dimensionamento ASGScalingPolicyHigh come operazione da eseguire quando l’allarme è in uno stato ALARM (AlarmActions). La proprietà Dimensions fa riferimento al nome logico di una risorsa AWS::AutoScaling::AutoScalingGroup dichiarata altrove nello stesso modello.

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

Consulta anche

Per altri modelli di esempio per le policy di dimensionamento, consulta la sezione Esempi nella risorsa AWS::AutoScaling::ScalingPolicy.

Esempi di gruppi di istanze miste

Crea un gruppo Auto Scaling utilizzando la selezione del tipo di istanza basata su attributi

Questo esempio mostra una risorsa AWS::AutoScaling::AutoScalingGroup che contiene le informazioni per avviare un gruppo di istanze miste utilizzando la selezione del tipo di istanza basata su attributi. Puoi specificare il valore minimo e massimo per la proprietà VCpuCount e il valore minimo per la proprietà MemoryMiB. Tutti i tipi di istanza utilizzati dal gruppo Auto Scaling devono rispettare agli attributi dell’istanza richiesti.

La proprietà VPCZoneIdentifier del gruppo Auto Scaling specifica un elenco di sottoreti esistenti in diverse zone di disponibilità. È necessario specificare gli ID di sottorete applicabili dal proprio account prima di creare lo stack. La proprietà LaunchTemplate fa riferimento al nome logico di una risorsa AWS::EC2::LaunchTemplate dichiarata altrove nello stesso modello.

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'

Esempi di configurazione di avvio

Creazione di una configurazione di avvio

Questo esempio illustra una risorsa AWS::AutoScaling::LaunchConfiguration per un gruppo Auto Scaling nel quale vengono specificati valori per le proprietà ImageId, InstanceType e SecurityGroups. La proprietà SecurityGroups specifica sia il nome logico di una risorsa AWS::EC2::SecurityGroup definita altrove nel modello, che un gruppo di sicurezza EC2 esistente denominato 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

Creazione di un gruppo Auto Scaling utilizzando una configurazione di avvio

Questo esempio mostra una risorsa AWS::AutoScaling::AutoScalingGroup con una singola istanza. La proprietà VPCZoneIdentifier del gruppo Auto Scaling specifica un elenco di sottoreti esistenti in diverse zone di disponibilità. È necessario specificare gli ID di sottorete applicabili dal proprio account prima di creare lo stack. La proprietà LaunchConfigurationName fa riferimento a una risorsa AWS::AutoScaling::LaunchConfiguration con il nome logico mySimpleConfig definito nel modello.

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'