如何在单个 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 与其他拥有 Android 存储库的人共享代码?