ElasticBeanstalk 使用 Terraform 在共享 ALB 中使用 HTTPS:443 而不是 HTTP:80 创建默认侦听器规则
ElasticBeanstalk Create Default Listener Rule with HTTPS:443 instead of HTTP:80 in Shared ALB with Terraform
在 terraform 中创建具有共享负载平衡的 ElasticBeanstalk 环境时,是否可以将默认侦听器规则设置为使用 HTTPS:443 侦听器而不是 HTTP:80 侦听器?
我的 ALB 将端口 80 作为侦听器以将流量从 http 重定向到 https。现在,当 beantalk 创建一个环境时,它会在 HTTP:80 侦听器中创建一个侦听器规则,我不希望它这样做。在控制台中,我可以创建一个具有共享 ALB 和 select 默认侦听器端口为 443(HTTPS) 的环境,并将在 443 侦听器中创建一个默认规则,而不是我想要发生的事情。
我正在使用 terraform 构建它,在 ElasticBeanstalk general options 的常规选项中,我没有看到将默认侦听器规则设置为对 elbv2 设置使用 HTTPS:443 的选项。
在这上面花了太多时间之后,答案是将默认规则分配给 :443
侦听器。我通过查看在 ebextension 配置文件的规则块中指定默认选项的 AWS 文档实现了这一点 - link.
dynamic "setting" {
for_each = var.enable_shared_alb ? [1] : []
content {
namespace = "aws:elbv2:listener:443"
name = "Rules"
# Setting the default value here prevent
# the default rule from being created in the ALB's HTTP:80 listener
# Instead the default rule will be created in the HTTPS:443 listener
value = "default,some-other-rule-name"
}
}
我在尝试通过 JSON 中编写的 CloudFormation 模板创建一个共享的应用程序负载均衡器时遇到了这个问题,该应用程序负载均衡器仅在端口 443 上侦听多个 ElasticBeanstalk 环境的 HTTPS。 CloudFormation 堆栈中的实际错误如下所示:
Configuration validation exception: Invalid option value: 'default' (Namespace: 'aws:elbv2:listener:80', OptionName: 'Rules'): The load balancer you specified doesn't have a listener on port 80. Specify listener options only for existing listeners.
感谢 MillerC 的回答,我可以这样解决:
"Resources": {
"ApplicationConfigurationTemplate": {
"Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
"Properties": {
"OptionSettings": [
{
"Namespace": "aws:elbv2:listener:443",
"OptionName": "Rules",
"Value": "default"
}
]
}
}
}
在 terraform 中创建具有共享负载平衡的 ElasticBeanstalk 环境时,是否可以将默认侦听器规则设置为使用 HTTPS:443 侦听器而不是 HTTP:80 侦听器?
我的 ALB 将端口 80 作为侦听器以将流量从 http 重定向到 https。现在,当 beantalk 创建一个环境时,它会在 HTTP:80 侦听器中创建一个侦听器规则,我不希望它这样做。在控制台中,我可以创建一个具有共享 ALB 和 select 默认侦听器端口为 443(HTTPS) 的环境,并将在 443 侦听器中创建一个默认规则,而不是我想要发生的事情。
我正在使用 terraform 构建它,在 ElasticBeanstalk general options 的常规选项中,我没有看到将默认侦听器规则设置为对 elbv2 设置使用 HTTPS:443 的选项。
在这上面花了太多时间之后,答案是将默认规则分配给 :443
侦听器。我通过查看在 ebextension 配置文件的规则块中指定默认选项的 AWS 文档实现了这一点 - link.
dynamic "setting" {
for_each = var.enable_shared_alb ? [1] : []
content {
namespace = "aws:elbv2:listener:443"
name = "Rules"
# Setting the default value here prevent
# the default rule from being created in the ALB's HTTP:80 listener
# Instead the default rule will be created in the HTTPS:443 listener
value = "default,some-other-rule-name"
}
}
我在尝试通过 JSON 中编写的 CloudFormation 模板创建一个共享的应用程序负载均衡器时遇到了这个问题,该应用程序负载均衡器仅在端口 443 上侦听多个 ElasticBeanstalk 环境的 HTTPS。 CloudFormation 堆栈中的实际错误如下所示:
Configuration validation exception: Invalid option value: 'default' (Namespace: 'aws:elbv2:listener:80', OptionName: 'Rules'): The load balancer you specified doesn't have a listener on port 80. Specify listener options only for existing listeners.
感谢 MillerC 的回答,我可以这样解决:
"Resources": {
"ApplicationConfigurationTemplate": {
"Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
"Properties": {
"OptionSettings": [
{
"Namespace": "aws:elbv2:listener:443",
"OptionName": "Rules",
"Value": "default"
}
]
}
}
}