Partage via


Déployer Azure Health Data Services à l’aide d’Azure Bicep

Dans cet article, vous allez apprendre à créer Azure Health Data Services, notamment des espaces de travail, des services FHIR, des services DICOM et un service MedTech à l’aide d’Azure Bicep. Vous pouvez afficher et télécharger les scripts Bicep utilisés dans cet article dans les exemples Azure Health Data Services.

Qu’est-ce qu’Azure Bicep

Bicep repose sur un modèle Azure Resource Manager (ARM). Bicep prend immédiatement en charge toutes les versions en préversion et en disponibilité générale pour les services Azure, y compris Azure Health Data Services. Pendant le développement, vous pouvez générer un fichier de modèle ARM JSON à l’aide de la az bicep build commande . À l’inverse, vous pouvez décompiler les fichiers JSON en Bicep à l’aide de la az bicep decompile commande . Pendant le déploiement, l’interface de ligne de commande Bicep convertit un fichier Bicep en un JSON de modèle ARM.

Vous pouvez continuer à utiliser des modèles ARM JSON ou utiliser Bicep pour développer vos modèles ARM. Pour plus d’informations sur Bicep, consultez Qu’est-ce que Bicep.

Notes

Les modèles et scripts de l’article sont testés dans Visual Studio Code pendant la préversion publique. Certaines modifications peuvent être nécessaires pour adapter le code à exécuter dans votre environnement.

Définir des paramètres et des variables

L’utilisation de paramètres et de variables Bicep au lieu de noms de codage en dur et d’autres valeurs vous permet de déboguer et de réutiliser vos modèles Bicep.

Nous définissons d’abord des paramètres avec le paramètre de mot clé pour l’espace de travail, le service FHIR, le service DICOM, le service MedTech. En outre, nous définissons des paramètres pour l’abonnement Azure et le locataire Azure Active Directory (Azure AD). Ils sont utilisés dans la ligne de commande CLI avec l’option « --parameters ».

Nous définissons ensuite des variables pour les ressources avec le mot clé var. En outre, nous définissons des variables pour les propriétés telles que l’autorité et l’audience du service FHIR. Ils sont spécifiés et utilisés en interne dans le modèle Bicep, et peuvent être utilisés en combinaison de paramètres, de fonctions Bicep et d’autres variables. Contrairement aux paramètres, ils ne sont pas utilisés dans la ligne de commande CLI.

Il est important de noter qu’une fonction Bicep et un ou plusieurs environnements sont requis pour spécifier l’URL de connexion, https://login.microsoftonline.com. Pour plus d’informations sur les fonctions Bicep, consultez Fonctions de déploiement pour 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'

Créer un modèle d’espace de travail

Pour définir une ressource, utilisez la ressource de mot clé. Pour la ressource d’espace de travail, les propriétés requises incluent le nom et l’emplacement de l’espace de travail. Dans le modèle, l’emplacement du groupe de ressources est utilisé, mais vous pouvez spécifier une valeur différente pour l’emplacement. Pour le nom de la ressource, vous pouvez référencer le paramètre ou la variable défini.

Pour plus d’informations sur la ressource et le module, consultez Déclaration de ressource dans Bicep.

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

Pour utiliser ou référencer un espace de travail existant sans en créer un, utilisez le mot clé existant. Spécifiez le nom de la ressource d’espace de travail et le nom de l’instance de l’espace de travail existant pour la propriété name. Notez qu’un nom différent pour la ressource d’espace de travail existante est utilisé dans le modèle, mais ce n’est pas obligatoire.

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

Vous êtes maintenant prêt à déployer la ressource d’espace de travail à l’aide de la az deployment group create commande . Vous pouvez également le déployer avec ses autres ressources, comme décrit plus loin dans cet article.

Créer un modèle de service FHIR

Pour la ressource de service FHIR, les propriétés requises incluent le nom de l’instance de service, l’emplacement, le type et l’identité managée. En outre, il a une dépendance sur la ressource d’espace de travail. Pour le service FHIR lui-même, les propriétés requises incluent l’autorité et l’audience, qui sont spécifiées dans l’élément properties.

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
    }
    }
}

De même, vous pouvez utiliser ou référencer un service FHIR existant à l’aide du mot clé existant.

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

Créer un modèle de service DICOM

Pour la ressource de service DICOM, les propriétés requises incluent le nom et l’emplacement de l’instance de service, ainsi que la dépendance vis-à-vis du type de ressource de l’espace de travail.

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

De même, vous pouvez utiliser ou référencer un service DICOM existant à l’aide du mot clé existant.

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

Créer un modèle de service MedTech

Pour la ressource de service MedTech, les propriétés requises incluent le nom du service MedTech, l’emplacement, l’identité managée et la dépendance vis-à-vis de l’espace de travail. Pour le service MedTech lui-même, les propriétés requises incluent Azure Event Hubs’espace de noms, Event Hubs, le groupe de consommateurs Event Hubs et le mappage des appareils. Par exemple, le mappage de l’appareil de fréquence cardiaque est utilisé dans le modèle.

//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'
                                      }
                                      ]
                                }
                    }
                  ]
            }
          }
      }
    }

De même, vous pouvez utiliser ou référencer un service MedTech existant à l’aide du mot clé existant.

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

Le service MedTech nécessite une ressource enfant, une destination, et prend actuellement en charge la destination du service FHIR uniquement. Pour la ressource de destination du service MedTech, les propriétés requises incluent un nom, un emplacement et la dépendance vis-à-vis du service MedTech. Pour la destination du service FHIR, les propriétés requises incluent le type de résolution, qui prend la valeur Create ou Lookup, l’ID de ressource du service FHIR et un type de ressource FHIR. Par exemple, le mappage de fréquence cardiaque pour la ressource Observation FHIR est utilisé dans le modèle.

//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'
                                }
                            }
                        }
                    ]
                }
            }
        }
}

Déployer Azure Health Data Services

Vous pouvez utiliser la az deployment group create commande pour déployer un modèle Bicep individuel ou des modèles combinés, de la même façon que vous déployez des ressources Azure avec des modèles JSON. Spécifiez le nom du groupe de ressources et incluez les paramètres dans la ligne de commande. Avec l’option « --parameters », spécifiez la paire paramètre-valeur comme « paramètre = valeur », puis séparez les paires paramètre et valeur par un espace si plusieurs paramètres sont définis.

Pour l’abonnement et le locataire Azure, vous pouvez spécifier les valeurs ou utiliser des commandes CLI pour les obtenir à partir de la session de connexion active.

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

Notez que le nom de ressource enfant tel que le service FHIR inclut le nom de la ressource parente et que la propriété « dependsOn » est requise. Toutefois, lorsque la ressource enfant est créée dans la ressource parente, son nom n’a pas besoin d’inclure le nom de la ressource parente, et la propriété « dependsOn » n’est pas requise. Pour plus d’informations sur les ressources imbriquées, consultez Définir le nom et le type des ressources enfants dans Bicep.

Débogage des modèles Bicep

Vous pouvez déboguer des modèles Bicep dans Visual Studio Code ou dans d’autres environnements et résoudre les problèmes en fonction de la réponse. En outre, vous pouvez consulter le journal d’activité d’une ressource spécifique dans le groupe de ressources lors du débogage.

En outre, vous pouvez utiliser la valeur de sortie pour le débogage ou dans le cadre de la réponse de déploiement. Par exemple, vous pouvez définir deux valeurs de sortie pour afficher les valeurs d’autorité et d’audience pour le service FHIR dans la réponse. Pour plus d’informations, consultez Sorties dans Bicep.

output stringOutput1 string = authority
output stringOutput2 string = audience

Étapes suivantes

Dans cet article, vous avez appris à créer Azure Health Data Services, notamment des espaces de travail, des services FHIR, des services DICOM et des services MedTech à l’aide de Bicep. Vous avez également appris à créer et déboguer des modèles Bicep. Pour plus d’informations sur Azure Health Data Services, consultez

FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.