Como posso me conectar a um banco de dados a partir de uma tarefa do Amazon ECS no Fargate?

4 minuto de leitura
0

Quero me conectar a um banco de dados a partir de uma tarefa do Amazon Elastic Container Service (Amazon ECS) no AWS Fargate.

Resolução

Antes de concluir as etapas a seguir, confirme se você tem um cluster do Amazon ECS em execução no Fargate e um banco de dados do Amazon Relational Database Service (Amazon RDS). O Amazon ECS e o Amazon RDS podem ter problemas de comunicação. Para obter mais informações, consulte Como soluciono problemas de conectividade entre minhas tarefas do Amazon ECS para um tipo de execução do Amazon EC2 e um banco de dados do Amazon RDS?.

Observação: A resolução a seguir usa o MySQL como o tipo de mecanismo.

Conecte sua tarefa ao seu banco de dados

1.    Crie um script Python que se conecte ao seu banco de dados MySQL.

O exemplo de script rds.py a seguir gera o resultado da conexão com o banco de dados com o Amazon CloudWatch:

import pymysql
import os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
  print("Connecting to " + Database_endpoint)
  db = pymysql.connect(host = Database_endpoint, user = Username, password = Password)
  print("Connection successful to " + Database_endpoint)
db.close()
except Exception as e:
  print("Connection unsuccessful due to " + str(e))

Observação: Substitua ENDPOINT, USER e PASS pelos valores do seu banco de dados.

2.    Crie um Dockerfile que inclua os comandos necessários para montar uma imagem. Por exemplo:

FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]

Importante: Certifique-se de colocar o script rds.py e o Dockerfile na mesma pasta.

3.    Crie um repositório do Amazon ECR e, em seguida, envie a imagem do Docker para esse repositório.

4.    Crie uma definição de tarefa e adicione a imagem do Docker da etapa 2 como a imagem do contêiner. Por exemplo:

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-app",
    "image": "YOUR-ECR-Repository-URL",
    "essential": true
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-app"
}

Observação: na definição da tarefa, defina os valores das variáveis de ambiente ENDPOINT, USER e PASS. Você pode passar esses valores diretamente como variáveis de ambiente ou recuperá-los de segredos no AWS Secrets Manager. Para obter mais informações, consulte Como posso passar segredos ou informações confidenciais com segurança para contêineres em uma tarefa do Amazon ECS?

5.    Abra o console do Amazon ECS e escolha Definições de tarefas no painel de navegação.

6.    Selecione sua definição de tarefa, escolha Ações e, em seguida, escolha Executar tarefa.

7.    Em Tipo de execução, escolha FARGATE.

8.    Em Cluster, escolha o cluster para sua definição de tarefa.

9.    Em Número de tarefas, insira o número de tarefas que você deseja copiar.

10.    Na seção VPC e grupos de segurança, em VPC do cluster, escolha sua Amazon Virtual Private Cloud (Amazon VPC).

11.    Em ** Sub-redes**, escolha suas sub-redes.

12.    Em Grupos de segurança, selecione pelo menos um grupo de segurança.

13.    Escolha Executar tarefa.

O script rds.py interrompe a tarefa e retorna a seguinte mensagem:

Essential container in task exited.

Confirme se sua tarefa está conectada ao seu banco de dados

1.    Abra o console do Amazon ECS.

2.    No menu de navegação, escolha Clusters e, em seguida, escolha seu cluster.

3.    Escolha a guia Tarefas.

4.    Em Status da tarefa desejada, escolha Interrompida para ver uma lista das tarefas interrompidas.

5.    Escolha sua tarefa interrompida.

6.    Na guia Detalhes da tarefa interrompida, na seção Contêineres, escolha o ícone do expansor.

7.    Escolha Exibir logs no CloudWatch.

Você deve ver a seguinte mensagem no console do Amazon CloudWatch:

Connection successful to [Your Endpoint]
AWS OFICIAL
AWS OFICIALAtualizada há um ano