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: o exemplo a seguir usa o MySQL como o tipo de mecanismo. Para obter mais informações sobre os tipos de mecanismos, consulte Introdução ao Amazon RDS.
Conectar sua tarefa ao seu banco de dados
Conclua as seguintes etapas:
- 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 pymysqlimport 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.
- Para montar uma imagem, crie um Dockerfile que inclua os comandos necessários. Por exemplo:
FROM pythonRUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
Importante: coloque o script rds.py e o Dockerfile na mesma pasta.
- Crie um repositório do Amazon ECR e, em seguida, envie a imagem do Docker para esse repositório.
- Crie uma definição de tarefa e adicione a imagem do Docker 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?
- 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 copiar.
- 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.
O script rds.py interrompe a tarefa e retorna a seguinte mensagem:
“O contêiner essencial na tarefa foi encerrado.”
Confirme se sua tarefa está conectada ao seu banco de dados
Conclua as seguintes etapas:
- 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, na seção Contêineres, expanda a seção.
- Escolha Exibir logs no CloudWatch.
Você vê a seguinte mensagem no console do CloudWatch:
“Conexão bem-sucedida com [Your Endpoint]”