Terraform 将负载均衡器侦听器附加到 Elastic Beanstalk 负载均衡器。不是有效的负载均衡器 ARN
Terraform attaching a load balancer listener to an Elastic Beanstalk load balancer. Not a valid load balancer ARN
我正在尝试将 SSL 证书附加到通过 Terraform 创建并在启动时附加的 Elastic Beanstalk 负载均衡器。启动的 EBS 环境将成为一个网络 api,这就是为什么我需要将 https ssl 证书附加到环境,因为我想根据命令启动它 up/down 而无需手动附加每次都发送给服务。
我所做的是下面的代码,但我一直收到错误:
Error: error creating ELBv2 Listener (arn:aws:elasticloadbalancing:us-east-1:profile:loadbalancer/name: ValidationError: 'arn:aws:elasticloadbalancing:us-east-1:profile:loadbalancer/name' is not a valid load balancer ARN
status code: 400, request id: xxxxxxxxxxxxxxxxxxx
我最初尝试过:
load_balancer_arn = "${aws_elastic_beanstalk_environment.ebs-env.load_balancers[0].arn}"
但是 aws_elastic_beanstalk_environment.ebs-env.load_balancers[0]
returns 这个名字,所以我不能只做 .arn,这导致我通过为 arn 编写一个自定义字符串并从 EBS 环境负载均衡器中获得名称并附加它来做到这一点到 ARN。
EBS 创建了一个经典的负载均衡器,我在 AWS 网站上找到的 ARN 如下所示,我对所有内容进行格式化的方式进行了四重检查,但我仍然收到该错误,表明它不是有效的 ARN。
我已经检查过 EBS 名称是 AWS 控制台中负载均衡器的实际名称,并且它与 terraform 在启动时命名。所以它是负载均衡器的有效名称,但即使我手动验证该名称是正确的,我仍然出现上面描述的错误。
AWS 文档引导我使用:
arn:partition:service:region:account-id:resource-id
对于 arn 自定义名称,并发现:
arn:aws:elasticloadbalancing:region:account-id:loadbalancer/name
是我正在使用的负载均衡器的正确 ARN。
这是我用来旋转 up/down 这个基础设施的 terraform 代码:
provider "aws" {
region = "us-east-1"
}
resource "aws_elastic_beanstalk_application" "ebaTest" {
name = "EBA-test"
description = "Development test EBS system"
}
resource "aws_elastic_beanstalk_environment" "ebs-env" {
name = "ebs-env"
application = aws_elastic_beanstalk_application.ebaTest.name
solution_stack_name = "64bit Amazon Linux 2 v2.2.10 running .NET Core"
cname_prefix = "ebsp-env"
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "IamInstanceProfile"
value = "aws-elasticbeanstalk-ec2-role"
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "InstanceType"
value = "t3a.micro"
}
}
resource "aws_lb_listener" "cert-listener" {
load_balancer_arn = "arn:aws:elasticloadbalancing:us-east-1:aws-id:loadbalancer/${aws_elastic_beanstalk_environment.ebs-env.load_balancers[0]}"
port = "443"
protocol = "HTTPS"
certificate_arn = "arn:aws:acm:us-east-1:aws-id:certificate/cert-id"
default_action {
type = "fixed-response"
}
}
如果您有任何其他需要澄清的问题 questions/confused,我会尽快回复。
aws_lb_listener
是 AWS ELBv2 的一部分,仅适用于应用程序负载均衡器和网络负载均衡器。你说你正在创建一个经典的负载均衡器。如果 Terraform 本身不管理负载均衡器,我认为您不能通过 Terraform 更新 CLB 的证书。
您使用 CLB 而不是较新的 ALB 有什么原因吗?无论哪种方式,the correct method to do this 都是将 SSL 证书的 ARN 作为设置直接传递给 Elastic Beanstalk 资源:
setting {
namespace = "aws:elb:listener:443"
name = "SSLCertificateId"
value = "arn:aws:acm:us-east-1:aws-id:certificate/cert-id"
}
我正在尝试将 SSL 证书附加到通过 Terraform 创建并在启动时附加的 Elastic Beanstalk 负载均衡器。启动的 EBS 环境将成为一个网络 api,这就是为什么我需要将 https ssl 证书附加到环境,因为我想根据命令启动它 up/down 而无需手动附加每次都发送给服务。
我所做的是下面的代码,但我一直收到错误:
Error: error creating ELBv2 Listener (arn:aws:elasticloadbalancing:us-east-1:profile:loadbalancer/name: ValidationError: 'arn:aws:elasticloadbalancing:us-east-1:profile:loadbalancer/name' is not a valid load balancer ARN
status code: 400, request id: xxxxxxxxxxxxxxxxxxx
我最初尝试过:
load_balancer_arn = "${aws_elastic_beanstalk_environment.ebs-env.load_balancers[0].arn}"
但是 aws_elastic_beanstalk_environment.ebs-env.load_balancers[0]
returns 这个名字,所以我不能只做 .arn,这导致我通过为 arn 编写一个自定义字符串并从 EBS 环境负载均衡器中获得名称并附加它来做到这一点到 ARN。
EBS 创建了一个经典的负载均衡器,我在 AWS 网站上找到的 ARN 如下所示,我对所有内容进行格式化的方式进行了四重检查,但我仍然收到该错误,表明它不是有效的 ARN。
我已经检查过 EBS 名称是 AWS 控制台中负载均衡器的实际名称,并且它与 terraform 在启动时命名。所以它是负载均衡器的有效名称,但即使我手动验证该名称是正确的,我仍然出现上面描述的错误。
AWS 文档引导我使用:
arn:partition:service:region:account-id:resource-id
对于 arn 自定义名称,并发现:
arn:aws:elasticloadbalancing:region:account-id:loadbalancer/name
是我正在使用的负载均衡器的正确 ARN。
这是我用来旋转 up/down 这个基础设施的 terraform 代码:
provider "aws" {
region = "us-east-1"
}
resource "aws_elastic_beanstalk_application" "ebaTest" {
name = "EBA-test"
description = "Development test EBS system"
}
resource "aws_elastic_beanstalk_environment" "ebs-env" {
name = "ebs-env"
application = aws_elastic_beanstalk_application.ebaTest.name
solution_stack_name = "64bit Amazon Linux 2 v2.2.10 running .NET Core"
cname_prefix = "ebsp-env"
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "IamInstanceProfile"
value = "aws-elasticbeanstalk-ec2-role"
}
setting {
namespace = "aws:autoscaling:launchconfiguration"
name = "InstanceType"
value = "t3a.micro"
}
}
resource "aws_lb_listener" "cert-listener" {
load_balancer_arn = "arn:aws:elasticloadbalancing:us-east-1:aws-id:loadbalancer/${aws_elastic_beanstalk_environment.ebs-env.load_balancers[0]}"
port = "443"
protocol = "HTTPS"
certificate_arn = "arn:aws:acm:us-east-1:aws-id:certificate/cert-id"
default_action {
type = "fixed-response"
}
}
如果您有任何其他需要澄清的问题 questions/confused,我会尽快回复。
aws_lb_listener
是 AWS ELBv2 的一部分,仅适用于应用程序负载均衡器和网络负载均衡器。你说你正在创建一个经典的负载均衡器。如果 Terraform 本身不管理负载均衡器,我认为您不能通过 Terraform 更新 CLB 的证书。
您使用 CLB 而不是较新的 ALB 有什么原因吗?无论哪种方式,the correct method to do this 都是将 SSL 证书的 ARN 作为设置直接传递给 Elastic Beanstalk 资源:
setting {
namespace = "aws:elb:listener:443"
name = "SSLCertificateId"
value = "arn:aws:acm:us-east-1:aws-id:certificate/cert-id"
}