메뉴
AWS CloudFormation
사용 설명서 (API Version 2010-05-15)

Auto Scaling 템플릿 조각

Auto Scaling 시작 구성 리소스

이 예에서는 Auto Scaling AWS::AutoScaling::LaunchConfiguration 리소스를 보여줍니다. SecurityGroups 속성은 myEC2SecurityGroup이라는 AWS::EC2::SecurityGroup 리소스와 myExistingEC2SecurityGroup이라는 기존 EC2 보안 그룹을 모두 지정합니다. BlockDeviceMappings 속성은 두 디바이스 즉, /dev/sdk에 매핑되는 50GB EBS 볼륨과 /dev/sdc에 매핑되는 가상 디바이스 ephemeral0을 나열합니다.

JSON

Copy
"SimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "ami-6411e20d", "SecurityGroups" : [ { "Ref" : "myEC2SecurityGroup" }, "myExistingEC2SecurityGroup" ], "InstanceType" : "m1.small", "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdk", "Ebs" : {"VolumeSize" : "50"} }, { "DeviceName" : "/dev/sdc", "VirtualName" : "ephemeral0" } ] } }

YAML

Copy
SimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-6411e20d SecurityGroups: - Ref: myEC2SecurityGroup - myExistingEC2SecurityGroup InstanceType: m1.small BlockDeviceMappings: - DeviceName: "/dev/sdk" Ebs: VolumeSize: '50' - DeviceName: "/dev/sdc" VirtualName: ephemeral0

Auto Scaling 그룹 리소스

이 예에서는 Auto Scaling AWS::AutoScaling::AutoScalingGroup 리소스를 보여줍니다. AvailabilityZones 속성은 Auto Scaling 그룹의 EC2 인스턴스가 생성될 가용 영역을 지정합니다. 이 예에서 Fn::GetAZs 함수 호출 { "Fn::GetAZs" : "" }는 스택이 생성되는 리전의 모든 가용 영역을 지정합니다. LoadBalancerNames 속성은 Auto Scaling 그룹으로 트래픽을 라우팅하는 데 사용되는 LoadBalancer를 나열합니다. 이 예에서 AWS::ElasticLoadBalancing::LoadBalancer 리소스 LB라는 하나의 LoadBalancer가 지정됩니다.

JSON

Copy
"MyServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : ""}, "LaunchConfigurationName" : { "Ref" : "SimpleConfig" }, "MinSize" : "1", "MaxSize" : "3", "LoadBalancerNames" : [ { "Ref" : "LB" } ] } }

YAML

Copy
MyServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: '' LaunchConfigurationName: Ref: SimpleConfig MinSize: '1' MaxSize: '3' LoadBalancerNames: - Ref: LB

CloudWatch 경보에 의해 트리거되는 Auto Scaling 정책

이 예에서는 Auto Scaling 그룹 asGroup을 확장하는 AWS::AutoScaling::ScalingPolicy 리소스를 보여줍니다. AdjustmentType 속성은 ChangeInCapacity를 지정합니다. 이는 ScalingAdjustment가 추가하거나(ScalingAdjustment가 양수인 경우) 삭제할(음수인 경우) 인스턴스 수를 나타낸다는 것을 의미합니다. 이 예에서 ScalingAdjustment는 1입니다. 따라서 정책을 실행하면 그룹의 EC2 인스턴스 수가 1씩 증가합니다.

AWS::CloudWatch::Alarm 리소스 CPUAlarmHigh는 경보가 ALARM 상태일 때 실행할 작업(AlarmActions)으로 조정 정책 ScaleUpPolicy를 지정합니다.

JSON

Copy
"ScaleUpPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "asGroup" }, "Cooldown" : "1", "ScalingAdjustment" : "1" } }, "CPUAlarmHigh": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "EvaluationPeriods": "1", "Statistic": "Average", "Threshold": "10", "AlarmDescription": "Alarm if CPU too high or metric disappears indicating instance is down", "Period": "60", "AlarmActions": [ { "Ref": "ScaleUpPolicy" } ], "Namespace": "AWS/EC2", "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": { "Ref": "asGroup" } } ], "ComparisonOperator": "GreaterThanThreshold", "MetricName": "CPUUtilization" } }

YAML

Copy
ScaleUpPolicy: Type: AWS::AutoScaling::ScalingPolicy Properties: AdjustmentType: ChangeInCapacity AutoScalingGroupName: Ref: asGroup Cooldown: '1' ScalingAdjustment: '1' CPUAlarmHigh: Type: AWS::CloudWatch::Alarm Properties: EvaluationPeriods: '1' Statistic: Average Threshold: '10' AlarmDescription: Alarm if CPU too high or metric disappears indicating instance is down Period: '60' AlarmActions: - Ref: ScaleUpPolicy Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: Ref: asGroup ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization

알림이 있는 Auto Scaling 그룹

이 예에서는 이전한 이벤트가 발생하면 Amazon SNS 알림을 보내는 AWS::AutoScaling::AutoScalingGroup 리소스를 보여줍니다. NotificationConfigurations 속성은 AWS CloudFormation에서 알림을 보내는 SNS 주제와 해당 원인 이벤트를 지정합니다. NotificationTypes에 지정된 이벤트가 발생하면 AWS CloudFormation에서 TopicARN에 지정된 SNS 주제에 알림을 보냅니다. 이 예에서 AWS CloudFormation은 autoscaling:EC2_INSTANCE_LAUNCHautoscaling:EC2_INSTANCE_LAUNCH_ERROR 이벤트가 발생할 경우 SNS 주제 topic1에 알림을 보냅니다.

JSON

Copy
"MyAsGroupWithNotification" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Ref" : "azList" }, "LaunchConfigurationName" : { "Ref" : "myLCOne" }, "MinSize" : "0", "MaxSize" : "2", "DesiredCapacity" : "1", "NotificationConfigurations" : [ { "TopicARN" : { "Ref" : "topic1" }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR" ] } ] } }

YAML

Copy
MyAsGroupWithNotification: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Ref: azList LaunchConfigurationName: Ref: myLCOne MinSize: '0' MaxSize: '2' DesiredCapacity: '1' NotificationConfigurations: - TopicARN: Ref: topic1 NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR

UpdatePolicy를 포함하는 Auto Scaling

이 예에서는 Auto Scaling 그룹에서 UpdatePolicy를 사용하는 방법을 보여줍니다.

JSON

Copy
"ASG1" : { "UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "1", "PauseTime" : "PT12M5S" } }, "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }, "LaunchConfigurationName" : { "Ref" : "ASLC" }, "MaxSize" : "3", "MinSize" : "1" } }

YAML

Copy
ASG1: UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '1' PauseTime: PT12M5S Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: Ref: AWS::Region LaunchConfigurationName: Ref: ASLC MaxSize: '3' MinSize: '1'