Como associar uma instância existente do RDS a um ambiente do Elastic Beanstalk?

18

Eu criei minha instância do RDS antes de criar meu ambiente do Elastic Beanstalk. Os dois estão trabalhando juntos sem problemas, mas gostaria que eles fossem vinculados e tivessem os parâmetros do RDS acessíveis através das variáveis de ambiente RDS_* .

A página de configuração do Elastic Beanstalk diz:

EmboraoprimeirolinkcrieumainstânciadoRDSnolocaleovinculeaoambienteatual,osegundolinkapenasredirecionaparaesta página de documentação. , que infelizmente explica apenas como criar uma nova instância do RDS, mas não como vincular uma existente.

Como posso associar uma instância existente do RDS ao meu ambiente do Elastic Beanstalk?

    
por Benjamin 22.09.2013 / 18:57

5 respostas

17

Responda pelo suporte da AWS :

In order to associate an existing database to a EB Environment you have to take a snapshot of it via the Management Console and then choose "create a new RDS database" under the Data Layer. There does not appear to be a way to associate a running RDS instance to an existing EB Environment without launching a new one from a snapshot due to the way the RDS instance is tied into the Beanstalk environment's underlying Cloudformation stack. If you take a snapshot of your current RDS instance you can start it anew in EB if you wish.

If you want the RDS instance to exist outside of the environment you can simply provide the connection parameters as environment variables via the EB Console: Configuration -> Web Layer -> Software Configuration. Then, you can read the environment variable via PHP.

    
por 23.09.2013 / 10:17
22

A resposta "selecionada" está correta, mas eu queria adicionar algumas informações extras, já que a maioria das pessoas que usam o EB e o RDS juntas deve ter o mesmo requisito também, mesmo que elas ainda não saibam.

Primeira pergunta : Por que você deseja que a instância do RDS exista fora do ambiente do EB? Answer : Para que a duração da instância do RDS não fique vinculada à vida útil do ambiente do EB. ou seja, quando você remove um ambiente, não quer destruir o banco de dados com ele. Existem poucas razões pelas quais você deseja vincular sua instância do RDS ao seu ambiente.

Um problema com as configurações do RDS, independentemente do EB, é que você não obtém as variáveis RDS_ * automaticamente preenchidas e, portanto, precisam recuperar seus valores e preenchê-las por meio do console da web ou .ebextensions. Não é recomendável adicionar credenciais ao seu código, pois isso pode ser uma falha de segurança.

Mas o próximo problema é se você deseja criar programaticamente ambientes (como para implantações de tempo de inatividade sem azul e verde) e, em seguida, precisa de uma solução para preencher os valores sensíveis do RDS (por exemplo, senha). Infelizmente, isso exige que você desça mais abaixo na pilha do AWS e use um modelo do CloudFormation.

A solução ideal é um aprimoramento do EB para que o link "usar um banco de dados existente" mencionado na pergunta permita associar manualmente um banco de dados RDS existente e depois ter as variáveis de ambiente RDS_ * preenchidas automaticamente, em vez de redirecioná-lo a documentação inútil. O suporte da AWS disse que isso foi levantado como uma solicitação de recurso, mas é claro que não foi dado nenhum prazo.

    
por 24.02.2014 / 23:00
1

Eu precisava disso recentemente e também queria automatizar as etapas usando o AWS CLI / EB CLI. Em qualquer caso, aqui estão basicamente os passos que eu segui (supondo que você já criou uma instância do RDS):

  1. Verifique se você tem uma configuração de grupo de segurança diferente para sua instância do RDS (não o grupo padrão de VPC). Você pode usar aws ec2 create-security-group (AWS CLI) para isso e associá-lo à instância do RDS usando aws rds modify-db-instance (AWS CLI).
  2. Inicialize seu aplicativo beanstalk (usei eb init (EB CLI) para isso).
  3. Leia os dados de configuração relevantes do seu banco de dados do RDS (nome do banco de dados, nome do host, porta, etc). Eu usei aws rds describe-db-instances para isso.
  4. Usando esse conjunto de dados, as variáveis de ambiente RDS_* na instância do EB quando você cria o ambiente (ou implanta o ambiente posteriormente). Você pode fazer isso com eb create / eb deploy (EB CLI). Quando você cria o ambiente inicialmente, ele será degradado, pois os grupos de segurança para acessar o banco de dados RDS não estão configurados corretamente.
  5. Obtenha os grupos de segurança relevantes a partir da configuração do EB. Você precisa de um para o grupo de autoescala e para o balanceador de carga elástica. Você pode usar aws elasticbeanstalk describe-configuration-settings (AWS CLI) para isso.
  6. Autorize seu grupo de escalonamento automático para o tráfego de entrada do seu banco de dados para o grupo de segurança que você configurou na etapa 1. Usei aws ec2 authorize-security-group-ingress (AWS CLI) para isso, que usa grupos de segurança VPC (não grupos de segurança do banco de dados). Você provavelmente pode conseguir o mesmo com grupos de segurança de banco de dados se eles forem suportados em sua região. Ao configurar a regra de tráfego de entrada, certifique-se de usar o protocolo e a porta corretos para o seu mecanismo de banco de dados.
  7. Adicione o grupo do balanceador de carga elástico aos grupos de segurança de sua instância do RDS (novamente usando aws rds modify-db-instance (AWS CLI)).
  8. Reinicialize ou reimplemente o aplicativo Elastic Beanstalk (por exemplo, usando eb deploy (EB CLI)). Tive que fazer uma reimplantação, já que executo migrações em implantações.

Isso é principalmente isso. Agora você deve ser capaz de ampliar / reduzir suas instâncias do RDS sem cuidar das instâncias do EB, desde que você mantenha o nome do host e as credenciais do banco de dados iguais. Você também pode fazer implantações em azul / verde com essa abordagem (mas pode ser necessário executar algumas etapas adicionais para também revogar o acesso ao grupo de segurança).

    
por 11.01.2017 / 01:58
0

O mais fácil de adicionar um grupo de segurança existente às instâncias do EB EC2 por configuração é usar o arquivo simples descrito em link

Por exemplo:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1
    
por 20.10.2018 / 11:57
-2

crie o RDS sob Elastic; ele adicionará um novo grupo de segurança correto; Modifique o grupo de segurança do velho existia RDS; defina a string de conexão correta na configuração da web e todo o trabalho ...

    
por 10.09.2015 / 19:11