Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33553200
D15489.1769090365.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D15489.1769090365.diff
View Options
diff --git a/services/terraform/modules/fargate-autoscaling/main.tf b/services/terraform/modules/fargate-autoscaling/main.tf
new file mode 100644
--- /dev/null
+++ b/services/terraform/modules/fargate-autoscaling/main.tf
@@ -0,0 +1,46 @@
+resource "aws_appautoscaling_target" "service" {
+ count = var.create_resources ? 1 : 0
+ max_capacity = var.max_capacity
+ min_capacity = var.min_capacity
+ resource_id = "service/${var.cluster_name}/${var.service_name}"
+ scalable_dimension = "ecs:service:DesiredCount"
+ service_namespace = "ecs"
+}
+
+# Target tracking scaling based on CPU utilization
+resource "aws_appautoscaling_policy" "cpu_target_tracking" {
+ count = var.create_resources ? 1 : 0
+ name = "${var.service_name}-cpu-target-tracking"
+ policy_type = "TargetTrackingScaling"
+ resource_id = aws_appautoscaling_target.service[0].resource_id
+ scalable_dimension = aws_appautoscaling_target.service[0].scalable_dimension
+ service_namespace = aws_appautoscaling_target.service[0].service_namespace
+
+ target_tracking_scaling_policy_configuration {
+ predefined_metric_specification {
+ predefined_metric_type = "ECSServiceAverageCPUUtilization"
+ }
+ target_value = var.cpu_target
+ scale_in_cooldown = var.scale_in_cooldown
+ scale_out_cooldown = var.scale_out_cooldown
+ }
+}
+
+# Target tracking scaling based on memory utilization
+resource "aws_appautoscaling_policy" "memory_target_tracking" {
+ count = var.create_resources ? 1 : 0
+ name = "${var.service_name}-memory-target-tracking"
+ policy_type = "TargetTrackingScaling"
+ resource_id = aws_appautoscaling_target.service[0].resource_id
+ scalable_dimension = aws_appautoscaling_target.service[0].scalable_dimension
+ service_namespace = aws_appautoscaling_target.service[0].service_namespace
+
+ target_tracking_scaling_policy_configuration {
+ predefined_metric_specification {
+ predefined_metric_type = "ECSServiceAverageMemoryUtilization"
+ }
+ target_value = var.memory_target
+ scale_in_cooldown = var.scale_in_cooldown
+ scale_out_cooldown = var.scale_out_cooldown
+ }
+}
\ No newline at end of file
diff --git a/services/terraform/modules/fargate-autoscaling/outputs.tf b/services/terraform/modules/fargate-autoscaling/outputs.tf
new file mode 100644
--- /dev/null
+++ b/services/terraform/modules/fargate-autoscaling/outputs.tf
@@ -0,0 +1,25 @@
+output "autoscaling_target_arn" {
+ description = "ARN of the auto-scaling target"
+ value = var.create_resources ? aws_appautoscaling_target.service[0].arn : null
+}
+
+output "cpu_policy_arn" {
+ description = "ARN of the CPU scaling policy"
+ value = var.create_resources ? aws_appautoscaling_policy.cpu_target_tracking[0].arn : null
+}
+
+output "memory_policy_arn" {
+ description = "ARN of the memory scaling policy"
+ value = var.create_resources ? aws_appautoscaling_policy.memory_target_tracking[0].arn : null
+}
+
+output "scaling_configuration" {
+ description = "Summary of scaling configuration"
+ value = var.create_resources ? {
+ service_name = var.service_name
+ min_capacity = var.min_capacity
+ max_capacity = var.max_capacity
+ cpu_target = var.cpu_target
+ memory_target = var.memory_target
+ } : null
+}
\ No newline at end of file
diff --git a/services/terraform/modules/fargate-autoscaling/variables.tf b/services/terraform/modules/fargate-autoscaling/variables.tf
new file mode 100644
--- /dev/null
+++ b/services/terraform/modules/fargate-autoscaling/variables.tf
@@ -0,0 +1,61 @@
+variable "create_resources" {
+ description = "Whether to create auto-scaling resources"
+ type = bool
+ default = true
+}
+
+variable "service_name" {
+ description = "Name of the ECS service"
+ type = string
+}
+
+variable "cluster_name" {
+ description = "Name of the ECS cluster"
+ type = string
+}
+
+variable "min_capacity" {
+ description = "Minimum number of tasks"
+ type = number
+ default = 1
+}
+
+variable "max_capacity" {
+ description = "Maximum number of tasks"
+ type = number
+ default = 8
+}
+
+variable "cpu_target" {
+ description = "Target CPU utilization percentage"
+ type = number
+ default = 30.0
+
+ validation {
+ condition = var.cpu_target > 0 && var.cpu_target <= 100
+ error_message = "CPU target must be between 0 and 100."
+ }
+}
+
+variable "memory_target" {
+ description = "Target memory utilization percentage"
+ type = number
+ default = 40.0
+
+ validation {
+ condition = var.memory_target > 0 && var.memory_target <= 100
+ error_message = "Memory target must be between 0 and 100."
+ }
+}
+
+variable "scale_in_cooldown" {
+ description = "Cooldown period (in seconds) before scaling down"
+ type = number
+ default = 300
+}
+
+variable "scale_out_cooldown" {
+ description = "Cooldown period (in seconds) before scaling up"
+ type = number
+ default = 60
+}
\ No newline at end of file
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jan 22, 1:59 PM (14 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5972551
Default Alt Text
D15489.1769090365.diff (5 KB)
Attached To
Mode
D15489: [terraform] create autoscaling resources for Fargate services
Attached
Detach File
Event Timeline
Log In to Comment