繁体   English   中英

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 环境将是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM