Compartir vía


Implementación de Azure Health Data Services mediante Azure Bicep

En este artículo, aprenderá a crear Azure Health Data Services, incluidas áreas de trabajo, servicios FHIR, servicios DICOM y servicio MedTech mediante Azure Bicep. Puede ver y descargar los scripts de Bicep que se usan en este artículo en ejemplos de Azure Health Data Services.

¿Qué es Azure Bicep?

Bicep se basa en la plantilla de Azure Resource Manager (ARM). Bicep admite inmediatamente todas las versiones preliminares y disponibles con carácter general (GA) para los servicios de Azure, incluidos Azure Health Data Services. Durante el desarrollo, puede generar un archivo de plantilla de ARM JSON mediante el az bicep build comando . Por el contrario, puede descompilar los archivos JSON en Bicep mediante el az bicep decompile comando . Durante la implementación, la CLI de Bicep convierte un archivo Bicep en un archivo JSON de plantilla de ARM.

Puede seguir trabajando con plantillas de ARM JSON o usar Bicep para desarrollar las plantillas de ARM. Para obtener más información sobre Bicep, consulte ¿Qué es Bicep?

Nota:

Las plantillas y scripts del artículo se prueban en Visual Studio Code durante la versión preliminar pública. Es posible que algunos cambios sean necesarios para adaptar el código para que se ejecute en su entorno.

Definición de parámetros y variables

El uso de parámetros y variables de Bicep en lugar de nombres de codificación rígida y otros valores le permite depurar y reutilizar las plantillas de Bicep.

Primero definimos parámetros con el parámetro de palabra clave para el área de trabajo, el servicio FHIR, el servicio DICOM y el servicio MedTech. Además, definimos parámetros para la suscripción de Azure y el inquilino de Azure Active Directory (Azure AD). Se usan en la línea de comandos de la CLI con la opción "--parameters".

A continuación, definimos variables para los recursos con la palabra clave var. Además, definimos variables para propiedades como la autoridad y la audiencia del servicio FHIR. Se especifican y se usan internamente en la plantilla de Bicep, y se pueden usar en combinación de parámetros, funciones de Bicep y otras variables. A diferencia de los parámetros, no se usan en la línea de comandos de la CLI.

Es importante tener en cuenta que se requiere una función y entornos de Bicep para especificar la dirección URL de inicio de sesión, https://login.microsoftonline.com. Para obtener más información sobre las funciones de Bicep, consulte Funciones de implementación para 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'

Creación de una plantilla de área de trabajo

Para definir un recurso, use el recurso de palabra clave . Para el recurso del área de trabajo, las propiedades necesarias incluyen el nombre y la ubicación del área de trabajo. En la plantilla, se usa la ubicación del grupo de recursos, pero puede especificar un valor diferente para la ubicación. Para el nombre del recurso, puede hacer referencia al parámetro o variable definidos.

Para obtener más información sobre el recurso y el módulo, consulte Declaración de recursos en Bicep.

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

Para usar o hacer referencia a un área de trabajo existente sin crear una, use la palabra clave existente. Especifique el nombre del recurso del área de trabajo y el nombre de instancia del área de trabajo existente para la propiedad name. Tenga en cuenta que se usa un nombre diferente para el recurso de área de trabajo existente en la plantilla, pero eso no es un requisito.

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

Ya está listo para implementar el recurso del área de trabajo mediante el az deployment group create comando . También puede implementarlo junto con sus otros recursos, como se describe más adelante en este artículo.

Creación de una plantilla de servicio de FHIR

Para el recurso del servicio FHIR, las propiedades necesarias incluyen el nombre de la instancia de servicio, la ubicación, el tipo y la identidad administrada. Además, tiene una dependencia en el recurso del área de trabajo. Para el propio servicio FHIR, las propiedades necesarias incluyen autoridad y audiencia, que se especifican en el elemento 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
    }
    }
}

Del mismo modo, puede usar o hacer referencia a un servicio de FHIR existente mediante la palabra clave existente.

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

Creación de una plantilla de servicio DICOM

Para el recurso del servicio DICOM, las propiedades necesarias incluyen el nombre y la ubicación de la instancia de servicio, y la dependencia del tipo de recurso del área de trabajo.

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

Del mismo modo, puede usar o hacer referencia a un servicio DICOM existente mediante la palabra clave existente.

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

Creación de una plantilla de servicio de MedTech

Para el recurso del servicio MedTech, las propiedades necesarias incluyen el nombre del servicio MedTech, la ubicación, la identidad administrada y la dependencia en el área de trabajo. Para el propio servicio MedTech, las propiedades necesarias incluyen Azure Event Hubs espacio de nombres, Event Hubs, grupo de consumidores de Event Hubs y la asignación de dispositivos. Por ejemplo, la asignación de dispositivos de frecuencia cardíaca se usa en la plantilla.

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

Del mismo modo, puede usar o hacer referencia a un servicio MedTech existente mediante la palabra clave existente.

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

El servicio MedTech requiere un recurso secundario, un destino y actualmente solo admite el destino del servicio FHIR. Para el recurso de destino del servicio MedTech, las propiedades necesarias incluyen un nombre, una ubicación y la dependencia del servicio MedTech. Para el destino del servicio FHIR, las propiedades necesarias incluyen el tipo de resolución, que toma un valor de Create o Lookup, el identificador de recurso del servicio FHIR y un tipo de recurso FHIR. Por ejemplo, la asignación de frecuencia cardíaca para el recurso de observación de FHIR se usa en la plantilla.

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

Implementación de Azure Health Data Services

Puede usar el az deployment group create comando para implementar plantillas individuales de Bicep o combinadas, de forma similar a la manera de implementar recursos de Azure con plantillas JSON. Especifique el nombre del grupo de recursos e incluya los parámetros en la línea de comandos. Con la opción "--parameters", especifique el par de parámetros y valores como "parameter = value" y separe los pares de parámetros y valores por un espacio si se define más de un parámetro.

Para la suscripción y el inquilino de Azure, puede especificar los valores o usar comandos de la CLI para obtenerlos de la sesión de inicio de sesión actual.

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

Tenga en cuenta que el nombre del recurso secundario, como el servicio FHIR, incluye el nombre del recurso primario y se requiere la propiedad "dependsOn". Sin embargo, cuando se crea el recurso secundario dentro del recurso primario, su nombre no necesita incluir el nombre del recurso primario y la propiedad "dependsOn" no es necesaria. Para obtener más información sobre los recursos anidados, consulte Establecer el nombre y el tipo de recursos secundarios en Bicep.

Depuración de plantillas de Bicep

Puede depurar plantillas de Bicep en Visual Studio Code, o en otros entornos y solucionar problemas en función de la respuesta. Además, puede revisar el registro de actividad de un recurso específico en el grupo de recursos durante la depuración.

Además, puede usar el valor de salida para la depuración o como parte de la respuesta de implementación. Por ejemplo, puede definir dos valores de salida para mostrar los valores de autoridad y audiencia del servicio FHIR en la respuesta. Para más información, consulte Salidas en Bicep.

output stringOutput1 string = authority
output stringOutput2 string = audience

Pasos siguientes

En este artículo, ha aprendido a crear Azure Health Data Services, incluidas áreas de trabajo, servicios FHIR, servicios DICOM y servicios MedTech mediante Bicep. También ha aprendido a crear y depurar plantillas de Bicep. Para más información sobre Azure Health Data Services, consulte

FHIR® es una marca registrada de HL7 y se usa con su permiso.