Использование AWS Certificate Manager (сертификат ACM) с эластичным бобовым стеком

Когда у вас есть сертификат для вашего домена, выпущенный через диспетчер сертификатов AWS, как вы применяете этот сертификат к приложению Elastic Beanstalk.

Да, приложение Elastic Beanstalk сбалансировано по нагрузке и имеет ассоциированный с ним ELB.

Я знаю, что могу применить его непосредственно к ELB. Но я хочу применить его через Elastic Beanstalk, чтобы конфигурация env была сохранена в шаблоне Cloud Formation.

Ответ 1

Я узнал, что вы не можете сделать это через консоль из эластичного бобового стебля (по крайней мере, пока). Однако вы все равно можете установить его через eb cli или aws cli.

Использование EB CLI

В основном мы пытаемся обновить параметр aws:elb:listener, вы можете увидеть возможные настройки в общих опциях docs.

Использование EB CLI довольно просто. Предполагая, что мы уже установили инструмент awsebcli для нашего проекта, мы можем использовать команду eb config.

Он откроет ваш редактор терминалов по умолчанию и позволит вам изменять настройки, которые записываются как файл YAML. Когда вы внесете изменения и сохраните их, eb config cmd автоматически обновит настройки для вашей эластичной среды Beanstalk.

Вам необходимо добавить следующие параметры в файл конфигурации:

aws:elb:listener:443:
  InstancePort: '80'
  InstanceProtocol: HTTP
  ListenerEnabled: 'true'
  ListenerProtocol: HTTPS
  PolicyNames: null
  SSLCertificateId: CERTIFICATE_ARN_HERE

Измените значение CERTIFICATE_ARN_HERE на ARN-сертификаты AMC. Вы можете найти его в консоли AWS Certificate Manager:

введите описание изображения здесь

ВАЖНО: Настройки aws:elb:listener:443 ДОЛЖЕН располагаться над настройкой aws:elb:listener:80. В противном случае обновление конфигурации среды будет отключено.


Использование AWS CLI

То же самое можно сделать с помощью общих инструментов 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.

Ответ 2

Я считаю, что самый простой способ - изменить балансировку нагрузки EB через консоль пользователя. Нажмите "Изменить" и выберите новый сертификат ACM. введите описание изображения здесь

Когда вы просматриваете конфигурацию EB, она не появится, но она будет установлена ​​

Ответ 3

Вы можете сделать это с помощью 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*/]

Ответ 4

Проверьте, в какой зоне вы создали сертификат, и если он соответствует зоне эластичного бобового сустава. Я имел их в разных зонах, поэтому он не работал.