Condividi tramite


Distribuisci Servizi per i dati sanitari di Azure usando Bicep di Azure

Questo articolo illustra come creare Servizi dati di integrità di Azure, tra cui aree di lavoro, servizi FHIR, servizi DICOM e servizio MedTech con Azure Bicep. È possibile visualizzare e scaricare gli script Bicep usati in questo articolo negli esempi di Servizi dati di integrità di Azure.

Che cos'è Azure Bicep

Bicep è basato sul modello di Azure Resource Manager (ARM). Bicep supporta immediatamente tutte le versioni di anteprima e disponibilità generale (GA) per i servizi di Azure, tra cui Servizi dati di integrità di Azure. Durante lo sviluppo, è possibile generare un file di modello DI Resource Manager JSON usando il az bicep build comando . Viceversa, è possibile decompilare i file JSON in Bicep usando il az bicep decompile comando . Durante la distribuzione, l'interfaccia della riga di comando di Bicep converte un file Bicep in un file JSON del modello di Resource Manager.

È possibile continuare a usare i modelli arm JSON o usare Bicep per sviluppare i modelli di Resource Manager. Per altre informazioni su Bicep, vedere Che cos'è Bicep.

Nota

I modelli e gli script nell'articolo vengono testati in Visual Studio Code durante l'anteprima pubblica. Alcune modifiche potrebbero essere necessarie per adattare il codice da eseguire nell'ambiente.

Definire parametri e variabili

L'uso di parametri e variabili Bicep invece dei nomi hardcoded e di altri valori consente di eseguire il debug e riutilizzare i modelli Bicep.

Vengono prima definiti i parametri con la parola chiave param per l'area di lavoro, il servizio FHIR, il servizio DICOM, il servizio MedTech. Vengono inoltre definiti i parametri per la sottoscrizione di Azure e il tenant di Microsoft Entra. Vengono usate nella riga di comando dell'interfaccia della riga di comando con l'opzione "--parameters".

Si definiscono quindi le variabili per le risorse con la parola chiave var. Vengono inoltre definite variabili per le proprietà, ad esempio l'autorità e il gruppo di destinatari per il servizio FHIR. Vengono specificati e usati internamente nel modello Bicep e possono essere usati in combinazione di parametri, funzioni Bicep e altre variabili. A differenza dei parametri, non vengono usati nella riga di comando dell'interfaccia della riga di comando.

È importante notare che una o più funzioni Bicep e gli ambienti sono necessari per specificare l'URL di accesso, https://login.microsoftonline.com. Per altre informazioni sulle funzioni Bicep, vedere Funzioni di distribuzione per Bicep.

//Define parameters
param workspaceName string
param fhirName string
param dicomName string
param medtechName string
param tenantId string
param location string

//Define variables
var fhirservicename = '${workspaceName}/${fhirName}'
var dicomservicename = '${workspaceName}/${dicomName}'
var medtechservicename = '${workspaceName}/${medtechName}'
var medtechdestinationname = '${medtechservicename}/output1'
var loginURL = environment().authentication.loginEndpoint
var authority = '${loginURL}${tenantId}'
var audience = 'https://${workspaceName}-${fhirName}.fhir.azurehealthcareapis.com'

Creare un modello di area di lavoro

Per definire una risorsa, usare la risorsa parola chiave . Per la risorsa dell'area di lavoro, le proprietà necessarie includono il nome e la posizione dell'area di lavoro. Nel modello viene usata la posizione del gruppo di risorse, ma è possibile specificare un valore diverso per la posizione. Per il nome della risorsa, è possibile fare riferimento al parametro o alla variabile definita.

Per altre informazioni sulle risorse e sul modulo, vedere Dichiarazione di risorsa in Bicep.

//Create a workspace
resource exampleWorkspace 'Microsoft.HealthcareApis/workspaces@2021-06-01-preview' = {
  name: workspaceName
  location: resourceGroup().location
}

Per usare o fare riferimento a un'area di lavoro esistente senza crearne una, usare la parola chiave esistente. Specificare il nome della risorsa dell'area di lavoro e il nome dell'istanza dell'area di lavoro esistente per la proprietà name. Si noti che nel modello viene usato un nome diverso per la risorsa dell'area di lavoro esistente, ma non è un requisito.

//Use an existing workspace
resource exampleExistingWorkspace 'Microsoft.HealthcareApis/workspaces@2021-06-01-preview' existing = {
   name: workspaceName
}

È ora possibile distribuire la risorsa dell'area di lavoro usando il az deployment group create comando . È anche possibile distribuirlo insieme alle altre risorse, come descritto più avanti in questo articolo.

Creare un modello di servizio FHIR

Per la risorsa del servizio FHIR, le proprietà necessarie includono il nome dell'istanza del servizio, la posizione, il tipo e l'identità gestita. Inoltre, ha una dipendenza dalla risorsa dell'area di lavoro. Per il servizio FHIR stesso, le proprietà necessarie includono autorità e destinatari, che vengono specificati nell'elemento proprietà.

resource exampleFHIR 'Microsoft.HealthcareApis/workspaces/fhirservices@2021-11-01' = {
  name: fhirservicename
  location: resourceGroup().location
  kind: 'fhir-R4'
  identity: {
    type: 'SystemAssigned'
  }
  dependsOn: [
    exampleWorkspace  
    //exampleExistingWorkspace
  ]
  properties: {
    accessPolicies: []
    authenticationConfiguration: {
      authority: authority
      audience: audience
      smartProxyEnabled: false
    }
    }
}

Analogamente, è possibile usare o fare riferimento a un servizio FHIR esistente usando la parola chiave esistente.

//Use an existing FHIR service
resource exampleExistingFHIR 'Microsoft.HealthcareApis/workspaces/fhirservices@2021-11-01' existing = {
    name: fhirservicename
}

Creare un modello di servizio DICOM

Per la risorsa del servizio DICOM, le proprietà necessarie includono nome e posizione dell'istanza del servizio e la dipendenza dal tipo di risorsa dell'area di lavoro.

//Create DICOM service
resource exampleDICOM 'Microsoft.HealthcareApis/workspaces/dicomservices@2021-11-01' = {
  name: dicomservicename
  location: resourceGroup().location
  dependsOn: [
    exampleWorkspace
  ]
  properties: {}
}

Analogamente, è possibile usare o fare riferimento a un servizio DICOM esistente usando la parola chiave esistente.

//Use an existing DICOM service
 resource exampleExistingDICOM 'Microsoft.HealthcareApis/workspaces/dicomservices@2021-11-01' existing = {
   name: dicomservicename
}

Creare un modello di servizio MedTech

Per la risorsa del servizio MedTech, le proprietà necessarie includono il nome del servizio MedTech, la posizione, l'identità gestita e la dipendenza dall'area di lavoro. Per il servizio MedTech stesso, le proprietà necessarie includono Hub eventi di Azure spazio dei nomi, Hub eventi, gruppo di consumer di Hub eventi e mapping dei dispositivi. Ad esempio, il mapping del dispositivo di frequenza cardiaca viene usato nel modello.

//Create IoT connector
resource exampleIoT 'Microsoft.HealthcareApis/workspaces/iotconnectors@2021-11-01' = {
  name: iotconnectorname
  location: resourceGroup().location
  identity: {
    type: 'SystemAssigned'
  }
  dependsOn: [
    exampleWorkspace
    //exampleExistingWorkspace
  ]
  properties: {
    ingestionEndpointConfiguration: {
      eventHubName: 'eventhubnamexxx'
      consumerGroup: 'eventhubconsumergroupxxx'
      fullyQualifiedEventHubNamespace: 'eventhubnamespacexxx.servicebus.windows.net'
            }
    deviceMapping: {
    content: {
    templateType: 'CollectionContent'
        template: [
                    {
                      templateType: 'JsonPathContent'
                      template: {
                              typeName: 'heartrate'
                              typeMatchExpression: '$..[?(@heartrate)]'
                              deviceIdExpression: '$.deviceid'
                              timestampExpression: '$.measurementdatetime'
                              values: [
                                {
                                      required: 'true'
                                      valueExpression: '$.heartrate'
                                      valueName: 'Heart rate'
                                      }
                                      ]
                                }
                    }
                  ]
            }
          }
      }
    }

Analogamente, è possibile usare o fare riferimento a un servizio MedTech esistente usando la parola chiave esistente.

//Use an existing IoT 
resource exampleExistingIoT 'Microsoft.HealthcareApis/workspaces/iotconnectors/fhirdestinations@2021-11-01' existing = {
    name: iotconnectorname
}

Il servizio MedTech richiede una risorsa figlio, una destinazione e attualmente supporta solo la destinazione del servizio FHIR. Per la risorsa di destinazione del servizio MedTech, le proprietà necessarie includono un nome, una posizione e la dipendenza dal servizio MedTech. Per la destinazione del servizio FHIR, le proprietà obbligatorie includono il tipo di risoluzione, che accetta il valore Create o Lookup, l'ID risorsa del servizio FHIR e un tipo di risorsa FHIR. Ad esempio, il mapping della frequenza cardiaca per la risorsa di osservazione FHIR viene usato nel modello.

//Create IoT destination
resource exampleIoTDestination 'Microsoft.HealthcareApis/workspaces/iotconnectors/fhirdestinations@2021-11-01'  = {
  name:   iotdestinationname
  location: resourceGroup().location
  dependsOn: [
    exampleIoT
    //exampleExistingIoT
  ]
  properties: {
    resourceIdentityResolutionType: 'Create'
    fhirServiceResourceId: exampleFHIR.id //exampleExistingFHIR.id
    fhirMapping: {
                content: {
                    templateType: 'CollectionFhirTemplate'
                    template: [
                        {
                            templateType: 'CodeValueFhir'
                            template: {
                                codes: [
                                    {
                                        code: '8867-4'
                                        system: 'http://loinc.org'
                                        display: 'Heart rate'
                                    }
                                ]
                                periodInterval: 60
                                typeName: 'heartrate'
                                value: {
                                    defaultPeriod: 5000
                                    unit: 'count/min'
                                    valueName: 'hr'
                                    valueType: 'SampledData'
                                }
                            }
                        }
                    ]
                }
            }
        }
}

Distribuire i Servizi per i dati sanitari di Azure

È possibile usare il az deployment group create comando per distribuire singoli modelli Bicep o modelli combinati, in modo analogo al modo in cui si distribuiscono le risorse di Azure con modelli JSON. Specificare il nome del gruppo di risorse e includere i parametri nella riga di comando. Con l'opzione "--parameters", specificare il parametro e la coppia di valori come "parameter = value" e separare i parametri e le coppie di valori in base a uno spazio se sono definiti più parametri.

Per la sottoscrizione e il tenant di Azure, è possibile specificare i valori o usare i comandi dell'interfaccia della riga di comando per ottenerli dalla sessione di accesso corrente.

deploymentname=xxx
resourcegroupname=rg-$deploymentname
location=centralus
workspacename=ws$deploymentname
fhirname=fhir$deploymentname
dicomname=dicom$deploymentname
medtechname=medtech$deploymentname
bicepfilename=ahds.bicep
subscriptionid=$(az account show --query id --output tsv)
tenantid=$(az account show --subscription $subscriptionid --query tenantId --output tsv)

az group create --name $resourcegroupname --location $location
az deployment group create --resource-group $resourcegroupname --template-file $bicepfilename --parameters workspaceName=$workspacename fhirName=$fhirname dicomName=$dicomname medtechName=$medtechname tenantId=$tenantid location=$location

Si noti che il nome della risorsa figlio, ad esempio il servizio FHIR, include il nome della risorsa padre e la proprietà "dependsOn" è obbligatoria. Tuttavia, quando la risorsa figlio viene creata all'interno della risorsa padre, il nome non deve includere il nome della risorsa padre e la proprietà "dependsOn" non è necessaria. Per altre informazioni sulle risorse nidificate, vedi Impostare il nome e il tipo per le risorse figlio in Bicep.

Debug di modelli Bicep

È possibile eseguire il debug di modelli Bicep in Visual Studio Code o in altri ambienti e risolvere i problemi in base alla risposta. È anche possibile esaminare il log attività per una risorsa specifica nel gruppo di risorse durante il debug.

È anche possibile usare il valore di output per il debug o come parte della risposta alla distribuzione. Ad esempio, è possibile definire due valori di output per visualizzare i valori di autorità e destinatari per il servizio FHIR nella risposta. Per altre informazioni, vedere Output in Bicep.

output stringOutput1 string = authority
output stringOutput2 string = audience

Passaggi successivi

In questo articolo si è appreso come creare Servizi dati sull'integrità di Azure, tra cui aree di lavoro, servizi FHIR, servizi DICOM e servizi MedTech usando Bicep. Si è anche appreso come creare ed eseguire il debug di modelli Bicep. Per altre informazioni su Servizi per i dati sanitari di Azure, vedere

FHIR® è un marchio registrato di HL7 ed è usato con l'autorizzazione di HL7.