Azure Bicep を使用して Azure Health Data Services をデプロイする
この記事では、Azure Bicep を使用して、ワークスペース、FHIR サービス、DICOM サービス、MedTech サービスなど、Azure Health Data Services を作成する方法について説明します。 この記事で使用されている Bicep スクリプトは、Azure Health Data Services サンプルのページから表示およびダウンロードできます。
Azure Batch とは
Bicep は、Azure Resource Manager (ARM) テンプレートに基づいて構築されています。 Bicep では、Azure Health Data Services を含む Azure サービスのすべてのプレビュー バージョンと一般公開 (GA) バージョンが直ちにサポートされます。 開発中、JSON ARM テンプレート ファイルを生成するには、az bicep build
コマンドを使用します。 一方、JSON ファイルを Bicep に逆コンパイルするには、az bicep decompile
コマンドを使用します。 デプロイ中に、Bicep CLI により、Bicep ファイルが ARM テンプレート JSON に変換されます。
JSON ARM テンプレートを引き続き使用することも、Bicep を使用して ARM テンプレートを開発することもできます。 Bicep の詳細については、「Bicep とは」を参照してください。
Note
この記事のテンプレートとスクリプトは、パブリック プレビュー中に Visual Studio Code でテストされています。 お使いの環境でコードが動作するように変更がいくつか必要になる場合があります。
パラメーターと変数を定義する
ハード コーディング名やその他の値ではなく Bicep パラメーターと変数を使用して、Bicep テンプレートをデバッグし、再利用することができます。
最初に、ワークスペース、FHIR サービス、DICOM サービス、MedTech サービスのキーワード param を使用してパラメーターを定義します。 また、Azure サブスクリプションと Microsoft Entra テナントのパラメーターも定義します。 これらは CLI コマンド ラインで "--parameters" オプションと一緒に使用されます。
次に、キーワード var を使用してリソースの変数を定義します。 また、FHIR サービスに対して、オーソリティや対象ユーザーなどのプロパティの変数を定義します。 これらは Bicep テンプレートで内部的に使用されるもので、パラメーター、Bicep 関数、その他の変数と組み合わせて使用できます。 パラメーターとは異なり、CLI コマンド ラインでは使用されません。
重要なのは、ログイン URL (https://login.microsoftonline.com
) を指定するには、Bicep 関数が 1 つ、および環境が必要であることです。 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'
ワークスペース テンプレートを作成する
リソースを定義するには、キーワード resource を使用します。 ワークスペース リソースには、ワークスペース名、場所などのプロパティが必要です。 テンプレートでは、リソース グループの場所が使用されていますが、別の値を場所に指定することもできます。 リソース名については、定義されたパラメーターまたは変数を参照できます。
詳細については、「リソースの Bicep を使った宣言」を参照してください。
//Create a workspace
resource exampleWorkspace 'Microsoft.HealthcareApis/workspaces@2021-06-01-preview' = {
name: workspaceName
location: resourceGroup().location
}
ワークスペースを作成せず、既存のものを使用または参照するには、キーワード existing を使用します。 ワークスペース リソース名と、name プロパティに既存のワークスペース インスタンス名を指定します。 テンプレートで既存のワークスペース リソースに対して別の名前が使用されていますが、これは必須ではないことに注意してください。
//Use an existing workspace
resource exampleExistingWorkspace 'Microsoft.HealthcareApis/workspaces@2021-06-01-preview' existing = {
name: workspaceName
}
これで、az deployment group create
コマンドを使用してワークスペース リソースをデプロイする準備ができました。 この記事の後半で詳しく説明するように、これは他のリソースと一緒にデプロイすることもできます。
FHIR サービス テンプレートを作成する
FHIR サービス リソースには、サービス インスタンス名、場所、種類、マネージド ID などのプロパティが必要です。 また、これはワークスペース リソースに依存しています。 FHIR サービス自体については、オーソリティ、対象ユーザーなどのプロパティが必要で、これは 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
}
}
}
同じように、キーワード existing を使用して、既存の 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: {}
}
同じように、キーワード existing を使用して、既存の 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'
}
]
}
}
]
}
}
}
}
同じように、キーワード existing を使用して、既存の 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 Observation リソースの心拍数マッピングがテンプレートで使用されています。
//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
コマンドを使用すると、個々の Bicep テンプレートまたはテンプレートの組み合わせをデプロイできます。これは JSON テンプレートを使用して Azure リソースをデプロイする方法と似ています。 リソース グループ名を指定し、コマンド ラインにパラメーターを含めます。 "--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 テンプレートをデバッグし、その応答に基づいて問題のトラブルシューティングを行うことができます。 また、デバッグ中、リソース グループ内にある特定のリソースのアクティビティ ログを確認することもできます。
さらに、出力値を、デバッグに使用したり、デプロイ応答の一部として使用したりできます。 たとえば、2 つの出力値を定義して、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 の許可を得て使用しています。