Compartilhar via


Implantar os Serviços de Dados de Saúde do Azure usando o Azure Bicep

Neste artigo, você aprenderá a criar os Serviços de Dados de Saúde do Azure, incluindo workspaces, serviços FHIR, serviços DICOM e serviço de tecnologia médica usando o Azure Bicep. Você pode exibir e baixar os scripts Bicep usados neste artigo exemplos do Serviços de Dados de Saúde do Azure.

O que é o Bicep do Azure

O Bicep é criado com base no modelo do ARM (Azure Resource Manager). O Bicep dá suporte imediato a todas as versões de versão prévia e de GA (disponibilidade geral) para serviços do Azure, incluindo os Serviços de Dados de Saúde do Azure. Durante o desenvolvimento, você pode gerar um arquivo de modelo JSON ARM usando o comando az bicep build. Por outro lado, você pode descompilar os arquivos JSON para o Bicep usando o comando az bicep decompile. Durante a implantação, a CLI do Bicep converte um arquivo Bicep em um JSON do modelo do ARM.

Você pode continuar a trabalhar com modelos do ARM JSON ou usar o Bicep para desenvolver seus modelos do ARM. Para obter mais informações sobre o Bicep, consulte O que é o Bicep.

Observação

Os modelos e scripts no artigo são testados no Visual Studio Code durante a visualização pública. Algumas alterações podem ser necessárias para adaptar o código a ser executado em seu ambiente.

Definir parâmetros e variáveis

Usar parâmetros e variáveis do Bicep em vez de nomes de codificação e outros valores permite que você depure e reutilize seus modelos Bicep.

Primeiro, definimos parâmetros com a palavra-chave param para workspace, serviço FHIR, serviço DICOM, serviço de tecnologia médica. Além disso, definimos parâmetros para a assinatura do Azure e o locatário do Microsoft Entra. Eles são usados na linha de comando da CLI com a opção "--parameters".

Em seguida, definimos variáveis para recursos com a palavra-chave var. Além disso, definimos variáveis para propriedades como a autoridade e o público-alvo do serviço FHIR. Eles são especificados e usados internamente no modelo Bicep e podem ser usados em combinação de parâmetros, funções Bicep e outras variáveis. Ao contrário dos parâmetros, eles não são usados na linha de comando da CLI.

É importante observar que uma função Bicep e ambientes são necessários para especificar a URL de logon, https://login.microsoftonline.com. Para obter mais informações sobre funções Bicep, consulte Funções de implantação 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'

Criar um modelo de workspace

Para definir um recurso, use a palavra-chave recurso. Para o recurso de workspace, as propriedades necessárias incluem o nome e o local do workspace. No modelo, o local do grupo de recursos é usado, mas você pode especificar um valor diferente para o local. Para o nome do recurso, você pode referenciar o parâmetro ou a variável definidos.

Para obter mais informações sobre o recurso e o módulo, consulte Declaração de recurso no Bicep.

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

Para usar ou fazer referência a um workspace existente sem criar um, use a palavra-chave existente. Especifique o nome do recurso do workspace e o nome da instância do workspace existente para a propriedade de nome. Observe que um nome diferente para o recurso de workspace existente é usado no modelo, mas isso não é um requisito.

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

Agora você está pronto para implantar o recurso de workspace usando o comando az deployment group create. Você também pode implantá-lo junto com seus outros recursos, conforme descrito mais adiante neste artigo.

Criar um modelo de serviço FHIR

Para o recurso de serviço FHIR, as propriedades necessárias incluem nome da instância de serviço, local, tipo e identidade gerenciada. Além disso, ele tem uma dependência do recurso do workspace. Para o próprio serviço FHIR, as propriedades necessárias incluem autoridade e audiência, que são especificadas no elemento de propriedades.

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

Da mesma forma, você pode usar ou referenciar um serviço FHIR existente usando a palavra-chave existente.

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

Criar um modelo de serviço DICOM

Para o recurso de serviço DICOM, as propriedades necessárias incluem o nome e o local da instância de serviço e a dependência no tipo de recurso do workspace.

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

Da mesma forma, você pode usar ou referenciar um serviço DICOM existente usando a palavra-chave existente.

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

Criar um modelo de serviço de tecnologia médica

Para o recurso de serviço MedTech, as propriedades necessárias incluem o nome do serviço de tecnologia médica, o local, a identidade gerenciada e a dependência no workspace. Para o próprio serviço de tecnologia médica, as propriedades necessárias incluem o namespace dos Hubs de Eventos do Azure, os Hubs de Eventos, o grupo de consumidores dos Hubs de Eventos e o mapeamento do dispositivo. Por exemplo, o mapeamento de dispositivo de frequência cardíaca é usado no modelo.

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

Da mesma forma, você pode usar ou referenciar um serviço de tecnologia médica existente usando a palavra-chave existente.

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

O serviço de tecnologia médica requer um recurso filho, um destino e atualmente dá suporte apenas ao destino do serviço FHIR. Para o recurso de destino do serviço de tecnologia médica, as propriedades necessárias incluem um nome, um local e a dependência no serviço MedTech. Para o destino do serviço FHIR, as propriedades necessárias incluem o tipo de resolução, que usa um valor de Criar ouPesquisar, a ID do recurso de serviço FHIR e um tipo de recurso FHIR. Por exemplo, o mapeamento de frequência cardíaca para o recurso de Observação FHIR é usado no modelo.

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

Implantar os Serviços de Dados de Saúde do Azure

Você pode usar o comando az deployment group create para implantar modelos Bicep individuais ou modelos combinados, semelhante à maneira como você implanta recursos do Azure com modelos JSON. Especifique o nome do grupo de recursos e inclua os parâmetros na linha de comando. Com a opção "--parameters", especifique o par de parâmetros e valores como "parâmetro = valor" e separe os pares de parâmetro e valor por um espaço se mais de um parâmetro for definido.

Para a assinatura e o locatário do Azure, você pode especificar os valores ou usar comandos da CLI para obtê-los da sessão de entrada atual.

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

Observe que o nome do recurso filho, como o serviço FHIR, inclui o nome do recurso pai e a propriedade "dependsOn" é necessária. No entanto, quando o recurso filho é criado dentro do recurso pai, seu nome não precisa incluir o nome do recurso pai e a propriedade "dependsOn" não é necessária. Para obter mais informações sobre recursos aninhados, consulte Definir nome e tipo para recursos filho no Bicep.

Depurando modelos Bicep

Você pode depurar modelos Bicep no Visual Studio Code ou em outros ambientes e solucionar problemas com base na resposta. Além disso, você pode examinar o log de atividades para obter um recurso específico no grupo de recursos durante a depuração.

Além disso, você pode usar o valor de saída para depuração ou como parte da resposta de implantação. Por exemplo, você pode definir dois valores de saída para exibir os valores de autoridade e audiência para o serviço FHIR na resposta. Para obter mais informações, consulte Saídas no Bicep.

output stringOutput1 string = authority
output stringOutput2 string = audience

Próximas etapas

Neste artigo, você aprendeu a criar os Serviços de Dados de Saúde do Azure, incluindo workspaces, serviços FHIR, serviços DICOM e serviços de tecnologia médica usando o Bicep. Você também aprendeu a criar e depurar modelos Bicep. Para obter mais informações sobre os Serviços de Dados de Saúde do Azure, consulte

FHIR® é uma marca registrada da HL7 e é usado com a permissão da HL7.