12

当您拥有通过 AWS Certificate Manager 颁发的域证书时,如何将该证书应用于 Elastic Beanstalk 应用程序。

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

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

4

4 回答 4

15

我发现,你不能通过弹性豆茎控制台来做到这一点(至少现在还没有)。但是,您仍然可以通过 eb cli 或 aws cli 进行设置。

使用 EB CLI

基本上我们要做的是更新aws:elb:listener设置,您可以在通用选项文档中查看可能的设置。

使用 EB CLI 非常简单。假设我们已经awsebcli为我们的项目设置了工具,我们可以使用该eb config命令。

它将打开您的默认终端编辑器并允许您更改以 YAML 文件形式编写的设置。当您进行更改并保存时,eb configcmd 将自动更新您的 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。否则环境配置更新会报错。


使用 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

注意:当您通过上述任一方法对其进行更新时,Elastic Beanstalk 控制台不会将 HTTPS 显示为已启用。但是负载均衡器会,它也将应用于 Cloudformation 模板,并保存到 EB 的配置中。

于 2016-02-03T09:48:06.810 回答
2

我发现最简单的方法是通过用户控制台更改 EB 负载均衡器。单击更改并选择新的 ACM 证书。 在此处输入图像描述

查看EB配置的时候不会出现,但是会设置

于 2016-08-03T15:53:53.653 回答
0

您可以完全使用 CloudFormation 来做到这一点;但是,与 Elastic Beanstalk 似乎很常见的配置选项相比,在文档中找到配置选项比在组成 Elastic Beanstalk 的各个组件中要难得多。信息在这里:

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

但基本上您需要做的是将证书的创建添加到您的模板中,然后在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*/]
于 2016-11-01T14:19:44.460 回答
0

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

于 2016-11-09T14:36:48.737 回答