2
votes

JSON dans une variable d'environnement sur Netlify

Je crée une fonction AWS Lambda qui utilise ServiceAccountKey.json pour l'authentification Firebase. Lors du déploiement sur Netlify, je ne souhaite pas exposer ces données dans le référentiel git. Existe-t-il un moyen de sauvegarder le JSON entier en tant que variable d'environnement ?

 JSON dans la variable d'environnement

 Variables d'environnement sur Netlify


0 commentaires

3 Réponses :


3
votes

Si je ne me trompe pas, vous pouvez stocker le json dans la variable env comme une simple chaîne. Sinon regardez un jq qui vous permet de lancer pour lire un json à partir d'un fichier et de le stocker directement dans un env var.

Cordialement,


0 commentaires

3
votes

clause de non-responsabilité: je travaille pour l'équipe d'assistance de Netlify.

Bien que la suggestion précédente selon laquelle JSON peut être utilisé comme une chaîne sans retour chariot intégré puisse fonctionner, il peut être un peu difficile d'obtenir une variable d'environnement contenant des guillemets, que tous les JSON non triviaux que j'ai jamais vus utilisent . Deux suggestions différentes pour faire cela différemment:

  1. pour créer la chaîne avec un espace réservé à la place et pendant la construction, remplacez les espaces réservés par des guillemets. J'utilise le caractère @ dans cet exemple, donc votre "JSON" ressemblerait à {@ type @: @service_account ... , puis vous pourriez utiliser quelque chose comme ça dans votre build:

echo -e "$ {JSON_VARIABLE // @ / \"} "> file.json && do_your_normal_build

  1. vous pouvez également créer une fonction (documentation ici: https://www.netlify.com/ docs / functions / ) qui le renvoie et qui fournirait même un en-tête de réponse HTTP Content-Type raisonnable si nécessaire.

0 commentaires

0
votes

Netlify ne sauvegarde pas les fichiers JSON pour vous sauf si vous utilisez les fonctions netlify comme @fool mentionné ci-dessous. Mais vous ne devriez pas non plus enregistrer les fichiers json avec des variables env dans Git. Le meilleur moyen est donc de convertir les données de votre fichier json en un objet et de l'utiliser:

  • convertir les données contenues dans ce JSON en un objet.
  • notre nouvel objet peut alors prendre des variables .env, (vous avez également besoin de dotenv au cas où)
  • injectez l'objet (serviceAccount par exemple) directement dans la fonction qui le requiert.
  • l'erreur secrète que j'ai eue lorsque j'ai suivi les étapes ci-dessus était l'une des variables .env avait un "\ n" qui devient "\\ n" lorsqu'il est transformé en chaîne -> les messages d'erreur ne vous disent pas vraiment c'est le problème.
  • vous devez donc l'ajouter à cette variable .replace (/ \\ n / g, '\ n')
  • pour le développement, vous avez vos fichiers .env
  • pour la production, il vous suffit d'ajouter les variables env normalement une par une dans netlify

voici mon objet à titre d'exemple:

const config = require('./config');
const serviceAccount = config.FIREBASE_KEY;
firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(serviceAccount), databaseURL: config.FIREBASE_DB,});

et la fonction correspondante qui utilise les touches:

require('dotenv').config();

module.exports = {
FIREBASE_KEY: {
    type: process.env.REACT_APP_SAK_TYPE,
    project_id: process.env.REACT_APP_SAK_PROJECT_ID,
    private_key_id: process.env.REACT_APP_SAK_PRIVATE_KEY_ID,
    private_key: process.env.REACT_APP_SAK_PRIVATE_KEY.replace(/\\n/g, '\n'),
    client_email: process.env.REACT_APP_SAK_CLIENT_EMAIL,
    client_id: process.env.REACT_APP_SAK_CLIENT_ID,
    auth_uri: process.env.REACT_APP_SAK_AUTH_URI,
    token_uri: process.env.REACT_APP_SAK_TOKEN_URI,
    auth_provider_x509_cert_url: process.env.REACT_APP_SAK_AUTH_PROVIDER_X509_CERT_URL,
    client_x509_cert_url: process.env.REACT_APP_SAK_X509_CERT_URL,
},
FIREBASE_DB: process.env.REACT_APP_FB_DATABASE_URL,
};


0 commentaires