【问题标题】:Is it possible to separate my code and infrastructure in serverless framework?是否可以在无服务器框架中分离我的代码和基础设施?
【发布时间】:2019-03-19 21:35:07
【问题描述】:

是否可以在无服务器框架中分离我的代码和基础架构?

我正在使用无服务器框架 (https://serverless.com) 来部署我的 AWS 资源。我在 serverless.yml 文件中定义了一个 lambda 函数,如下所示:

functions:
   hello:
   handler: handler.hello
   ...

现在我想将我的基础架构 (serverless.yml) 与我的代码分开。 会有两个独立的 git 项目:一个用于基础设施,一个用于 lambda(代码部分)。

这将是开发流程: 在 lambda 项目 (git merge) 中所做的更改将触发 CI/CD 管道以拉取代码进行必要的检查(提示、测试等)并将 lambda 部署到 s3 存储桶。

在此之后,我可以将 s3 作为我的 lambda 函数的来源,并使用包含更改的函数更新堆栈。像这样的:

functions:
   hello:
   handler: function-s3-location
   ...

我的问题:

1) 这是一种好的 CI/CD 方法吗?

2) 是否可以使用无服务器框架或仅使用AWS::Lambda::Functions 代码属性来指定 s3 存储桶?

谢谢!

【问题讨论】:

    标签: amazon-web-services continuous-integration aws-lambda serverless-framework


    【解决方案1】:

    无论你做出什么决定,最终都将是一个架构决策,应该考虑到流程、团队经验、文化、架构知识等。

    为了让您了解一些情况,您可以通过将函数放在文件夹中并将任何其他模块放在 diff 文件夹中的方式来构建项目。您需要注意的是在配置文件中定义“package.include”和/或“package.exclude”。

    此外,如果结构是指所有 CloudFormation 资源,则在 serverless.yml 配置文件中有一个部分。如果它开始变得太大,你也可以使用一个额外的配置文件并将其导入你的 serverless.yml

    例如:

    ├── config //configs based on your stage
     ├── dev.json
     ├── prod.json
    ├── functions
     ├── functionsA
      ├── index.js
     ├── functionsB
      ├── index.js
    ├── tests
     ├── unit.test.js
    ├── package.json
    ├── serverless.yml
    ├── serverless.resources.yml
    

    在一个仓库中拥有所有内容的好处:

    • 您将所有资源保留在同一个项目下,这意味着如果您“sls remove”该命令将负责删除您的所有资源。 lambda 也是一样。
    • 新团队成员很容易理解您的架构。
    • 您拥有启动 API 的本地实例并执行集成测试所需的所有代码。对 CI 很有用。
    • 在流​​水线期间,您将只需要管理一个存储库。
    • 您无需管理 2 个存储库即可评估它们是否一起“行走”。
    • 如果您不想更新云架构,无服务器允许您仅推送/部署功能。
    • 提供商将管理您所有资源之间的绑定。例如:您不必管理舞台 DEV 上的 apiGateway,应该调用指向 DV DB 或包含值为 DEV 的环境变量的 lambda。
    • 您自己手动管理的时间越少越好。

    我希望这些理由足以让您做出决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2018-04-02
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      相关资源
      最近更新 更多