簡體   English   中英

我應該將 AWS SAM 用於“簡單”的 Lambda 函數嗎?

[英]Should I use AWS SAM for "simple" Lambda functions?

我目前正在將 SAM 用於我的一些無服務器應用程序。 我還有“更簡單”的 lambda 函數,它們不需要 API 網關或更復雜的與 AWS 服務的集成。

其中一些函數包括 S3 和 DynamoDB 觸發器函數,或者一些只是定期運行的函數。 我將它們描述為簡單,因為它們的規模不是很大並且不使用很多服務。

因此,我不喜歡為他們使用 SAM 的想法。 我希望能夠以 SAM 允許的類似方式在本地測試我的功能。 理想情況下,我想將所有簡單的 lambda 函數組合到一個 git 存儲庫中,然后我可以拉下存儲庫、編輯、測試和部署新版本的函數。 這對於 SAM 來說似乎很復雜。 我想避免每個函數都有很多大型存儲庫,我認為 SAM 最終會出現這種情況。 我不介意為較大的項目有一個單獨的回購,正是這些小項目讓我很難過。

有沒有好的方法來管理這些小的 lambda 函數? 還是我只需要接受為他們使用 SAM?

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 函數創建一個子目錄。

你必須看看無服務器框架,因為和你一樣,我不太喜歡 SAM 模板,對我來說,無服務器框架是一種更快、更簡單的方法來處理你描述的這種場景。

https://serverless.com/

我在我的一些項目中使用它,它非常簡單和實用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM