Partilhar 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 espaços de trabalho, serviços FHIR, serviços DICOM e serviço MedTech usando o Azure Bicep. Você pode exibir e baixar os scripts Bicep usados neste artigo em exemplos dos Serviços de Dados de Saúde do Azure.

O que é o Azure Bicep

O Bicep foi criado com base no modelo do Azure Resource Manager (ARM). O Bicep suporta imediatamente todas as versões de pré-visualização e disponíveis em geral (GA) para os 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 az bicep build comando. Por outro lado, você pode descompilar os arquivos JSON para Bicep usando o az bicep decompile comando. Durante a implantação, a CLI do Bicep converte um arquivo Bicep em um JSON de modelo ARM.

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

Nota

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 para 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 depurar e reutilizar seus modelos do Bicep.

Primeiro, definimos parâmetros com a palavra-chave param for workspace, serviço FHIR, serviço DICOM, serviço MedTech. 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 para o 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 notar que uma função Bicep e ambiente(s) são necessários para especificar o URL de login, https://login.microsoftonline.com. Para obter mais informações sobre as funções do Bicep, consulte Funções de implantação do 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 espaço de trabalho

Para definir um recurso, use a palavra-chave resource. Para o recurso de espaço de trabalho, as propriedades necessárias incluem o nome e o local do espaço de trabalho. 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 fazer referência ao parâmetro ou variável definido.

Para obter mais informações sobre recurso e 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 espaço de trabalho existente sem criar um, use a palavra-chave existente. Especifique o nome do recurso do espaço de trabalho e o nome da instância do espaço de trabalho existente para a propriedade name. Observe que um nome diferente para o recurso de espaço de trabalho 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 espaço de trabalho usando o az deployment group create comando. 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 de espaço de trabalho. Para o próprio serviço FHIR, as propriedades necessárias incluem autoridade e audiência, que são especificadas no 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
    }
    }
}

Da mesma forma, você pode usar ou fazer referência a 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 do tipo de recurso do espaço de trabalho.

//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 fazer referência a 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 MedTech

Para o recurso de serviço MedTech, as propriedades necessárias incluem o nome do serviço MedTech, o local, a identidade gerenciada e a dependência do espaço de trabalho. Para o próprio serviço MedTech, as propriedades necessárias incluem o namespace Hubs de Eventos do Azure, Hubs de Eventos, grupo de consumidores de Hubs de Eventos e o mapeamento de dispositivos. Como exemplo, o mapeamento do 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 fazer referência a um serviço MedTech 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 MedTech requer um recurso filho, destino, e atualmente suporta apenas o destino do serviço FHIR. Para o recurso de destino do serviço MedTech, as propriedades necessárias incluem um nome, um local e a dependência do 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 ou Pesquisar, o ID do recurso de serviço FHIR e um tipo de recurso FHIR. Como exemplo, o mapeamento da 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 az deployment group create comando para implantar modelos individuais do Bicep 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 parâmetro e valor como "parâmetro = valor" e separe os pares 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 saber mais sobre recursos aninhados, veja Definir nome e tipo para recursos filho no Bicep.

Depurando modelos do 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 revisar o log de atividades de 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óximos passos

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

FHIR® é uma marca registada da HL7 e é utilizada com a permissão da HL7.