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.