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
Pré-requisitos:
Observação: a resolução a seguir usa um mecanismo de banco de dados MySQL. Para mais informações sobre como se conectar a bancos de dados que usam outros tipos de mecanismo, consulte Conceitos básicos do Amazon RDS.
Conectar sua tarefa ao seu banco de dados
Conclua as etapas a seguir:
-
Crie um script Python que se conecte ao seu banco de dados MySQL. O exemplo de script rds.py a seguir envia o resultado da conexão com o banco de dados com o Amazon CloudWatch:
import pymysql
import os
DATABASE_ENDPOINT = os.environ['example_endpoint']
USERNAME = os.environ['example_username']
PASSWORD = os.environ['example_password']
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 example_endpoint pelo endpoint do seu banco de dados. Substitua example_username pelo seu nome de usuário. Substitua example_password pela sua senha.
-
Para montar uma imagem, crie um Dockerfile que inclua os comandos necessários. O arquivo de exemplo a seguir inclui os comandos necessários:
FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
-
Crie um repositório do Amazon Elastic Container Registry (Amazon ECR) e, em seguida, envie sua imagem do Docker para esse repositório.
-
Crie uma definição de tarefa e adicione sua imagem do Docker como imagem do contêiner:
{ "executionRoleArn": "arn:aws:iam::example_account_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "example_app",
"image": "example_repository_URL",
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "example_app"
}
Observação: substitua example_account_ID pelo ID da sua conta da AWS. Substitua example_app pelo nome da sua aplicação. Substitua example_repository_URL pelo URL do seu repositório do Amazon ECR. É uma prática recomendada definir os valores das variáveis de ambiente ENDPOINT, USER e PASS em sua definição de tarefa. É possível 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 transmitir informações secretas ou confidenciais com segurança para contêineres em uma tarefa do Amazon ECS?
-
Abra o console do Amazon ECS.
-
No painel de navegação, selecione Definições de tarefa.
-
Selecione sua definição de tarefa, escolha Ações e, em seguida, escolha Executar tarefa.
-
Em Tipo de execução, escolha FARGATE.
-
Em Cluster, escolha o cluster para sua definição de tarefa.
-
Em Número de tarefas, insira o número de tarefas que você deseja executar.
-
Na seção VPC e grupos de segurança, em VPC do cluster, escolha sua Amazon Virtual Private Cloud (Amazon VPC).
-
Em Sub-redes, escolha suas sub-redes.
-
Em Grupos de segurança, selecione pelo menos um grupo de segurança.
-
Escolha Executar tarefa.
Quando sua tarefa está conectada ao seu banco de dados, o script rds.py interrompe a tarefa e exibe a seguinte mensagem:
"Essential container in task exited."
Confirmar se conectou sua tarefa ao seu banco de dados
Conclua as etapas a seguir:
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Clusters e, em seguida, escolha seu cluster.
- Escolha a guia Tarefas.
- Em Status da tarefa desejada, para ver uma lista das tarefas interrompidas, escolha Interrompida.
- Escolha sua tarefa interrompida.
- Na guia Detalhes da tarefa interrompida, expanda a seção Contêineres.
- Escolha Exibir logs no CloudWatch.
Se você conectou sua tarefa ao seu banco de dados, a seguinte mensagem será exibida no console do CloudWatch:
"Connection successful to [your endpoint]"