Eseguire la migrazione al motore di distribuzione diretta

I bundle di automazione dichiarativa sono stati originariamente basati sul provider Databricks Terraform per gestire le distribuzioni. Tuttavia, l'interfaccia della riga di comando di Databricks versione 0.279.0 e successive supporta due motori di distribuzione diversi: terraform e direct. Il motore di distribuzione diretta offre vantaggi significativi e non dipende da Terraform.

Per impostazione predefinita, i nuovi bundle creati con l'interfaccia della riga di comando di Databricks versione 1.3.0 e successive usano il motore di distribuzione diretta. I bundle che ancora utilizzano il motore di distribuzione Terraform vengono automaticamente migrati al motore diretto, quindi non è necessaria alcuna configurazione. Vedi Inizia a usare la distribuzione diretta.

Per prevenire la migrazione automatica, impostare bundle.engine: terraform o DATABRICKS_BUNDLE_ENGINE=terraform. Questo impedisce la migrazione automatica su tutte le versioni della CLI Databricks. Nelle versioni della CLI Databricks fino alla 1.19, il motore Terraform continua a essere utilizzato. Sulla versione 1.20.0 e successiva della CLI di Databricks, si verifica un errore. Vedere Distribuire direttamente un nuovo bundle.

Importante

Nella versione 1.20.0 della CLI di Databricks, il motore di distribuzione di Terraform è stato rimosso. La CLI Databricks può ancora migrare automaticamente i bundle con stato Terraform al motore diretto, ma se la migrazione automatica fallisce, il deployment viene abortito. Per continuare a utilizzare il motore di distribuzione di Terraform, fissa la versione 1.19 della CLI di Databricks. Vedere i bundle di automazione dichiarativa utilizzeranno presto per impostazione predefinita il motore di distribuzione diretta.

Vantaggi della distribuzione diretta

Il nuovo motore di distribuzione diretta usa Databricks Go SDK e offre i vantaggi seguenti:

  • Distribuzioni più rapide: Le distribuzioni dei bundle sono fino al 40% più rapide.
  • Validazione e pianificazione più potenti e dettagliate: differenze dettagliate delle modifiche con bundle plan -o json report con dettagli per campo che spiegano cosa ha attivato una determinata azione.
  • Piani rieseguibili: bundle deploy --plan plan.json esegue un piano creato in precedenza, garantendo che solo le azioni approvate raggiungano la produzione e distribuzioni più rapide, poiché il calcolo del piano viene saltato.
  • Configurazione semplice: si evitano problemi con firewall, proxy e registri provider personalizzati.
  • Altre risorse: sono supportate risorse aggiuntive, ad esempio cataloghi, posizioni esterne, endpoint di ricerca di intelligenza artificiale e spazi Genie.
  • Cartelle non modificabili: gli asset possono essere distribuiti facoltativamente in una cartella non modificabile di sola lettura per la protezione antimanomissione e la coerenza della distribuzione. Vedere immutable_folder.

Inizia a usare la distribuzione diretta

Il motore di distribuzione diretta è il predefinito per i nuovi bundle creati con la CLI Databricks versione 1.3.0 e superiore. Nella versione 1.14 e superiore della CLI di Databricks, i bundle che utilizzano il motore Terraform vengono automaticamente migrati al motore diretto al momento del deployment.

Nelle versioni 1.8 e successive della CLI di Databrick, puoi migrare un bundle verso il motore diretto impostando engine: direct. Vedere Distribuire direttamente un nuovo bundle.

Distribuire direttamente un nuovo bundle

Per impostare esplicitamente il motore di deployment diretto, fai una delle seguenti cose:

  • Setta bundle.engine nel file databricks.yml:

    bundle:
      engine: direct
    
  • Impostare la DATABRICKS_BUNDLE_ENGINE variabile di ambiente e distribuire:

    DATABRICKS_BUNDLE_ENGINE=direct databricks bundle deploy -t my_target
    

Se sono impostate sia la configurazione che la variabile di ambiente, la configurazione ha la precedenza.

Confronto tra i motori di distribuzione

Il nuovo motore di distribuzione diretta si comporta principalmente come il motore di distribuzione Terrform, ma esistono alcune differenze.

Calcolo delle differenze dello stato della risorsa

A differenza di Terraform che mantiene un singolo stato di risorsa (una combinazione di configurazione locale e stato remoto), il nuovo motore mantiene queste configurazioni separate e registra solo la configurazione locale nel file di stato.

Il calcolo delle differenze dello stato delle risorse viene eseguito in due passaggi:

  1. La configurazione del bundle locale viene confrontata con la configurazione dello snapshot usata per la distribuzione più recente. Lo stato remoto non svolge alcun ruolo.
  2. Lo stato remoto viene confrontato con la configurazione dello snapshot usata per la distribuzione più recente.

Il risultato è che:

  • databricks.yml le modifiche alle risorse non vengono mai ignorate e attiveranno sempre un aggiornamento.
  • I campi delle risorse non gestiti dall'implementazione non attivano un errore di risultato incoerente. Queste risorse vengono distribuite correttamente dal motore diretto, ma ciò può comportare una deriva. Le risorse distribuite vengono aggiornate durante il piano o la distribuzione successiva.

Impostazioni di configurazione rimosse

I due motori gestiscono le impostazioni rimosse dalla configurazione del bundle in modo diverso:

  • Con il motore Terraform, la rimozione di un campo impostato da databricks.yml lascia invariato il valore corrispondente nella piattaforma. Terraform gestisce solo i campi presenti in modo esplicito nella configurazione, quindi un campo rimosso mantiene qualsiasi valore che aveva al momento dell'ultima distribuzione.
  • Con il motore diretto, rimuovendo un campo impostato dal tuo databricks.yml, il valore viene ripristinato al valore predefinito della risorsa. Poiché il motore diretto confronta la configurazione locale con lo snapshot precedente, un campo che non è più presente viene considerato come una modifica e la risorsa viene aggiornata al valore predefinito nella distribuzione successiva.

Per rendere persistente un valore, impostarlo in modo esplicito nella configurazione anziché basarsi sul valore distribuito in precedenza.

Ricerca di sostituzione delle risorse

Le sostituzioni delle risorse sono disponibili per la risoluzione degli ID risorsa, ad esempio, ${resources.jobs.my_job.id}. Vedere Sostituzioni. La risoluzione delle sostituzioni delle risorse nel motore di distribuzione diretta viene eseguita in due passaggi:

  1. I riferimenti che puntano ai campi presenti nella configurazione locale vengono risolti nel valore fornito nella configurazione locale.
  2. I riferimenti non presenti nella configurazione locale vengono risolti dallo stato remoto. Questo è lo stato recuperato usando la richiesta appropriata GET per una determinata risorsa.

Lo schema usato per risolvere una ${resource.*} sostituzione si trova nel file out.fields.txt. I campi contrassegnati come ALL e STATE possono essere usati per la risoluzione locale. I campi contrassegnati come ALL o REMOTE possono essere usati per la risoluzione remota.

Compatibilità delle risorse

Le risorse seguenti richiedono il motore di distribuzione diretta e non sono supportate con il motore di distribuzione Terraform:

Inoltre, il lifecycle.started campo è disponibile solo nel motore di distribuzione diretta e solo per apps, clusterse sql_warehouses. Se impostato su true, distribuisce la risorsa in modalità avviata. Vedere ciclo di vita.