2016-04-26 55 views
1

無服務器爲運行時功能代碼以及AWS配置中的Lambda函數和API網關路由提供了一個很好的工作流程。這在http://docs.serverless.com/docs/templates-variablesHow to define variables in a DRY way中描述。本地測試中的無服務器變量

我在使用sls function run -s stage在本地測試我的Lambda函數時,無法確定如何分配變量。當我通過包含-d選項在Lambda上運行測試時,該函數正常運行,但由於尚未分配必要的變量,因此在沒有它的情況下失敗。無服務器提供這些信息:

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

我使用的鏈路2描述DRY變量。具體做法是:

S-變量 - aguldman-useast1.json:

{ 
    "appEnv": "qa" 
} 

功能/ FN1/S-function.json:

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

功能/ FN1/handler.js:

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

有什麼建議嗎?

謝謝!

回答

0

我必須在這裏做一些猜測,因爲我缺乏一些你的問題的信息。所以我會假設:

  • ,你正試圖輸出變量稱爲區域
  • ,你必須有這個中有一個S-function.json文件:

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

  • 您嘗試使用此代碼在您的lambda函數中訪問區域變量的內容: process.env.myEnvironmentVar;

如果這是你所得到的警告: Serverless: WARNING: This variable is not defined: region

如果是這種情況,那麼問題是,你還沒有定義這個變量任何這兩個文件:

  • _meta /變數/s-variables-common.json
  • _meta /變量/ s的變量,stage.json

此外,如果你加入S-變量 - common.json值,然後也將其添加到S- variables-stage.json然後是s-var iables-stage.json將覆蓋s變量的值common.json

+0

對,對。對於糟糕的問題抱歉。我只是改進了它,並且(可預測地)在這樣做的過程中能夠回答我自己的問題。謝謝您的幫助! –

0

如果我將-r us-east-1選項添加到serverless function run那麼它工作正常。有趣的是,無服務器在遠程運行時(如果項目中存在單個區域)不需要-r選項,但在本地運行時不需要-r選項。

總結:

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

成功讀取相應的S-變量文件中的變量,但

serverless function run -s stage 

沒有。相反,

serverless function run -s stage -d 

工作正常,沒有明確指定區域,大概是因爲我的項目中只有一個區域。

0

所有運行下面的命令首先要在_meta文件夾中創建你的舞臺/地區的變量JSON文件

sls stage create 

然後提供你的藝名和地區(你必須提供您的Amazon訪問密鑰和私有密鑰)。然後將創建下面的json文件。

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

如果要手動添加變量,可以按如下所示進行操作。這些變量將被添加到上述的S-變量 - {your_region} - {your_stage}上傳.json文件

sls variables set 

然後給鍵和值或在一行如下

sls variables set -k appEnv -v dev 

希望這有助於。

相關問題