我有一个terraform脚本来创建:函数应用和事件网格主题和事件网格订阅,以函数为端点
resource "azurerm_linux_function_app" "example" {
...
}
resource "azurerm_eventgrid_topic" "example" {
...
}
resource "azurerm_eventgrid_event_subscription" "example" {
name = "sub1"
scope = azurerm_eventgrid_topic.example.id
azure_function_endpoint {
function_id = "${azurerm_linux_function_app.example.id}/functions/event-grid-example"
}
很明显我得到了“Resource should pre-exist before attempt this operation”,因为event-grid-examplefuncion还不存在。它不存在是因为我需要先部署我的Function。但我无法在对基础架构进行地形化之前部署我的Function...我无法这样做,因为... *Function**不存在
我该怎么做?
1条答案
按热度按时间5w9g7ksd1#
我在Terraform上使用过eventgrid和Azure函数。问题源于eventgrid扩展没有部署在Azure函数上,直到有一个函数部署了eventgrid触发器(正如你正确指出的那样)。
我解决这个问题的方法是使用我称之为“Terraform三明治”的方法。添加一个名为“启用订阅”的布尔类型的输入变量。
1.运行Terraform,将“启用eg订阅”设置为false。
1.部署Terraform代码。
1.运行Terraform,并将“启用eg订阅”设置为true。
第二个Terraform应用程序将工作,因为您的函数代码已经与eventgrid触发器代码一起部署,并且已经准备好设置订阅。
这将导致订阅中的客户流失,因此在部署到生产环境时,您需要考虑短暂的停机窗口。为了避免这种情况,您可以在第一步中添加逻辑,以使用Azure cli检查订阅是否已存在,并传递true。