在Serverless 1.x框架中,您可以在服务根目录的serverless.yml
文件中设置环境变量。我尝试设置与运行服务的阶段对应的STAGE
变量。dev
和prod
很容易,如下所示:< / p>
provider:
name: aws
...
stage: dev
environment:
STAGE: ${opt:stage, self:provider.stage}
这意味着如果--stage
被明确定义,那么env变量就会使用它。如果不是,则使用默认的dev
。
但是,当我使用sls invoke local
时,默认阶段将是dev
,而且不正确。什么是在本地调用时让舞台成为local
的最佳方式?
答案 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将是正确的。)
这显然是一个可行的实现,但可以随意根据自己的喜好进行修改!