Udostępnij za pośrednictwem


Wdrażanie usług Azure Health Data Services przy użyciu usługi Azure Bicep

W tym artykule dowiesz się, jak utworzyć usługi Azure Health Data Services, w tym obszary robocze, usługi FHIR, usługi DICOM i usługę MedTech przy użyciu usługi Azure Bicep. Skrypty Bicep używane w tym artykule można wyświetlić i pobrać w przykładach usług Azure Health Data Services.

Co to jest usługa Azure Bicep

Bicep jest oparty na szablonie usługi Azure Resource Manager (ARM). Bicep natychmiast obsługuje wszystkie wersje zapoznawcze i ogólnie dostępne (GA) dla usług platformy Azure, w tym usługi Azure Health Data Services. Podczas programowania można wygenerować plik szablonu usługi ARM w formacie JSON przy użyciu az bicep build polecenia . Z drugiej strony można dekompilować pliki JSON do Bicep przy użyciu az bicep decompile polecenia . Podczas wdrażania interfejs wiersza polecenia Bicep konwertuje plik Bicep na kod JSON szablonu usługi ARM.

Możesz kontynuować pracę z szablonami usługi ARM w formacie JSON lub Bicep w celu tworzenia szablonów usługi ARM. Aby uzyskać więcej informacji na temat Bicep, zobacz Co to jest Bicep.

Uwaga

Szablony i skrypty w artykule są testowane w programie Visual Studio Code w publicznej wersji zapoznawczej. Niektóre zmiany mogą być konieczne, aby dostosować kod do uruchamiania w środowisku.

Definiowanie parametrów i zmiennych

Używanie parametrów i zmiennych Bicep zamiast twardych nazw kodowania i innych wartości umożliwia debugowanie i ponowne używanie szablonów Bicep.

Najpierw definiujemy parametry za pomocą parametru kluczowego dla obszaru roboczego, usługi FHIR, usługi DICOM, usługi MedTech. Ponadto definiujemy parametry dla subskrypcji platformy Azure i dzierżawy firmy Microsoft Entra. Są one używane w wierszu polecenia interfejsu wiersza polecenia z opcją "--parameters".

Następnie definiujemy zmienne dla zasobów z wariancją słowa kluczowego. Ponadto definiujemy zmienne właściwości, takie jak urząd i odbiorcy usługi FHIR. Są one określane i używane wewnętrznie w szablonie Bicep i mogą być używane w połączeniu parametrów, funkcji Bicep i innych zmiennych. W przeciwieństwie do parametrów nie są używane w wierszu polecenia interfejsu wiersza polecenia.

Należy pamiętać, że jedna funkcja i środowiska Bicep są wymagane do określenia adresu URL logowania, https://login.microsoftonline.com. Aby uzyskać więcej informacji na temat funkcji Bicep, zobacz Funkcje wdrażania dla 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'

Tworzenie szablonu obszaru roboczego

Aby zdefiniować zasób, użyj zasobu kluczowego. W przypadku zasobu obszaru roboczego wymagane właściwości obejmują nazwę i lokalizację obszaru roboczego. W szablonie jest używana lokalizacja grupy zasobów, ale można określić inną wartość dla lokalizacji. Jako nazwę zasobu można odwoływać się do zdefiniowanego parametru lub zmiennej.

Aby uzyskać więcej informacji na temat zasobu i modułu, zobacz Deklaracja zasobu w aplikacji Bicep.

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

Aby użyć istniejącego obszaru roboczego lub odwołać się do niego bez jego utworzenia, użyj istniejącego słowa kluczowego. Określ nazwę zasobu obszaru roboczego i nazwę istniejącego wystąpienia obszaru roboczego dla właściwości name. Należy pamiętać, że w szablonie jest używana inna nazwa istniejącego zasobu obszaru roboczego, ale nie jest to wymagane.

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

Teraz możesz przystąpić do wdrażania zasobu obszaru roboczego az deployment group create przy użyciu polecenia . Można go również wdrożyć wraz z innymi zasobami, zgodnie z opisem w dalszej części tego artykułu.

Tworzenie szablonu usługi FHIR

W przypadku zasobu usługi FHIR wymagane właściwości obejmują nazwę wystąpienia usługi, lokalizację, rodzaj i tożsamość zarządzaną. Ponadto ma zależność od zasobu obszaru roboczego. W przypadku samej usługi FHIR wymagane właściwości obejmują urząd i odbiorców, które są określone w elemencie 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
    }
    }
}

Podobnie możesz użyć istniejącej usługi FHIR lub odwołać się do niego przy użyciu istniejącego słowa kluczowego.

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

Tworzenie szablonu usługi DICOM

W przypadku zasobu usługi DICOM wymagane właściwości obejmują nazwę i lokalizację wystąpienia usługi oraz zależność od typu zasobu obszaru roboczego.

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

Podobnie możesz użyć istniejącej usługi DICOM lub odwołać się do nich przy użyciu istniejącego słowa kluczowego.

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

Tworzenie szablonu usługi MedTech

W przypadku zasobu usługi MedTech wymagane właściwości obejmują nazwę usługi MedTech, lokalizację, tożsamość zarządzaną i zależność od obszaru roboczego. W przypadku samej usługi MedTech wymagane właściwości obejmują przestrzeń nazw usługi Azure Event Hubs, usługę Event Hubs, grupę odbiorców usługi Event Hubs i mapowanie urządzenia. Na przykład mapowanie urządzenia tętna jest używane w szablonie.

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

Podobnie możesz użyć istniejącej usługi MedTech lub odwołać się do istniejącej usługi MedTech przy użyciu istniejącego słowa kluczowego.

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

Usługa MedTech wymaga zasobu podrzędnego, miejsca docelowego i obecnie obsługuje tylko miejsce docelowe usługi FHIR. W przypadku zasobu docelowego usługi MedTech wymagane właściwości obejmują nazwę, lokalizację i zależność od usługi MedTech. W przypadku miejsca docelowego usługi FHIR wymagane właściwości obejmują typ rozpoznawania, który przyjmuje wartość Create lub Lookup, identyfikator zasobu usługi FHIR i typ zasobu FHIR. Na przykład mapowanie tętna dla zasobu obserwacji FHIR jest używane w szablonie.

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

Wdrażanie usług Azure Health Data Services

Możesz użyć az deployment group create polecenia , aby wdrożyć pojedynczy szablon Bicep lub połączone szablony, podobnie jak w przypadku wdrażania zasobów platformy Azure przy użyciu szablonów JSON. Określ nazwę grupy zasobów i uwzględnij parametry w wierszu polecenia. W przypadku opcji "--parameters" określ parę parametrów i wartości jako "parametr = wartość", a następnie rozdziel pary parametrów i wartości według spacji, jeśli zdefiniowano więcej niż jeden parametr.

W przypadku subskrypcji i dzierżawy platformy Azure możesz określić wartości lub użyć poleceń interfejsu wiersza polecenia, aby uzyskać je z bieżącej sesji logowania.

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

Należy pamiętać, że nazwa zasobu podrzędnego, taka jak usługa FHIR, zawiera nazwę zasobu nadrzędnego, a właściwość "dependsOn" jest wymagana. Jednak gdy zasób podrzędny jest tworzony w ramach zasobu nadrzędnego, jego nazwa nie musi zawierać nazwy zasobu nadrzędnego, a właściwość "dependsOn" nie jest wymagana. Aby uzyskać więcej informacji na temat zasobów zagnieżdżonych, zobacz Ustawianie nazwy i typu zasobów podrzędnych w Bicep.

Debugowanie szablonów Bicep

Szablony Bicep można debugować w programie Visual Studio Code lub w innych środowiskach i rozwiązywać problemy na podstawie odpowiedzi. Ponadto możesz przejrzeć dziennik aktywności dla określonego zasobu w grupie zasobów podczas debugowania.

Ponadto można użyć wartości wyjściowej do debugowania lub w ramach odpowiedzi wdrożenia. Można na przykład zdefiniować dwie wartości wyjściowe, aby wyświetlić wartości urzędu i odbiorców usługi FHIR w odpowiedzi. Aby uzyskać więcej informacji, zobacz Dane wyjściowe w Bicep.

output stringOutput1 string = authority
output stringOutput2 string = audience

Następne kroki

W tym artykule przedstawiono sposób tworzenia usług Azure Health Data Services, w tym obszarów roboczych, usług FHIR, usług DICOM i usług MedTech przy użyciu usługi Bicep. Przedstawiono również sposób tworzenia i debugowania szablonów Bicep. Aby uzyskać więcej informacji na temat usług Azure Health Data Services, zobacz

FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z uprawnieniem HL7.