对储存在Snowflake中的数据运行多个判断-调用Lambda

196 阅读3分钟

照片:Teigan RodgeronUnsplash

在Snowflake中以lambda作为外部函数执行python代码

最近,我和Supreeth Chandrashekar合作完成了一项任务,我们想对存储在Snowflake中的一些数据运行多个推断。我们利用外部函数来触发 lambda,然后从 AWS Sagemaker 端点(服务于不同的模型)获得推断。在这篇博客中,我们将讨论如何从 Snowflake 调用 lambda。

解决方案概述

图片由作者提供

工艺流程

  1. Snowflake 用户在目标账户中承担了一个角色
  2. 使用该角色调用 API 网关(API 网关资源政策只允许上述角色调用 POST 方法
  3. API网关将有效载荷传递给lambda
  4. Lambda处理数据并将响应返回给API网关
  5. API 网关将响应发回给 Snowflake

AWS 设置

IAM 角色将由 snowflake 承担

只需创建一个没有权限的空角色。我们将在稍后添加跨帐户的信任。

兰姆达函数

创建一个lambda函数,这将响应API网关。使用下面的代码。这里需要注意的是事件结构和响应结构。

medium.com/media/033af…

Snowflake 以 JSON 格式的列表形式发送事件,该列表由名为 data 的键包裹。它希望响应对象包含一个 statusCode 键和一个带有 JSON 值的 data 键。

API网关

创建一个具有Lambda代理集成的POST方法的API网关。使用我们在上一步骤中创建的Lambda ARN。在 "方法请求 "中添加IAM授权。

资源策略

替换以下JSON中的相关字段后,为API添加相同的资源策略。

medium.com/media/9ce92…

最后,在lambda控制台,你应该观察到API触发的Lambda函数。

Snowflake 设置

API 集成

我们在Snowflake创建一个API集成。这个集成将创建一个用户,并允许该用户承担我们在AWS设置步骤1中创建的角色。此外,它记录了我们在 API 网关中创建的 API 的执行端点。

外部函数

我们通过使用我们在上一步创建的集成来创建一个外部函数。使用下面的代码来创建集成和外部函数。

medium.com/media/959f3…

一旦集成被创建。描述一下集成的情况。你将得到与下面类似的结果。

图片由作者提供

从描述集成命令的输出中记下API_AWS_IAM_USER_ARN 和API_AWS_EXTERNAL_ID。在下面的策略中替换它,然后将其作为信任策略添加到一开始创建的 "承担角色 "中。

为了测试端到端的功能,在 snowflake 中运行该功能,你应该看到 lambda 的响应。

在snowflake中添加执行python代码的功能,为snowflake和云系统之间提供了更大的整合。我们可以插入这些功能,并从 snowflake 内触发外部进程。

注意:在lambda上有一个6MB的有效载荷的限制,所以从snowflake的触发不应该太大。

快乐的整合!!