设置初始 Snowflake 环境的最佳实践 - 多个 URL
Best practices for setting up initial Snowflake environment - Multiple URLs
我想知道其他人是如何在考虑 DevOps 和代码部署的情况下设置他们的初始 Snowflake 环境的,以及他们这样做的经验。人们是使用多个 accounts/URLs 来简化 DevOps 和部署,还是使用一个帐户并构建单独的 DEV、TEST 和 PROD 数据库?例如:
DEV = http://mydevaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
测试 = http://mytestaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
产品 = http://myprodaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
你为什么或为什么不这样做?
过去,我在一个帐户下设置环境,例如:
单一环境 = http://mysnowflakeaccount.east-us-2.azure.snowflakecomputing.com
开发_SourceSystem.Schema.Tables
测试_SourceSystem.Schema.Tables
产品_SourceSystem.Schema.Tables
有趣的是,您在问题中将单独的帐户称为使 DevOps 更容易。根据我的经验,将所有内容都放在一个帐户中会更容易,这就是原因。如果你在你的 RBAC 模型中使用一个很好的结构,那么就隔离这些环境而言没有区别(假设你不希望为你的不同环境设置单独的 IP 白名单,在这种情况下这个对话没有实际意义)。同时,如果您随后确保您的 DevOps、ETL 等脚本都仅引用模式(没有数据库引用),那么迁移 DDL、DML 等就像在单独的帐户中一样容易。同时,Snowflake 的最佳功能之一是为您的测试生命周期提供零拷贝克隆。这仅适用于单个帐户。如果您使用单独的帐户,您将需要将您的数据从一个环境复制到另一个环境(使您的存储成本翻倍或增加三倍,并且会耗费大量时间和信用)。零拷贝克隆允许将您的数据近乎即时地快照到不同的环境。
根据我与许多 Snowflake 客户打交道的经验,单个帐户最为常见,但也有使用多个帐户的客户。这真的取决于什么对你很重要。
您提到您以前对 DevOps 流程使用单一帐户方法,但后来放弃了。您能否分享可能触发改变方法的特定痛点?是因为每个环境的 database/schema 名称不断变化,因此很难在数据库之间部署对象吗?
我们刚开始使用 Snowflake 时遇到了同样的问题。
但是,在与我们的销售工程师讨论并进行大量原型设计之后,我们现在已经开发出一种适合我们的方法。
我们有一个帐户,每个系统有多个环境。
对于用户,有不同的角色只允许访问相关环境 - 所以 "dev" 角色只允许访问 "dev" 等。
它比这稍微复杂一些,因为在每个环境中有多个角色具有不同级别的访问权限,但你明白了 - 我希望!
在我们的一些系统中,我们为单个用户强制执行不同的用户帐户,以便环境尽可能接近分离。这意味着我的开发帐户无法访问允许访问测试或实时的角色。
只有顶级管理员才能访问系统管理员(等)角色,这些不是默认的。
该方法意味着我们几乎可以立即启动多个开发环境 - 使用实时数据、测试数据或开发数据。
我们确实有多个帐户,但每个帐户都运行一个单独的系统(在某些情况下我们必须对一些数据进行物理分区)并且我们使用数据共享在不同帐户之间传递公共数据。
我想知道其他人是如何在考虑 DevOps 和代码部署的情况下设置他们的初始 Snowflake 环境的,以及他们这样做的经验。人们是使用多个 accounts/URLs 来简化 DevOps 和部署,还是使用一个帐户并构建单独的 DEV、TEST 和 PROD 数据库?例如:
DEV = http://mydevaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
测试 = http://mytestaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
产品 = http://myprodaccount.east-us-2.azure.snowflakecomputing.com
- SourceSystem.Schema.Tables
你为什么或为什么不这样做?
过去,我在一个帐户下设置环境,例如:
单一环境 = http://mysnowflakeaccount.east-us-2.azure.snowflakecomputing.com
开发_SourceSystem.Schema.Tables
测试_SourceSystem.Schema.Tables
产品_SourceSystem.Schema.Tables
有趣的是,您在问题中将单独的帐户称为使 DevOps 更容易。根据我的经验,将所有内容都放在一个帐户中会更容易,这就是原因。如果你在你的 RBAC 模型中使用一个很好的结构,那么就隔离这些环境而言没有区别(假设你不希望为你的不同环境设置单独的 IP 白名单,在这种情况下这个对话没有实际意义)。同时,如果您随后确保您的 DevOps、ETL 等脚本都仅引用模式(没有数据库引用),那么迁移 DDL、DML 等就像在单独的帐户中一样容易。同时,Snowflake 的最佳功能之一是为您的测试生命周期提供零拷贝克隆。这仅适用于单个帐户。如果您使用单独的帐户,您将需要将您的数据从一个环境复制到另一个环境(使您的存储成本翻倍或增加三倍,并且会耗费大量时间和信用)。零拷贝克隆允许将您的数据近乎即时地快照到不同的环境。
根据我与许多 Snowflake 客户打交道的经验,单个帐户最为常见,但也有使用多个帐户的客户。这真的取决于什么对你很重要。
您提到您以前对 DevOps 流程使用单一帐户方法,但后来放弃了。您能否分享可能触发改变方法的特定痛点?是因为每个环境的 database/schema 名称不断变化,因此很难在数据库之间部署对象吗?
我们刚开始使用 Snowflake 时遇到了同样的问题。
但是,在与我们的销售工程师讨论并进行大量原型设计之后,我们现在已经开发出一种适合我们的方法。
我们有一个帐户,每个系统有多个环境。
对于用户,有不同的角色只允许访问相关环境 - 所以 "dev" 角色只允许访问 "dev" 等。 它比这稍微复杂一些,因为在每个环境中有多个角色具有不同级别的访问权限,但你明白了 - 我希望! 在我们的一些系统中,我们为单个用户强制执行不同的用户帐户,以便环境尽可能接近分离。这意味着我的开发帐户无法访问允许访问测试或实时的角色。
只有顶级管理员才能访问系统管理员(等)角色,这些不是默认的。
该方法意味着我们几乎可以立即启动多个开发环境 - 使用实时数据、测试数据或开发数据。
我们确实有多个帐户,但每个帐户都运行一个单独的系统(在某些情况下我们必须对一些数据进行物理分区)并且我们使用数据共享在不同帐户之间传递公共数据。