数据博瑞克斯的Terraform提供者

以下是Databricks在AWS上的Terraform提供者的翻译[截至2022年3月21日]。

這本書是抄譯,不保證內容的準確性。請參考原文以獲得確切的內容。
实验阶段
Databricks Terraform提供程序目前尚未正式获得Databricks或AWS的官方支持。该提供程序由Databricks的现场工程团队进行维护,并且以现状(as-is)的状态提供。没有服务级别协议(SLA),AWS不提供任何保证。如果发现提供程序存在问题,可以通过提报GitHub Issue来进行审核,项目维护者将在时间允许的情况下进行查看。

开始使用

请按以下步骤完成安装和配置Terraform所需的命令行工具。这些工具包括Databricks CLI、Terraform CLI和AWS CLI。在设置完这些工具后,接下来将完成创建用于管理您的Databricks工作区和相关AWS云基础架构的Terraform基础设置的步骤。

请注意,在这个步骤中,需要您作为Databricks管理员能够访问Databricks工作区,能够访问相应的AWS账户,并在该AWS账户上具有适当的权限来执行Terraform。有关详细信息,请参考以下内容:

管理用户和组
AWS网站上的更改IAM用户权限。

    1. 为了使Terraform能够在Databricks帐户中调用Databricks API,需要创建Databricks的个人访问令牌。有关详细信息,请参阅“Authentication using Databricks personal access tokens”。

安装Databricks命令行接口(CLI),并使用databricks configure –token –profile 命令为该个人访问令牌创建连接配置文件,以配置Databricks CLI。请将替换为连接配置文件的唯一名称。有关详细信息,请参阅Databricks CLI的“Set up authentication”和“Connection profiles”部分。

Bash
databricks configure –token –profile

提示
每个个人访问令牌都与Databricks帐户中的特定用户相关联。针对每个希望供Terraform使用的Databricks个人访问令牌,请执行databricks configure –token –profile 命令(将替换为唯一名称)。

安装Terraform CLI。有关详细信息,请参阅Terraform网站的Download Terraform。

创建由AWS秘密密钥和AWS秘密访问密钥组成的AWS访问密钥。有关详细信息,请参阅AWS网站的Managing access keys (console)。

安装AWS CLI,并使用aws configure –profile 命令配置AWS CLI以使用AWS访问密钥。请将替换为您希望为此连接配置文件使用的唯一名称。有关详细信息,请参阅AWS网站的Installing, updating, and uninstalling the AWS CLI version 2和Quick configuration with aws configure。

Bash
aws configure –profile

提示
每个AWS访问密钥都与AWS帐户中特定的IAM用户相关联。对于每个希望Terraform使用的AWS访问密钥,请执行aws configure –profile 命令(将替换为唯一名称)。

在终端中创建一个空目录并进入其中。(每个不同的Terraform配置文件集需要自己的目录)例如,mkdir terraform_demo && cd terraform_demo。

Bash
mkdir terraform_demo && cd terraform_demo

在空目录中创建名为main.tf的文件。将以下内容添加到该文件中,并保存文件。

variable “aws_connection_profile” {
description = “The name of the AWS connection profile to use.”
type = string
default = “”
}

variable “aws_region” {
description = “The code of the AWS Region to use.”
type = string
default = “”
}

variable “databricks_connection_profile” {
description = “The name of the Databricks connection profile to use.”
type = string
default = “”
}

terraform {
required_providers {
aws = {
source = “hashicorp/aws”
version = “~> 3.27”
}

databricks = {
source = “databrickslabs/databricks”
}
}
}

provider “aws” {
profile = var.aws_connection_profile
region = var.aws_region
}

provider “databricks” {
profile = var.databricks_connection_profile
}

替换main.tf文件中的以下值并保存。

将替换为步骤5中创建的AWS连接配置文件名。

将替换为您希望在Terraform中使用的AWS区域的代码(例如us-west-2)。

将替换为步骤2中创建的Databricks连接配置文件名。

通过执行terraform init命令对包含main.tf文件的工作目录进行初始化。有关详细信息,请参阅Terraform网站的Command: init。

Bash
terraform init

Terraform将下载aws和databricks提供程序,并将它们安装在当前工作目录的名为.terraform的隐藏子目录中。terraform init命令会显示已安装的提供程序的版本。此外,Terraform还会创建一个名为terraform.tfstate的文件,用于将数据写入其中。要创建资源,请按照示例配置继续进行下一步,或者执行两者以指定要创建的资源,然后再次运行terraform apply。Terraform会将管理的资源的ID和属性存储在此terraform.tfstate文件中,以便稍后可以更新或删除这些资源。

通过执行terraform apply命令将更改应用到所需的配置状态。有关详细信息,请参阅Terraform网站的Command: apply。

Bash
terraform apply

由于main.tf文件尚未指定任何资源,因此输出将显示Apply complete! Resources: 0 added, 0 changed, 0 destroyed。此外,Terraform会将数据写入名为terraform.tfstate的文件中。要创建资源,请继续进行下一步的示例配置,或使用两者来指定要创建的资源,然后重新运行terraform apply。Terraform将为您的项目存储在terraform.tfstate文件中的资源ID和属性,以便以后可以更新或删除这些资源。

样本设置

请按照以下步骤完成创建一个样例Terraform配置,用于在现有的Databricks工作空间中创建笔记本和用于运行该笔记本的作业。

请注意,以下的Terraform设置示例仅与现有的Databricks工作区交互。因此,在执行此示例时,无需设置AWS CLI,并且您的main.tf文件中无需包含变量aws_connection_profile、aws_region和aws提供程序。
    1. 在创建main.tf文件后,将以下代码添加到main.tf文件的末尾。

“`
variable “resource_prefix” {
description = “The prefix to use when naming the notebook and job”
type = string
default = “terraform-demo”
}

variable “email_notifier” {
description = “The email address to send job status to”
type = list(string)
default = [“”]
}

// 获取调用Databricks API的Databricks用户的信息(与”databricks_connection_profile”关联的用户)。
data “databricks_current_user” “me” {}

// 创建一个简单的示例笔记本。将它存储在Databricks当前用户的文件夹的子文件夹中。该笔记本包含以下基本的Python Spark代码。
resource “databricks_notebook” “this” {
path = “${data.databricks_current_user.me.home}/Terraform/${var.resource_prefix}-notebook.ipynb”
language = “PYTHON”
content_base64 = base64encode(<<-EOT
# created from ${abspath(path.module)}
display(spark.range(10))
EOT
)
}

// 创建一个运行示例笔记本的作业。该作业将创建一个用于运行的群集。该群集将使用可用的最小节点类型,并运行最新版本的Spark。

// 获取可用于群集的最小节点类型。仅从具有本地存储的可用节点类型中选择。
data “databricks_node_type” “smallest” {
local_disk = true
}

// 获取用于群集的最新Spark版本。
data “databricks_spark_version” “latest” {}

// 创建作业,通过邮件通知作业的成功或失败。
resource “databricks_job” “this” {
name = “${var.resource_prefix}-job-${data.databricks_current_user.me.alphanumeric}”
new_cluster {
num_workers = 1
spark_version = data.databricks_spark_version.latest.id
node_type_id = data.databricks_node_type.smallest.id
}
notebook_task {
notebook_path = databricks_notebook.this.path
}
email_notifications {
on_success = var.email_notifier
on_failure = var.email_notifier
}
}

// 打印笔记本的URL。
output “notebook_url” {
value = databricks_notebook.this.url
}

// 打印作业的URL。
output “job_url” {
value = databricks_job.this.url
}

将替换为您的邮箱地址,并保存文件。

运行terraform apply命令。

确保笔记本和作业已创建。在terraform apply命令的输出中,将显示notebook_url和job_url的URL,访问这些URL。

执行作业。在Jobs页面上点击Run Now。作业完成后,检查您的邮箱。

完成此示例后,运行terraform destroy命令以从Databricks工作区中删除笔记本和作业。

确保笔记本和作业已删除。刷新笔记本和Jobs页面,确认资源未找到的消息是否显示。

下一步 (xià yī bù)

    1. 创建与工作区相关的基础设施。

 

    管理Databricks工作区资源。

故障排除

关于Terraform的固有支持,请参考HashiCorp Discuss网站上的最新Terraform主题。关于Databricks Terraform提供程序的特定问题,请查看databrickslabs/terraform-provider-databricks的GitHub存储库的问题。

追加资源

    • Tutorial: Create a workspace with the Databricks Terraform provider

 

    • TerraformレジストリウェブサイトのDatabricks Provider Documentation

TerraformウェブサイトのTerraform Documentation

Databricks免费试用

Databricks 免费试用

bannerAds