10

当您通过AWS Certificate Manager颁发您的域的证书时,如何将该证书应用于Elastic Beanstalk应用程序。在Elastic Beanstalk中使用AWS证书管理器(ACM证书)

是的,Elastic Beanstalk应用程序是负载均衡的,并且有一个ELB与之关联。

我知道我可以直接将它应用于ELB我的自我。但我想通过Elastic Beanstalk应用它,以便将env配置保存到Cloud Formation模板上。

回答

12

我发现,你不能通过弹性beanstalk控制台(至少现在还没有)。但是,您仍然可以通过eb cli或aws cli来设置它。

使用EB CLI

基本上我们试图做的是更新aws:elb:listener设置,您可以在general options文档查看可能的设置。

使用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设置MUST放在上面的aws:elb:listener:80设置。否则,环境配置更新将会出错。


使用AWS CLI

同样可以通过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 

注:当通过任一方法更新它上面,弹性魔豆控制台将不会显示HTTPS作为启用。但负载平衡器将会,并且它也将应用于Cloudformation模板并保存到EB的配置中。

+1

我有EB CLI,并且通过在.ebextensions添加配置文件它总是说试试吧“未找到关键服务器证书......” http://egscr.com/JpcAa8 – Max

+0

@Max你做不要在.ebextensions文件夹中添加配置文件。 eb cli将下载配置文件,并在创建更改时将其重新上传到弹性beanstalk。 IT与增加ebextension不同。 –

+0

我添加了一个.ebextension文件,它工作。 http://prnt.sc/b8k1xe – Max

2

我发现最简单的方法是通过用户控制台更改EB Load Balancer。点击更改并选择新的ACM证书。 enter image description here

当您查看EB配置,就不会出现,但它会被设置

0

你可以用CloudFormation纯粹做到这一点;但是,对于Elastic Beanstalk来说,这似乎很常见,但配置选项在文档中比在构成Elastic Beanstalk的各个组件中更难找到。该信息是在这里:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-elbloadbalancer

但基本上你需要做的就是添加证书的创建到您的模板,然后在OptionSettingsAWS::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*/] 
0

检查中您创建证书的区域以及是否与Elastic Beanstalk区域匹配。我让他们在不同的区域,所以它不起作用。

相关问题