Networking 如何通过2个不同的协议将ALB点指向同一应用程序?
我有一个应用程序,我正在使用Terraform在ECS上部署到AWS。我想对它进行设置,以便它可以通过HTTP执行健康检查,但需要身份验证并通过HTTPS执行所有其他活动。然而,我不知道如何设置它,我正在尝试的任何东西都不起作用。理想情况下,HTTPS端口应该是8080(不确定这是否可行,如果不可行,请告知;使用不同的端口没什么大不了的)。HTTP端口在理想情况下也应该是8080,但也可以不同(我对网络一无所知,也不确定是否可以使用两种不同的协议访问同一端口以访问两组不同的端点) 这是我尝试过的最新迭代(缩写为仅显示我认为重要的部分);我也尝试过其他方法,但这是最近的:Networking 如何通过2个不同的协议将ALB点指向同一应用程序?,networking,https,terraform,amazon-ecs,aws-alb,Networking,Https,Terraform,Amazon Ecs,Aws Alb,我有一个应用程序,我正在使用Terraform在ECS上部署到AWS。我想对它进行设置,以便它可以通过HTTP执行健康检查,但需要身份验证并通过HTTPS执行所有其他活动。然而,我不知道如何设置它,我正在尝试的任何东西都不起作用。理想情况下,HTTPS端口应该是8080(不确定这是否可行,如果不可行,请告知;使用不同的端口没什么大不了的)。HTTP端口在理想情况下也应该是8080,但也可以不同(我对网络一无所知,也不确定是否可以使用两种不同的协议访问同一端口以访问两组不同的端点) 这是我尝试过的
resource "aws_ecs_service" "service" {
name = "${var.app_name}-service"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = var.app_count
launch_type = "FARGATE"
health_check_grace_period_seconds = 240
network_configuration {
security_groups = [var.security_group_id]
subnets = var.private_subnet_ids
assign_public_ip = true
}
load_balancer {
target_group_arn = aws_alb_target_group.app.id
container_name = var.app_name
container_port = var.app_port
}
depends_on = [aws_alb_listener.listener]
}
resource "aws_alb_target_group" "app" {
name = "${var.app_name}-target-group"
port = 443
protocol = "HTTPS"
vpc_id = var.vpc_id
target_type = "ip"
health_check {
interval = "30"
protocol = "HTTPS"
matcher = "200-299"
timeout = "3"
path = var.app_health_check_path
unhealthy_threshold = "3"
}
}
resource "aws_alb_listener" "listener" {
load_balancer_arn = var.alb_arn
port = var.alb_listener_port
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016-08"
certificate_arn = var.ssl_cert
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "contact admin for ${var.app_name} access"
status_code = 403
}
}
}
resource "aws_lb_listener_rule" "cf_auth_listener_rule" {
listener_arn = aws_alb_listener.listener.arn
priority = 101
action {
type = "forward"
target_group_arn = aws_alb_target_group.app.arn
}
condition {
http_header {
http_header_name = <HEADER_NAME>
values = [<HEADER_VALUE>]
}
}
}
resource "aws_lb_listener_rule" "health_check_listener_rule" {
listener_arn = aws_alb_listener.listener.arn
priority = 1
action {
type = "forward"
target_group_arn = aws_alb_target_group.app.arn
}
condition {
path_pattern {
values = [var.app_health_check_path]
}
}
}
资源“aws\U ecs\U服务”“服务”{
name=“${var.app_name}-服务”
cluster=aws\u ecs\u cluster.main.id
task_definition=aws_ecs_task_definition.app.arn
所需数量=变量应用数量
启动类型=“FARGATE”
健康检查宽限期秒=240
网络配置{
安全组=[var.security\u group\u id]
子网=变量私有子网ID
分配\u公共\u ip=true
}
负载平衡器{
target\u group\u arn=aws\u alb\u target\u group.app.id
容器名称=变量应用名称
容器\端口=变量应用\端口
}
依赖于=[aws\u alb\u listener.listener]
}
资源“aws\u alb\u目标组”应用程序{
name=“${var.app_name}-目标组”
端口=443
协议=“HTTPS”
vpc_id=变量vpc_id
target_type=“ip”
健康检查{
间隔=“30”
协议=“HTTPS”
matcher=“200-299”
超时=“3”
路径=变量应用程序\运行状况\检查\路径
不健康\u阈值=“3”
}
}
资源“aws\u alb\u侦听器”“侦听器”{
负载均衡器=var.alb\u arn
端口=var.alb_侦听器_端口
协议=“HTTPS”
ssl_policy=“ELBSecurityPolicy-2016-08”
证书\u arn=var.ssl\u证书
默认操作{
type=“固定响应”
固定响应{
content\u type=“文本/普通”
message_body=“联系管理员以获得${var.app_name}访问权”
状态\ U代码=403
}
}
}
资源“aws\u lb\u侦听器\u规则”“cf\u auth\u侦听器\u规则”{
listener\u arn=aws\u alb\u listener.listener.arn
优先级=101
行动{
type=“前进”
target\u group\u arn=aws\u alb\u target\u group.app.arn
}
状况{
http_头{
http_头_名称=
值=[]
}
}
}
资源“aws\u lb\u侦听器\u规则”“运行状况检查\u侦听器\u规则”{
listener\u arn=aws\u alb\u listener.listener.arn
优先级=1
行动{
type=“前进”
target\u group\u arn=aws\u alb\u target\u group.app.arn
}
状况{
路径图{
值=[var.app\u health\u check\u path]
}
}
}
我遇到的问题是,我的服务正在启动,但由于健康检查失败而立即关闭。ALB似乎无法联系运行状况检查端点以执行运行状况检查。请公布您所发现的错误getting@ArunK我没有收到任何错误,只是由于运行状况检查失败,我的ECS任务正在崩溃。您的运行状况检查正在使用HTTPS,您确定您的容器正在运行HTTPS和端口443吗。