Come faccio a collegarmi a un database da un'attività Amazon ECS su Fargate?

3 minuti di lettura
0

Voglio collegarmi a un database da un'attività Amazon Elastic Container Service (Amazon ECS) su AWS Fargate.

Risoluzione

Prima di completare i seguenti passaggi, accertati di avere un cluster Amazon ECS in esecuzione su Fargate e un database Amazon Relational Database Service (Amazon RDS). Amazon ECS e Amazon RDS potrebbero avere problemi di comunicazione. Per ulteriori informazioni, vedi Come posso risolvere i problemi di connettività tra le attività Amazon ECS per un tipo di avvio di Amazon EC2 e un database Amazon RDS?.

Nota: la risoluzione seguente utilizza MySQL come tipo di motore.

Collega l’attività al database

1.    Crea uno script Python che si collega al database MySQL.

Il seguente esempio di script rds.py restituisce come risultato la connessione al database su 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))

Nota: sostituisci ENDPOINT, USER e PASS con i valori del database.

2.    Crea un Dockerfile che include i comandi necessari per assemblare un'immagine. Ad esempio:

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

Importante: assicurati di inserire lo script rds.py e il Dockerfile nella stessa cartella.

3.    Crea un repository Amazon ECR e invia l'immagine Docker a quel repository.

4.    Crea una definizione di attività e aggiungi l'immagine Docker del passaggio 2 come immagine del container. Ad esempio:

{
  "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"
}

Nota: nella definizione di attività, imposta i valori per le variabili di ambiente ENDPOINT, USER e PASS. Puoi passare questi valori direttamente come variabili di ambiente o recuperarli dai segreti in AWS Secrets Manager. Per ulteriori informazioni, consulta Come posso trasmettere informazioni segrete o sensibili in modo sicuro ai container in un'attività Amazon ECS?

5.    Apri la console Amazon ECS e seleziona Definizioni di attività dal pannello di navigazione.

6.    Seleziona la definizione di attività, scegli Azioni e quindi Esegui attività.

7.    In Tipo di avvio, seleziona FARGATE.

8.    In Cluster, seleziona il cluster per la definizione dell'attività.

9.    In Numero di attività, inserisci il numero di attività che desideri copiare.

10.    Nella sezione VPC e gruppi di sicurezza, in Cluster VPC seleziona Amazon Virtual Private Cloud (Amazon VPC).

11.    In Sottoreti, seleziona le sottoreti.

12.    In Gruppi di sicurezza, seleziona almeno un gruppo di sicurezza.

13.    Seleziona Esegui attività.

Lo script rds.py interrompe l'attività e restituisce il seguente messaggio:

Essential container in task exited.

Conferma che l'attività sia collegata al database

1.    Apri la console Amazon ECS.

2.    Dal menu di navigazione, seleziona Cluster e scegli il tuo cluster.

3.    Seleziona la scheda Attività.

4.    In Stato dell’attività desiderato, seleziona Interrotto per visualizzare un elenco delle attività interrotte.

5.    Seleziona l'attività interrotta.

6.    Nella scheda Dettagli dell'attività interrotta, nella sezione Container seleziona l'icona di espansione.

7.    Seleziona Visualizza i log in CloudWatch.

Dovresti visualizzare il seguente messaggio nella console Amazon CloudWatch:

Connection successful to [Your Endpoint]
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa