使用以下方式設定 Amazon EC2 Auto Scaling 資 AWS CloudFormation - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用以下方式設定 Amazon EC2 Auto Scaling 資 AWS CloudFormation

下列範例顯示要包含在範本中以搭配 Amazon EC2 Auto Scaling 展使用的不同程式碼片段。

建立單一執行個體 Auto Scaling 群組

此範例顯示具有單一執行個體的AWS::AutoScaling::AutoScalingGroup資源,以協助您開始使用。Auto Scaling 群組的 VPCZoneIdentifier 屬性指定三個不同可用區域中的現有子網路清單。您必須先從帳戶指定適用的子網路 ID,然後才能建立堆疊。該LaunchTemplate屬性引用具有在模板中其他位置定義的邏輯名稱myLaunchTemplateAWS::EC2::LaunchTemplate資源。

注意

如需啟動範本的範例,請參閱 使用建立啟動範本 AWS CloudFormation Amazon EC2 程式碼片段一節和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'

使用連接的負載平衡器建立 Auto Scaling 群組

此範例顯示在多個伺服器上進行負載平衡的AWS::AutoScaling::AutoScalingGroup資源。它指定在同一個模板中聲明的其他地方 AWS 資源的邏輯名稱。

  1. VPCZoneIdentifier屬性會指定將在其中建立 Auto Scaling 群組 EC2 執行個體的兩個AWS::EC2::Subnet資源的邏輯名稱:myPublicSubnet1myPublicSubnet2

  2. LaunchTemplate屬性指定具有邏輯名稱的AWS::EC2::LaunchTemplate資源myLaunchTemplate

  3. TargetGroupARNs 屬性針對將流量路由到 Auto Scaling 群組所使用的 Application Load Balancer 或 Network Load Balancer,列出目標群組。在此範例中,指定了一個目標群組,即具有邏輯名稱的AWS::ElasticLoadBalancingV2::TargetGroup資源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

另請參閱

如需根據適用於 Application Load Balancer 的 ALBRequestCountPerTarget 預先定義指標建立具有目標追蹤擴展政策之 Auto Scaling 群組的詳細範例,請參閱 AWS::AutoScaling::ScalingPolicy 資源中的範例章節。

建立包含通知的 Auto Scaling 群組

此範例顯示在指定事件發生時傳送 Amazon SNS 通知的AWS::AutoScaling::AutoScalingGroup資源。此內NotificationConfigurations容會指定 AWS CloudFormation 傳送通知的 SNS 主題, AWS CloudFormation 以及將導致傳送通知的事件。當所指定的事件NotificationTypes發生時, AWS CloudFormation 會傳送通知給 SNS 主題所指定TopicARN。當您啟動堆棧時, AWS CloudFormation 創建一個在同一個模板中聲明的AWS::SNS::Subscription資源(snsTopicForAutoScalingGroup)。

Auto Scaling 群組的 VPCZoneIdentifier 屬性指定三個不同可用區域中的現有子網路清單。您必須先從帳戶指定適用的子網路 ID,然後才能建立堆疊。該LaunchTemplate屬性引用相同模板中其他地方聲明的AWS::EC2::LaunchTemplate資源的邏輯名稱。

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

建立使用CreationPolicy和的「Auto Scaling」群組 UpdatePolicy

下列範例會示範如何新增CreationPolicy 屬性UpdatePolicy屬性至AWS::AutoScaling::AutoScalingGroup資源。

範例建立原則可防止 Auto Scaling 群組達到CREATE_COMPLETE狀態,直到群組準備就緒時 AWS CloudFormation 收到成功訊號Count數為止。若要發出 Auto Scaling 群組已就緒的訊號,需在執行個體上執行新增到啟動範本使用者資料 (未顯示) 的 cfn-signal 協助程式指令碼。如果執行個體未在指定的範圍內傳送訊號Timeout,則 CloudFormation 假設未建立執行個體、資源建立失敗,並 CloudFormation 將堆疊復原。

範例更新原則會指示 CloudFormation 使用AutoScalingRollingUpdate內容執行滾動式更新。滾動更新根據 MaxBatchSize 和以 PauseTime 為基礎的更新批次間的暫停時間,小量批次變更 Auto Scaling 群組 (在此範例中為依執行個體逐一變更)。MinInstancesInService屬性指定在更新舊執行個體時,Auto Scaling 群組內必須使用的執行個 CloudFormation體數目下限。

WaitOnResourceSignals屬性設定為true。 CloudFormationPauseTime在繼續更新之前,必須從指定的中的每個新執行個體接收訊號。當堆疊正在更新時,會暫停以下 EC2 Auto Scaling 程序:HealthCheckReplaceUnhealthyAZRebalanceAlarmNotificationScheduledActions。注意:請勿暫停 LaunchTerminateAddToLoadBalancer (如果 Auto Scaling 群組與 Elastic Load Balancing 搭配使用) 程序類型,因為這麼做會讓滾動更新無法正常運作。

Auto Scaling 群組的 VPCZoneIdentifier 屬性指定三個不同可用區域中的現有子網路清單。您必須先從帳戶指定適用的子網路 ID,然後才能建立堆疊。該LaunchTemplate屬性引用相同模板中其他地方聲明的AWS::EC2::LaunchTemplate資源的邏輯名稱。

JSON

{ "Resources":{ "myASG":{ "CreationPolicy":{ "ResourceSignal":{ "Count":"3", "Timeout":"PT15M" } }, "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"1", "MaxBatchSize":"1", "PauseTime":"PT12M5S", "WaitOnResourceSignals":"true", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions" ] } }, "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: '1' MaxBatchSize: '1' PauseTime: PT12M5S WaitOnResourceSignals: true SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '5' MinSize: '3'

建立步驟擴展政策

此範例顯示使用步驟調整政策向外延展 Auto Scaling 群組的AWS::AutoScaling::ScalingPolicy資源。AdjustmentType 屬性指定 ChangeInCapacity,這表示 ScalingAdjustment 代表要新增 (如果 ScalingAdjustment 為正數) 或要刪除 (如果該屬性為負數) 的執行個體數量。在本範例中,ScalingAdjustment 為 1。因此,在超過警示閾值時,政策即會在群組中逐次遞增 1 個 EC2 執行個體。

AWS::CloudWatch::Alarm源會將調整規模政策CPUAlarmHigh指定ASGScalingPolicyHigh為警示處於 ALARM 狀態時要執行的動作 (AlarmActions)。該Dimensions屬性引用相同模板中其他地方聲明的AWS::AutoScaling::AutoScalingGroup資源的邏輯名稱。

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

另請參閱

如需更多擴展政策的範例範本,請參閱 AWS::AutoScaling::ScalingPolicy 資源中的範例章節。

混合執行個體群組範例

使用屬性型執行個體類型選取範圍來建立 Auto Scaling 群組

此範例顯示的AWS::AutoScaling::AutoScalingGroup資源包含使用屬性型執行個體類型選擇來啟動混合執行個體群組的資訊。您需指定 VCpuCount 屬性的下限值和上限值,以及 MemoryMiB 屬性的下限值。Auto Scaling 群組使用的任何執行個體類型都必須與所需執行個體屬性相符。

Auto Scaling 群組的 VPCZoneIdentifier 屬性指定三個不同可用區域中的現有子網路清單。您必須先從帳戶指定適用的子網路 ID,然後才能建立堆疊。該LaunchTemplate屬性引用相同模板中其他地方聲明的AWS::EC2::LaunchTemplate資源的邏輯名稱。

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'

啟動組態範例

建立啟動組態

此範例顯示「Auto Scaling 例」群組的AWS::AutoScaling::LaunchConfiguration資源,您可在其中指定ImageIdInstanceType、和SecurityGroups屬性的值。此SecurityGroups屬性會指定範本中其他位置指定之AWS::EC2::SecurityGroup資源的邏輯名稱,以及名為的現有 EC2 安全群組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

建立使用啟動設定的「自動調整比例」群組

此範例顯示具有單一執行個體的AWS::AutoScaling::AutoScalingGroup資源。Auto Scaling 群組的 VPCZoneIdentifier 屬性指定三個不同可用區域中的現有子網路清單。您必須先從帳戶指定適用的子網路 ID,然後才能建立堆疊。該LaunchConfigurationName屬性參考具有在範本中定義mySimpleConfig的邏輯名稱的AWS::AutoScaling::LaunchConfiguration資源。

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'