使用Terraform azurerm_storage_blob上传Azure存储文件夹,plan无输出
1. 核心问题:content_md5路径写错了
你代码里的content_md5 = filemd5(each.key)是错误的——each.key是文件的相对路径(比如index.html),Terraform会去**当前配置目录(path.root)**查找该文件,而非你实际存放文件的../packages/widget/dist/目录。
如果当前目录没有这些文件,filemd5要么读取失败返回空值,要么生成错误的计算结果,导致Terraform误以为本地文件与远程已存在的blob完全匹配,因此terraform plan无变更输出;若是首次部署,甚至会因为MD5计算异常直接跳过资源创建流程。
修复代码:将content_md5改为计算源文件的MD5值:
content_md5 = filemd5("${path.root}/../packages/widget/dist/${each.key}")
2. 资源已存在于Terraform状态文件中
如果这些blob此前已经通过terraform apply部署过,且当前配置的所有属性(包括之前错误的MD5值)与状态文件中的记录完全一致,terraform plan就不会显示任何变更。
验证方式:
- 运行
terraform state list,查看是否存在azurerm_storage_blob.widget_upload["index.html"]这类资源条目 - 若存在,运行
terraform state show azurerm_storage_blob.widget_upload["index.html"],检查状态中的content_md5是否与当前错误计算的结果一致
解决方法:如果状态中的MD5值是错误的,删除状态里的这些资源后重新计划:
terraform state rm azurerm_storage_blob.widget_upload
重新执行terraform plan,Terraform会重新计算正确的MD5并生成创建/更新计划。
3. 存储账户依赖未就绪
如果azurerm_storage_account.main_storage是待创建的新资源,terraform plan阶段可能因依赖顺序问题,暂时无法解析azurerm_storage_account.main_storage.name,导致无法生成blob资源的计划。
验证方式:查看terraform plan输出中是否包含azurerm_storage_account.main_storage的创建计划。若有,需等待存储账户部署完成后再重新执行plan,或提前确保存储账户已存在。
内容的提问来源于stack exchange,提问作者MLKiiwy

