我是AWS Lambda的新手,我使用无服务部署来部署在serverless.yml文件中声明的lambda函数。
在该文件中,我编写了一个lambda函数,该函数可以正常运行,但问题是我提供的任何环境变量在该lambda函数的控制台中均不可用。我可能在犯一些小错误,或者在部署环境变量时应该使用其他语法。
我可以转到控制台中的lambda函数并手动添加环境变量。
但是我的疑问是,在通过serverless deploy
答案 0 :(得分:0)
您可以使用AWS Lambda提供的版本和别名
您可以创建同一lambda函数的不同版本,并为其指定别名。就像当您推送lambda代码时一样-创建一个版本(例如5)-创建一个别名(例如TEST)。 当您确定它已准备好投入生产时,请创建一个版本(或选择一个现有版本并命名(例如PROD)。
现在,只要您的lambda函数执行,它就会给出
lambda ARN
其中包含别名,通过它您可以知道哪个别名(在context.invokedFunctionArn中) 执行,即可以用作环境变量。而 调用函数时,您可以提及要从哪个函数执行 您的调用代码。
let thisARN = context.invokedFunctionArn;
// Get the last string in ARN - It's either function name or the alias name
let thisAlias = thisARN.split(":").pop();
现在,每当部署新代码时,只需将别名指向该版本。 您可以为此使用AWS控制台或CLI。
看看这个lambda versioning and aliases
要直接部署到您的别名(PROD),可以执行以下操作-
aws lambda update-alias \
--region region \
--function-name helloworld \
--function-version 2 \
--name PROD
答案 1 :(得分:0)
serverless deploy
无服务器部署在任何阶段都可以很好地部署,也可以在给定阶段部署环境变量,我的案例环境变量没有部署yaml文件中的缩进问题,甚至无服务器部署命令也没有抛出错误,它正在部署功能但环境变量未部署
在yaml文件中,我们可以像这样声明要部署的阶段
provider:
name: aws
runtime: nodejs6.10
stage: dev
region: eu-west-2
希望如果有人遇到类似问题,这会有所帮助