2017-05-11 1 views
2

J'utilise serverless et serverless-local pour le développement local.Définir des variables d'environnement à partir d'un fichier externe dans serverless.yml

J'ai un fichier externe qui contient des références aux variables d'environnement que je récupère de node.env dans mon application.

D'après ce que je comprends, je devrais être en mesure de mettre mes variables d'environnement telles que

dev: 
    AWS_KEY: 'key', 
    SECRET: 'secret 
test: 
    AWS_KEY: 'test-key', 
    SECRET: 'test-secret', 
etc: 
    ... 

et ont les variables d'environnement inclus dans mon application par la ligne suivante dans mon serverless.yml

provider: 
    name: aws 
    runtime: nodejs4.3 
    stage: ${opt:stage, self:custom.default_stage} 
    deploymentBucket: serverless-deploy-packages/${opt:stage, self:custom.default_stage} 
    environment: 
    ${file(./serverless-env.yml):${opt:stage, self:custom.default_stage}} 

puis dans la ligne de commande, je l'appelle

serverless offline --stage dev --port 9000

Je pensais que cela inclurait les bonnes vars dans mon application, mais cela ne fonctionne pas. Est-ce que ce n'est pas comme ça que ça doit marcher? Est-ce que je fais quelque chose de mal ici?

Répondre

1

De docs:

Vous pouvez définir le contenu d'un fichier externe dans une variable:

file: ${file(./serverless-env.yml)} 

Et plus tard, vous pouvez utiliser cette nouvelle variable pour accéder aux variables du fichier.

secret: file.dev.SECRET 

Vous pouvez aussi utiliser directement le fichier:

secret: ${file(./serverless-env.yml):dev.SECRET} 
+0

Les documents sont incomplets, et bien que cela puisse être fait comme vous le décrivez, il est plus détaillé que nécessaire. Passer des valeurs directement à l'entrée d'environnement dans yaml fonctionne, j'ai juste eu une erreur dans l'endroit où le fichier pointait, ce qui apparemment ne provoque pas d'erreur dans yaml. – pedalpete

3

Vous pouvez également utiliser maintenant les valeurs à distance avec le cadre async serverless. Voir https://serverless.com/blog/serverless-v1.13.0/

Cela signifie que vous pouvez appeler des valeurs à partir des bases de données s3 ou à distance, etc.

Exemple:

serverless.yml

service: serverless-async-vars 

provider: 
    name: aws 
    runtime: nodejs6.10 

custom: 
    secret: ${file(./vars.js):fetchSecret} # JS file running async/promised 

vars.js

module.exports.fetchSecret =() => { 
    // async code 
    return Promise.resolve('SomeSecretKey'); 
} 
0

J'avais ceci correct, mais je référençait le fichier incorrectement.

Je ne vois pas cela dans les documents, mais le passage d'un fichier à environment inclura le fichier yaml de fichiers, et la structure ci-dessus fonctionne.