You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform CLI更新存储Blob内容并重部署函数应用代码

解决Terraform更新存储Blob及函数应用代码的问题

问题原因

Terraform 默认仅跟踪 source 参数的文件路径,不会校验文件内容的变化。因此即使本地 sample-func.zip 内容更新,只要文件名不变,Terraform 就会认为资源状态无变化,不会触发Blob更新。

解决方案

1. 让Terraform感知Blob内容变化

修改 azurerm_storage_blob 资源块,添加文件哈希校验参数,当文件内容变化时触发Blob更新:

resource "azurerm_storage_blob" "function_code" {
  name                   = "sample-func.zip"
  storage_account_name   = azurerm_storage_account.st-func.name
  storage_container_name = azurerm_storage_container.container-deploy.name
  type                   = "Block"
  source                 = "sample-func.zip"
  # 通过文件MD5哈希检测内容变化,触发Blob更新
  content_md5            = filemd5("sample-func.zip")
}

2. 触发函数应用重部署

Blob更新后,函数应用不会自动拉取新代码,需通过以下方式触发重部署:

方法一:通过应用设置触发重启(推荐)

在函数应用资源中添加依赖于Blob哈希的应用设置,当Blob更新时,该设置值变化会触发函数应用重启并拉取新代码:

resource "azurerm_function_app" "example" {
  # 保留原有配置(如name、resource_group_name、storage_account_name等)
  
  app_settings = {
    # 指向Blob的包地址
    "WEBSITE_RUN_FROM_PACKAGE" = "https://${azurerm_storage_account.st-func.name}.blob.core.windows.net/${azurerm_storage_container.container-deploy.name}/${azurerm_storage_blob.function_code.name}"
    # 用Blob的MD5作为版本标识,值变化时触发函数应用更新
    "WEBSITE_RUN_FROM_PACKAGE_VERSION" = azurerm_storage_blob.function_code.content_md5
  }
}

方法二:通过本地执行命令重启函数应用

在Blob资源中添加local-exec provisioner,当Blob更新时调用Azure CLI重启函数应用:

resource "azurerm_storage_blob" "function_code" {
  name                   = "sample-func.zip"
  storage_account_name   = azurerm_storage_account.st-func.name
  storage_container_name = azurerm_storage_container.container-deploy.name
  type                   = "Block"
  source                 = "sample-func.zip"
  content_md5            = filemd5("sample-func.zip")

  provisioner "local-exec" {
    command = "az functionapp restart --name ${azurerm_function_app.example.name} --resource-group ${azurerm_resource_group.example.name}"
    # 仅在Blob创建/更新时执行
    when    = create
  }
}

3. 执行更新操作

修改配置后,运行以下Terraform命令即可完成Blob更新与函数应用重部署:

terraform plan
terraform apply

内容的提问来源于stack exchange,提问作者some_random_dude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:42:02