Terraform разрывает соединения приложения Azure Logic - PullRequest
0 голосов
/ 18 марта 2019

Я создаю приложение логики Azure (использую его для распаковки в хранилище больших двоичных объектов).Для этого мне нужен рабочий процесс приложения логики и подключение к хранилищу больших двоичных объектов.Я создаю пустой рабочий процесс приложения логики с помощью Terraform и фактическую реализацию приложения логики с помощью Visual Studio, которую затем развертываю в приложении логики, созданном с помощью tf.

. Я использую следующий код tf для создания пустого рабочего процесса приложения логики:

resource "azurerm_logic_app_workflow" "logic_unzip" {                    
  name                    = "ngh-${var.deployment}-unziplogic"     
  resource_group_name     = "${azurerm_resource_group.rg.name}"    
  location                = "${azurerm_resource_group.rg.location}"
}                                                                        

Поскольку приложению логики требуется подключение к хранилищу BLOB-объектов, для его создания я буду использовать следующий шаблон:

resource "azurerm_template_deployment" "depl_connection_azureblob" {                                                                               
        name                    = "azureblob"                                                                                                      
        resource_group_name     = "${azurerm_resource_group.rg.name}"                                                                              

        template_body = <<DEPLOY                                                                                                                   
{                                                                                                                                                  
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",                                              
        "contentVersion": "1.0.0.0",                                                                                                               
        "parameters": {                                                                                                                            
                "connection_name": {"type": "string"},                                                                                             
                "storage_name": {"type": "string"},                                                                                                
                "storage_access_key": {"type": "string"},                                                                                          
                "location": {"type": "string"},                                                                                                    
                "api_id": {"type": "string"}                                                                                                       
        },                                                                                                                                         
        "resources": [{                                                                                                                            
                "type": "Microsoft.Web/connections",                                                                                               
                "name": "[parameters('connection_name')]",                                                                                         
                "apiVersion": "2016-06-01",                                                                                                        
                "location": "[parameters('location')]",                                                                                            
                "scale": null,                                                                                                                     
                "properties": {                                                                                                                    
                        "displayName": "[parameters('connection_name')]",                                                                          
                        "api": {                                                                                                                   
                                "id": "[parameters('api_id')]"                                                                                     
                        },                                                                                                                         
                        "parameterValues": {                                                                                                       
                                "accountName": "[parameters('storage_name')]",                                                                     
                                "accessKey": "[parameters('storage_access_key')]"                                                                  
                        }                                                                                                                          
                },                                                                                                                                 
                "dependsOn": []                                                                                                                    
        }]                                                                                                                                         
}                                                                                                                                                  
DEPLOY                                                                                                                                             
        parameters              = {                                                                                                                
                "connection_name"       = "azureblob"                                                                                              
                "storage_name"          = "${azurerm_storage_account.sa-main.name}"                                                                
                "storage_access_key"    = "${azurerm_storage_account.sa-main.primary_access_key}"                                                  
                "location"              = "${azurerm_resource_group.rg.location}"                                                                  
                "api_id"                = "${data.azurerm_subscription.current.id}/providers/Microsoft.Web/locations/${azurerm_resource_group.rg.location}/managedApis/azureblob"                                                                                                                     
        }                                                                                                                                          
        deployment_mode         = "Incremental"                                                                                                    
}                                                                                                                                                  

Запланируйте и примените, они отлично работают.В Visual Studio я могу затем создать приложение логики и использовать подключение azureblob для выбора правильного хранилища больших двоичных объектов.

Теперь, когда я развернул рабочий процесс приложения логики из Visual Studio и запустил terraform plan, я получаюследующие изменения:

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  ~ azurerm_logic_app_workflow.logic_unzip
      parameters.$connections: "" => ""
      parameters.%:            "1" => "0"


Plan: 0 to add, 1 to change, 0 to destroy.

Выполнение команды apply теперь приведет к разрыву приложения логики, поскольку оно удаляет связанное соединение.Очевидно, что развертывание Visual Studio создало связь между приложением логики и соединением.

Как я могу сказать Terraform не удалять соединения (созданные развертыванием Visual Studio) из приложения логики?

1 Ответ

2 голосов
/ 18 марта 2019

Terraform не знает о ресурсах, развернутых в шаблоне arm, поэтому он обнаруживает изменение состояния и пытается «исправить» это.Я не вижу каких-либо ресурсов CF для соединений логических приложений, поэтому, видя, как он обнаруживает, что parameters.connections изменился с 0 на 1, добавление соединения напрямую к ресурсу рабочего процесса может работать, но CF упоминает: Any parameters specified must exist in the Schema defined in workflow_schema, но яне вижу соединений в схеме, что немного странно, но я полагаю, что я неправильно читаю схему

, вы также можете использовать ignore_changes:

lifecycle {
    ignore_changes = [
        "parameters.$connections"
    ]
}

в соответствии с комментариями и это

чтение:
https://www.terraform.io/docs/configuration/resources.html#ignore_changes

...