如何在单个 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 循环中)。
我有一个解决方案,但我必须为每个 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 循环中)。