当您拥有通过 AWS Certificate Manager 颁发的域证书时,如何将该证书应用于 Elastic Beanstalk 应用程序。
是的,Elastic Beanstalk 应用程序是负载平衡的,并且确实有一个与之关联的 ELB。
我知道我可以将它直接应用到我自己的 ELB。但我想通过 Elastic Beanstalk 应用它,以便将 env 配置保存到 Cloud Formation 模板中。
当您拥有通过 AWS Certificate Manager 颁发的域证书时,如何将该证书应用于 Elastic Beanstalk 应用程序。
是的,Elastic Beanstalk 应用程序是负载平衡的,并且确实有一个与之关联的 ELB。
我知道我可以将它直接应用到我自己的 ELB。但我想通过 Elastic Beanstalk 应用它,以便将 env 配置保存到 Cloud Formation 模板中。
我发现,你不能通过弹性豆茎控制台来做到这一点(至少现在还没有)。但是,您仍然可以通过 eb cli 或 aws cli 进行设置。
基本上我们要做的是更新aws:elb:listener
设置,您可以在通用选项文档中查看可能的设置。
使用 EB CLI 非常简单。假设我们已经awsebcli
为我们的项目设置了工具,我们可以使用该eb config
命令。
它将打开您的默认终端编辑器并允许您更改以 YAML 文件形式编写的设置。当您进行更改并保存时,eb config
cmd 将自动更新您的 Elastic Beanstalk 环境的设置。
您需要将以下设置添加到配置文件中:
aws:elb:listener:443:
InstancePort: '80'
InstanceProtocol: HTTP
ListenerEnabled: 'true'
ListenerProtocol: HTTPS
PolicyNames: null
SSLCertificateId: CERTIFICATE_ARN_HERE
将值更改为CERTIFICATE_ARN_HERE
您的 AMC 证书 ARN。您可以在 AWS Certificate Manager 控制台中找到它:
重要提示:您的aws:elb:listener:443
设置必须置于设置之上aws:elb:listener:80
。否则环境配置更新会报错。
同样可以通过update-environment命令使用通用aws cli
工具来完成。
aws elasticbeanstalk update-environment \
--environment-name APPLICATION_ENV --option-settings \
Namespace=aws:elb:listener:443,OptionName=InstancePort,Value=80 \
Namespace=aws:elb:listener:443,OptionName=InstanceProtocol,Value=HTTP \
Namespace=aws:elb:listener:443,OptionName=ListenerProtocol,Value=HTTPS \
Namespace=aws:elb:listener:443,OptionName=SSLCertificateId,Value=CERTIFICATE_ARN_HERE
注意:当您通过上述任一方法对其进行更新时,Elastic Beanstalk 控制台不会将 HTTPS 显示为已启用。但是负载均衡器会,它也将应用于 Cloudformation 模板,并保存到 EB 的配置中。
您可以完全使用 CloudFormation 来做到这一点;但是,与 Elastic Beanstalk 似乎很常见的配置选项相比,在文档中找到配置选项比在组成 Elastic Beanstalk 的各个组件中要难得多。信息在这里:
但基本上您需要做的是将证书的创建添加到您的模板中,然后在OptionSettings
中引用它AWS::ElasticBeanstalk::ConfigurationTemplate
:
"Certificate" : {
"Type": "AWS::CertificateManager::Certificate",
"Properties": {
"DomainName": "example.com",
}
},
// ...
"ElasticbeanstalkTemplate": {
"Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
"Properties": {
"SolutionStackName": "MyEBStack",
"ApplicationName": "MyAppName",
"Description": "",
"OptionSettings": [{
"Namespace": "aws:elb:listener:443",
"OptionName": "InstancePort",
"Value": "80"
}, {
"Namespace": "aws:elb:listener:443",
"OptionName": "InstanceProtocol",
"Value": "HTTP"
}, {
"Namespace": "aws:elb:listener:443",
"OptionName": "ListenerProtocol",
"Value": "HTTPS"
}, {
"Namespace": "aws:elb:listener:443",
"OptionName": "SSLCertificateId",
"Value": {
"Ref": "Certificate"
}
}, /*More settings*/]
检查您在哪个区域中创建了证书,以及它是否与 Elastic Beanstalk 区域匹配。我把它们放在不同的区域,所以它不起作用。