AWS CloudFormation을 사용한 Amazon EC2 Auto Scaling 리소스 구성
다음 예에서는 Amazon EC2 Auto Scaling과 함께 사용할 템플릿에 포함할 수 있는 다양한 스니펫을 보여줍니다.
코드 조각 카테고리
단일 인스턴스 Auto Scaling 그룹 생성
이 예에서는 시작하는 데 도움이 되는 단일 인스턴스가 포함된 AWS::AutoScaling::AutoScalingGroup
리소스를 보여줍니다. auto scaling의 VPCZoneIdentifier
속성은 3개의 서로 다른 가용 영역에 있는 기존 서브넷 목록을 지정합니다. 스택을 만들기 전에 계정에서 적용 가능한 서브넷 ID를 지정해야 합니다. LaunchTemplate
속성은 템플릿의 다른 곳에 정의된 논리명이 myLaunchTemplate
인 AWS::EC2::LaunchTemplate
리소스를 참조합니다.
참고
시작 템플릿의 예는 Amazon EC2 코드 조각 섹션의 AWS CloudFormation을 사용한 시작 템플릿 생성 및 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
속성은 논리명이myLaunchTemplate
인AWS::EC2::LaunchTemplate
리소스를 지정합니다. -
TargetGroupARNs
속성은 트래픽을 Auto Scaling 그룹으로 라우팅하는 데 사용되는 Application Load Balancer 또는 Network Load Balancer의 대상 그룹을 나열합니다. 이 예에서는 논리명이myTargetGroup
인AWS::ElasticLoadBalancingV2::TargetGroup
리소스에 하나의 대상 그룹이 지정됩니다.
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에서 TopicARN
에 지정된 SNS 주제에 알림을 보냅니다. 스택을 시작하면 AWS CloudFormation에서 동일한 템플릿 내에 선언된 AWS::SNS::Subscription
리소스(snsTopicForAutoScalingGroup
)를 생성합니다.
auto scaling의 VPCZoneIdentifier
속성은 3개의 서로 다른 가용 영역에 있는 기존 서브넷 목록을 지정합니다. 스택을 만들기 전에 계정에서 적용 가능한 서브넷 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: !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
및 UpdatePolicy
를 사용하는 Auto Scaling 그룹 생성
다음 예는 AWS::AutoScaling::AutoScalingGroup
리소스에 CreationPolicy 속성 및 UpdatePolicy 속성을 추가하는 방법을 보여줍니다.
샘플 생성 정책은 auto scaling이 준비가 되면 AWS CloudFormation이 Count
개수의 성공 신호를 받을 때까지 CREATE_COMPLETE
상태가 되지 않도록 합니다. auto scaling이 준비되었음을 알리기 위해 시작 템플릿의 사용자 데이터(표시되지 않음)에 추가된 cfn-signal 헬퍼 스크립트가 인스턴스에서 실행됩니다. 인스턴스가 지정된 Timeout
내에 신호를 보내지 않으면 CloudFormation은 인스턴스가 생성되지 않은 것으로 가정하고, 리소스 생성이 실패하고, CloudFormation은 스택을 롤백합니다.
샘플 업데이트 정책은 CloudFormation에 AutoScalingRollingUpdate
속성을 사용하여 롤링 업데이트를 수행하도록 지시합니다. 롤링 업데이트는 MaxBatchSize
에 기반한 작은 배치(이 예에서는 인스턴스 단위)의 Auto Scaling 그룹, PauseTime
에 기반한 업데이트의 배치 간 일시 중지 시간을 변경합니다. MinInstancesInService
속성은 CloudFormation에서 이전 인스턴스를 업데이트하는 동안 Auto Scaling 그룹 내에서 작동해야 하는 최소 인스턴스 수를 지정합니다.
WaitOnResourceSignals
속성이 true
로 설정되어 있습니다. 업데이트를 계속 진행하려면 CloudFormation이 지정된 PauseTime
내에 각각의 새 인스턴스로부터 신호를 수신해야 합니다. 스택 업데이트가 진행되는 동안 HealthCheck
, ReplaceUnhealthy
, AZRebalance
, AlarmNotification
및 ScheduledActions
같은 EC2 Auto Scaling 프로세스가 일시 중단됩니다. 참고: 이 경우 롤링 업데이트가 제대로 작동하지 않을 수 있으므로 Launch
, Terminate
또는 AddToLoadBalancer
(Auto Scaling 그룹이 Elastic Load Balancing와 함께 사용되는 경우) 프로세스 유형을 일시 중지하지 마십시오.
auto scaling의 VPCZoneIdentifier
속성은 3개의 서로 다른 가용 영역에 있는 기존 서브넷 목록을 지정합니다. 스택을 만들기 전에 계정에서 적용 가능한 서브넷 ID를 지정해야 합니다. 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
는 경보가 ALARM 상태일 때 실행할 작업(AlarmActions
)으로 조정 정책 ASGScalingPolicyHigh
를 지정합니다. 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
속성은 3개의 서로 다른 가용 영역에 있는 기존 서브넷 목록을 지정합니다. 스택을 만들기 전에 계정에서 적용 가능한 서브넷 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: !ReflogicalName
Version: !GetAttlogicalName
.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2
Max:4
MemoryMiB: Min:2048
MaxSize: '5' MinSize: '1'
시작 구성 예제
시작 구성 생성
이 예에서는 ImageId
, InstanceType
, SecurityGroups
속성에 대한 값을 지정하는 Auto Scaling 그룹에 대한 AWS::AutoScaling::LaunchConfiguration
리소스를 보여줍니다. SecurityGroups
속성은 템플릿에 지정된 AWS::EC2::SecurityGroup
리소스의 논리명과 myExistingEC2SecurityGroup
이라는 기존 EC2 보안 그룹을 모두 지정합니다.
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
시작 구성을 사용하는 Auto Scaling 그룹 생성
이 예에서는 단일 인스턴스가 있는 AWS::AutoScaling::AutoScalingGroup
리소스를 보여줍니다. auto scaling의 VPCZoneIdentifier
속성은 3개의 서로 다른 가용 영역에 있는 기존 서브넷 목록을 지정합니다. 스택을 만들기 전에 계정에서 적용 가능한 서브넷 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: !RefmySimpleConfig
MaxSize: '1' MinSize: '1'