设置"本地"无服务器v1.x中的阶段env变量

时间:2017-02-08 21:39:23

标签: serverless-framework

在Serverless 1.x框架中,您可以在服务根目录的serverless.yml文件中设置环境变量。我尝试设置与运行服务的阶段对应的STAGE变量。devprod很容易,如下所示:< / p>

provider:
  name: aws
  ...
  stage: dev
  environment:
    STAGE: ${opt:stage, self:provider.stage}

这意味着如果--stage被明确定义,那么env变量就会使用它。如果不是,则使用默认的dev

但是,当我使用sls invoke local时,默认阶段将是dev,而且不正确。什么是在本地调用时让舞台成为local的最佳方式?

1 个答案:

答案 0 :(得分:1)

显而易见的解决方案是在命令中添加-s local。然而,这开始变得过于冗长,这也增加了意外部署到名为local的新阶段的可能性,这显然是不可取的。

所以,我创建了这个帮助器bash函数:

# Invoke serverless service
invoke() { 
    if [ "${1}" == "local" ]; then
        stage="local -s local"
    else
        stage="-s ${1}"
    fi

    payloads_dir="tests/payloads/"
    if [ -z $3 ]; then
        payload="${payloads_dir}${2}/default.json"
    else
        payload="${payloads_dir}${2}/${3}.json"
    fi

    if [ ! -f "${payload}" ]; then
        echo $payload
        echo "Payload does not exist."
        return 1
    fi

    time --format='%e seconds' serverless invoke $stage -f $2 -p $payload
}

用法:$ invoke stage function_name [payload_name]

示例:

$ invoke local myFunction
在应用tests/payloads/myFunction/default.json阶段环境时,

将在local处使用有效负载在本地调用该函数。

$ invoke dev myFunction my_payload

将使用阶段dev和有效负载tests/payloads/myFunction/my_payload.json调用已部署的函数(如果部署的服务具有相应的serverless.yml文件,则阶段env将是正确的。)

这显然是一个可行的实现,但可以随意根据自己的喜好进行修改!