Terraform出现Unsupported block type错误:autoscaling_group的scaling_policy问题
解决Terraform配置AWS Auto Scaling Group时的Unsupported block type错误
报错原因
aws_autoscaling_group资源本身不支持嵌套的scaling_policy块,扩缩容策略需要通过独立的aws_autoscaling_policy资源定义,同时配合CloudWatch指标告警触发策略执行。
修正步骤及示例代码
移除ASG资源内的
scaling_policy块
直接删除你当前aws_autoscaling_group "ASG_asg"里的scaling_policy相关代码块。定义独立的扩容策略
这里提供两种常用的扩容配置方式:- 步骤扩容策略(适合自定义不同阈值的扩缩容幅度):
resource "aws_autoscaling_policy" "cpu_scale_out" { name = "cpu-scale-out-policy" scaling_adjustment = 1 adjustment_type = "ChangeInCapacity" autoscaling_group_name = aws_autoscaling_group.ASG_asg.name } - 目标追踪策略(自动维持CPU使用率在目标值,无需手动配置告警):
resource "aws_autoscaling_policy" "cpu_target_tracking" { name = "cpu-target-tracking-policy" autoscaling_group_name = aws_autoscaling_group.ASG_asg.name policy_type = "TargetTrackingScaling" target_tracking_configuration { predefined_metric_specification { predefined_metric_type = "ASGAverageCPUUtilization" } target_value = 70.0 } }
- 步骤扩容策略(适合自定义不同阈值的扩缩容幅度):
配置CloudWatch告警(仅步骤扩容策略需要)
如果用步骤扩容,需要创建告警触发策略:resource "aws_cloudwatch_metric_alarm" "high_cpu" { alarm_name = "high-cpu-alarm" comparison_operator = "GreaterThanThreshold" evaluation_periods = "2" metric_name = "CPUUtilization" namespace = "AWS/EC2" period = "60" statistic = "Average" threshold = "70" alarm_description = "EC2平均CPU使用率超过70%时触发扩容" alarm_actions = [aws_autoscaling_policy.cpu_scale_out.arn] dimensions = { AutoScalingGroupName = aws_autoscaling_group.ASG_asg.name } }
说明
- 目标追踪策略会自动生成对应的CloudWatch告警,适合简单的指标维持场景;
- 步骤扩容策略可自定义多阈值对应不同扩缩容幅度,灵活性更高,但需手动配置告警。
内容的提问来源于stack exchange,提问作者Ankit Singh
相关产品推荐
相关产品推荐

