[英]Terraform attaching a load balancer listener to an Elastic Beanstalk load balancer. Not a valid load balancer ARN
我正在尝试将 SSL 证书附加到通过 terraform 创建并在启动时附加的 Elastic Beanstalk 负载均衡器。 启动的 EBS 环境将是 web api,这就是为什么我需要将 https ssl 证书附加到环境,因为我想根据命令启动/关闭它,而不必每次都手动将其附加到服务.
我所做的是下面的代码,但我不断收到错误消息:
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]
返回名称所以我不能只做.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。
这是我用来启动/关闭此基础设施的 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"
}
}
如果您有任何其他需要澄清的问题/对某些事情感到困惑,我会尽快回复。
aws_lb_listener
是 AWS ELBv2 的一部分,仅适用于 Application Load Balancer 和 Network Load Balancer。 你说你正在创建一个经典的负载均衡器。 如果 Terraform 本身不管理负载均衡器,我认为您不能通过 Terraform 更新 CLB 的证书。
您是否有任何理由使用 CLB 而不是较新的 ALB? 无论哪种方式, 执行此操作的正确方法是将 SSL 证书的 ARN 作为设置直接传递到 Elastic Beanstalk 资源:
setting {
namespace = "aws:elb:listener:443"
name = "SSLCertificateId"
value = "arn:aws:acm:us-east-1:aws-id:certificate/cert-id"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.