AWS 最近宣布AWS Lambda 现在支持 GitHub Actions,提供了一种使用 GitHub Actions 工作流中的声明式配置来部署 Lambda 函数更改的简化方法。新选项支持.zip 文件和容器镜像部署。
GitHub Actions是一种工具,每当 GitHub 存储库发生更改时,它会自动运行诸如构建、测试和部署代码等任务。用于 AWS Lambda 的新操作通过 OpenID Connect (OIDC)身份验证与 IAM 集成。它支持配置函数设置,包括运行时、内存大小、超时和环境变量,以及试运行模式和基于 Amazon S3 的大型.zip 文件包部署。
OIDC允许 GitHub Actions 工作流在不将 AWS 凭据存储为长期秘密的情况下访问 AWS 资源。AWS 产品负责人 Shridhar Pandey 在 LinkedIn 上评论:
还记得编写自定义脚本从 GitHub 部署 Lambda 函数吗?那些日子已经过去了!现在您可以通过简单的声明式配置直接从 GitHub 存储库自动部署您的 Lambda 函数 (...) 我特别兴奋的是,这简化了无服务器应用程序的 CI/CD 管道。少一件要维护的事情!
开发团队以前必须编写自定义脚本并手动处理打包、权限和错误处理,以从 GitHub Actions 部署 Lambda 函数,导致重复工作和错误风险增加。新选项提供了一种声明式 YAML 接口,消除了手动部署步骤的复杂性。
name: Deploy AWS Lambda
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write # Required for OIDC authentication
contents: read # Required to check out the repository
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionRole
aws-region: us-east-1
- name: Deploy Lambda Function
uses: aws-actions/aws-lambda-deploy@v1
with:
function-name: my-lambda-function
code-artifacts-dir:./dist
Lambda 部署的 GitHub Actions 工作流。来源:AWS 文档
通过 GitHub 操作发布 Lambda 函数的能力收到了社区的积极反馈,许多开发人员质疑为什么花了这么长时间。用户raize_the_roof评论:
这已经期待很久了。即使有了集成,我发现调整运行环境可以使工作流完成的速度有明显差异(特别是对于更大的构建)。
在文章“为什么您可能不想使用 AWS 的新 GitHub Actions Lambda 部署”中,Symphonia 的合伙人 Mike Roberts 不同意:
就功能而言,这与调用 AWS Lambda CLI 完全相同 - 新操作除了这个没有太多其他内容。 (...) 您仍然需要配置和部署角色和权限,并且仍然需要部署触发器配置。在我略过的所有其他事情之前!此外,这种操作甚至不会构建您的 Lambda 函数。 (...) 以这种方式部署 Lambda 的另一个问题是,它与从开发环境部署的方式不同
The Duckbill Group 的首席云经济学家 Corey Quinn 在他的时事通讯中补充道:
坦率地说,我认为我们都想要的是 AWS 对 Google Cloud Run 的回答:这是一个容器镜像,为我大规模运行它。
部署所需的参数是function-name、code-artifacts-dir、handler
和runtime
。如果不存在由 function-name 指定的函数,则还需要 role 参数,并且将使用 CreateFunction API 用code-artifacts-dir
中的提供代码和配置参数创建函数。AWS DevOps 工程师 Oleksii Semeniuk 测试了新功能并发表了一篇关于使用 GitHub Actions 部署 Lambda 函数的文章。Semeniuk 总结道:
这个过程非常简单,大大减少了以前所需的开销。
用于 Lambda 函数的新 GitHub 操作在所有 AWS 区域都可用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。