无法在 cloudformation 中使用 https 设置我的弹性负载均衡器
Posted
技术标签:
【中文标题】无法在 cloudformation 中使用 https 设置我的弹性负载均衡器【英文标题】:cannot set my elastic load balancer with https in cloudformation 【发布时间】:2018-03-23 14:11:59 【问题描述】:我在为启用 https 协议的 beanstalk 设置 cloudformation 时遇到问题。
这是我的配置设置:
configurationTemplateUI:
Type: AWS::ElasticBeanstalk::ConfigurationTemplate
DependsOn: BeanstalkAppUI
Properties:
ApplicationName:
Ref: BeanstalkAppUI
Description: AWS ElasticBeanstalk Sample Configuration Template
OptionSettings:
- Namespace: aws:autoscaling:asg
OptionName: MinSize
Value:
Ref: MinEc2s
- Namespace: aws:autoscaling:asg
OptionName: MaxSize
Value:
Ref: MaxEc2s
- Namespace: aws:elasticbeanstalk:environment
OptionName: EnvironmentType
Value: LoadBalanced
- Namespace: aws:autoscaling:launchconfiguration
OptionName: InstanceType
Value:
Ref: InstanceType
- Namespace: aws:ec2:vpc
OptionName: VPCId
Value:
Fn::ImportValue: !Sub $BusinessUnit-$EnvironmentInfra-vpc-VpcId
- Namespace: aws:ec2:vpc
OptionName: Subnets
Value:
Fn::ImportValue: !Sub $BusinessUnit-$EnvironmentInfra-vpc-SubnetIdPrivate$SubnetAvNumber
- Namespace: aws:ec2:vpc
OptionName: ELBSubnets
Value:
Fn::ImportValue: !Sub $BusinessUnit-$EnvironmentInfra-vpc-SubnetIdPublic$SubnetAvNumber
SolutionStackName:
Ref: BeanstalkPackInstallationUI
如您所见,我拥有所有值,并且在我运行它时效果非常好。我没有找到任何关于如何使用 https 设置 Elb 的选项。我可以在网络部分的 beanstalk 配置中手动在控制台中执行此操作。
任何人都可以阐明这一点吗? cloudformation有可能吗?
【问题讨论】:
【参考方案1】:我建议您查看 aws:elb:listener:listener_port 命名空间。
以下是一些我认为您可能会觉得有用的选项:
- Namespace: aws:elb:listener:443
OptionName: ListenerProtocol
Value: HTTPS
- Namespace: aws:elb:listener:443
OptionName: InstancePort
Value: 80
- Namespace: aws:elb:listener:443
OptionName: InstanceProtocol
Value: HTTP
- Namespace: aws:elb:listener:443
OptionName: SSLCertificateId
Value: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012
在本例中,它将 ELB 配置为接受 HTTPS 请求并使用 ACM 证书 arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012
为它们提供服务。 SSL 在 ELB 处终止,并使用标准 HTTP 执行与支持 EC2 实例的连接。
希望对您有所帮助。
编辑
由于某种原因,CloudFormation Elastic Beanstalk 选项在较新样式的 aws:elb:listener:listener_port 选项中没有得到尊重,但提问者能够使用较旧的样式 aws:elb:loadbalancer 选项获得成功
- Namespace: aws:elb:loadbalancer
OptionName: LoadBalancerHTTPPort
Value: '80'
- Namespace: aws:elb:loadbalancer
OptionName: LoadBalancerHTTPSPort
Value: '443'
- Namespace: aws:elb:loadbalancer
OptionName: SSLCertificateId
Value: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012
【讨论】:
非常感谢,我想我可以直接在 beanstalk cfn 中添加它,还是应该单独创建我的 elb? (因为 beanstalk 会自动创建我的 elb,这很容易) 这应该是 Beanstalk 将应用于它为您创建的 ELB 的一个下降。 运行时一切正常,但是当我在网络面板中检查 beanstalk 配置时,我发现 https 已关闭。有什么想法吗? 所以安全监听器 prot 已关闭且 ssl 证书 ID 尚未被选择 奇怪,beantalk控制台有错误吗?提供的值直接基于docs.aws.amazon.com/elasticbeanstalk/latest/dg/…【参考方案2】:我相信对于 Application Load Balancer,设置如下:
- Namespace: aws:elbv2:listener:443
OptionName: ListenerEnabled
Value: true
- Namespace: aws:elbv2:listener:443
OptionName: Protocol
Value: HTTPS
- Namespace: aws:elbv2:listener:443
OptionName: SSLCertificateArns
Value: arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012
【讨论】:
以上是关于无法在 cloudformation 中使用 https 设置我的弹性负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Cloudformation 模板中定义 Cloudwatch 警报的数学表达式
无法在 serverless.yml 中引用 CloudFormation 资源。变量 UserPoolId 的变量引用语法无效
我无法在我的 cloudformation 代码中添加“AWS”:“*”
无法仅使用 cloudformation 创建 IAM 策略