我已按照本指南设置 GTM 服务器端:https://aws-solutions-library-samples.github.io/advertising-marketing/using-google-tag-manager-for-server-side-website-analytics- on-aws.html
我正在使用 AWS ECS 任务定义和服务。后来,我使用 Snowbridge 使用 HTTP post 请求将数据从 AWS kinesis 发送到 GTM(扫雪机客户端)。
当数据量较大时,我偶尔会收到 GTM 的 502 错误。如果我过滤掉数据并减少转发到 GTM 的数据量,我就不会再收到错误。我可以在 GTM 端进行哪些更改以确保可以处理大量数据? ECS 可以使用自动伸缩吗?我已经使用了类似的参数
部署最大百分比= 200
deployment_minimum_healthy_percent = 50
但问题仍然存在。
这就是我的 GTM 配置的大致样子:
resource "aws_ecs_cluster" "gtm" {
name = "gtm"
setting {
name = "containerInsights"
value = "enabled"
}
}
resource "aws_ecs_task_definition" "PrimaryServerSideContainer" {
family = "PrimaryServerSideContainer"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = 2048
memory = 4096
execution_role_arn = aws_iam_role.gtm_container_exec_role.arn
task_role_arn = aws_iam_role.gtm_container_role.arn
runtime_platform {
operating_system_family = "LINUX"
cpu_architecture = "X86_64"
}
container_definitions = <<TASK_DEFINITION
[
{
"name": "primary",
"image": "gcr.io/cloud-tagging-10302018/gtm-cloud-image",
"environment": [
{
"name": "PORT",
"value": "80"
},
{
"name": "PREVIEW_SERVER_URL",
"value": "${var.PREVIEW_SERVER_URL}"
},
{
"name": "CONTAINER_CONFIG",
"value": "${var.CONTAINER_CONFIG}"
}
],
"cpu": 1024,
"memory": 2048,
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "gtm-primary",
"awslogs-create-group": "true",
"awslogs-region": "eu-central-1",
"awslogs-stream-prefix": "ecs"
}
},
"portMappings" : [
{
"containerPort" : 80,
"hostPort" : 80
}
]
}
]
TASK_DEFINITION
}
resource "aws_ecs_service" "PrimaryServerSideService" {
name = var.primary_service_name
cluster = aws_ecs_cluster.gtm.id
task_definition = aws_ecs_task_definition.PrimaryServerSideContainer.id
desired_count = var.primary_service_desired_count
launch_type = "FARGATE"
platform_version = "LATEST"
scheduling_strategy = "REPLICA"
deployment_maximum_percent = 200
deployment_minimum_healthy_percent = 50
network_configuration {
assign_public_ip = true
security_groups = [aws_security_group.gtm-security-group.id]
subnets = data.aws_subnets.private.ids
}
load_balancer {
target_group_arn = aws_lb_target_group.PrimaryServerSideTarget.arn
container_name = "primary"
container_port = 80
}
lifecycle {
ignore_changes = [task_definition]
}
}
resource "aws_lb" "PrimaryServerSideLoadBalancer" {
name = "PrimaryServerSideLoadBalancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.gtm-security-group.id]
subnets = data.aws_subnets.public.ids
enable_deletion_protection = false
}
....
我也尝试添加这些:
resource "aws_appautoscaling_target" "ecs_target" {
max_capacity = 4
min_capacity = 1
resource_id = "service/${aws_ecs_cluster.gtm.name}/${aws_ecs_service.PrimaryServerSideService.name}"
scalable_dimension = "ecs:service:DesiredCount"
service_namespace = "ecs"
}
resource "aws_appautoscaling_policy" "ecs_policy" {
name = "scale-down"
policy_type = "StepScaling"
resource_id = aws_appautoscaling_target.ecs_target.resource_id
scalable_dimension = aws_appautoscaling_target.ecs_target.scalable_dimension
service_namespace = aws_appautoscaling_target.ecs_target.service_namespace
step_scaling_policy_configuration {
adjustment_type = "ChangeInCapacity"
cooldown = 60
metric_aggregation_type = "Maximum"
step_adjustment {
metric_interval_upper_bound = 0
scaling_adjustment = -1
}
}
}
但 502 错误仍然存在。
deployment_*
设置仅影响部署。这些不是自动缩放设置。您需要配置 AWS Application Auto-Scaling 以自动扩展您的 ECS 服务。 Terraform 文档中有一个配置 ECS 自动缩放的示例这里。