FHIR リソースのバンドル - AWS HealthLake

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

FHIR リソースのバンドル

FHIR Bundleは、 の FHIR リソースのコレクション用のコンテナです AWS HealthLake。 は、動作が異なる batchまたは の 2 種類のバンドル AWS HealthLake をサポートしていますtransaction

  • 「バッチ」バンドルの場合、バンドルに含まれる各 FHIR リソースは個別に処理され、ログに記録されます。各リソースオペレーションは、他のリソースとは独立して処理されます。

  • 「トランザクション」バンドルの場合、バンドルに含まれるすべての FHIR リソースはアトミックオペレーションとして処理されます。オペレーションのすべてのリソースは成功する必要があります。成功した場合、バンドル内のリソースの更新はコミットされて保存されません。

同じタイプまたは異なるタイプの FHIR リソースをバンドルでき、この章で定義されている他の FHIR read updateインタラクション (、createdelete、 などsearch) を組み合わせて含めることができます。詳細については、FHIR R4 ドキュメント「リソースバンドル」を参照してください。

バッチとトランザクションタイプのバンドルの主な違い:

Batch
  • 個別に成功または失敗できる独立したオペレーション

  • 一部のオペレーションが失敗しても処理は続行されます

  • 実行順序は保証されません

  • 部分的な成功が許容される一括オペレーションに最適

トランザクション
  • アトミック性保証 - すべて成功またはすべて失敗

  • ローカルに参照される (バンドル内) リソースの参照整合性を維持します

  • 指定された順序で処理されたオペレーション

  • オペレーションが失敗した場合、完全に失敗する

ユースケースの例:

  • バッチ: 複数の無関係な患者レコードのアップロード

  • トランザクション: すべてが一緒に成功する必要がある、関連する観察結果と条件を持つ患者を作成する

注記

どちらも Bundle リソースタイプを使用しますが、'type' フィールドで異なります。

{ "resourceType": "Bundle", "type": "transaction", "entry": [ { "fullUrl": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065", "resource": { "resourceType": "Patient", "id": "new-patient", "active": true, "name": [ { "family": "Johnson", "given": [ "Sarah" ] } ], "gender": "female", "birthDate": "1985-08-12", "telecom": [ { "system": "phone", "value": "555-123-4567", "use": "home" } ] }, "request": { "method": "POST", "url": "Patient" } }, { "fullUrl": "urn:uuid:7f83f473-d8cc-4a8d-86d3-9d9876a3248b", "resource": { "resourceType": "Observation", "id": "blood-pressure", "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel" } ], "text": "Blood pressure panel" }, "subject": { "reference": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065" }, "effectiveDateTime": "2023-10-15T09:30:00Z", "component": [ { "code": { "coding": [ { "system": "http://loinc.org", "code": "8480-6", "display": "Systolic blood pressure" } ] }, "valueQuantity": { "value": 120, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } }, { "code": { "coding": [ { "system": "http://loinc.org", "code": "8462-4", "display": "Diastolic blood pressure" } ] }, "valueQuantity": { "value": 80, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } } ] }, "request": { "method": "POST", "url": "Observation" } }, { "resource": { "resourceType": "Appointment", "id": "appointment-123", "status": "booked", "description": "Annual physical examination", "start": "2023-11-15T09:00:00Z", "end": "2023-11-15T09:30:00Z", "participant": [ { "actor": { "reference": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065" }, "status": "accepted" } ] }, "request": { "method": "PUT", "url": "Appointment/appointment-123" } }, { "request": { "method": "DELETE", "url": "MedicationRequest/med-request-456" } } ] }

FHIR リソースを独立したエンティティとしてバンドルする

FHIR リソースを独立したエンティティとしてバンドルするには

  1. HealthLake regiondatastoreIdの値を収集します。詳細については、「データストアのプロパティの取得」を参照してください。

  2. HealthLake regionと の収集された値を使用して、リクエストの URL を作成しますdatastoreId。URL に FHIR リソースタイプを指定しないでください。次の例の URL パス全体を表示するには、コピーボタンをスクロールします。

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
  3. 各 HTTP 動詞を method要素の一部として指定して、リクエストの JSON 本文を作成します。次の例では、 Bundleリソースとbatchのタイプインタラクションを使用して、新しい リソースPatientMedicationリソースを作成します。必要なセクションはすべて、それに応じてコメントされます。この手順では、ファイルを として保存しますbatch-independent.json

    { "resourceType": "Bundle", "id": "bundle-batch", "meta": { "lastUpdated": "2014-08-18T01:43:30Z" }, "type": "batch", "entry": [ { "resource": { "resourceType": "Patient", "meta": { "lastUpdated": "2022-06-03T17:53:36.724Z" }, "text": { "status": "generated", "div": "Some narrative" }, "active": true, "name": [ { "use": "official", "family": "Jackson", "given": [ "Mateo", "James" ] } ], "gender": "male", "birthDate": "1974-12-25" }, "request": { "method": "POST", "url": "Patient" } }, { "resource": { "resourceType": "Medication", "id": "med0310", "contained": [ { "resourceType": "Substance", "id": "sub03", "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "55452001", "display": "Oxycodone (substance)" } ] } } ], "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "430127000", "display": "Oral Form Oxycodone (product)" } ] }, "form": { "coding": [ { "system": "http://snomed.info/sct", "code": "385055001", "display": "Tablet dose form (qualifier value)" } ] }, "ingredient": [ { "itemReference": { "reference": "#sub03" }, "strength": { "numerator": { "value": 5, "system": "http://unitsofmeasure.org", "code": "mg" }, "denominator": { "value": 1, "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", "code": "TAB" } } } ] }, "request": { "method": "POST", "url": "Medication" } } ] }
  4. リクエストを送信します。FHIR Bundleバッチタイプは、AWS 署名バージョン 4 または SMART on FHIR 認可のPOSTリクエストを使用します。次のコード例では、デモンストレーションの目的で curl コマンドラインツールを使用しています。

    SigV4

    SigV4 認可

    curl --request POST \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/' \ --aws-sigv4 'aws:amz:region:healthlake' \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ --header "x-amz-security-token:$AWS_SESSION_TOKEN" \ --header 'Accept: application/json' \ --data @batch-type.json
    SMART on FHIR

    IdentityProviderConfiguration データ型の FHIR 認可の SMART の例。

    { "AuthorizationStrategy": "SMART_ON_FHIR", "FineGrainedAuthorizationEnabled": true, "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name", "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}" }

    発信者は認可 Lambda でアクセス許可を割り当てることができます。詳細については、「OAuth 2.0 スコープ」を参照してください。

    サーバーは、Bundleバッチタイプリクエストの結果として作成された Patientおよび Medicationリソースを示すレスポンスを返します。

バンドルの条件付き PUTs

AWS HealthLake は、次のクエリパラメータを使用して、バンドル内の条件付き更新をサポートします。

  • _id (スタンドアロン)

  • _id を次のいずれかと組み合わせて使用します。

    • _tag

    • _createdAt

    • _lastUpdated

既存のリソースに提供された条件を一致した結果に基づいて、実行されたアクションを示す関連する結果コードで以下が発生します。

FHIR リソースを作成または更新する場合、システムはリソース ID のプロビジョニングと既存の一致に基づいてさまざまなシナリオを処理します。

  • IDsのないリソースは常に作成されます (201)。

  • 新しい IDsを持つリソースが作成されます (201)。

  • 既存の IDs、一致するリソースを更新するか (200)、競合 (409) または ID の不一致 (400) がある場合はエラーを返します。

  • 複数の一致するリソースが前提条件の失敗 (419) をトリガーします。

条件付き更新バンドルの例では、FHIR ID を持つ患者リソース456は、条件_lastUpdated=lt2025-04-20が満たされた場合にのみ更新されます。

{ "resourceType": "Bundle", "id": "bundle-batch", "meta": { "lastUpdated": "2014-08-18T01:43:30Z" }, "type": "batch", "entry": [ { "resource": { "resourceType": "Patient", "id": "476", "meta": { "lastUpdated": "2022-06-03T17:53:36.724Z" }, "active": true, "name": [ { "use": "official", "family": "Jackson", "given": [ "Mateo", "James" ] } ], "gender": "male", "birthDate": "1974-12-25" }, "request": { "method": "PUT", "url": "Patient?_id=476&_lastUpdated=lt2025-04-20" } }, { "resource": { "resourceType": "Medication", "id": "med0310", "contained": [ { "resourceType": "Substance", "id": "sub03", "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "55452001", "display": "Oxycodone (substance)" } ] } } ], "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "430127000", "display": "Oral Form Oxycodone (product)" } ] }, "form": { "coding": [ { "system": "http://snomed.info/sct", "code": "385055001", "display": "Tablet dose form (qualifier value)" } ] }, "ingredient": [ { "itemReference": { "reference": "#sub03" }, "strength": { "numerator": { "value": 5, "system": "http://unitsofmeasure.org", "code": "mg" }, "denominator": { "value": 1, "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", "code": "TAB" } } } ] }, "request": { "method": "POST", "url": "Medication" } } ] }

FHIR リソースを単一のエンティティとしてバンドルする

FHIR リソースを単一のエンティティとしてバンドルするには

  1. HealthLake regiondatastoreIdの値を収集します。詳細については、「データストアのプロパティの取得」を参照してください。

  2. HealthLake regionと の収集された値を使用して、リクエストの URL を作成しますdatastoreId。URL Bundleの一部として FHIR リソースタイプを含めます。次の例の URL パス全体を表示するには、コピーボタンをスクロールします。

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle
  3. リクエストの JSON 本文を作成し、グループ化する FHIR リソースを指定します。次の例では、HealthLake で 2 つのPatientリソースをグループ化します。この手順では、ファイルを として保存しますbatch-single.json

    { "resourceType": "Bundle", "id": "bundle-minimal", "language": "en-US", "identifier": { "system": "urn:oid:1.2.3.4.5", "value": "28b95815-76ce-457b-b7ae-a972e527db4f" }, "type": "document", "timestamp": "2020-12-11T14:30:00+01:00", "entry": [ { "fullUrl": "urn:uuid:f40b07e3-37e8-48c3-bf1c-ae70fe12dabf", "resource": { "resourceType": "Composition", "id": "f40b07e3-37e8-48c3-bf1c-ae70fe12dabf", "status": "final", "type": { "coding": [ { "system": "http://loinc.org", "code": "60591-5", "display": "Patient summary Document" } ] }, "date": "2020-12-11T14:30:00+01:00", "author": [ { "reference": "urn:uuid:45271f7f-63ab-4946-970f-3daaaa0663ff" } ], "title": "Patient Summary as of December 7, 2020 14:30" } }, { "fullUrl": "urn:uuid:45271f7f-63ab-4946-970f-3daaaa0663ff", "resource": { "resourceType": "Practitioner", "id": "45271f7f-63ab-4946-970f-3daaaa0663ff", "active": true, "name": [ { "family": "Doe", "given": [ "John" ] } ] } } ] }
  4. リクエストを送信します。FHIR Bundleドキュメントタイプは、AWS 署名バージョン 4 の署名プロトコルを持つPOSTリクエストを使用します。次のコード例では、デモンストレーションの目的で curl コマンドラインツールを使用しています。

    SigV4

    SigV4 認可

    curl --request POST \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle' \ --aws-sigv4 'aws:amz:region:healthlake' \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ --header "x-amz-security-token:$AWS_SESSION_TOKEN" \ --header 'Accept: application/json' \ --data @document-type.json
    SMART on FHIR

    IdentityProviderConfiguration データ型の FHIR 認可の SMART の例。

    { "AuthorizationStrategy": "SMART_ON_FHIR", "FineGrainedAuthorizationEnabled": true, "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name", "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}" }

    発信者は認可 Lambda でアクセス許可を割り当てることができます。詳細については、「OAuth 2.0 スコープ」を参照してください。

    サーバーは、Bundleドキュメントタイプリクエストの結果として作成された 2 つのPatientリソースを示すレスポンスを返します。

バンドルの検証レベルの設定

FHIR リソースをバンドルする場合、オプションで HTTP x-amzn-healthlake-fhir-validation-level ヘッダーを指定して、リソースの検証レベルを設定できます。この検証レベルは、バンドル内のすべての作成および更新リクエストに対して設定されます。 AWS HealthLake は現在、次の検証レベルをサポートしています。

  • strict: リソースは、リソースのプロファイル要素、またはプロファイルが存在しない場合は R4 仕様に従って検証されます。これはデフォルトの検証レベルです AWS HealthLake。

  • structure-only: リソースは R4 に対して検証され、参照されるプロファイルは無視されます。

  • minimal: リソースは、特定の R4 ルールを無視して、最小限検証されます。検索/分析に必要な構造チェックに失敗したリソースは、監査の警告を含むように更新されます。

最小限の検証レベルにバンドルされたリソースは、検索インデックス作成に必要な検証に失敗しても、Datastore に取り込むことができます。この場合、リソースが更新されて Healthlake 固有の拡張機能が含まれ、上記の失敗が記録されます。バンドルレスポンス内のエントリには、次のように OperationOutcome リソースが含まれます。

{ "resourceType": "Bundle", "type": "batch-response", "timestamp": "2025-08-25T22:58:48.846287342Z", "entry": [ { "response": { "status": "201", "location": "Patient/195abc49-ba8e-4c8b-95c2-abc88fef7544/_history/1", "etag": "W/\"1\"", "lastModified": "2025-08-25T22:58:48.801245445Z", "outcome": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "processing", "details": { "text": "FHIR resource in payload failed FHIR validation rules." }, "diagnostics": "FHIR resource in payload failed FHIR validation rules." } ] } } } ] }

さらに、次の HTTP レスポンスヘッダーは「true」の値に含まれます。

x-amzn-healthlake-validation-issues : true
注記

これらのエラーが存在する場合、R4 仕様に従って誤った形式で取り込まれたデータは期待どおりに検索できない可能性があることに注意してください。