如何在单个 git 回购中拥有多个 lambda 函数并为其创建一个 CI/CD 管道

how to have multiple lambda function in single git repo and create a CI/CD pipeline for the same

我有一个解决方案,但我必须为每个 lambda 制作一个单独的 deply.yml,(如果有 10 个 lambda,那么我必须为每个 lambda 制作 10 个 deploy.yml ).我想知道这项工作是否可以用单个 deploy.yml 完成(我也尝试过无服务器但它没有用)。

在无服务器中,您可以通过单个 serverless.yaml

实现如下
service: my-service
package:
  individually: true
  patterns:
    - '!src/excluded-by-default-for-all-functions.json'
functions:
  hello:
    handler: handler.hello
    package:
      # We're including this file so it will be in the final package of this function only
      patterns:
        - function1/path/somefile.json #some path for function1
        - excluded-by-default.json # you can add ignored file in this function alone
  world:
    handler: handler.world
    package:
      patterns:
        - '!some-file.js' #Not including this file
        - 'function2/path/another-file.json' #Including this file
        - '!path123/**' #Don't include any file in this path

您可以为此使用 AWS SAM。你会 有一个像这样的 template.yml 文件:

Transform: AWS::Serverless-2016-10-31

Parameters:
  Function1Hash:
    Type: String
  Function2Hash:
    Type: String

Resources:
  Function1:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/my/code
      Role: !GetAtt MyRole.Arn
      Runtime: myruntime
      Handler: lambda_function.handler
      AutoPublishCodeSha256: !Ref Function1Hash

  Function2:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/my/code
      Role: !GetAtt MyRole.Arn
      Runtime: myruntime
      Handler: lambda_function.handler
      AutoPublishCodeSha256: !Ref Function2Hash

您为每个 lambda 生成一个散列。这样,如果 lambda 代码发生变化,散列也会发生变化。然后你将这些哈希值作为参数注入到你的模板中,只有带有新代码的 lambda 才会被更新,由 AutoPublishCodeSha256 属性保证。在你的 deploy.yml(未测试)中有这样的东西:

hash_func_1=$(md5sum lambda1.py | awk '{print }')
hash_func_2=$(md5sum lambda2.py | awk '{print }')

sam deploy --stack-name my-lambdas -t template.yml --parameter-overrides Function1=$hash_func_1 Function2=$hash_func_2

访问git repo

在这里,您可以在名为“lambda”的文件夹中添加尽可能多的 lambda 函数,该文件夹与 lambda 函数同名,还可以更新 lambda.deploy.yml 中的函数名称(在 for 循环中)。