故障排除 AWS HealthLake - AWS HealthLake

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障排除 AWS HealthLake

以下主题针对您在使用、或 HealthLake 控制台时可能遇到的错误和问题提供了疑难解答建议。 AWS CLI AWS SDKs如果您发现本节中未列出的问题,请使用本页右侧边栏上的 “提供反馈” 按钮进行举报。

数据存储操作

问题:当我尝试创建 HealthLake 数据存储时,我收到以下错误:

AccessDeniedException: Insufficient Lake Formation permission(s): Required Database on Catalog

2022 年 11 月 14 日, HealthLake 更新了创建新数据存储所需的 IAM 权限。有关更多信息,请参阅 配置要使用的 IAM 用户或角色 HealthLake(IAM 管理员)

问题:使用创建 HealthLake 数据存储时 AWS SDKs,数据存储创建状态会返回异常或未知状态。

如果您的调用DescribeFHIRDatastoreListFHIRDatastores API 调用返回异常或未知数据存储状态,请将您的 AWS SDK 更新到最新版本。

导入操作

问题: HealthLake 如果我的数据不是 FHIR R4 格式,我还能使用吗?

只有 FHIR R4 格式的数据可以导入到 HealthLake 数据存储中。有关可以帮助将现有健康数据转换为 FHIR R4 格式的合作伙伴列表,请参阅AWS HealthLake 合作伙伴。

问题:为什么我的 FHIR 导入任务失败了

成功的导入任务将生成一个.ndjson格式为结果(输出日志)的文件夹,但是,单个记录可能无法导入。发生这种情况时,将生成第二个FAILURE文件夹,其中包含未能导入的记录清单。有关更多信息,请参阅 使用导入 FHIR 数据 AWS HealthLake

要分析导入任务失败的原因,请使用 DescribeFHIRImportJob API 进行分析 JobProperties。建议采取以下措施:

  • 如果状态为FAILED且存在消息,则失败与作业参数有关,例如输入数据大小或输入文件数量超出 HealthLake 配额。

  • 如果导入任务状态为COMPLETED_WITH_ERRORS,请查看清单文件manifest.json,以了解哪些文件未成功导入。

  • 如果导入任务状态为FAILED,但消息不存在,请前往任务输出位置访问清单文件manifest.json

对于每个输入文件,都有失败输出文件,其中包含任何未能导入的资源的输入文件名。响应包含与输入数据位置相对应的行号 (lineID)、FHIR 响应对象 (UpdateResourceResponse) 和响应的状态码 (StatusCode)。

示例输出文件可能类似于以下内容:

{"lineId":3, UpdateResourceResponse:{"jsonBlob":{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"processing","diagnostics":"1 validation error detected: Value 'Patient123' at 'resourceType' failed to satisfy constraint: Member must satisfy regular expression pattern: [A-Za-z]{1,256}"}]}, "statusCode":400} {"lineId":5, UpdateResourceResponse:{"jsonBlob":{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"processing","diagnostics":"This property must be an simple value, not a com.google.gson.JsonArray","location":["/EffectEvidenceSynthesis/name"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@telecom'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@gender'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@birthDate'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@address'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@maritalStatus'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@multipleBirthBoolean'","location":["/EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Unrecognised property '@communication'","location":["/EffectEvidenceSynthesis"]},{"severity":"warning","code":"processing","diagnostics":"Name should be usable as an identifier for the module by machine processing applications such as code generation [name.matches('[A-Z]([A-Za-z0-9_]){0,254}')]","location":["EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Profile http://hl7.org/fhir/StructureDefinition/EffectEvidenceSynthesis, Element 'EffectEvidenceSynthesis.status': minimum required = 1, but only found 0","location":["EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Profile http://hl7.org/fhir/StructureDefinition/EffectEvidenceSynthesis, Element 'EffectEvidenceSynthesis.population': minimum required = 1, but only found 0","location":["EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Profile http://hl7.org/fhir/StructureDefinition/EffectEvidenceSynthesis, Element 'EffectEvidenceSynthesis.exposure': minimum required = 1, but only found 0","location":["EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Profile http://hl7.org/fhir/StructureDefinition/EffectEvidenceSynthesis, Element 'EffectEvidenceSynthesis.exposureAlternative': minimum required = 1, but only found 0","location":["EffectEvidenceSynthesis"]},{"severity":"error","code":"processing","diagnostics":"Profile http://hl7.org/fhir/StructureDefinition/EffectEvidenceSynthesis, Element 'EffectEvidenceSynthesis.outcome': minimum required = 1, but only found 0","location":["EffectEvidenceSynthesis"]},{"severity":"information","code":"processing","diagnostics":"Unknown extension http://synthetichealth.github.io/synthea/disability-adjusted-life-years","location":["EffectEvidenceSynthesis.extension[3]"]},{"severity":"information","code":"processing","diagnostics":"Unknown extension http://synthetichealth.github.io/synthea/quality-adjusted-life-years","location":["EffectEvidenceSynthesis.extension[4]"]}]}, "statusCode":400} {"lineId":7, UpdateResourceResponse:{"jsonBlob":{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"processing","diagnostics":"2 validation errors detected: Value at 'resourceId' failed to satisfy constraint: Member must satisfy regular expression pattern: [A-Za-z0-9-.]{1,64}; Value at 'resourceId' failed to satisfy constraint: Member must have length greater than or equal to 1"}]}, "statusCode":400} {"lineId":9, UpdateResourceResponse:{"jsonBlob":{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"processing","diagnostics":"Missing required id field in resource json"}]}, "statusCode":400} {"lineId":15, UpdateResourceResponse:{"jsonBlob":{"resourceType":"OperationOutcome","issue":[{"severity":"error","code":"processing","diagnostics":"Invalid JSON found in input file"}]}, "statusCode":400}

上面的示例显示,输入文件中相应输入行的第 3、4、7、9、15 行出现故障。对于每行,解释如下:

  • 在第 3 行,响应解释了输入文件第 3 行中resourceType提供的内容无效。

  • 在第 5 行,响应说明输入文件的第 5 行存在 FHIR 验证错误。

  • 在第 7 行,响应解释说,作为输入resourceId提供的存在验证问题。

  • 在第 9 行,响应说明输入文件必须包含有效的资源 ID。

  • 在第 15 行,输入文件的响应是该文件不是有效的 JSON 格式。

FHIR APIs

问题:如何对 FHIR RESTful APIs 实施授权

确定数据存储授权策略要使用的。

要使用创建 Sigv4 授权 适用于 Python (Boto3) 的 AWS SDK,请创建一个类似于以下示例的脚本。

import boto3 import requests import json from requests_auth_aws_sigv4 import AWSSigV4 # Set the input arguments data_store_endpoint = 'https://healthlake.us-east-1.amazonaws.com/datastore/<datastore id>/r4//' resource_path = "Patient" requestBody = {"resourceType": "Patient", "active": True, "name": [{"use": "official","family": "Dow","given": ["Jen"]},{"use": "usual","given": ["Jen"]}],"gender": "female","birthDate": "1966-09-01"} region = 'us-east-1' #Frame the resource endpoint resource_endpoint = data_store_endpoint+resource_path session = boto3.session.Session(region_name=region) client = session.client("healthlake") # Frame authorization auth = AWSSigV4("healthlake", session=session) # Call data store FHIR endpoint using SigV4 auth r = requests.post(resource_endpoint, json=requestBody, auth=auth, ) print(r.json())

问题:为什么在使用客户托管的 KMS 密钥加密的数据存储中使用 FHIR RESTful APIs 时会收到AccessDenied错误

用户或角色需要拥有客户托管密钥和 IAM 策略的权限才能访问数据存储。用户必须拥有使用客户托管密钥所需的 IAM 权限。如果用户撤销或取消了授予使用客户托管的 KMS 密钥 HealthLake 权限的授权,则 HealthLake 会返回AccessDenied错误。

HealthLake 必须拥有访问客户数据、加密导入到数据存储的新 FHIR 资源以及在请求时解密 FHIR 资源的权限。有关更多信息,请参阅AWS KMS 权限疑难解答

问题: HealthLake 使用 10MB 文档的 FH POST IR API 操作返回了错误。413 Request Entity Too Large

AWS HealthLake 同步创建和更新 API 限制为 5MB,以避免延迟和超时增加。您可以使用批量导入 API 使用Binary资源类型提取最大 164MB 的大型文档。

自然语言处理集成

问题:如何开启 HealthLake集成的自然语言处理功能?

自 2022 年 11 月 14 日起, HealthLake 数据存储的默认行为发生了变化。

当前数据存储:所有当前 HealthLake 的数据存储都将停止对 base64 DocumentReference 编码的资源使用自然语言处理 (NLP)。这意味着不会使用 NLP 分析新资源,也不会根据资源类型中的文本生成新DocumentReference资源。DocumentReference对于现有DocumentReference资源,通过 NLP 生成的数据和资源将保留,但不会在 2023 年 2 月 20 日之后更新。

新数据存储:2023 年 2 月 20 日之后创建 HealthLake 的数据存储将不会对 base64 DocumentReference 编码的资源执行自然语言处理 (NLP)。

要启用 HealthLake NLP 集成,请使用AWS Support Center Console创建支持案例。要创建您的案例,请登录您的 AWS 账户,然后选择创建案例。要了解有关创建案例和案例管理的更多信息,请参阅支持 用户指南中的创建支持案例和案例管理

问题:>如何找到无法通过集成 NLP 处理的DocumentReference资源

如果DocumentReference资源无效,则 HealthLake 提供表示验证错误的扩展名,而不是在综合医疗 NLP 输出中提供。要查找在 NLP 处理过程中导致验证错误的DocumentReference资源,您可以使用带有搜索键cm-decoration-status和搜索值 VALIDATION_ERROR HealthLake 的 FHIR search 函数。此搜索将列出导致验证错误的所有DocumentReference资源,以及描述错误性质的错误消息。那些存在验证错误的DocumentReference资源中扩展字段的结构将类似于以下示例。

"extension": [ { "extension": [ { "url": "http://healthlake.amazonaws.com/aws-cm/status/", "valueString": "VALIDATION_ERROR" }, { "url": "http://healthlake.amazonaws.com/aws-cm/message/", "valueString": "Resource led to too many nested objects after NLP operation processed the document. 10937 nested objects exceeds the limit of 10000." } ], "url": "http://healthlake.amazonaws.com/aws-cm/" } ]
注意

如果 NLP 装饰创建的嵌套对象超过 10,000 个,也会出现 A VALIDATION_ERROR。发生这种情况时,必须先将文档拆分成较小的文档,然后再进行处理。

SQL 集成

问题:为什么我在添加新的数据湖管理员permissions error: lakeformation:PutDataLakeSettings时会获得 Lake Formation?

如果您的 IAM 用户或角色包含AWSLakeFormationDataAdmin AWS 托管策略,则无法添加新的数据湖管理员。您将收到一条包含以下内容的错误:

User arn:aws:sts::111122223333:assumed-role/lakeformation-admin-user is not authorized to perform: lakeformation:PutDataLakeSettings on resource: arn:aws:lakeformation:us-east-2:111122223333:catalog:111122223333 with an explicit deny in an identity-based policy

需要使用 AWS 托管策略AdministratorAccess才能将 IAM 用户或角色添加为 AWS Lake Formation 数据湖管理员。如果您的 IAM 用户或角色也包含AWSLakeFormationDataAdmin该操作,则操作将失败。AWSLakeFormationDataAdmin AWS 托管策略包含对 La AWS ke Formation API 操作的明确拒绝PutDataLakeSetting。即使管理员拥有 AWS 使用AdministratorAccess托管策略的完全访问权限,也可能受到该AWSLakeFormationDataAdmin策略的限制。

问题:如何迁移现有 HealthLake 数据存储以使用 Amazon Athen a SQL 集成?

HealthLake 2022 年 11 月 14 日之前创建的数据存储可以正常运行,但无法在 Athena 中使用 SQL 进行查询。要使用 Athena 查询先前存在的数据存储,必须先将其迁移到新的数据存储。

将您的 HealthLake 数据迁移到新的数据存储
  1. 创建新的数据存储。

  2. 将数据从先前存在的存储桶导出到 Amazon S3 存储桶。

  3. 将数据从 Amazon S3 存储桶导入到新的数据存储中。

注意

将数据导出到 Amazon S3 存储桶需要支付额外费用。额外费用取决于您导出的数据的大小。

问题:为 SQL 集成创建新的 HealthLake 数据存储时,数据存储状态未改变Creating

如果您尝试创建新的 HealthLake 数据存储,但您的数据存储状态未从 “正在创建” 发生变化,则需要更新 Athena 才能使用。 AWS Glue Data Catalog有关更多信息,请参阅亚马逊 Athena AWS 用户指南 step-by-step中的升级到 Glue 数据目录

成功升级后 AWS Glue Data Catalog,您可以创建 HealthLake 数据存储。

要移除旧 HealthLake 的数据存储,请使用创建支持案例AWS Support Center Console。要创建您的案例,请登录您的 AWS 账户,然后选择创建案例。要了解更多信息,请参阅支持 用户指南中的创建支持案例和案例管理

问题:将数据导入新数据存储后,Athena 控制台无法正常工作 HealthLake

将数据导入新的 HealthLake 数据存储后,这些数据可能无法立即使用。这是为了留出时间将数据提取到 Apache Iceberg 表中。请稍后再试。

问题:如何将 Athena 中的搜索结果连接到其他服务? AWS

AWS 与其他服务共享来自 Athena 的搜索结果时,当您将搜索结果json_extract[1]用作 SQL 搜索查询的一部分时,可能会出现问题。要修复此问题,必须更新到CATVAR

在尝试创建保存结果、(静态)或视图(动态)时,您可能会遇到此问题。