다음을 통해 공유


Azure Bicep을 사용하여 Azure Health Data Services 배포

이 문서에서는 Azure Bicep을 사용하여 작업 영역, FHIR 서비스, DICOM 서비스 및 MedTech 서비스를 포함하여 Azure Health Data Services를 만드는 방법을 알아봅니다. Azure Health Data Services 샘플에서 이 문서에 사용된 Bicep 스크립트를 보고 다운로드할 수 있습니다.

Azure Bicep이란?

Bicep은 ARM(Azure Resource Manager) 템플릿을 기반으로 빌드됩니다. Bicep은 Azure Health Data Services를 포함하여 Azure 서비스에 대한 모든 미리 보기 및 일반 공급(GA) 버전을 즉시 지원합니다. 개발하는 동안 명령을 사용하여 JSON ARM 템플릿 파일을 생성할 az bicep build 수 있습니다. 반대로 명령을 사용하여 az bicep decompile JSON 파일을 Bicep으로 디컴파일할 수 있습니다. 배포하는 동안 Bicep CLI는 Bicep 파일을 ARM 템플릿 JSON으로 변환합니다.

JSON ARM 템플릿을 계속 사용하거나 Bicep을 사용하여 ARM 템플릿을 개발할 수 있습니다. Bicep에 대한 자세한 내용은 Bicep이란?을 참조하세요.

참고 항목

문서의 템플릿 및 스크립트는 공개 미리 보기 중에 Visual Studio Code에서 테스트됩니다. 사용자 환경에서 실행되도록 코드를 조정하기 위해 일부 변경이 필요할 수 있습니다.

매개 변수 및 변수 정의

하드 코딩 이름 및 기타 값 대신 Bicep 매개 변수 및 변수를 사용하면 Bicep 템플릿을 디버그하고 다시 사용할 수 있습니다.

먼저 작업 영역, FHIR 서비스, DICOM 서비스, MedTech 서비스에 대한 키워드 매개 변수 를 사용하여 매개 변수를 정의합니다. 또한 Azure 구독 및 Microsoft Entra 테넌트에 대한 매개 변수를 정의합니다. "--parameters" 옵션을 사용하여 CLI 명령줄에서 사용됩니다.

그런 다음 var 키워드를 사용하여 리소스에 대한 변수를 정의합니다. 또한 FHIR 서비스의 기관 및 대상 그룹과 같은 속성에 대한 변수를 정의합니다. Bicep 템플릿에서 내부적으로 지정되고 사용되며 매개 변수, Bicep 함수 및 기타 변수의 조합으로 사용할 수 있습니다. 매개 변수와 달리 CLI 명령줄에서는 사용되지 않습니다.

로그인 URL https://login.microsoftonline.com을 지정하려면 하나의 Bicep 함수 및 환경이 필요합니다. Bicep 함수에 대한 자세한 내용은 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'

작업 영역 템플릿 만들기

리소스를 정의하려면 키워드 리소스를 사용합니다. 작업 영역 리소스의 경우 필요한 속성에는 작업 영역 이름 및 위치가 포함됩니다. 템플릿에서 리소스 그룹의 위치가 사용되지만 위치에 대해 다른 값을 지정할 수 있습니다. 리소스 이름에 대해 정의된 매개 변수 또는 변수를 참조할 수 있습니다.

리소스 및 모듈에 대한 자세한 내용은 Bicep의 리소스 선언을 참조하세요.

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

기존 작업 영역을 만들지 않고 사용하거나 참조하려면 기존 키워드를 사용합니다. 작업 영역 리소스 이름 및 이름 속성의 기존 작업 영역 인스턴스 이름을 지정합니다. 기존 작업 영역 리소스에 대한 다른 이름이 템플릿에서 사용되지만 요구 사항은 아닙니다.

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

이제 명령을 사용하여 작업 영역 리소스를 배포할 준비가 되었습니다 az deployment group create . 이 문서의 뒷부분에 설명된 대로 다른 리소스와 함께 배포할 수도 있습니다.

FHIR 서비스 템플릿 만들기

FHIR 서비스 리소스의 경우 필요한 속성에는 서비스 인스턴스 이름, 위치, 종류 및 관리 ID가 포함됩니다. 또한 작업 영역 리소스에 대한 종속성이 있습니다. FHIR 서비스 자체의 경우 필수 속성에는 속성 요소에 지정된 기관 및 대상 그룹을 포함합니다.

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

마찬가지로 기존 키워드 를 사용하여 기존 FHIR 서비스를 사용하거나 참조할 수 있습니다.

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

DICOM 서비스 템플릿 만들기

DICOM 서비스 리소스의 경우 필요한 속성에는 서비스 인스턴스 이름 및 위치, 작업 영역 리소스 종류에 대한 종속성이 포함됩니다.

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

마찬가지로 기존 키워드 를 사용하여 기존 DICOM 서비스를 사용하거나 참조할 수 있습니다.

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

MedTech 서비스 템플릿 만들기

MedTech 서비스 리소스의 경우 필수 속성에는 MedTech 서비스 이름, 위치, 관리 ID 및 작업 영역에 대한 종속성이 포함됩니다. MedTech 서비스 자체의 경우 필요한 속성에는 Azure Event Hubs 네임스페이스, Event Hubs, Event Hubs 소비자 그룹 및 디바이스 매핑이 포함됩니다. 예를 들어 심박수 디바이스 매핑은 템플릿에서 사용됩니다.

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

마찬가지로 기존 키워드 를 사용하여 기존 MedTech 서비스를 사용하거나 참조할 수 있습니다.

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

MedTech 서비스에는 자식 리소스, 대상이 필요하며 현재 FHIR 서비스 대상만 지원합니다. MedTech 서비스 대상 리소스의 경우 필수 속성에는 이름, 위치 및 MedTech 서비스에 대한 종속성이 포함됩니다. FHIR 서비스 대상의 경우 필수 속성에는 Create 또는 Lookup, FHIR 서비스 리소스 ID 및 FHIR 리소스 유형을 사용하는 확인 유형이 포함됩니다. 예를 들어 FHIR 관찰 리소스에 대한 심박수 매핑이 템플릿에 사용됩니다.

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

Azure Health Data Services 배포

이 명령을 사용하여 az deployment group create JSON 템플릿을 사용하여 Azure 리소스를 배포하는 방법과 유사하게 개별 Bicep 템플릿 또는 결합된 템플릿을 배포할 수 있습니다. 리소스 그룹 이름을 지정하고 명령줄에 매개 변수를 포함합니다. "--parameters" 옵션을 사용하여 매개 변수와 값 쌍을 "parameter = value"로 지정하고 둘 이상의 매개 변수가 정의된 경우 매개 변수와 값 쌍을 공백으로 구분합니다.

Azure 구독 및 테넌트에 대해 값을 지정하거나 CLI 명령을 사용하여 현재 로그인 세션에서 값을 가져올 수 있습니다.

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

FHIR 서비스와 같은 자식 리소스 이름에는 부모 리소스 이름이 포함되며 "dependsOn" 속성이 필요합니다. 그러나 부모 리소스 내에서 자식 리소스를 만들 때 해당 이름은 부모 리소스 이름을 포함할 필요가 없으며 "dependsOn" 속성은 필요하지 않습니다. 중첩된 리소스에 대한 자세한 내용은 Bicep에서 자식 리소스의 이름 및 유형 설정을 참조하세요.

Bicep 템플릿 디버깅

Visual Studio Code 또는 다른 환경에서 Bicep 템플릿을 디버그하고 응답에 따라 문제를 해결할 수 있습니다. 또한 디버깅하는 동안 리소스 그룹의 특정 리소스에 대한 활동 로그를 검토할 수 있습니다.

또한 디버깅 또는 배포 응답의 일부로 출력 값을 사용할 수 있습니다. 예를 들어 응답에서 FHIR 서비스에 대한 권한 및 대상 그룹의 값을 표시하는 두 개의 출력 값을 정의할 수 있습니다. 자세한 내용은 Bicep의 출력을 참조하세요.

output stringOutput1 string = authority
output stringOutput2 string = audience

다음 단계

이 문서에서는 Bicep을 사용하여 작업 영역, FHIR 서비스, DICOM 서비스 및 MedTech 서비스를 포함하여 Azure Health Data Services를 만드는 방법을 알아보았습니다. 또한 Bicep 템플릿을 만들고 디버그하는 방법도 알아보았습니다. Azure Health Data Services에 대한 자세한 내용은 다음을 참조하세요.

FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.