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

如何在GitHub Actions中删除Terraform状态文件?求操作示例

在GitHub Actions中清理Terraform状态文件(Azure后端)

你的问题核心是Terraform状态文件存储在Azure Blob Storage中(因为配置了backend "azurerm"),重复运行流水线时,Terraform会基于现有状态执行变更。要避免删除重建的行为,或者彻底清理状态,有两种常用方案:


方案1:先销毁资源再清理状态(推荐)

这是Terraform官方推荐的方式,可避免遗留未被管理的Azure资源:

GitHub Actions流水线示例

jobs:
  cleanup-terraform-resources-and-state:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 通过OIDC登录Azure
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: 安装指定版本Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: "1.4.6"

      - name: 初始化Terraform
        run: terraform init
        env:
          ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
          ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          ARM_USE_OIDC: true

      - name: 销毁所有Terraform管理的资源
        run: terraform destroy -auto-approve
        env:
          ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
          ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          ARM_USE_OIDC: true

      # 可选:销毁后状态文件仍存在(内容为空),如需彻底删除则执行此步骤
      - name: 删除Blob Storage中的状态文件
        run: |
          # 替换为你的存储账户名、容器名和状态文件路径
          STORAGE_ACCOUNT_NAME="your-storage-account"
          CONTAINER_NAME="tfstate-container"
          STATE_BLOB_NAME="terraform.tfstate" # 若使用工作区,路径为terraform.tfstate.d/<workspace>/terraform.tfstate

          az storage blob delete \
            --account-name $STORAGE_ACCOUNT_NAME \
            --container-name $CONTAINER_NAME \
            --name $STATE_BLOB_NAME \
            --auth-mode login

方案2:直接删除Blob Storage中的状态文件(不推荐,易遗留资源)

如果确认不需要保留现有资源,也可以跳过销毁步骤,直接删除状态文件:

GitHub Actions步骤示例

- name: 直接删除Terraform状态文件
  run: |
    STORAGE_ACCOUNT_NAME="your-storage-account"
    CONTAINER_NAME="tfstate-container"
    STATE_BLOB_NAME="terraform.tfstate"

    az storage blob delete \
      --account-name $STORAGE_ACCOUNT_NAME \
      --container-name $CONTAINER_NAME \
      --name $STATE_BLOB_NAME \
      --auth-mode login

关键注意事项

  • OIDC认证:你的配置启用了use_oidc = true,流水线必须通过azure/login完成OIDC登录,确保Terraform和Azure CLI有权限访问Azure资源。
  • 存储账户信息:需提前在GitHub Secrets中配置存储账户名、容器名,也可在terraform init后通过terraform backend show命令查看后端存储的详细信息。
  • 工作区适配:若使用Terraform工作区,状态文件路径会变为terraform.tfstate.d/<工作区名称>/terraform.tfstate,删除时需对应修改STATE_BLOB_NAME。
  • 安全防护:建议在流水线中添加手动审批步骤,防止误删生产环境的状态文件和资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:03:10