serverless-framework - 如何以 DRY 方式定义变量

标签 serverless-framework

假设我有写入 S3 存储桶的函数。因此,存储桶名称显然是一个“变量”,不应将其硬编码到函数中(例如,对于 dev 与 prod 可能是不同的存储桶)。

现在,如果我希望函数能够访问它,我至少需要在两个地方使用存储桶名称:

  1. 在函数的 IAM 政策中(允许访问存储桶)。
  2. 在函数本身中。

对于#1,我可以使用一个变量,并引用 s-module 中定义的 IAM 策略中的变量(或在 v0.4 中调用的任何内容:)。

对于 #2,我可以使用 env var,然后我可以在运行时在函数代码中访问其值。

但我当然不想定义变量两次(一次使用 sls env set 一次在 s-variables 文件中)。那不是很干。但是,我看不到在定义 envar 时引用变量的方法,反之亦然。

如何在一个地方定义存储桶名称?

最佳答案

截至 Serverless v0.5 ,这很容易。环境变量处理混合了无服务器项目变量。您在 _meta/variables/... 中以每阶段每区域的方式定义项目变量;例如,在 s-variables-dev-useast1.json:

{
    "foo_bucket": "com.example.foo-bucket"
}

然后,在使用该存储桶的 s-function.json 文件中,您定义函数需要的环境变量...和 ​​reference类似模板的项目变量:

"environment": {
    "BUCKET": "${foo_bucket}"
}

它会像任何其他环境变量一样出现;所以在节点中:

console.log("The Bucket: " + process.env.BUCKET); 
// prints "The Bucket: com.example.foo-bucket"

到目前为止Serverless docs还没有 catch 这个变化,但我希望他们应该很快。

关于serverless-framework - 如何以 DRY 方式定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382007/

相关文章:

amazon-web-services - 将存储桶策略附加到由无服务器生成的存储桶

amazon-dynamodb - 使用 CloudFormation 的 Amazon DynamoDB 属性类型

amazon-s3 - AWS Lambda无服务器框架部署错误

javascript - `{where: ' 原始查询'}` 的支持已被删除

aws-lambda - aws serverless - 导出 Cognito 授权者的输出值

aws-cloudformation - 无服务器框架 - 获取 API 网关 URL 以在测试中使用

amazon-web-services - 如何使用serverless-domain-manager插件基于阶段设置不同的域?

node.js - 具有 Azure 功能的无服务器框架

integration-testing - 使用无服务器离线和集成测试进行模拟

amazon-web-services - 为什么我的无服务器 Lambda 无法访问 S3 存储桶和项目?