我已经将 terraform 部署到本地从 azure cli 到成功,所以我知道 TF 正在工作 我现在正在尝试构建一个管道来自动化这个过程,但是我收到了这个错误......
错误:构建 ARM 配置时出错:从 Azure CLI 获取订阅(xxxxxx):从 Azure CLI 解析 json 结果时出错:等待 Azure CLI 时出错:退出状态 1
当 init 在管道中运行时出现此错误。
这就是管道的样子...
pool:
vmImage: ubuntu-latest
stages :
- stage: validate
jobs:
- job: validate
continueOnError: false
steps:
- task: ms-devlabs.custom-terraform-tasks.custom-terraform-installer-task.TerraformInstaller@0
displayName: 'install'
inputs:
terraformVersion: '0.14.10'
- bash: echo $(ls -latR)
- task: TerraformTaskV1@0
displayName: 'init'
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: "$(System.DefaultWorkingDirectory)"
backendServiceArm: 'Service-Fabric'
backendAzureRmResourceGroupName: 'fvs-uks-sf-rg-02'
backendAzureRmStorageAccountName: 'fvsukssfstorage'
backendAzureRmContainerName: 'fvs-uks-sf-backend01'
backendAzureRmKey: 'terraform.tfstate'
- task: TerraformTaskV1@0
displayName: 'validate'
inputs:
provider: 'azurerm'
command: 'validate'
- task: TerraformTaskV1@0
displayName: 'plan'
inputs:
provider: 'azurerm'
command: 'plan'
workingDirectory: "$(System.DefaultWorkingDirectory)"
environmentServiceNameAzureRM: 'test'
environmentServiceNameAWS: 'AWS-Azure-VPN'
这是 backend.tf 的样子...
provider "azurerm" {
alias = "hub"
subscription_id = "xxxxxxx"
features {}
}
provider "azurerm" {
features {}
}
terraform {
backend "azurerm" {
subscription_id = "xxxxxx"
resource_group_name = "xxxxxx"
storage_account_name = "xxxxxx"
container_name = "xxxxxx"
key = "terraform.tfstate"
}
}
我还通过服务主体建立了到 azure 的服务连接,当通过身份验证连接成功时。
非常感谢任何帮助
答案 0 :(得分:0)
通过 azure devops 中的管道将 terraform 部署到 azure
这个问题应该和授权有关。
当我们使用服务连接进行授权时,它使用服务主体而不是用户名/密码进行身份验证。
然后根据terraform docs:
<块引用>如果您使用服务主体进行身份验证,那么它必须具有 读取和写入所有应用程序以及登录和 在 Windows Azure Active Directory API 中读取用户配置文件。
请尝试为您用于创建服务连接的主体添加 API 权限:
<块引用>导航到 Azure 中的 Azure Active Directory 概述 门户并选择应用程序注册边栏选项卡。找到您的注册 应用程序并点击其显示名称进行管理。
转到应用程序的 API 权限边栏选项卡,然后单击“添加 权限”按钮。在打开的窗格中,选择“Azure Active Directory Graph”(在 Supported Legacy APIs 副标题下)。不要 选择“Microsoft Graph”,因为提供程序当前不使用
权限类型选择“应用权限”,勾选 您要分配的权限。您需要的权限 将取决于您要管理的目录对象 地形。我们建议使用以下权限:
AddEntityFrameworkStores
Application.ReadWrite.All