次の方法で共有


Azure Bicep を使用して Azure Health Data Services をデプロイする

この記事では、Azure Bicep を使用してワークスペース、FHIR サービス、DICOM サービス、MedTech サービスなど、Azure Health Data Services を作成する方法について説明します。 Azure Health Data Services サンプルのこの記事で使用されている Bicep スクリプトを表示およびダウンロードできます。

Azure Bicep とは

Bicep は、Azure Resource Manager (ARM) テンプレートの上に構築されています。 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 サブスクリプションと Azure Active Directory (Azure AD) テナントのパラメーターも定義します。 これらは、"--parameters" オプションを使用して CLI コマンド ラインで使用されます。

次に 、var キーワードを使用してリソースの変数を定義します。 また、FHIR サービスの権限や対象ユーザーなどのプロパティの変数を定義します。 これらは指定され、Bicep テンプレート内で内部的に使用され、パラメーター、Bicep 関数、およびその他の変数を組み合わせて使用できます。 パラメーターとは異なり、CLI コマンド ラインでは使用されません。

ログイン URL https://login.microsoftonline.comを指定するには、1 つの 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
}

既存のワークスペースを作成せずに既存のワークスペースを使用または参照するには 、 キーワード 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 をデプロイする

コマンドを使用して、JSON テンプレートを az deployment group create 使用して 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 テンプレートをデバッグし、応答に基づいて問題のトラブルシューティングを行うことができます。 また、デバッグ中にリソース グループ内の特定のリソースのアクティビティ ログを確認することもできます。

さらに、 デバッグに出力 値を使用することも、デプロイ応答の一部として使用することもできます。 たとえば、2 つの出力値を定義して、応答で FHIR サービスの権限と対象ユーザーの値を表示できます。 詳細については、Bicep の出力に関する記事を参照してください。

output stringOutput1 string = authority
output stringOutput2 string = audience

次のステップ

この記事では、ワークスペース、FHIR サービス、DICOM サービス、Bicep を使用した MedTech サービスなど、Azure Health Data Services を作成する方法について説明しました。 また、Bicep テンプレートを作成およびデバッグする方法についても学習しました。 Azure Health Data Services の詳細については、次を参照してください。

FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。