Perguntas sobre a aplicação Elastic Beanstalk no VPC

3

Estou tentando implantar um aplicativo rails no Elastic Beanstalk da Amazon. Eu não sou muito versado em ambientes de rede / servidor, então eu peguei algum conhecimento ao longo do caminho lendo documentações e pesquisando todas as tecnologias que estão presentes na minha pilha, então fique de olho se eu cometer algum erro.

Então, aqui está o que estou tentando alcançar:

Desejo implantar meu aplicativo Rails com o Docker no Elastic Beanstalk com minhas instâncias iniciadas em um VPC com duas sub-redes voltadas para o público e uma instância do RDS associada. Até aí tudo bem, eu tenho a pilha configurada, mas na implantação eu recebo um erro que indica que minha instância do EC2 não é capaz de se conectar à instância do Postgres RDS:

[91mrake aborted! [0m[91mPG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Então, em essência, meu sentimento é que cheguei muito longe, com a exceção de que minha instância do RDS não pode ser alcançada pela minha instância do EC2. Meu palpite é que há grupos de segurança não-satisfatórios, embora eu tentei adicionar a instância do EC2 e a instância do RDS ao mesmo grupo de segurança onde o tráfego de entrada na porta 5432 (Postgres) é permitido pelo próprio grupo de segurança.

Eu adicionei um grupo de segurança com o CIDR do meu Ip e confirmei que o banco de dados pode ser acessado pela minha máquina. Isso significa que os parâmetros de conexão que eu especifiquei no meu ambiente estão corretos e que não estão relacionados a credenciais / configurações erradas.

Qual poderia ser o culpado pela minha instância do EC2 não conseguir estabelecer uma conexão com a minha instância do RDS? Mais uma vez, estou quase certo com o fato de que ele está dentro das minhas configurações do Grupo de Segurança, mas não consegui restringir a origem do problema.

Se você precisar de mais alguma informação (que eu deixei intencionalmente de fora) por favor me avise (por exemplo, grupos de segurança para VPC, EC2 ou RDS, etc.).

    
por the_critic 02.03.2016 / 11:10

1 resposta

1

Como o RDS exige que você tenha duas zonas de disponibilidade ao implantar em um VPC, é necessário certificar-se de que o beanstalk possa acessá-las por ACLs de rede e também as permissões dos grupos de segurança baseados em instâncias.

Somente seu ELB e seu gateway NAT instância / NAT precisam ser sub-redes públicas, tudo o mais deve estar em sub-redes privadas.

Os grupos de segurança são stateful e os grupos de rede são stateless, enquanto você só precisa permitir regras de entrada para os grupos de segurança, é necessário permitir AMBAS portas de entrada e saída de sua sub-rede de beans para ambas as sub-redes usando ACLs de rede. Consulte Segurança no seu VPC .

Aqui está uma amostra eb create para criar o ambiente do beanstalk (substituir as strings com colchetes):

eb create [BEANSTALK_ENVIRONMENT] --instance_type m3.medium --branch_default --cname [BEANSTALK_CNAME] --database --database.engine postgres --database.version [x] --database.size 100 --database.instance db.m4.large --database.password xxxxxxxxx --database.username ebroot --instance_profile [BEANSTALK_EC2_IAM_PROFILE] --keyname [SSH_KEY_NAME] --platform "64bit Amazon Linux 2015.03 v1.3.0 running Ruby 2.2" --region us-east-1 --tags tag1=value1,tag2=value2 --tier webserver --verbose --sample --vpc.id [vpc-xxxxxx] --vpc.dbsubnets [subnet-db000001,subnet-db000002] --vpc.ec2subnets [subnet-ec200001] --vpc.elbsubnets [subnet-elb00001] --vpc.elbpublic --vpc.securitygroups [sg-00000001] --sample --timeout 3600

subnet-db000001 REGRAS DA ACL DE REDE:

Inbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow

subnet-db000002 REGRAS DA ACL DE REDE:

Inbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow

Subnet-ec200001 REGRAS DE ACL DE REDE:

Inbound: Port Range: 5432, Source [subnet-db000001 (as ip range)], Allow
Inbound: Port Range: 5432, Source [subnet-db000002 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-db000001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-db000002 (as ip range)], Allow

subnet-elb00001 REGRAS DA ACL DE REDE:

Inbound: Port Range: 80, Source 0.0.0.0/0, Allow
Inbound: Port Range: 443, Source 0.0.0.0/0, Allow
Outbound: Port Range: 80, Source 0.0.0.0/0, Allow
Outbound: Port Range: 443, Source 0.0.0.0/0, Allow

Uma observação adicional sobre ACLs de Rede - muitos serviços não respondem na porta original, mas usam um porta efêmera . Portanto, você pode ter que adicionar o seguinte às ACLs de rede de entrada e de saída para sub-redes com instâncias do EC2:

Outbound: Port Range: 1024-65535, Source 0.0.0.0/0, Allow
Outbound: Port Range: 1024-65535, Source 0.0.0.0/0, Allow

Existem também vários cenários úteis em Regras recomendadas da ACL de rede para o seu VPC .

Espero que isso ajude.

    
por 08.03.2016 / 17:02