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

Posted

技术标签:

【中文标题】如何在单个 git repo 中拥有多个 lambda 函数并为其创建 CI/CD 管道【英文标题】:how to have multiple lambda function in single git repo and create a CI/CD pipeline for the same 【发布时间】:2022-01-12 06:54:06 【问题描述】:

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

【问题讨论】:

【参考方案1】:

在无服务器中,您可以使用单个 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

【讨论】:

【参考方案2】:

您可以为此使用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 $1')
hash_func_2=$(md5sum lambda2.py | awk 'print $1')

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

【讨论】:

【参考方案3】:

访问git repo

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

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何在单个 git repo 中拥有多个 lambda 函数并为其创建 CI/CD 管道的主要内容,如果未能解决你的问题,请参考以下文章

Git:将子模块文件检出到单个目录中

在Gitlab中防止单个repo的链式git钩子

如何通过 git 与其他拥有 Android 存储库的人共享代码?

cocoapods 如何使用同一个 repo.git 进行多个私有 repo

React - 将应用程序分成多个 git repos

Git Submodule 使用