Использование 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
Проверьте, в какой зоне вы создали сертификат, и если он соответствует зоне эластичного бобового сустава. Я имел их в разных зонах, поэтому он не работал.