Skip to content

fix(infra): arm Artifact Registry cleanup policy (dry_run=false, D115) - #90

Merged
GMartin-Data merged 2 commits into
mainfrom
fix/artifact-registry-cleanup-dry-run
Jun 2, 2026
Merged

GMartin-Data merged 2 commits into
mainfrom
fix/artifact-registry-cleanup-dry-run

Conversation

@GMartin-Data

Copy link
Copy Markdown
Owner

Contexte

Le dashboard coûts a révélé un poste Artifact Registry anormalement élevé.
Investigation : le repo datatalent pesait 8,9 Go (≈ 17× le free tier de 0,5 Go,
≈ 0,82 $/mois) avec 22 versions ingestion + 27 dbt accumulées — alors que la
cleanup policy keep_count = 3 est censée n'en garder que 3 par image.

Cause racine : la policy tournait en dry-run (elle journalise ce qu'elle
supprimerait sans rien supprimer). Le champ cleanup_policy_dry_run n'avait jamais été
positionné dans le HCL ; le provider écrit son défaut (false) au state mais ne propage
pas ce false implicite à l'API → le repo restait en dry-run côté serveur.

Décisions techniques (le point à comprendre pour la review)

Sujet Tranché
Le fix HCL suffit-il ? Non. terraform plan répond No changes : le state porte déjà false, jamais envoyé à l'API. plan compare HCL ↔ state, pas HCL ↔ API. Terraform seul ne corrige pas ce bug.
Comment débloquer la purge ? Hors Terraform : gcloud … set-cleanup-policies --no-dry-run (déjà exécuté, réponse Dry run is disabled.).
Rôle de la ligne HCL de cette PR Documentaire : no-op sur le repo actuel, mais garantit le bon comportement à la (re)création du repo sur état neuf.
Risque sur la prod ? Nul. Images déployées (ingestion/dbt) vérifiées = #1 du top 3 conservé. La purge ne touche aucune image en service.

Changements

  • infra/main.tf : ajout cleanup_policy_dry_run = false sur le repository AR + commentaire
    expliquant le caractère documentaire de la ligne. Correction d'un renvoi erroné (D69 →
    D115 ; D69 = schémas BigQuery, sans rapport).

Validation

$ gcloud artifacts repositories set-cleanup-policies datatalent \
    --location=europe-west1 --policy=<policy.json> --no-dry-run
Updated repository [datatalent].
Dry run is disabled.

# Référence avant purge (2026-06-02) — la purge GCP est asynchrone (background job) :
ingestion : 22 versions   (cible 3)
dbt       : 27 versions   (cible 3)

terraform plan sur cette branche = No changes (attendu, cf. tableau ci-dessus —
le fix opérationnel est l'appel gcloud, pas l'apply).

Action requise côté reviewers

  • Rien à appliquer : le dry-run est déjà désarmé côté API. Cette PR ne fait que tracer
    l'intention dans le HCL.
  • ⚠️ Ne pas se fier au describe pour vérifier : l'API omet cleanupPolicyDryRun quand
    il vaut false (donc ABSENT = false, ambigu). Vérifier par le compte de versions
    (doit tomber à 3/3 dans les heures qui suivent l'armement).
  • Garde-fou D31 (« plan zéro diff ») : ici le plan est trompeusement propre — c'est une
    limite documentée dans D115, pas un oubli.

Refs

D115 (cleanup policy inerte, tension IaC ↔ API), D26 (free tier AR), D69 (renvoi corrigé).

The cleanup policy (keep 3 most recent versions) was running in dry-run
mode: it logged what it would delete without deleting anything. Result:
22 ingestion + 27 dbt versions accumulated, repo at 8.9 GB (~17x the
0.5 GB free tier).

Root cause: cleanup_policy_dry_run was never set in HCL. The provider
writes the schema default (false) to state but does not propagate an
implicit false to the API, so the repo stayed in API-side dry-run.

Note: on the existing repo this HCL line is a no-op at plan time (HCL =
state, both false, never sent to API). The dry-run was actually disabled
out-of-band via 'gcloud artifacts repositories set-cleanup-policies
--no-dry-run'. The line guarantees correct behaviour on repo recreation.
@ESNAULTQ
ESNAULTQ self-requested a review June 2, 2026 07:12

@ESNAULTQ ESNAULTQ left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grande Validation

@GMartin-Data
GMartin-Data merged commit 0bc55c5 into main Jun 2, 2026
6 checks passed
@GMartin-Data
GMartin-Data deleted the fix/artifact-registry-cleanup-dry-run branch June 2, 2026 07:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants