Fournisseur de stockage
s3nd avec Cloudflare R2
Aucun frais de sortie, exactement ce qu’il faut pour déplacer un fichier de 2 Go entre deux laptops.
import { createBucket } from 's3nd'
const store = createBucket({
bucket: 'transfers',
endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: process.env.R2_ACCESS_KEY_ID!,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
},
publicUrl: 'https://cdn.example.com', // optional: your R2 custom domain
})Pourquoi celui-ci
Cloudflare R2
R2 parle l’API S3, ignore la région, et ne facture rien en sortie. C’est le fournisseur contre lequel le guide « sans serveur » est écrit : un bucket, un jeton limité à celui-ci, un fichier de configuration, et un code transmis entre deux machines pour une facture de zéro.
Depuis la ligne de commande
Une configuration de départ, et ce qu’il reste à faire.
init écrit le fichier avec des références ${VAR} plutôt que des secrets, donc il est fait pour être versionné ; le fichier d’environnement qu’il désigne, non.
{
"bucket": "transfers",
"region": "auto",
"endpoint": "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com",
"prefix": "transfers",
"expiresIn": "24h",
"envFile": ".env",
"credentials": {
"accessKeyId": "${R2_ACCESS_KEY_ID}",
"secretAccessKey": "${R2_SECRET_ACCESS_KEY}"
}
}Ensuite
- 01Mettez R2_ACCOUNT_ID, R2_ACCESS_KEY_ID et R2_SECRET_ACCESS_KEY dans .env, et gardez-le hors de git.
- 02Le jeton d’API a besoin de Object Read & Write sur ce bucket, et de rien d’autre.
- 03Ajoutez une règle de cycle de vie qui supprime les objets sous transfers/ après un jour ou deux.
- 04Lancez
s3nd doctor. Il effectue les opérations dont s3nd a besoin et rapporte ce qui s’est passé.
Bon à savoir
Notes sur R2.
region: "auto"
R2 ignore la région et le SDK en exige une. Définir un endpoint fait que s3nd choisit "auto" par défaut, donc il n’y a rien à écrire.
Les écritures conditionnelles fonctionnent
R2 implémente If-None-Match et If-Match sur PutObject, ce qui empêche deux transferts simultanés de s’écraser.
Nettoyage des expirés
expiresIn empêche un transfert d’être remis ; seule une règle de cycle de vie supprime l’objet. Donnez au préfixe une règle qui expire les objets après un jour ou deux, et s3nd doctor passe au vert.
Autres fournisseurs
L’endpoint est la seule différence.
Déposez un fichier. Donnez le code.
Pointez-le sur le bucket que vous payez déjà. Rien à déployer, aucune inscription, personne au milieu.