【问题标题】:How do I transitively reference external files with serverless?如何使用无服务器传递引用外部文件?
【发布时间】:2020-03-13 00:01:04
【问题描述】:

我正在尝试在我的serverless.yml 中进行一些传递文件引用,但似乎serverless 总是基于serverless.yml 文件解析引用,而不管其他引用文件位于何处。 示例:

serverless.yml:

...
resources:
  - ${file(./cloud-formation-resources/my-dashboard.yml)}

./cloud-formation-resources/my-dashboard.yml:

Resources:
  MyDashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: My
      DashboardBody: ${file(./cloud-formation-resources/dashboard-body-my.js):dashboardBodyMy}

./cloud-formation-resources/dashboard-body-my.js:

module.exports.dashboardBodyMy = (serverless) => {
 const fsPromises = require('fs').promises
 return fsPromises.readFile('./cloud-formation-resources/dashboard-body-my.json', 'utf-8')
};

./cloud-formation-resources/dashboard-body-my.json:

{
    "widgets": [
        ...
    ]
}

我是否应该将所有资源文件与serverless.yml 放在同一目录中?我发现的唯一reference 是:

流行的无服务器框架旨在仅部署包含 serverless.yml 文件的目录内的文件。

这种限制可能是设计使然——您的 Lambda 需要的所有外部代码通常都可以包含在包管理器中。

【问题讨论】:

    标签: serverless-framework


    【解决方案1】:

    无服务器框架确实假设所有包含的文件都应该与serverless.yml 在同一目录下,但在许多情况下需要外部文件是很常见的。

    为此,您可以使用serverless-package-external 插件轻松添加指向这些文件的链接(您可以在您引用的blog post 中阅读更多相关信息)。

    【讨论】:

    • 你知道为什么 serverless 需要扁平结构中的一切吗?你能指出一些文档吗?
    • 但是您可以引用与特定 yml 相关的另一个文件。如果您的项目具有这样的结构:``` /database/serverless.yml common-configs-serverless.yml ``` 你会在 serverless.yml 中引用类似这样的内容:${file(../common-configs-serverless.yml) 不一定是平面
    • 我不了解官方文档,但我认为原因通常是包管理器(如“npm”)应该负责添加外部文件。可以引用另一个文件,但不会将该文件添加到部署中。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多