我已经使用 Terraform 部署了 API 网关解决方案。为了解决 Swagger 文件更改未正确部署的问题,我在阶段资源中引入了动态值(描述 = ${timestamp})。
虽然这种方法解决了部署问题,但它有一个不需要的副作用:每次应用更改时,所有 API 网关资源(大约 200 个 API)都会重新部署。
团队现在要求使 Terraform 计划更具可读性,并将部署限制为仅已更新的资源,避免完全重新部署所有 API。
在 Terraform 中实现这一目标的最佳方法是什么?如何避免触发完全重新部署,同时仍确保正确应用 Swagger 文件的更新?
我只想重新部署在 terraform 计划“资源 xxxx 将更新”期间更新和读取的 swagger 文件。
感谢您的帮助
您是否尝试将该 swagger 的文件作为哈希代码触发器添加到该 api 资源?
下面是如何使用它的示例,这将确保只有当文件本身发生更改时才会触发特定的 api_gateway_deployment,并且该更改不应引用任何其他内容
data "local_file" "swagger_file" {
filename = "${path.module}/swagger.json"
}
resource "aws_api_gateway_deployment" "api_deployment" {
rest_api_id = aws_api_gateway_rest_api.example.id
stage_name = "prod"
triggers = {
swagger_hash = md5(data.local_file.swagger_file.content)
}
}