amazon-web-services - Terraform AWS Lambda CI/CD 与单独存储库中的函数代码
问题描述
我有一个存储库,其中包含我所有的 terraform 代码,包括aws_apigatewayv2_api
资源和其他相关资源,如阶段。我想为此 API Gateway 的每个路由设置 lambda 集成,但我不希望 lambda 运行时代码与我的基础架构位于同一存储库中。我希望每个 lambda 的代码都有自己的存储库和独立的 CI/CD 管道,这样对 lambda 的代码更改不需要 terraform 来查看应用时的其余基础设施(基本上,一个单独的 terraform 状态每个 lambda)。问题是,我不知道如何做到这一点,同时允许每个 lambda 各自的aws_apigatewayv2_integration
资源同时查看它需要的 theaws_api_gatewayv2
和 the 。aws_lambda_function
这些是我唯一的选择吗?
- 在每个 lambda 的terraform
terraform_remote_state
中使用以允许它查看其所在的核心基础设施状态aws_apigatewayv2_api
(但如果核心基础设施以破坏 lambda 集成的方式进行更新,则 lambda 在获得新的 CI 之前将无法知道扳机)。 - 将所有 lambda 代码写入与基础架构相同的存储库中。一个存储库,一个 CI 管道。
我不喜欢这些选项中的任何一个,因为我要么失去了运行时代码和基础设施的分离,要么失去了 lambdas 的 terraform 与核心 terraform 保持同步的能力。是否有第三种解决方案,理想情况下可以让我保持这两种期望的品质?
解决方案
第三种解决方案是使用 Terraform 之外的无服务器框架,我过去使用 Terraform 来管理 Lambda 和 API 网关,不需要它的头痛。
使用Terraforminfra
的文件夹和/或无服务器框架的文件夹。serverless
app
如今,Mono Repo 越来越受欢迎。
记住:
- Terraform最适合管理更持久的共享基础架构
- 无服务器非常适合管理特定于应用程序的基础架构。
例子:
推荐阅读
- wpf - 调整 WPF 中的投影大小。如图所示
- ios - 使用 formData 在 iOS 应用中上传两种文件类型?
- ios - UIScrollview 底部的额外空白区域
- java - 如何使用 Junit 4.11 有条件地执行测试类
- xml - 用于将文件从一个位置复制到另一个位置并重命名的 Shell 脚本将当前日期和时间戳添加到 YYYYMMDDHHmmSS 格式的每个文件
- ruby-on-rails - Rails - 基于 mailer 方法返回的内容的有条件的 Deliver_now
- java - 将摘要添加到 ListPreference 列表?
- python - azkaban 运行 selenium 自动 python 脚本流在执行大约 20 分钟后失败,并且系统变得非常缓慢
- java - 需要找到最多三个数字的位置
- java - Fitnesse 测试页面抛出异常