Não consigo fazer funcionar um aplicativo Elastic Beanstalk com um ELB público, mas instâncias EC2 privadas.
Criei uma configuração básica do eb com eb init
. O resultado foi a seguinte configuração:
branch-defaults:
default:
environment: test3
group_suffix: null
global:
application_name: test
branch: null
default_ec2_keyname: null
default_platform: Node.js
default_region: us-east-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: null
repository: null
sc: null
workspace_type: Application
Eu uso a VPC padrão, mas com duas sub-redes públicas personalizadas (para evitar conflitos de CIDR de peering com outra conta e um banco de dados externo).
Agora tento implantar o aplicativo eb com as seguintes opções:
# powershell
eb create --profile dev `
--sample `
--vpc.id vpc-123abc
--vpc.ec2subnets "subnet-123,subnet-456" `
--vpc.elbsubnets "subnet-123,subnet-456" `
-sr arn:aws:iam::<account>:role/service-role/aws-elasticbeanstalk-service-role `
--vpc.elbpublic `
test8
Isso não funciona. A instância inicial nunca passa nas verificações de integridade e a criação do ambiente EB é considerada uma falha após cerca de 15 minutos. Ele nunca é acessível pela internet.
NO ENTANTO, adicionar a opção --vpc.publicip
faz com que funcione! -- Consigo acessar a página da web sem problemas pela internet usando o endereço do ambiente EB. Mas não preciso de IPs públicos em cada instância. Então, o que estou perdendo?
Executei ambos os comandos com nomes de ambiente diferentes e comparei seus grupos de segurança, configurações do ELB, etc. Não encontrei nenhuma diferença. Por que essas instâncias precisam de IPs públicos para passar nas verificações de integridade e se conectar ao ELB?