0009. Storage S3 basato su AWS SDK v3 (+ lib-storage)
- Stato: Accettata
- Data: 2026-06-04
- Decisori: Team BI/ETL
Contesto
Serve uno StorageProvider per Amazon S3 (e S3-compatibili come MinIO), che si compone con i codec del File connector. Deve elencare/leggere in streaming e caricare in streaming oggetti di dimensione non nota a priori.
Decisione
Adottiamo @aws-sdk/client-s3 (v3, modulare, tipi inclusi) e @aws-sdk/lib-storage per l'upload multipart in streaming.
list:ListObjectsV2Commandcon paginazione (ContinuationToken).get:GetObjectCommand→Bodycome stream di byte.put:Upload(lib-storage) conBody = Readable.from(stream)→ multipart automatico.- Il
S3Clientè iniettato (DI, come pool pg/mssql);loadS3ClientConfig(prefix)lo costruisce da env (S3_REGION, opzionaleS3_ENDPOINT+forcePathStyleper MinIO, credenziali opzionaliS3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY, altrimenti catena AWS standard). - Test: config pura in unit (CI); I/O via integrazione contro MinIO (
docker compose, serviziominio-test), auto-skip senza env.s3.tsescluso dalla coverage unitaria.
Alternative considerate
PutObjectCommanddiretto — richiedeContent-Lengthnota: non adatto allo streaming. Scartato perput.aws-sdkv2 (monolitico) — deprecato, bundle grande. Scartato.minioSDK — legherebbe al vendor; l'SDK AWS funziona sia con S3 sia con MinIO (endpoint + path-style).
Conseguenze
- Positive: upload streaming senza conoscere la dimensione, paginazione corretta, stesso codice per AWS e MinIO, DI testabile.
- Costi: due dipendenze AWS (modulari, ma non piccolissime). I/O coperto da integrazione (richiede MinIO/LocalStack o un bucket reale).

