10

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

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

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

ответ

12

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

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

В основном то, что мы пытаемся сделать, это обновить настройки aws:elb:listener, вы можете увидеть возможные настройки в general options документации.

Использование 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 вашему AMC Сертификаты ARN. Вы можете найти его в консоли диспетчера AWS сертификата:

ВАЖНО: Ваш aws:elb:listener:443 установка MUST располагаться над установкой 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.

+1

меня попробовать Е.Б. кли и путем добавления конфигурационного файла под .ebextensions он всегда говорит «Сертификат сервера не найден для ключа ....» http://egscr.com/JpcAa8 – Max

+0

@Max вы не добавляйте файл конфигурации в папку .ebextensions. Eb cli загрузит конфигурационный файл и снова загрузит его обратно в эластичный beanstalk при создании изменения. Это не то же самое, что добавлять ebextension. –

+0

Я добавил файл .ebextension, и он сработал. http://prnt.sc/b8k1xe – Max

2

Я считаю, что самый простой способ - изменить балансировку нагрузки EB через консоль пользователя. Нажмите «Изменить» и выберите новый сертификат 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

Но в основном то, что вам нужно сделать, это добавить создание CERT в шаблон, а затем ссылаться на него в 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*/] 
0

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