11 - Onboarding Farm
Guida · Aggiornamento del 10 novembre 2026
Farm riusa la pipeline di Access con un backend e un migratore reali. Codice e
registrazione sono su main, le immagini sono pubblicate, il DNS privato è
applicato e la baseline SQL è verificata. Il primo rollout è riuscito:
migrazione prima del backend e separazione SQL verificata con entrambe le
identità. Sono riusciti anche i cinque casi S2S e il cleanup. Finestra IAM chiusa,
metriche e una traccia ricevute; il migratore rieseguito non ha applicato nuove
versioni. Il prossimo servizio può riusare questo profilo e la stessa procedura.
Cosa abbiamo fatto¶
| Parte | Risultato verificato |
|---|---|
| Codice Farm | Skeleton di Lorenzo e adattamenti stage integrati; commit del publisher fc5d06e |
| Registrazione | Progetto moonitoring-farm-stage, database farm su sql-stage, identità sa-farm-api / sa-farm-migrate; nessun nuovo progetto o database |
| Build | Repository Farm autorizzata in Developer Connect; publisher comune riuscito, due immagini fissate per digest |
| Delivery | Profilo comune service-with-migration, pipeline farm e target farm-stage; kit verificato e primo rollout approvato riuscito; migrazione prima del backend |
| Rete | DNS privato run.app sulla Shared VPC applicato e riletto; Access invariato. La lettura DNS non è la prova S2S |
| Baseline SQL | Ruoli farm_owner / farm_runtime, ACL e default verificati; vecchia fixture conservata, catalogo Access invariato |
| Enrollment SQL | Entrambe le identità verificate prima/dopo migrazione; sei altri database negati a ciascuna, runtime senza DDL né accesso al ledger |
| Pulizia SQL | Amministratore, secret, service account, Job e binding temporanei rimossi e assenza riletta; anche i Job di verifica SQL sono rimossi |
| Runtime | farm-backend-mw9ygxlx Ready con 100% traffico; migratore farm-migrate-lbjrc riuscito. Access invariato |
| Chiusura IAM | Finestra di prima creazione rimossa, grant applicati sui soli farm-backend e farm-migrate esistenti |
Il backend usa i dati autorizzati senza DDL. Soltanto il migratore assume
farm_owner per applicare le migrazioni mancanti prima del backend. La baseline
infrastrutturale prepara i privilegi; le migrazioni applicative creano lo schema
del prodotto. Sono due passaggi distinti.
La vecchia fixture stage_check non è stata adottata o cancellata. Ne sono stati
confrontati struttura, proprietà, ACL e dipendenze; le righe non sono state lette
né certificate. Il controllo Access ha ritrovato le stesse 141 relazioni e lo
stesso fingerprint. Dettaglio SQL.
Codice online e sviluppo successivo¶
Il servizio online di questo collaudo usa fc5d06e e due migrazioni. Il main Farm
successivo di Lorenzo, 7f386d8, contiene otto migrazioni: non è diventato online
perché abbiamo aggiornato documentazione e test. I test sul database più avanti
del codice verificano il guard SeaORM già presente; una nuova versione applicativa
continuerà a richiedere la normale release approvata.
Nuove dipendenze del backend¶
Il codice successivo al primo rollout richiede FARM_ACCESS_ISSUER,
FARM_RAW_BUCKET, FARM_DATASETS_BUCKET e FARM_SECRETS_PROJECT. Mancavano nel
manifest stage: il precedente successo di Compose o del primo rollout non
dimostrava che questa nuova versione potesse avviarsi nel cloud.
La correzione allinea il manifest al contratto approvato: issuer logico di Access,
URL/JWKS privati con identità Google, archivi e progetto dei segreti. Terraform
registra i permessi del solo sa-farm-api: invocazione Access, lettura/creazione
raw, firma con la propria identità, creazione dei segreti dei feed e aggiunta
versioni, pubblicazione sui quattro topic usati dal backend. Nessun ruolo
amministrativo generico e nessuna lettura dei segreti sono richiesti dal codice
attuale. Il nome del bucket dataset è configurato, ma il backend non riceve
permessi dataset finché non li usa.
La capacità di creazione scelta concede la creazione dei contenitori nel progetto
Farm senza un vincolo sul loro nome. Il vincolo feed- è applicato e collaudato
sull'aggiunta di versioni. La firma è limitata alla propria identità,
ma IAM non limita il contenuto firmato ai soli URL GCS. Questi limiti sono
documentati nel dettaglio infrastrutturale.
Il backend pubblica dopo il commit SQL; sono previsti farm.events.v1,
farm.parse-jobs.v1, platform.audit.v1 e platform.external.v1 nel progetto
Farm, come richiesto dal publisher corrente. La retention topic di sette giorni
evita la perdita immediata in assenza di sottoscrizioni, ma non conserva gli
eventi indefinitamente. I nomi platform.* non dimostrano già un bus condiviso
tra progetti. Relay, consumer, worker e sottoscrizioni non vengono attivati da
questa correzione e richiederanno la propria registrazione e collaudo.
Aggiornamento dell'11 novembre. L'audit passa a un topic per sistema:
Farm pubblica su farm.audit.v1 nel progetto Farm, al posto di
platform.audit.v1, con publisher soltanto backend e relay di Farm;
access-consumer si sottoscrive al topic di ogni sistema e ricava il sistema
dalla sottoscrizione, perché Pub/Sub non porta l'identità di chi pubblica. Il
topic va reso configurabile nel codice. I segreti portano il prefisso del
sistema: quelli dei feed diventano farm-feed-<id> al posto di feed-<id>, quindi la
condizione IAM sull'aggiunta di versioni passa dal prefisso feed- a
farm-feed-. Grant e condizione restano da aggiornare in Terraform.
Il controllo riutilizzabile confronta manifest e requisiti versionati, vincola i
valori infrastrutturali approvati e ripete il controllo sul render. La prova
offline --check-config usa il binario vero, senza connettersi al database o ai
servizi. Non certifica IAM, gli RPC di Access o l'intero prodotto Farm.
L'enrollment delle installazioni richiede ancora l'integrazione con Releases:
dalla PR Farm #17, senza FARM_RELEASES_URL, il codice rifiuta le installazioni
fuori dall'ambiente locale (NoInstallations). Il precedente fallback senza
verifica resta solo per Compose; non aggiungiamo URL fittizi per aggirarlo.
Il gRPC Farm rimane chiuso
e le autorizzazioni applicative di Access restano distinte da run.invoker.
La nuova versione applicativa passa dalla normale release approvata; né un merge né l'apply dei permessi aggiorna automaticamente il backend già online.
Esito dell'allineamento del 10 novembre¶
- Infra #36 e #37 unite e applicate: dieci trigger aggiornati, diciotto aggiunte stage e la correzione mirata di una condizione IAM. I piani successivi non mostrano differenze.
- Farm #20 allinea manifest e controllo del binario, conservando le nuove regole di Lorenzo. Controlli di pipeline e Terraform superati; test Rust e prova offline del backend riusciti. Il rebuild integrale dei Dockerfile originali è stato fermato per spazio disco; Compose è stato verificato con i binari di test e non viene presentato come prova delle future immagini release.
- Undici verifiche cloud riuscite: firma; aggiunta versione
feed-; diniego su altro prefisso e lettura segreti; creazione/lettura raw; diniego dataset; permesso di sola pubblicazione sui quattro topic; JWKS Access via DNS privato e token Google. La prova dei topic usatestIamPermissions: non dimostra una consegna Pub/Sub a un consumer. Le risorse sintetiche sono rimosse a fine prova. - Il primo test ha trovato una condizione IAM errata:
AddSecretVersionvalutaSecretVersion, nonSecret. La correzione mantiene identità, progetto e prefisso; un test basato sugli attributi dell'audit evita la regressione. - Una richiesta JWKS ha ricevuto 500 da Cloud Run durante l'avvio da zero, prima che il backend fosse disponibile. La prova finale ha ricevuto 200 al primo tentativo. La sonda permette retry limitati solo sul GET per errori transitori; questo non dimostra che il client applicativo abbia già quella resilienza. Va verificata prima dell'uso reale dei flussi autenticati, senza attivare istanze minime permanenti per mascherare il problema.
Nessun rollout applicativo eseguito in questo allineamento. Il nuovo kit Farm contiene i contratti applicati e i controlli aggiornati. Il prossimo publisher deve ancora costruire le immagini release e provare il nuovo controllo nel cloud; approvare il rollout rimane un passo successivo. Il collaudo qui registrato non certifica enrollment, consumer o tutte le autorizzazioni business.
Come riusiamo la base comune¶
- Cataloghi e moduli Terraform registrano il sistema; non abbiamo creato una seconda implementazione della pipeline per Farm.
- Il Job migratore gira nel progetto Farm, verifica bundle, immagine e identità, serializza le migrazioni e termina il proxy SQL anche in caso di errore.
- Il backend ha minimo zero, massimo due istanze e due connessioni SQL per istanza.
- Il profilo stage comprende backend e migratore. Relay e altri scrittori restano esclusi; Common è fissato alla versione già collaudata con Access.
- Gli eventi automatici dei trigger rimangono spenti. Publisher, preparazione release e rollout usano la procedura manuale approvata.
Dopo il primo onboarding, gli aggiornamenti ordinari riusano il kit senza apply Terraform, salvo nuove risorse o autorizzazioni. Non occorre completare Farm, Console o tutte le schede dei futuri sistemi per lavorare in parallelo.
Cosa abbiamo verificato¶
- SQL prima e dopo il rilascio: riuscito. Login privato e membership di entrambe le identità verificati; sei altri database negati a ciascuna. Dopo la migrazione il runtime non può fare DDL né leggere il ledger. Job di verifica rimossi.
- Kit e rollout: riusciti. Il kit ha adottato la build pubblicata. Il migratore ha applicato le due versioni mancanti e terminato il proxy; il backend è diventato Ready successivamente. La finestra IAM è chiusa con i grant nominali.
- Platform → Farm: cinque casi riusciti. Rete
private-ranges-only, DNS privato e token Google: prima del grant 403, autorizzato 200, senza token 403, audience errata 401, dopo revoca 403. Ogni caso ha provato/healthe/ready; il positivo è correlato con i log Farm. Cinque Job e grant rimossi. - Telemetria e no-op: verificati entro un perimetro preciso. Ricevute metriche
HTTP dei due percorsi e metriche SQL proxy; una traccia applicativa
/healthcorrelata; la traccia della richiesta/readynon risultava presente nell’ultima lettura. La richiesta è provata da HTTP 200, log e metriche. La riesecuzione del migratore ha riportato nessuna migrazione mancante, lasciando Job e backend invariati. L'ha avviata l'identità operatore stage, senza nuovi grant: non prova un secondo rollout Cloud Deploy né l'uso effettivo dei permessi del deployer dopo la chiusura IAM.
Il verified=false della ricevuta telemetria indica la seconda traccia mancante,
non l'assenza di tutti i segnali: traccia e metriche osservate restano prove
dell'arrivo effettivo.
Il kit per i prossimi rilasci
usa i contratti successivi alla chiusura IAM. Il kit iniziale e il registro del
primo rollout restano immutati. Non occorre un apply per ogni modifica al codice.
I piani finali bootstrap
e stage, sul
commit pulito 1de3800, non mostrano differenze.
Il Catalog gRPC resta chiuso finché non definiamo audience e chiamante esplicito. Aggiornamento del 12 novembre: l'audience è decisa ed è l'URL fisso del backend chiamato (gRPC tra i servizi); il gRPC si apre con il rilascio in cui i chiamanti passano a quell'URL. Questa prova riguarda rete privata e IAM sui percorsi health/readiness; non certifica le autorizzazioni business. DNS pubblico, bilanciatore, IAP e produzione sono consegne separate.
Evidenze essenziali¶
Le PR Farm #9, Infra #30, #31, #32 e Docs #94 sono unite. Gli esiti finali sono pubblicati anche tramite Infra #34 e Docs #95, entrambe unite a main. La #32 è applicata: 35 modifiche bootstrap e 10 stage, senza cancellazioni o modifiche ad Access. La #33 chiude la finestra IAM: dieci risorse IAM aggiunte e rimozione del ruolo e del binding temporanei di prima creazione. L'uso effettivo dei permessi SQL è provato separatamente. Le altre PR Farm di Lorenzo restano distinte.
| Evidenza | Cosa dimostra |
|---|---|
| Test applicazione | Formato/Clippy, 7 test Rust, 14 test hook/render, 21 contratti; Compose con migrazioni, no-op e blocco intenzionale del backend dopo errore SQL |
| Pubblicazione | Build 9f1de53b riuscita sul commit fc5d06e, immagini backend/migratore pubblicate; nessun deployment creato dalla build |
| DNS e S2S/cleanup | Rete privata verificata, cinque casi riusciti, sonde e grant assenti; Access invariato |
| Baseline e cleanup SQL | Apply confermato, metadati fixture e catalogo Access preservati, risorse amministrative temporanee assenti |
| Kit Farm e rollout | Kit verificato; release farm-b8c3e911… e rollout farm-stage-0001 riusciti |
| Migrazione, SQL, no-op | Due migrazioni applicate; privilegi e dinieghi verificati; una riesecuzione senza versioni mancanti |
| Telemetria | Metriche HTTP/proxy ricevute e una delle due tracce precise osservata; la ricevuta mantiene esplicitamente il limite |
Le ricevute tecniche complete restano nell’archivio degli operatori. Questa scheda riporta il risultato e i limiti, senza sostituire ricevute, contratti e procedura comune.