假设我有写入S3存储桶的功能。因此,桶名称显然是一个“变量”,不应该硬编码到函数中(例如,对于dev与prod可能是不同的桶)。
现在,如果我希望函数能够访问它,我需要在至少两个地方使用存储桶名称:
对于#1,我可以使用变量,并参考s-module
中定义的IAM策略中的变量(或v0.4中调用的任何内容)。
对于#2,我可以使用一个env var,我可以在运行时在函数代码中访问它的值。
但我当然不希望两次定义变量(一次使用sls env set
,一次定义在s-variables
文件中)。那不是很干。但是,我没有看到在定义envars时引用变量的方法,反之亦然。
如何在一个地方定义存储桶名称?
答案 0 :(得分:8)
截至Serverless v0.5,这非常简单。环境变量处理混合无服务器项目变量。您可以按每个区域的每个阶段的方式在_meta/variables/...
中定义项目变量;例如,在s-variables-dev-useast1.json
:
{
"foo_bucket": "com.example.foo-bucket"
}
然后,在使用该存储桶的s-function.json
文件中,您可以在模板中定义功能需要的环境变量...以及引用项目变量方式:
"environment": {
"BUCKET": "${foo_bucket}"
}
然后它将像任何其他环境变量一样出现;所以在节点中:
console.log("The Bucket: " + process.env.BUCKET);
// prints "The Bucket: com.example.foo-bucket"
到目前为止,Serverless docs尚未赶上这一变化,但我预计它们应该很快就会出现。