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.
Categorie dei frammenti
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !GetAttmyLaunchTemplate.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.
-
La proprietà
VPCZoneIdentifierspecifica i nomi logici di due risorseAWS::EC2::Subnetin cui verranno create le istanze EC2 del gruppo Auto Scaling:myPublicSubnet1emyPublicSubnet2. -
La proprietà
LaunchTemplatespecifica una risorsaAWS::EC2::LaunchTemplatecon il nome logicomyLaunchTemplate. -
La proprietà
TargetGroupARNselenca 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 risorsaAWS::ElasticLoadBalancingV2::TargetGroupcon il nome logicomyTargetGroup.
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: - !RefmyPublicSubnet1- !RefmyPublicSubnet2LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !GetAttmyLaunchTemplate.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !RefmyTargetGroup
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.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: !ReflogicalNamePolicyType: 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: !ReflogicalNameComparisonOperator: 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-subnetIdAz3MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2Max:4MemoryMiB: Min:2048MaxSize: '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-02354e95b3exampleInstanceType:t3.microSecurityGroups: - !ReflogicalName-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-subnetIdAz3LaunchConfigurationName: !RefmySimpleConfigMaxSize: '1' MinSize: '1'