【问题标题】:Should I use AWS SAM for "simple" Lambda functions?我应该将 AWS SAM 用于“简单”的 Lambda 函数吗?
【发布时间】:2020-04-25 06:40:29
【问题描述】:

我目前正在将 SAM 用于我的一些无服务器应用程序。我还有“更简单”的 lambda 函数,它们不需要 API 网关或更复杂的与 AWS 服务的集成。

其中一些函数包括 S3 和 DynamoDB 触发器函数,或者一些只是定期运行的函数。我将它们描述为简单,因为它们的规模不是很大并且不使用很多服务。

因此,我不喜欢为他们使用 SAM 的想法。我希望能够以 SAM 允许的类似方式在本地测试我的功能。理想情况下,我想将我所有的简单 lambda 函数组合到一个 git 存储库中,然后我可以拉下存储库、编辑、测试和部署新版本的函数。这对于 SAM 来说似乎很复杂。我想避免每个函数都有很多大型存储库,我认为最终会在这些函数上使用 SAM。我不介意为较大的项目创建一个单独的 repo,正是这些小项目让我很难过。

有没有管理这些小型 lambda 函数的好方法?还是我只需要接受为他们使用 SAM?

【问题讨论】:

  • 嘿亚历克斯 - 好问题,我也想看到答案;我和你有类似的问题/想法。我尝试过的一件事(不确定它是否适合您)是将类似和小型 lambda 集捆绑到一个源文件中,并定义不同的 lambda 处理程序。这样,一组 lambdas 指向同一个源文件,但在该文件中使用不同的处理程序(函数)。对于我的一些用例,这使得管理单独的小 lambda 组比为每个单独的源文件更容易

标签: amazon-web-services aws-lambda serverless aws-serverless


【解决方案1】:

AWS SAM 非常适合该用例!如果您将它与 CloudFormation 进行比较,它允许您以更紧凑的方式编写 Lambda 函数及其触发器。我不确定您认为什么复杂,但请看下面的示例。这是一个单一的 AWS SAM 模板,它定义了两个 AWS Lambda 函数,一个由 S3 事件触发,另一个按计划每五分钟执行一次:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
  Function:
    Runtime: python3.8
Resources:
  Bucket:
    Type: AWS::S3::Bucket
  ProcessorFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: s3_processor.handler
      CodeUri: src/
      Policies: AmazonS3ReadOnlyAccess
      Events:
        PhotoUpload:
          Type: S3
          Properties:
            Bucket: !Ref Bucket
            Events: s3:ObjectCreated:*
  ScheduledFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: scheduled_function.handler
      CodeUri: src/
      Events:
        Timer:
          Type: Schedule
          Properties:
            Schedule: rate(5 minutes)

我不会包含纯 CloudFormation 的相同定义,因为它会超过一百行。

您可以使用单个 CloudFormation 堆栈部署这两个功能,这在我看来是您想要做的。

至于代码,您可以看到我使用了两个不同的处理程序,因此您只需在您的 src/ 目录中添加一个 s3_processor.py 和一个 scheduled_function.py 即可。您可以轻松地将所有这些保存在一个 git 存储库中,并享受 AWS SAM 本地测试能力带来的好处。

如果您希望每个 AWS Lambda 函数有一个单独的 CloudFormation 堆栈,您只需在 git-repository 中为每个 AWS Lambda 函数创建一个子目录。

【讨论】:

    【解决方案2】:

    你必须看看无服务器框架,因为和你一样,我不太喜欢 SAM 模板,对我来说,无服务器框架是一种更快、更简单的方式来处理你描述的这种场景。

    https://serverless.com/

    我在一些项目中使用它,它非常简单实用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 2022-01-15
      • 2019-10-04
      • 2022-01-06
      • 2021-01-24
      相关资源
      最近更新 更多