【问题标题】:What’s the best way to deploy multiple lambda functions from a single github repo onto AWS?将多个 lambda 函数从单个 github 存储库部署到 AWS 的最佳方式是什么?
【发布时间】:2020-05-07 23:28:16
【问题描述】:

我有一个存储库,用于在 github 上托管我的 lambda 函数。我希望能够在将新逻辑推送到 master 时部署新版本。

我做了很多研究,发现了一些不同的方法,但都没有很清楚。想知道其他人认为解决此问题的最佳方式,以及有关如何设置该管道的一些细节(如果可能)。

谢谢

【问题讨论】:

    标签: aws-lambda aws-code-deploy aws-codepipeline aws-codebuild aws-serverless


    【解决方案1】:

    欢迎来到 StackOverflow。您可以通过阅读this 页面来改进您的问题。

    您可以使用CircleCI with its GitHub integration 设置 CI/CD 管道(这是一个在线服务,因此您不需要维护任何东西,例如 Jenkins 服务器)

    每次提交到您的存储库时,都会触发 CircleCI 构建。构建过程结束后,您可以声明 sls deploysam deploy,使用 Terraform 甚至创建脚本将 .zip 文件从 GitHub 存储库上传到 S3 存储桶,然后在脚本中调用 @987654323 @ 命令。有一个示例如何使用 CircleCI 和 Serverless Framework here 部署无服务器应用程序

    其他选项包括TravisCIAWS Code Deploy 甚至维护您自己的 CI/CD 服务器。但是,相同的逻辑适用于所有这些工具:提交 -> 构建 -> 部署(使用您选择的工具之一)。

    编辑:在@Matt 的回答之后,它点击了 OP 从未提及无服务器框架(不知何故,我认为他已经在使用它,所以我将 OP 指向使用无服务器框架的教程已经)。然后我决定用其他一些无服务器部署选项来更新我的答案

    【讨论】:

    • 同意泰雷兹。对于仍在寻找使用 CircleCI 为 Serverless monorepo 应用程序构建 CI/CD 管道的方法的任何人,这里是一步一步的帖子 - seed.run/blog/…
    【解决方案2】:

    我知道这并不完全符合您的要求,但我使用无服务器框架 (https://serverless.com) 进行部署,我喜欢它。当我推送到我的仓库时,我不进行部署。相反,我在部署后推送到我的仓库。我喜欢这种流程,因为部署可能会因为很多事情而失败,而推送到 GitHub 的可能性要小得多。这样,我可以防止将无法部署到我的主分支的代码推送到我的主分支。

    我不知道你是否熟悉这个框架,但它超级简单。该网站描述了创建和部署此类函数的简单步骤。

    1     # Step 1. Install serverless globally
    2     $ npm install serverless -g
    3
    4     # Step 2. Create a serverless function
    5     $ serverless create --template hello-world
    6 
    7     # Step 3. deploy to cloud provider
    8     $ serverless deploy
    9
    10   # Your function is deployed!
    11   $ http://xyz.amazonaws.com/hello-world
    

    您还可以使用许多插件轻松地与 APIGateway 上的自定义域集成,修剪可能会填补您的限制的旧版本 lambda 函数,等等...

    总的来说,我发现它是管理和部署我的 lambda 的最简单方法。希望对您有所帮助!

    【讨论】:

    • 在您发布您的答案后,我已经编辑了我的答案。我认为即使您从未提到如何将它与 CI/CD 管道集成(尽管人们可以从命令行部署某些东西应该很明显),但我认为您应该得到支持,所以这里是 :)
    • 我正要编辑我的答案以反映你的哈哈。我们正在处理同一个问题的两个方面。
    • 我不知道无服务器,但现在结合它有助于简化和自动化如此多的逻辑!谢谢! ?
    • 现在我会使用 AWS CDK。不像 terraform 那样复杂,但比无服务器框架功能更多。
    • @Marc 我不确定你所说的“更多功能”是什么意思,无服务器框架可以部署几乎任何你需要的东西。如果它没有在框架自己的配置中描述,抽象出底层 CloudFormation,你实际上可以只使用原始 CloudFormation 来部署你需要的东西。
    【解决方案3】:

    鉴于您使用的是 AWS Lambda,您可能需要考虑使用 CodePipeline 来自动化您的发布过程。 [SAM(https://docs.aws.amazon.com/lambda/latest/dg/serverless_app.html) 也可能很有趣。

    【讨论】:

    • 您的意思是,使用 CodePipeline 触发 AWS Lambda,然后更新所有其他 lambda 的函数代码?据我所知,不支持从 CodePipeline 更新功能代码/切换到新版本。
    • CodePipeline 让您将发布过程建模为要执行的操作。没有直接操作来执行您描述的操作,但您可以添加 CloudFormation、CodeBuild 甚至 Lambda 函数等操作来更新 Lambda 函数代码或版本并切换到新版本。
    【解决方案4】:

    我也有同样的问题。我想用 1 个 git 存储库管理 12 个 lambda。我通过引入travis-ci 解决了这个问题。 travis-ci 节省了时间并且在很多方面都非常有用。我们可以随时检查日志,您可以通过共享 URL 将日志共享给任何人。所有步骤的示例文档可以在here 找到。你可以通过它。 ?

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2021-12-16
      • 2021-04-06
      • 2023-03-09
      • 2016-06-04
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多