本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Amazon EC2 Auto Scaling 資源 AWS CloudFormation
下列範例顯示要包含在範本中以與 Amazon EC2 Auto Scaling 搭配使用的不同程式碼片段。
程式碼片段類別
建立單一執行個體 Auto Scaling 群組
此範例顯示具有單一執行個體的AWS::AutoScaling::AutoScalingGroup
資源,以協助您開始使用。Auto Scaling 群組的 VPCZoneIdentifier
屬性指定三個不同可用區域中的現有子網路清單。在建立堆疊之前,您必須先IDs從您的帳戶指定適用的子網路。該LaunchTemplate
屬性引用具有在模板中其他位置定義的邏輯名稱myLaunchTemplate
的AWS::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: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.LatestVersionNumber MaxSize: '1' MinSize: '1'
使用連接的負載平衡器建立 Auto Scaling 群組
此範例顯示在多個伺服器上進行負載平衡的AWS::AutoScaling::AutoScalingGroup
資源。它指定在同一個模板中聲明的其他地方 AWS 資源的邏輯名稱。
-
此
VPCZoneIdentifier
屬性會指定將在其中建立 Auto Scaling 群組EC2執行個體的兩個AWS::EC2::Subnet
資源的邏輯名稱:myPublicSubnet1
和myPublicSubnet2
。 -
該
LaunchTemplate
屬性指定具有邏輯名稱的AWS::EC2::LaunchTemplate
資源myLaunchTemplate
。 -
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
- !RefmyPublicSubnet2
LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !RefmyTargetGroup
另請參閱
如需根據適用於 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
屬性指定三個不同可用區域中的現有子網路清單。在建立堆疊之前,您必須先IDs從您的帳戶指定適用的子網路。該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: !ReflogicalName
Version: !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
建立使用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
在繼續更新之前,必須從指定的中的每個新執行個體接收訊號。當堆疊更新正在進行時,下列「EC2Auto Scaling」程序會暫停:HealthCheck
ReplaceUnhealthy
AZRebalance
、AlarmNotification
、、和ScheduledActions
。注意:請勿暫停 Launch
、Terminate
或 AddToLoadBalancer
(如果 Auto Scaling 群組與 Elastic Load Balancing 搭配使用) 程序類型,因為這麼做會讓滾動更新無法正常運作。
Auto Scaling 群組的 VPCZoneIdentifier
屬性指定三個不同可用區域中的現有子網路清單。在建立堆疊之前,您必須先IDs從您的帳戶指定適用的子網路。該LaunchTemplate
屬性引用相同模板中其他地方聲明的AWS::EC2::LaunchTemplate
資源的邏輯名稱。
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: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber MaxSize: '5' MinSize: '3'
建立步驟擴展政策
此範例顯示使用步驟調整政策向外延展 Auto Scaling 群組的AWS::AutoScaling::ScalingPolicy
資源。AdjustmentType
屬性指定 ChangeInCapacity
,這表示 ScalingAdjustment
代表要新增 (如果 ScalingAdjustment
為正數) 或要刪除 (如果該屬性為負數) 的執行個體數量。在此範例中,ScalingAdjustment
為 1;因此,當違反警示臨界值時,政策會將群組中的EC2執行個體數目增加 1。
資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: !ReflogicalName
ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization
另請參閱
如需更多擴展政策的範例範本,請參閱 AWS::AutoScaling::ScalingPolicy
資源中的範例章節。
混合執行個體群組範例
使用屬性型執行個體類型選取範圍來建立 Auto Scaling 群組
此範例顯示的AWS::AutoScaling::AutoScalingGroup
資源包含使用屬性型執行個體類型選擇來啟動混合執行個體群組的資訊。您需指定 VCpuCount
屬性的下限值和上限值,以及 MemoryMiB
屬性的下限值。Auto Scaling 群組使用的任何執行個體類型都必須與所需執行個體屬性相符。
Auto Scaling 群組的 VPCZoneIdentifier
屬性指定三個不同可用區域中的現有子網路清單。在建立堆疊之前,您必須先IDs從您的帳戶指定適用的子網路。該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: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2
Max:4
MemoryMiB: Min:2048
MaxSize: '5' MinSize: '1'
啟動組態範例
建立啟動組態
此範例顯示「Auto Scaling 例」群組的AWS::AutoScaling::LaunchConfiguration
資源,您可在其中指定ImageId
InstanceType
、和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: - !ReflogicalName
-myExistingEC2SecurityGroup
建立使用啟動設定的「自動調整比例」群組
此範例顯示具有單一執行個體的AWS::AutoScaling::AutoScalingGroup
資源。Auto Scaling 群組的 VPCZoneIdentifier
屬性指定三個不同可用區域中的現有子網路清單。在建立堆疊之前,您必須先IDs從您的帳戶指定適用的子網路。該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: !RefmySimpleConfig
MaxSize: '1' MinSize: '1'