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?
Atualmente, as instâncias estão implantadas em sub-redes públicas, sem endereços IP públicos atribuídos, portanto, elas não têm acesso à Internet. Para que uma instância do EC2 tenha acesso à Internet, um dos seguintes cenários deve ser atendido:
As instâncias do Elastic Beanstalk precisam se comunicar com a API de serviço do Elastic Beanstalk. Elas não podem fazer isso sem acesso à Internet ou endpoints configurados na VPC .
Mesmo que você configure esses endpoints na sua VPC para que as instâncias possam se comunicar com os serviços da AWS com os quais precisam se comunicar, os servidores ainda podem falhar ao inicializar se você os tiver configurado para baixar qualquer coisa da Internet, como dependências de aplicativos ou atualizações do sistema operacional. Nesse caso, você precisará configurá-los com acesso à Internet.