Использование менеджера сертификатов AWS (сертификат ACM) с Elastic Beanstalk
Если у вас есть сертификат для вашего домена, выданный через AWS Certificate Manager, как вы примените этот сертификат к приложению Elastic Beanstalk.
Да, приложение Elastic Beanstalk сбалансировано по нагрузке и с ним связан ELB.
Я знаю, что могу применить это непосредственно к ELB сам. Но я хочу применить его через Elastic Beanstalk, чтобы конфигурация env была сохранена в шаблоне Cloud Formation.
4 ответа
Я обнаружил, что вы не можете сделать это через упругую консоль бобового стебля (по крайней мере, пока). Однако вы все равно можете установить его через eb cli или aws cli.
Использование EB 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
То же самое можно сделать с помощью общего 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.
Проверьте, в какой зоне вы создали сертификат и соответствует ли он зоне Elastic Beanstalk. У меня были они в разных зонах, так что это не сработало.
Вы можете сделать это исключительно с CloudFormation; однако, как представляется, довольно часто встречается в Elastic Beanstalk, параметры конфигурации гораздо сложнее найти в документах, чем для отдельных компонентов, составляющих Elastic Beanstalk. Информация здесь:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html
Но в основном вам нужно добавить создание сертификата в шаблон, а затем сослаться на него в 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*/]