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의 사용 허가 하에 사용됩니다.