开始
加载和管理数据
处理数据
政府
参考和资源
2023年1月13日更新
给我们反馈
您可以自动Unity目录设置使用Databricks Terraform提供商.本文展示了一种部署端到端Unity Catalog实现的方法。如果你已经有了一些Unity Catalog基础架构组件,你也可以根据需要使用这篇文章来部署额外的Unity Catalog基础架构组件。
有关更多信息,请参见部署必要的资源并启用Unity Catalog在Databricks Terraform提供程序文档中。
要使用Terraform自动化Unity Catalog设置,你必须具备以下条件:
您的Databricks帐户必须在优质计划或以上.
在AWS中,您必须能够创建Amazon S3桶、AWS IAM角色、AWS IAM策略和跨帐户信任关系。
你必须至少有一个Databricks工作空间,你想使用Unity目录。看到创建和管理工作空间.
要使用Databricks Terraform提供程序为Unity Catalog配置一个metastore,为metastore配置存储,任何外部存储,以及所有相关的访问凭证,您必须具备以下条件:
AWS帐户。
“AWS上的数据库”帐户。
Databricks帐户中的帐户级别的管理员用户。
Terraform命令行。看到下载起程拓殖在Terraform网站上。
以下七个数据库环境变量:
DATABRICKS_USERNAME,设置为Databricks帐户级admin用户名。
DATABRICKS_USERNAME
DATABRICKS_PASSWORD,设置为Databricks帐户级admin用户的密码值。
DATABRICKS_PASSWORD
DATABRICKS_ACCOUNT_ID,设置为“Databricks”帐号的ID。你可以在你的Databricks帐户控制台.
DATABRICKS_ACCOUNT_ID
TF_VAR_databricks_account_id,也设置为您的Databricks帐户ID的值。
TF_VAR_databricks_account_id
AWS_ACCESS_KEY_ID,设置为AWS用户的访问密钥ID的值。看到编程访问在AWS通用参考中。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY,设置为AWS用户的秘密访问密钥的值。看到编程访问在AWS通用参考中。
AWS_SECRET_ACCESS_KEY
AWS_REGION,设置为您的Databricks帐户的AWS区域代码的值。看到区域端点在AWS通用参考中。
AWS_REGION
请注意
作为安全最佳实践,当使用自动化工具、系统、脚本和应用程序进行身份验证时,Databricks建议您使用属于的访问令牌服务主体而不是工作区用户。要为服务主体创建访问令牌,请参见管理服务主体的访问令牌.
要设置这些环境变量,请参阅操作系统的文档。
要使用Databricks Terraform提供程序来配置所有其他Unity Catalog基础架构组件,您必须具备以下条件:
一个Databricks工作区。
在你的本地开发机器上,你必须有:
下列其中一项:
Databricks命令行界面(Databricks CLI),配置您的Databricks工作空间实例URL例如,https://dbc-1234567890123456.cloud.www.neidfyre.com,以及你的数据库个人访问令牌,通过跑步砖配置——令牌.看到设置CLI而且设置身份验证.
https://dbc-1234567890123456.cloud.www.neidfyre.com
砖配置——令牌
下面两个数据库环境变量:
DATABRICKS_HOST,设置为“数据库”的值工作空间实例URL例如,https://dbc-1234567890123456.cloud.www.neidfyre.com
DATABRICKS_HOST
DATABRICKS_TOKEN,设置为“数据库”的值个人访问令牌.另请参阅管理个人访问令牌.
DATABRICKS_TOKEN
本节将展示如何配置Terraform身份验证来部署端到端Unity Catalog基础设施。另请参阅提供初始化.
要配置Terraform身份验证以部署端到端Unity Catalog基础设施,请创建一个名为auth.tf.
auth.tf
您运行的代码取决于您的身份验证方法。
要使用Databricks CLI连接配置文件进行工作区身份验证,请使用以下代码:
变量“databricks_connection_profile”{}起程拓殖{required_providers{砖={源=“砖/砖”}aws={源=“hashicorp / aws”}}}提供者“aws”{}#使用Databricks CLI认证。提供者“砖”{配置文件=var.databricks_connection_profile}#生成一个随机字符串作为AWS资源的前缀,以确保唯一性。资源“random_string”“命名”{特殊的=假上=假长度=6}当地人{前缀=“演示{random_string.naming.result}"标签={}}
要使用环境变量进行工作区身份验证,请使用以下代码:
起程拓殖{required_providers{砖={源=“砖/砖”}aws={源=“hashicorp / aws”}}}提供者“aws”{}使用环境变量进行身份验证。提供者“砖”{}#生成一个随机字符串作为AWS资源的前缀,以确保唯一性。资源“random_string”“命名”{特殊的=假上=假长度=6}当地人{前缀=“演示{random_string.naming.result}"标签={}}
要使用Databricks CLI连接配置文件进行工作区身份验证,还需要创建一个名为auth.auto.tfvars并根据需要替换Databricks CLI连接配置文件名称。这使您能够重用auth.tf中不改变此值auth.tf文件本身。
auth.auto.tfvars
databricks_connection_profile=“默认”
本节介绍如何配置metastore的根存储部署。这个存储由一个Amazon S3桶和一个IAM角色组成,IAM角色赋予Unity Catalog访问和管理桶中的数据的权限。另请参阅aws_s3_bucket,aws_s3_bucket_public_access_block,aws_iam_policy_document,aws_iam_policy,aws_iam_role.
要配置metastore存储部署,请创建一个名为metastore-storage.tf使用以下配置代码:
metastore-storage.tf
变量“metastore_storage_label”{}变量“databricks_account_id”{}资源“aws_s3_bucket”“metastore”{桶=" ${local.prefix}- ${var.metastore_storage_label}"acl=“私人”版本控制{启用=假}force_destroy=真正的标签=合并(当地的.标签,{的名字=" ${local.prefix}- ${var.metastore_storage_label}"})}资源“aws_s3_bucket_public_access_block”“metastore”{桶=aws_s3_bucket.metastore.idblock_public_acls=真正的block_public_policy=真正的ignore_public_acls=真正的restrict_public_buckets=真正的depends_on=[aws_s3_bucket.metastore]}数据“aws_iam_policy_document”“passrole_for_unity_catalog”{声明{效果=“允许”行动=[“sts: AssumeRole”]校长{标识符=[“攻击:aws:我::414351767826:角色/ unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL”]类型=“AWS”}条件{测验=“StringEquals”变量=“sts: ExternalId”值=[var.databricks_account_id]}}}资源“aws_iam_policy”“unity_metastore”{政策=jsonencode({版本=“2012-10-17”Id=" ${local.prefix}-databricks-unity-metastore”声明=[{“行动”:[“s3: GetObject”,“s3: GetObjectVersion”,“s3: propertynames”,“s3: PutObjectAcl”,“s3: DeleteObject”,“s3: ListBucket”,“s3: GetBucketLocation”],“资源”:[aws_s3_bucket.metastore.在攻击," ${aws_s3_bucket.metastore.arn}/ *”],“效应”:“允许”}]})标签=合并(当地的.标签,{的名字=" ${local.prefix}IAM policy"})}//要求,在情况下https://文档.砖.com/数据/砖-数据集.超文本标记语言是需要.资源“aws_iam_policy”“sample_data”{政策=jsonencode({版本=“2012-10-17”Id=" ${local.prefix}-databricks-sample-data”声明=[{“行动”:[“s3: GetObject”,“s3: GetObjectVersion”,“s3: ListBucket”,“s3: GetBucketLocation”],“资源”:[“攻击:aws: s3::: databricks-datasets-oregon / *”,“攻击:aws: s3::: databricks-datasets-oregon”],“效应”:“允许”}]})标签=合并(当地的.标签,{的名字=" ${local.prefix}IAM policy"})}资源“aws_iam_role”“metastore_data_access”{的名字=" ${local.prefix}-uc-access”assume_role_policy=数据.aws_iam_policy_document.passrole_for_unity_catalog.jsonmanaged_policy_arns=[aws_iam_policy.unity_metastore.在攻击,aws_iam_policy.sample_data.在攻击]标签=合并(当地的.标签,{的名字=" ${local.prefix}-unit -catalog IAM role"})}
还要创建一个名为metastore-storage.auto.tfvars使用下面的配置代码,并根据需要替换metastore存储标签。这使您能够重用metastore-storage.tf中不改变此值metastore-storage.tf文件本身。
metastore-storage.auto.tfvars
metastore_storage_label=“metastore”
本节展示如何配置将metastore部署到帐户中。另请参阅databricks_metastore,databricks_metastore_data_access,databricks_metastore_assignment.
要配置metastore部署,请创建一个名为metastore.tf使用以下配置代码:
metastore.tf
变量“metastore_name”{}变量“metastore_label”{}变量“default_metastore_workspace_id”{}变量“default_metastore_default_catalog_name”{}资源“databricks_metastore”“metastore”{的名字=var.metastore_namestorage_root=“s3: / /美元{aws_s3_bucket.metastore.id}美元/{var.metastore_label}"force_destroy=真正的}资源“databricks_metastore_data_access”“metastore_data_access”{depends_on=[databricks_metastore.metastore]metastore_id=databricks_metastore.metastore.id的名字=aws_iam_role.metastore_data_access.的名字aws_iam_role{role_arn=aws_iam_role.metastore_data_access.在攻击}is_default=真正的}资源“databricks_metastore_assignment”“default_metastore”{depends_on=[databricks_metastore_data_access.metastore_data_access]workspace_id=var.default_metastore_workspace_idmetastore_id=databricks_metastore.metastore.iddefault_catalog_name=var.default_metastore_default_catalog_name}
还要创建一个名为metastore.auto.tfvars使用以下配置代码,并根据需要替换值。这使您能够重用metastore.tf中的这些值metastore.tf文件本身。
metastore.auto.tfvars
metastore_name=“my_metastore”metastore_label=“metastore”default_metastore_workspace_id=“< workspace-id >”default_metastore_default_catalog_name=“my_catalog”
本节展示如何配置将目录部署到现有的metastore中。另请参阅databricks_catalog.
要配置编目部署,请创建一个名为catalog.tf使用以下配置代码:
catalog.tf
变量“catalog_name”{}资源“databricks_catalog”“目录”{depends_on=[databricks_metastore_assignment.default_metastore]metastore_id=databricks_metastore.metastore.id的名字=var.catalog_name}
还要创建一个名为catalog.auto.tfvars使用以下配置代码,并根据需要替换目录名称。这使您能够重用catalog.tf中不改变此值catalog.tf文件本身。
catalog.auto.tfvars
catalog_name=“my_catalog”
如果你有一个现有的亚稳态,你想使用,替换databricks_metastore.metastore.id现有亚转移的程序ID。要获得这个ID,可以调用得到/ api / 2.1 / unity-catalog / metastores在Unity Catalog API 2.1或者运行Databricks单位目录亚metastores列表命令Unity Catalog命令行.
databricks_metastore.metastore.id
得到/ api / 2.1 / unity-catalog / metastores
本节展示如何将上述目录的访问授权部署配置到现有组。另请参阅databricks_grants.要使用此配置,您必须知道要授予访问权的现有组的名称。
要配置目录访问权限部署,请创建一个名为catalog-grants.tf使用以下配置代码:
catalog-grants.tf
变量“catalog_admins_display_name”{}变量“catalog_privileges”{}数据“databricks_group”“catalog_admins”{display_name=var.catalog_admins_display_name}资源“databricks_grants”“目录”{depends_on=[databricks_catalog.目录]目录=databricks_catalog.目录.的名字格兰特{主要=数据.databricks_group.catalog_admins.display_name特权=var.catalog_privileges}}
还要创建一个名为catalog-grants.auto.tfvars使用以下配置代码。更改指定的组名并根据需要授予权限。有关可用补助金的完整列表,请参见databricks_grants.这使您能够重用catalog-grants.tf中的这些值catalog-grants.tf文件本身。
catalog-grants.auto.tfvars
catalog_admins_display_name=“管理员”catalog_privileges=[“特权”]
如果您有一个想要使用的现有目录,请删除以该目录开始的行depends_on,并替换databricks_catalog.catalog.name使用现有目录的名称。
depends_on
databricks_catalog.catalog.name
若要使用Databricks Terraform提供程序创建新组,而不是使用现有组,请参见创建用户和组.
本节将展示如何配置将模式部署到前面的编目中。另请参阅databricks_schema.
要配置模式部署,请创建一个名为schema.tf使用以下配置代码:
schema.tf
变量“schema_name”{}资源“databricks_schema”“模式”{depends_on=[databricks_catalog.目录]catalog_name=databricks_catalog.目录.的名字的名字=var.schema_name}
还要创建一个名为schema.auto.tfvars使用下面的配置代码,并根据需要替换模式名称。这使您能够重用schema.tf中不改变此值schema.tf文件本身。
schema.auto.tfvars
schema_name=“my_schema”
如果您有一个想要使用的现有目录,请删除以该目录开始的行depends_on,并替换databricks_catalog.catalog.name使用现有模式的编目名称。
本节将展示如何将上述模式的访问授权部署配置到现有组。另请参阅databricks_grants.要使用此配置,您必须知道要授予访问权的现有组的名称。
要配置模式访问授权部署,请创建一个名为schema-grants.tf使用以下配置代码:
schema-grants.tf
变量“schema_admins_display_name”{}变量“schema_privileges”{}数据“databricks_group”“schema_admins”{display_name=var.schema_admins_display_name}资源“databricks_grants”“模式”{depends_on=[databricks_schema.模式]模式=" ${databricks_catalog.catalog.name}.${databricks_schema.schema.name}"格兰特{主要=数据.databricks_group.schema_admins.display_name特权=var.schema_privileges}}
还要创建一个名为schema-grants.auto.tfvars使用以下配置代码。更改指定的组名并根据需要授予权限。有关可用补助金的完整列表,请参见databricks_grants.这使您能够重用schema-grants.tf中的这些值schema-grants.tf文件本身。
schema-grants.auto.tfvars
schema_admins_display_name=“管理员”schema_privileges=[“特权”]
如果您有一个想要使用的现有模式,请删除以该模式开始的行depends_on、替换$ {databricks_catalog.catalog.name}使用现有模式的编目名称,并替换$ {databricks_schema.schema.name}使用现有模式的名称。
$ {databricks_catalog.catalog.name}
$ {databricks_schema.schema.name}
介绍部署外部存储的配置步骤。这个外部存储由一个Amazon S3桶和一个IAM角色组成,该角色允许Unity Catalog权限访问和管理桶中的数据。另请参阅aws_s3_bucket,aws_s3_bucket_public_access_block,aws_iam_policy,aws_iam_role,databricks_storage_credential,databricks_external_location.
在配置外部存储部署时,需要创建一个名为external-storage.tf使用以下配置代码。
external-storage.tf
变量“external_storage_label”{}变量“external_storage_location_label”{}资源“aws_s3_bucket”“外部”{桶=" ${local.prefix}- ${var.external_storage_label}"acl=“私人”版本控制{启用=假}force_destroy=真正的标签=合并(当地的.标签,{的名字=" ${local.prefix}- ${var.external_storage_label}"})}资源“aws_s3_bucket_public_access_block”“外部”{桶=aws_s3_bucket.外部.idignore_public_acls=真正的depends_on=[aws_s3_bucket.外部]}资源“aws_iam_policy”“external_data_access”{政策=jsonencode({版本=“2012-10-17”Id=" ${aws_s3_bucket.external.id}访问“声明=[{“行动”:[“s3: GetObject”,“s3: GetObjectVersion”,“s3: propertynames”,“s3: PutObjectAcl”,“s3: DeleteObject”,“s3: ListBucket”,“s3: GetBucketLocation”],“资源”:[aws_s3_bucket.外部.在攻击," ${aws_s3_bucket.external.arn}/ *”],“效应”:“允许”}]})标签=合并(当地的.标签,{的名字=" ${local.prefix}-unity-catalog美元{var.external_storage_label}访问IAM策略"})}资源“aws_iam_role”“external_data_access”{的名字=" ${local.prefix}外部访问”assume_role_policy=数据.aws_iam_policy_document.passrole_for_unity_catalog.jsonmanaged_policy_arns=[aws_iam_policy.external_data_access.在攻击]标签=合并(当地的.标签,{的名字=" ${local.prefix}-unity-catalog美元{var.external_storage_label}access IAM role"})}资源“databricks_storage_credential”“外部”{的名字=aws_iam_role.external_data_access.的名字aws_iam_role{role_arn=aws_iam_role.external_data_access.在攻击}}资源“databricks_external_location”“一些”{的名字=" ${var.external_storage_label}"url=“s3: / /美元{local.prefix}- ${var.external_storage_label}美元/{var.external_storage_location_label}"credential_name=databricks_storage_credential.外部.id}
还要创建一个名为external-storage.auto.tfvars使用以下配置代码,并根据需要替换值。这使您能够重用external-storage.tf中的这些值external-storage.tf文件本身。
external-storage.auto.tfvars
external_storage_label=“外部”external_storage_location_label=“一些”
本节介绍如何配置将上述外部存储的访问授权部署到现有组。另请参阅databricks_grants.要使用此配置,您必须知道要授予访问权的现有组的名称。
要配置外部访问授权部署,请创建一个名为external-storage-grants.tf使用以下配置代码。更改指定的组名,添加其他组,并根据需要指定额外的授予权限。有关可用补助金的完整列表,请参见databricks_grants.
external-storage-grants.tf
变量“external_storage_admins_display_name”{}变量“external_storage_privileges”{}数据“databricks_group”“external_storage_admins”{display_name=var.external_storage_admins_display_name}资源“databricks_grants”“external_storage_credential”{storage_credential=databricks_storage_credential.外部.id格兰特{主要=var.external_storage_admins_display_name特权=var.external_storage_privileges}}资源“databricks_grants”“external_storage”{external_location=databricks_external_location.一些.id格兰特{主要=var.external_storage_admins_display_name特权=var.external_storage_privileges}}
还要创建一个名为external-storage-grants.auto.tfvars使用以下配置代码。更改指定的组名并根据需要授予权限。有关可用补助金的完整列表,请参见databricks_grants.这使您能够重用external-storage-grants.tf中的这些值external-storage-grants.tf文件本身。
external-storage-grants.auto.tfvars
external_storage_admins_display_name=“管理员”external_storage_privileges=[“特权”]
如果您有想要使用的现有外部存储凭据,请替换databricks_storage_credential.external.id使用现有外部存储凭据的编程式ID。要获得这个ID,可以调用得到/ api / 2.1 / unity-catalog / storage-credentials在Unity Catalog API 2.1或者运行Databricks单元目录存储凭证列表命令Unity Catalog命令行.
databricks_storage_credential.external.id
得到/ api / 2.1 / unity-catalog / storage-credentials
如果已有需要使用的外部存储资源,请进行替换databricks_external_location.some.id使用现有外部存储资源的编程式ID。要获得这个ID,可以调用得到/ api / 2.1 / unity-catalog / external-locations在Unity Catalog API 2.1或者运行Databricks单元目录外部位置列表命令Unity Catalog命令行.
databricks_external_location.some.id
得到/ api / 2.1 / unity-catalog / external-locations
不支持使用Databricks Terraform提供程序配置托管表。若要配置托管表,请参见创建表而且创建第一个表.
不支持使用Databricks Terraform提供程序配置外部表。要配置外部表,请参见创建表.
本节展示如何将现有托管表或外部表的访问授权部署配置到现有组。另请参阅databricks_grants.要使用此配置,您必须知道表的名称以及要授予访问权的现有组的名称。
要配置表访问授权部署,请创建一个名为table-grants.tf使用以下配置代码:
table-grants.tf
变量“table_admins_display_name”{}变量“table_catalog_name”{}变量“table_schema_name”{}变量“table_table_name”{}变量“table_privileges”{}数据“databricks_group”“table_admins”{display_name=var.table_admins_display_name}资源“databricks_grants”“表”{表格=" ${var.table_catalog_name}.${var.table_schema_name}.${var.table_table_name}"格兰特{主要=数据.databricks_group.table_admins.display_name特权=var.table_privileges}}
还要创建一个名为table-grants.auto.tfvars使用以下配置代码。更改指定的目录名、模式名、表名、组名,并根据需要授予特权。有关可用补助金的完整列表,请参见databricks_grants.这使您能够重用table-grants.tf中的这些值table-grants.tf文件本身。
table-grants.auto.tfvars
table_admins_display_name=“管理员”table_catalog_name=“my_catalog”table_schema_name=“my_schema”table_table_name=“my_table”table_privileges=[“特权”]
不支持使用Databricks Terraform提供程序配置托管表的视图。配置视图,请参见创建视图.
本节展示如何将托管表的现有视图的访问授权部署配置到现有组。另请参阅databricks_grants.要使用此配置,必须知道托管表的名称以及要授予访问权的现有组的名称。
要配置视图的访问授权部署,请创建一个名为view-grants.tf使用以下配置代码:
view-grants.tf
变量“view_admins_display_name”{}变量“view_catalog_name”{}变量“view_schema_name”{}变量“view_table_name”{}变量“view_privileges”{}数据“databricks_group”“view_admins”{display_name=var.view_admins_display_name}资源“databricks_grants”“managed_table_view”{表格=" ${var.view_catalog_name}.${var.view_schema_name}.${var.view_table_name}"格兰特{主要=数据.databricks_group.view_admins.display_name特权=var.view_privileges}}
还要创建一个名为view-grants.auto.tfvars使用以下配置代码。更改指定的目录名、模式名、表名、组名,并根据需要授予特权。有关可用补助金的完整列表,请参见databricks_grants.这使您能够重用view-grants.tf中的这些值view-grants.tf文件本身。
view-grants.auto.tfvars
view_admins_display_name=“管理员”view_catalog_name=“my_catalog”view_schema_name=“my_schema”view_table_name=“my_table”view_privileges=[“特权”]
本节将展示如何配置使用Unity Catalog的集群部署。
要配置集群,需要创建一个名为cluster.tf使用以下配置代码。此配置用于部署计算资源最少的集群和最新的LTS (Databricks Runtime Long Term Support)版本。另请参阅databricks_cluster.
cluster.tf
变量“cluster_name”{}变量“cluster_autotermination_minutes”{}变量“cluster_num_workers”{}变量“cluster_data_security_mode”{}#创建数量最小的集群#允许的资源。数据“databricks_node_type”“最小”{local_disk=真正的}使用最新的Databricks Runtime#长期支持(LTS)版本。数据“databricks_spark_version”“latest_lts”{long_term_support=真正的}资源“databricks_cluster”“这”{cluster_name=var.cluster_namenode_type_id=数据.databricks_node_type.最小的.idspark_version=数据.databricks_spark_version.latest_lts.idautotermination_minutes=var.cluster_autotermination_minutesnum_workers=var.cluster_num_workersdata_security_mode=var.cluster_data_security_mode}输出“cluster_url”{价值=databricks_cluster.这.url}
还要创建一个名为cluster.auto.tfvars使用以下配置变量,指定集群的名称,由于不活动而自动终止前的分钟数,工人的数量,以及Unity Catalog的数据安全模式。这使您能够重用cluster.tf中的这些值cluster.tf文件本身。
cluster.auto.tfvars
cluster_name=“我的集群”cluster_autotermination_minutes=60cluster_num_workers=1cluster_data_security_mode=“SINGLE_USER”
要在不部署Terraform配置的情况下验证其语法,请运行起程拓殖验证命令。
起程拓殖验证
要显示Terraform部署配置时将采取的操作,请运行起程拓殖计划命令。该命令并不实际部署配置。
起程拓殖计划
执行命令部署配置起程拓殖部署命令。
起程拓殖部署
需要删除已部署的资源,使用起程拓殖摧毁命令。
起程拓殖摧毁