如果您通过AWS证书管理器颁发了域名证书,如何将该证书应用于弹性Beanstalk应用程序。
是的,弹性Beanstalk应用程序是负载均衡的,并且确实与ELB相关联。
我知道我可以直接将其应用于ELB。但是,我想通过Elastic Beanstalk应用它,以便环境配置保存在Cloud Formation模板中。
如果您通过AWS证书管理器颁发了域名证书,如何将该证书应用于弹性Beanstalk应用程序。
是的,弹性Beanstalk应用程序是负载均衡的,并且确实与ELB相关联。
我知道我可以直接将其应用于ELB。但是,我想通过Elastic Beanstalk应用它,以便环境配置保存在Cloud Formation模板中。
我发现,你无法通过elastic beanstalk控制台来完成此操作(至少目前还不行)。但是你仍然可以通过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 证书管理器控制台中找到它:
重要提示:您的 aws:elb:listener:443
设置必须放在 aws:elb:listener:80
设置之前。否则,环境配置更新将出错。
您也可以使用通用的 aws cli
工具通过 update-environment 命令来完成相同的操作。
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的个别组件相比,配置选项在文档中似乎更难找到。这里有相关信息:
但基本上你需要做的是将证书的创建添加到你的模板中,然后在 AWS::ElasticBeanstalk::ConfigurationTemplate
的 OptionSettings
中引用它:
"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*/]
检查您创建证书的区域是否与弹性 Beanstalk 区域匹配。我将它们放在不同的区域,所以它无法工作。