Exemple Desplegament Estès de MongoDB en AWS
Aquest exemple segueix el model Gitflow i distingeix entre l’actualització del Executor (l’entorn d’execució) i el Descriptor (els canvis en la base de dades).
Per al correcte funcionament del model de desplegaments estesos en AWS, és necessari comptar amb els següents recursos prèviament aprovisionats:
-
Elastic Contenidor Registry (ECR): Per a emmagatzemar les imatges de contenidors generades a partir dels Dockerfiles.
-
Lambda basada en contenidors: Per a executar el contenidor des de la imatge pujada a ECR.
-
Bucket S3: Per a emmagatzemar els descriptors (scripts de base de dades, Helm charts, etc.).
-
Secrets Manager: Per a emmagatzemar de manera segura les credencials d’accés a la base de dades.
- Nota específica per a MongoDB Atles: En aquest cas concret, el Secret no guarda credencials tradicionals de base de dades, sinó la API Key de MongoDB Atles necessària per a l’execució dels scripts a través de la Lambda.
-
IAM Role: Per a permetre que la Lambda accedeixi a S3, Secrets Manager i realitzi la connexió amb el recurs.
-
Endpoint gateway: Per a assegurar la connectivitat de la Lambda amb S3 dins de la VPC.

Per a consultar els requisits en altres plataformes, així com veure una plantilla amb exemples, pots accedir a:
- https://canigo.ctti.gencat.cat/plataformes/ghec/gh-desplegaments-estesos/
- https://canigo.ctti.gencat.cat/plataformes/ghec/workflows/gh-configuracio-workflows/#desplegaments-estesos
- Template: https://ctti.ghe.com/ctti-arq/executor-template
Escenari previ:
- Has modificat descriptors/database/mongodb/script.js per a afegir una nova col·lecció.
- Has modificat els workflows per a posar la tecnologia MongoDB i adaptar-los a les teves necessitats.
- Has revisat i modificat en cas de ser necessari el Dockerfile en executors/database/aws/mongodb/.
1. Entorn de Desenvolupament (Rama develop)
És el primer lloc on “construeixes” el teu executor.
-
Pas 1 (Executor): Executes manualment Esteneu Executor CD.
- Això genera la imatge Docker des de executors/database/aws/mongodb/ i la puja al ECR de desenvolupament.
- S’actualitza la funció Lambda de desenvolupament amb aquesta nova imatge.
-
Pas 2 (Descriptor): Una vegada que la Lambda té la imatge, executes Esteneu Descriptor CD. (Es puja script.js al bucket S3 de desenvolupament, obté les credencials de Secrets Manager i invoca a la Lambda ja preparada que aplica els canvis en MongoDB Atlas.)
2. Entorn de Preproducció (Rama release)
En promocionar el codi a la branca de release, repeteixes la lògica per a assegurar la integritat de la versió RC (Release Candidate).
-
Pas 1 (Executor): Executes Esteneu Executor CD per a l’entorn pre.
- És fonamental fer-ho almenys una vegada perquè la Lambda de Preproducció tingui la versió correcta del motor (p. ex., versió 1.0.1-RC).
-
Pas 2 (Descriptor): Executes Esteneu Descriptor CD per a pre. (Es puja script.js al bucket S3 de pre, obté les credencials de Secrets Manager i invoca a la Lambda ja preparada que aplica els canvis en MongoDB Atlas.)
- S’utilitza l’arxiu itsm-inputs.json per a registrar la CRQ en Remedy (ex. ITSM_PRIORITY: 3-Medium, TYPE_AFFECTATION: SENSE TALL DE SERVEI).
3. Entorn de Producció (Rama master)
En promocionar el codi a la branca de master. És el desplegament final i el més restrictiu..
-
Pas 1 (Executor): Executes Esteneu Executor CD per a l’entorn pro.
- Això garanteix que la Lambda de producció té la imatge final 1.0.1 validada en els entorns anteriors.
-
Pas 2 (Descriptor): Executes Esteneu Descriptor CD per a pro. (Es puja script.js al bucket S3 de pro, obté les credencials de Secrets Manager i invoca a la Lambda ja preparada que aplica els canvis en MongoDB Atlas.)
- S’utilitza l’arxiu itsm-inputs.json per a registrar la CRQ en Remedy (ex. ITSM_PRIORITY: 3-Medium, TYPE_AFFECTATION: SENSE TALL DE SERVEI).
- S’aplica el canvi definitiu en la base de dades de producció.
Resum de lògica d’execució
| Què has canviat? | Què executes? | Ordre |
|---|---|---|
| Primera vegada en un entorn | Executor i després Descriptor | Obligatori |
Només l’script de base de dades (.js) |
Només Descriptor | Directe (si la Lambda ja existeix) |
El Dockerfile o les llibreries (requirements.txt) |
Executor i després Descriptor | Obligatori |