2016-04-26 5 views
1

serverless bietet einen schönen Workflow für die Verwendung von Variablen sowohl im Runtime-Funktionscode als auch in der AWS-Konfiguration von Lambda-Funktionen und API-Gateway-Routing. Dies ist unter http://docs.serverless.com/docs/templates-variables und How to define variables in a DRY way beschrieben.serverlose Variablen in lokalen Tests

Ich habe Probleme herauszufinden, wie Variablen zugewiesen werden, wenn ich meine Lambda-Funktionen lokal mit sls function run -s stage testen. Die Funktion läuft gut, wenn ich den Test auf Lambda unter Einbeziehung der -d Option führe, aber es scheitert ohne es, weil eine notwendige Variable nicht zugewiesen wurde. serverless bietet diese Meldungen:

Serverless: WARNING: This variable is not defined: region 
Serverless: WARNING: This variable is not defined: appEnv 

I DRY Variablen bin mit wie in Verbindung 2 beschrieben. Im Einzelnen:

s-Variablen-aguldman-useast1.json:

{ 
    "appEnv": "qa" 
} 

Funktionen/FN1/s-function.json:

{ 
... 
    "environment": { 
    "NODE_ENV": "${appEnv}" 
    } 
... 
} 

Funktionen/FN1/handler.js:

... 
var foo = process.env.NODE_ENV; 
... 

Irgendwelche Ratschläge?

Danke!

Antwort

0

Ich muss hier ein wenig raten, weil mir einige Informationen aus Ihrer Frage fehlen. Also gehe ich davon aus, dass:

  • die Sie ausgeben versuchen, eine Variable namens Region
  • , die Ihnen eine s-function.json-Datei, die diese in sich hat:

    "environment": { "myEnvironmentVar":"${myEnvironmentVar}" }

  • dass Sie versuchen, den Inhalt der Region Variable für den Zugriff auf diesen Code in Sie Lambda-Funktion: process.env.myEnvironmentVar;

wenn dies die Warnung Sie bekommen: Serverless: WARNING: This variable is not defined: region

Wenn dies der Fall ist, dann ist das Problem ist, dass Sie diese Variable nicht eine der beiden Dateien definiert haben:

  • _meta/Variablen /s-variables-common.json
  • _meta/Variablen/s-Variablen-stage.json

auch wenn Sie den Wert in s-Variablen-common.json hinzufügen und dann fügen Sie es auch s- Variablen-stage.json dann s-var ilias-stage.json überschreibt den Wert von s-variables-common.json

+0

Rechts, rechts. Entschuldigung wegen der miesen Frage. Ich habe es gerade verbessert, und (vorhersehbar) konnte dabei meine eigene Frage beantworten. Danke für die Hilfe! –

0

Wenn ich die Option zu serverless function run hinzufügen, dann funktioniert es gut. Interessanterweise benötigt serverless die Option -r nicht, wenn es remote ausgeführt wird (wenn es eine einzelne Region im Projekt gibt), aber wenn es lokal ausgeführt wird.

Fassen wir zusammen:

serverless function run -s stage -r us-east-1 

erfolgreich Variablen aus der Datei s-Variablen entsprechenden liest, aber

serverless function run -s stage 

nicht. Im Gegensatz dazu

serverless function run -s stage -d 

funktioniert gut, ohne eine Region explizit angegeben werden, vermutlich weil ich nur eine Region in meinem Projekt haben.

0

Zunächst einmal laufen folgenden Befehl Ihrer Bühne/Regionen der Variablen JSON-Datei in _meta Ordner erstellen

sls stage create 

dann geben Sie Ihren Künstlernamen und die Region (Sie haben Ihre amazon Zugriffsschlüssel und den geheimen Schlüssel zu schaffen,). Dann wird die folgende JSON-Datei erstellt.

_meta/variables/s-variables-{your_region}-{your_stage}.json 
ie. _meta/variables/s-variables-us-east-1-dev.json 

Wenn Sie die Variable manuell hinzufügen möchten, können Sie dies wie folgt tun. Diese Variablen werden über s-Variablen- hinzugefügt werden {your_region} - {} your_stage .json

sls variables set 

und dann geben wir den Schlüssel und den Wert oder in einer Zeile Datei wie folgt

sls variables set -k appEnv -v dev 

Hoffnung das hilft.