在Snowflake中以lambda作为外部函数执行python代码
最近,我和Supreeth Chandrashekar合作完成了一项任务,我们想对存储在Snowflake中的一些数据运行多个推断。我们利用外部函数来触发 lambda,然后从 AWS Sagemaker 端点(服务于不同的模型)获得推断。在这篇博客中,我们将讨论如何从 Snowflake 调用 lambda。
解决方案概述
图片由作者提供
工艺流程
- Snowflake 用户在目标账户中承担了一个角色
- 使用该角色调用 API 网关(API 网关资源政策只允许上述角色调用 POST 方法
- API网关将有效载荷传递给lambda
- Lambda处理数据并将响应返回给API网关
- API 网关将响应发回给 Snowflake
AWS 设置
IAM 角色将由 snowflake 承担
只需创建一个没有权限的空角色。我们将在稍后添加跨帐户的信任。
兰姆达函数
创建一个lambda函数,这将响应API网关。使用下面的代码。这里需要注意的是事件结构和响应结构。
Snowflake 以 JSON 格式的列表形式发送事件,该列表由名为 data 的键包裹。它希望响应对象包含一个 statusCode 键和一个带有 JSON 值的 data 键。
API网关
创建一个具有Lambda代理集成的POST方法的API网关。使用我们在上一步骤中创建的Lambda ARN。在 "方法请求 "中添加IAM授权。
资源策略
替换以下JSON中的相关字段后,为API添加相同的资源策略。
最后,在lambda控制台,你应该观察到API触发的Lambda函数。
Snowflake 设置
API 集成
我们在Snowflake创建一个API集成。这个集成将创建一个用户,并允许该用户承担我们在AWS设置步骤1中创建的角色。此外,它记录了我们在 API 网关中创建的 API 的执行端点。
外部函数
我们通过使用我们在上一步创建的集成来创建一个外部函数。使用下面的代码来创建集成和外部函数。
一旦集成被创建。描述一下集成的情况。你将得到与下面类似的结果。
图片由作者提供
从描述集成命令的输出中记下API_AWS_IAM_USER_ARN 和API_AWS_EXTERNAL_ID。在下面的策略中替换它,然后将其作为信任策略添加到一开始创建的 "承担角色 "中。
为了测试端到端的功能,在 snowflake 中运行该功能,你应该看到 lambda 的响应。
在snowflake中添加执行python代码的功能,为snowflake和云系统之间提供了更大的整合。我们可以插入这些功能,并从 snowflake 内触发外部进程。
注意:在lambda上有一个6MB的有效载荷的限制,所以从snowflake的触发不应该太大。
快乐的整合!!