假设我有一个写入 S3 存储桶的函数。因此,存储桶名称显然是一个“变量”,不应硬编码到函数中(例如,开发与生产可能是不同的存储桶)。
现在,如果我希望函数能够访问它,我需要在至少两个地方使用存储桶名称:
- 在该功能的 IAM 策略中(允许访问存储桶)。
- 在函数本身中。
对于#1,我可以使用一个变量,并引用 IAM 策略中定义的变量s-module
(或者 v0.4 中的任何名称:)。
对于#2,我可以使用环境变量,然后我可以在运行时在函数代码中访问其值。
但我当然不想定义变量两次(一次是sls env set
并且一旦在s-variables
文件)。那不是很干。但是,我没有看到在定义 envar 时引用变量的方法,反之亦然。
如何才能在一处定义存储桶名称?
As of 无服务器 v0.5 https://github.com/serverless/serverless/releases/tag/v0.5.0,这很容易。环境变量处理混合无服务器项目变量。您在中定义项目变量_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"
到目前为止无服务器文档 http://docs.serverless.com/docs还没有跟上这一变化,但我预计他们应该很快就会发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)