通过GitHub Action与ARM模板创建并销毁Azure资源组
实现GitHub Workflow中Azure资源组的创建、资源部署与销毁流程
以下是完整的GitHub Workflow实现方案,包含资源组创建、资源部署以及最终的资源组销毁全流程:
完整Workflow脚本
name: Azure RG Deploy & Cleanup on: workflow_dispatch: # 支持手动触发,可按需改为push/pull_request等触发条件 inputs: rgName: description: '资源组名称' required: true type: string rgLocation: description: '资源组区域' required: true type: string default: 'eastus' env: AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # 建议存储到GitHub Secrets中 jobs: deploy-and-cleanup: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 登录Azure uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # 提前在GitHub Secrets配置Azure服务主体凭据 - name: 通过ARM模板创建资源组(订阅级部署) uses: azure/arm-deploy@v1 with: scope: subscription subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }} location: ${{ inputs.rgLocation }} # 订阅级部署必须指定location参数 template: ./rg-create.json # 替换为你提供的资源组ARM模板路径 parameters: rgName=${{ inputs.rgName }} rgLocation=${{ inputs.rgLocation }} - name: 部署Function App资源到目标资源组 uses: azure/arm-deploy@v1 with: scope: resourcegroup subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }} resourceGroupName: ${{ inputs.rgName }} parameters: ./parameters.json template: ./azure-deploy-function-api.json - name: 销毁资源组及所有下属资源 if: always() # 无论前面步骤成功/失败,都执行清理 run: | az group delete --name ${{ inputs.rgName }} --yes --no-wait
关键步骤说明
- Azure身份验证:使用
azure/loginaction完成登录,需提前在GitHub仓库的Secrets中配置AZURE_CREDENTIALS,该服务主体需要拥有订阅级的资源组创建、删除权限。 - 资源组创建:由于是订阅级部署,需将
scope设为subscription,同时指定部署区域,通过参数传递资源组名称和位置到你提供的ARM模板。 - 资源部署:沿用你原有的资源组内部署步骤,确保资源组名称与创建步骤一致。
- 强制清理资源:使用Azure CLI的
az group delete命令,--yes自动确认删除操作,--no-wait开启异步删除加快Workflow结束速度;if: always()确保无论部署成功或失败,都会销毁资源组,避免产生无用资源成本。
补充建议
- 触发方式:示例采用手动触发(
workflow_dispatch),若需自动化触发,可改为push或pull_request,此时资源组名称可结合分支名、Commit Hash动态生成(如rg-${{ github.head_ref }}-${{ github.sha }})。 - 敏感信息管理:建议将Azure订阅ID、服务主体凭据等敏感信息存储到GitHub Secrets中,避免明文暴露。
- 权限控制:可给Azure服务主体配置最小化权限,如仅授予
Microsoft.Resources/resourceGroups/write和Microsoft.Resources/resourceGroups/delete权限,提升安全性。
内容的提问来源于stack exchange,提问作者wonderful world
相关产品推荐
相关产品推荐

