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.