AWS HealthLake出口
#aws #serverless #database

在我的previous article中,我写了一个关于回调模式,其AWS步骤功能在HealthLake的出口骨架上构建。尽管我在回调部分上使用了代码,但我觉得我没有给予方程式的Healthlake侧。因此,本文是调整。使用AWS HealthLake管理出口。

什么是Healthlake

AWS HealthLake是一项符合HIPAA资格的服务,可提供FHIR API,可帮助医疗保健和生命科学公司在几分钟内安全地存储,转换,交易和分析健康数据,以对患者和人群级别的时间顺序排列。 -AWS

我的话是HealthLake是一个符合FHIR的数据库,它为开发人员提供了一组强大的API,以构建以患者为中心的应用程序。您可以使用HealthLake来构建交易应用程序,分析大量数据,存储结构化和半结构化信息并构建分析和报告。

使用HealthLake建造时,我发现它适合两个地方之一。

  1. 作为您的医疗保健申请的交易中心。它是高度耐心的,非常可扩展,并且包含用于使用每个资源的API。此外,它为FHIR功能提供了智能,使其成为在。
  2. 之上构建应用程序的不错的选择。
  3. 作为Lakehouse风格体系结构中许多外部和内部系统的聚合点,用于互操作性和报告。当您拥有具有各种数据库的分布式系统时,您需要在一个位置重新汇聚的数据。 Healthlake做到了。或者,如果您从各种外部来源获取数据,那么HealthLake也可以做到这一点。我写了关于这样做with Serverless的文章。

AWS HealthLake出口

June 2023之前,AWS Heathlake中的出口仅在控制台或通过CLI命令中支持。随着这些新的批量API的发布,用于管理出口,它允许像我在回调文章中显示的一样工作流程。

此功能解锁了许多不同的用例,但是我看到的最大两个用例是:

  1. 在HealthLake中建立CDC功能
  2. 逐步导出数据以执行分析或其他数据分析。

在我展示将其在您的环境中成为可能的一切之前,还有两个关于出口的注释。 API提供了几个不错的选择来控制您要导出的内容。

首先,以患者为中心的出口,您可以在URL中提供该信息,而HealthLake将导出与患者资源有关的所有记录。因此,在您的数据集中,事物与fhir参考,订阅者和其他内容相关。

第二,通过使用afafe afare,HealthLake将仅导出这些记录更改了>=,因为参数。

有关出口的更多阅读,here's the documentation

执行导出

使用AWS HealthLake使用出口需要进行设置。在以下各节中,我将说明所有需要配置的内容,然后我们将研究如何执行导出。

设置导出

为我们的导出准备的第一步是建立一个可以访问HealthLake DataStore的角色,除了运行和描述导出的操作。执行此操作的CDK代码片段如下:

const manageExportPolicy = new iam.PolicyDocument({
    statements: [
        new iam.PolicyStatement({
            effect: iam.Effect.ALLOW,
            resources: [props.datastore.attrDatastoreArn],
            actions: [
                "healthlake:StartFHIRExportJobWithPost",
                "healthlake:DescribeFHIRExportJobWithGet",
                "healthlake:CancelFHIRExportJobWithDelete",
                "healthlake:StartFHIRExportJob",
            ],
        }),
        new iam.PolicyStatement({
            actions: [
                "s3:ListBucket",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetEncryptionConfiguration",
            ],
            effect: iam.Effect.ALLOW,
            resources: [`${props.bucket.bucketArn}`],
        }),
        new iam.PolicyStatement({
            actions: ["s3:PutObject"],
            effect: iam.Effect.ALLOW,
            resources: [`${props.bucket.bucketArn}/*`],
        }),

        new iam.PolicyStatement({
            actions: ["kms:DescribeKey", "kms:GenerateDataKey*"],
            effect: iam.Effect.ALLOW,
            resources: [props.key.keyArn],
        }),
    ],
});

this._role = new iam.Role(scope, "HealthLakeExportRole", {
    roleName: "healthlake-cdc-export-role",
    assumedBy: new iam.PrincipalWithConditions(assumedBy, {
        StringEquals: {
            "aws:SourceAccount": props.accountId,
        },
        ArnEquals: {
            "aws:SourceArn": props.datastore.attrDatastoreArn,
        },
    }),
    inlinePolicies: {
        healthlakePolicy: manageExportPolicy,
    },
});

上面的好一点,所以让我们谈谈一秒钟。

这些新动作与AWS HealthLake出口专门相关。

actions: [
    "healthlake:StartFHIRExportJobWithPost",
    "healthlake:DescribeFHIRExportJobWithGet",
    "healthlake:CancelFHIRExportJobWithDelete",
    "healthlake:StartFHIRExportJob",
],

角色的其他部分包裹在S3和KMS周围。这很重要,因为导出将将其结果写入您选择的S3存储桶/钥匙。并且该执行的角色将需要对这些事情许可。

角色的最后一部分是我要通过信任策略限制访问权限,以便仅我想要的帐户和我选择的数据存储以进行进一步限制。这只是好习惯。

运行导出

要使用AWS HealthLake演示出口,我将使用一个简单的API调用,并向您展示卷曲请求。文章的底部将是我在回调文章中使用的完整存储库的链接,因此您也可以参考。

curl --location 'https://healthlake.us-west-2.amazonaws.com/datastore/<datastoreid>/r4/$export?_since=2023-07-18T00%3A00%3A00.461Z' \
--header 'Content-Type: application/fhir+json' \
--header 'Prefer: respond-async' \
--header 'X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3' \
--header 'X-Amz-Date: 20230826T132701Z' \
--data '{
    "JobName": "<whatever you want>",
    "OutputDataConfig": {
        "S3Configuration": {
            "S3Uri": "s3://<your-s3-bucket>",
            "KmsKeyId": "arn:aws:kms:us-west-2:<account-id>:key/<key-id>"
        }
    },
    "DataAccessRoleArn": "arn:aws:iam::<account-id>:role/healthlake-export-role"
}'

出于明显的原因,我遗漏了“授权”标头。但是要注意的有意义的事情。

  • 标题:Prefer: respond-async
  • 标题:Content-Type: application/fhir+json

您将有效载荷传递到邮政请求中也是特定的。您需要提供:

  • s3uri-这是要转储结果的存储桶/键。您在构建角色时使用了此
  • kmskeyid-这是用于S3存储桶的加密密钥,并且必须具有此功能
  • dataAccessrolearn-在上述代码中构建的角色。

运行请求时,将返回以下输出。

{
    "datastoreId": "<your datastoreid>",
    "jobStatus": "SUBMITTED",
    "jobId": "<jobId>"
}

监视导出

AWS HealthLake出口是异步操作。您将其发布到API中,然后将获得一个可以检查工作进度的JobID。

API提供了一个get请求,使您可以描述您正在询问的工作。

curl --location 'https://healthlake.us-west-2.amazonaws.com/datastore/<datastoreid>/r4/export/<jobId>' \
--header 'X-Amz-Date: 20230826T134903Z' \

记住,从上一篇文章中,您一次只能有1个作业,但您总是可以回去检查旧的工作。我找不到有关工作历史记录多长时间的信息,但我通常不会回头,所以我没有注意到。

对描述电话的响应将看起来像这样:

{
    "exportJobProperties": {
        "jobId": "<jobId>",
        "jobName": "2023-07-19 15:06:49 +0000 UTC",
        "jobStatus": "COMPLETED",
        "submitTime": "Aug 26, 2023 1:46:56 PM",
        "endTime": "Aug 26, 2023 1:48:25 PM",
        "datastoreId": "<datastoreId>",
        "outputDataConfig": {
            "s3Configuration": {
                "s3Uri": "s3://<bucket/key>/<datastoreId>-FHIR_EXPORT-<jobId>/",
                "kmsKeyId": "arn:aws:kms:us-west-2:<accountId>:key/<keyId>"
            }
        },
        "dataAccessRoleArn": "arn:aws:iam::<accountId>:role/healthlake-cdc-export-role"
    },
    "transactionTime": "2023-08-26T13:49:03.424Z",
    "request": "https://healthlake.us-west-2.amazonaws.com/datastore/<datastoreId>/r4/$export?_type&_since=2023-07-18T00:00:00.461Z&_outputFormat=application/fhir+ndjson",
    "requiresAccessToken": false,
    "output": [
        {
            "type": "ResourceType",
            "url": "s3://<bucket/key>/<datastoreId>-FHIR_EXPORT-<jobId>/ResourceType/ResourceType-1022280015944103279-3-0.ndjson"
        }
    ],
    "error": []
}

我会分解那个有效载荷。

首先,您会看到“ Jobproperties”,突出了您通过帖子传递的内容。它确实包括有关作业本身的一些其他信息。运行时,状态,工作ID和作业名称。

其他信息描述了实际请求,包括完整的URL。

最后,您会得到一个“输出”对象。这是NDJSON文件及其资源类型的列表以及S3中的文件的完整URL。这很重要,因为如果您想对这些文件做某事,则可以。

关于NDJSON的快速注释。我第一次研究文件的输出时,我有点震惊,因为它不是文件中的单个记录。我想那应该不震惊我,但确实如此。 ndjson是“ newline划界JSON”,这意味着您在由\r\n\n分隔的文件中具有多个记录。4

S3中的输出看起来如下:

AWS HealthLake exports

包起来

完成了有关Callback的讨论以及支持它的AWS中的基础HealthLake出口。我已经成为Healthlake的忠实拥护者,并认为它适合医疗保健中的严重挑战。数据汇总和互操作性。

通过利用AWS的这些新API,您可以利用可以支持各种工作负载的出口功能。我希望您对一切都如何融合有了更好的了解。如果您想挖掘所有内容的全部来源,here is the GitHub repository

享受!和快乐的建筑!