近日,大量DevOps工程师在社区论坛和社交媒体上反映,使用Terraform部署Azure Container Registry(ACR)的任务持续失败,严重影响CI/CD流水线的正常运行。截至发稿,微软和HashiCorp均已确认该问题,并正在联合调查根因。

故障表现:频繁报错与中断

据多位用户反馈,故障最早出现在北京时间本周二凌晨。当执行terraform apply创建或更新ACR资源时,操作会在执行到资源创建阶段异常终止,返回如下典型错误信息:

Error: Error applying resource: containerservice.azure.com/v1alpha1, Kind=ContainerRegistry
Status: 400 Bad Request
Message: The specified container registry name is already in use or the request parameters are invalid.

然而,用户确认注册表名称未被占用,且参数完全符合Azure规范。部分用户还遇到“409 Conflict”及“503 Service Unavailable”错误,且错误模式随机出现,难以复现。

“我们连续重试了十次,仅有两次成功,其余均在5秒内失败。”一位来自新加坡的DevOps工程师在Stack Overflow上描述,“有时甚至刚创建成功,下一秒terraform refresh就会报告资源不存在。”

根因指向Azure API网关与Terraform Provider版本兼容性

经过技术社区和官方初步排查,问题根源初步锁定为Azure资源管理API网关近期进行的底层架构升级。微软在未提前公示的情况下,对容器注册表资源类型的REST API端点进行了路由调整,导致部分Terraform AzureRM Provider(版本3.100及以上)在调用CreateOrUpdate方法时,请求被错误分发至新的内部网关,而新网关对部分请求头格式处理存在差异,进而返回非标准的HTTP状态码。

HashiCorp官方在GitHub Issue #28746中确认:“我们已复现该问题,与Azure API版本2023-08-01-preview2024-05-01均相关。正在与Azure团队协作,加速推出补丁。”

影响范围:从个人项目到企业级部署

该问题并非孤立事件。据不完全统计,受影响用户覆盖北美、欧洲、亚太等主要地区,涉及项目规模从个人学习环境到日产数千次部署的企业级生产流水线。许多使用GitHub Actions或Azure DevOps Pipeline结合Terraform的团队不得不暂停ACR相关模块的自动部署,改为手动操作。

一家总部位于伦敦的金融科技公司CTO在LinkedIn上表示:“我们依赖于Terraform管理15个ACR实例,这次故障导致我们的镜像推送流程完全堵塞,团队不得不回退到Az CLI临时处理。”他同时呼吁云提供商对API变更释放更充分的灰度期。

临时解决方案与建议

截至发稿,HashiCorp已发布AzureRM Provider 3.114.0热修复版本,专门处理ACR资源创建的HTTP请求兼容性问题。微软也紧急部署了API网关回滚策略,预计24小时内恢复全区域正常。

对于仍受影响的用户,技术专家建议采取以下临时方案:

  1. 降级Provider版本:回退至AzureRM Provider 3.98.0或更早版本,已确认该版本未触发新网关问题。
  2. 使用AzAPI Provider:对于紧急部署,可切换至HashiCorp的AzAPI Provider,直接管理Azure资源,绕开AzureRM Provider的复杂抽象层。
  3. 手动创建后备:通过Azure Portal或Azure CLI预先创建ACR,再使用terraform import纳入状态管理。

专家观点:API稳定性与IaC工具生态的博弈

“这再次暴露了基础设施即代码(IaC)工具对底层API变更的高度敏感。”云计算咨询公司CloudOne首席架构师王峰评论说,“Terraform作为状态驱动的工具,对API的幂等性和稳定性要求极高。任何非向后兼容的变更,即便短暂,也会在用户端造成大量重复工作和信任损耗。”

他建议企业在使用Terraform管理Azure资源时,加入API版本锁定策略,并配置自动化测试环境,在正式部署前对Provider更新进行灰度验证。同时,云厂商应加强API变更的开发者通知机制,避免静默升级引发连锁故障。

目前,微软和HashiCorp均承诺将深化协作,制定API变更影响评估流程。对于广大开发者而言,这次事件再次提醒:在追求云原生自动化的道路上,稳定性与敏捷性之间的平衡,始终是一条需要持续关注的钢丝。