教程:使用Databricks Terraform提供程序創建工作區

創建一個Databricks工作區需要許多步驟,特別是當您使用Databricks和AWS帳戶控製台時。在本教程中,您將使用磚起程拓殖的提供者AWS提供者以編程方式創建一個Databricks工作空間以及所需的AWS資源。這些提供者是基於HashiCorp起程拓殖,一個流行的開源軟件基礎設施代碼用於管理雲資源的操作生命周期的工具。

需求

  • AWS帳戶上的現有或新的數據ricks。創建一個新的Databricks平Beplay体育安卓版本台免費試用入賬,請按照說明辦理注冊免費試用然後建立你的Databricks帳戶並創建一個工作空間開始使用AWS上的Databricks。

    請注意

    對於一個新的Databricks帳戶,您必須設置一個初始工作區,上麵的說明將指導您完成該工作。本教程使您能夠使用Databricks Terraform提供程序創建初始工作空間之外的額外工作空間。

  • 您的Databricks帳戶用戶名和密碼。

  • 您的Databricks帳戶ID。要獲得這個值,請按照說明操作訪問帳戶控製台(E2),單擊側邊欄中的單人圖標,然後獲得帳戶ID價值。

  • 對於與您的Databricks帳戶相關聯的AWS帳戶,您的AWS身份和訪問管理(IAM)用戶在AWS帳戶中的權限可以創建:

    • IAM的跨帳戶策略和角色。

    • 亞馬遜VPC中的VPC及其關聯資源。

    • 一個Amazon S3桶。

    看到修改IAM用戶權限在AWS網站上。

  • 對於AWS帳戶中的IAM用戶,一個AWS訪問密鑰,由一個AWS秘密密鑰和一個AWS秘密訪問密鑰組成。看到管理訪問密鑰(控製台)在AWS網站上。

  • 一台安裝了Terraform CLI和Git的開發機器。看到下載起程拓殖在Terraform網站上安裝Git在GitHub網站上。

  • 一個現有的或新的GitHub帳戶。要創建一個,看注冊一個新的GitHub賬戶在GitHub網站上。

步驟1:創建一個GitHub庫

在此步驟中,您將在GitHub中創建一個新的存儲庫來存儲您的terrform文件。最好的做法是在GitHub這樣的係統中存儲、跟蹤和控製對IaC文件的更改。

  1. 登錄到你的GitHub賬戶。

  2. 創建一個新的存儲庫在你的GitHub帳戶。存儲庫名稱databricks-aws-terraform

  3. 從開發機器的終端一次運行一個命令,運行以下命令。在git遠程命令,取代< your-GitHub-username >使用你的GitHub用戶名。這些命令創建一個空目錄,用starter內容填充它,將它轉換為一個本地存儲庫,然後將這個本地存儲庫上傳到你的GitHub帳戶中的新存儲庫中。

    mkdir databricks-aws-terraformcddatabricks-aws-terraform回聲“# Databricks Terraform提供商AWS樣本”> > README。md git init git add README。Md git commit -m“第一次提交”git branch -M main git remote add origin git@github.com:/databricks-aws-terraform.git git push -u origin main

    提示

    如果您在運行後得到一個“permission denied”錯誤git命令,看到使用SSH連接到GitHub在GitHub網站上。

  4. 在你的根databricks-aws-terraform目錄下,使用您最喜歡的代碼編輯器創建名為.gitignore配合以下內容。該文件指示GitHub排除存儲庫中指定的文件。這是因為您將在本教程的後麵下載這些文件。

    *.起程拓殖* .tfvars

步驟2:聲明和初始化terrform變量

在此步驟中,您將生成Terraform創建所需的Databricks和AWS資源所需的所有代碼。

在根目錄中創建以下7個文件databricks-aws-terraform目錄中。這些文件在您的AWS帳戶中以代碼的形式定義了您的Databricks工作區及其相關資源。Terraform網站上的相關數據ricks和AWS文檔的鏈接作為注釋包含在代碼中,以供將來參考,也包含在附帶的文本中。

重要的

您必須向Terraform提供您的AWS帳戶憑證。可以通過環境變量或共享配置和憑證文件等源來指定它們。看到身份驗證和配置在Terraform網站上。

警告

雖然Terraform支持在Terraform文件中硬編碼AWS帳戶憑證,但不建議使用這種方法,因為如果將此類文件提交給公共版本控製係統,可能會有秘密泄露的風險。

  • vars.tf:這個文件定義了terrform輸入變量在後麵的文件中使用:

    • 您的Databricks帳戶用戶名、密碼和帳戶ID。

    • 亞馬遜虛擬公有雲(Amazon virtual Public cloud)中依賴VPC的CIDR塊。看到VPC基礎知識在AWS網站上。

    • 依賴AWS資源所在的AWS區域。根據需要更改該區域。看到區域和可用分區而且AWS區域服務在AWS網站上。

    該文件還包括一個terrform本地值以及將隨機生成的標識符分配給Terraform在這些文件中創建的資源的相關邏輯。

    有關Terraform文檔,請參見random_string(資源)在Terraform網站上。

    變量“databricks_account_username”{}變量“databricks_account_password”{}變量“databricks_account_id”{}變量“標簽”{默認={}}變量“cidr_block”{默認=“10.4.0.0/16”}變量“地區”{默認=“一來”}/ /見https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string資源“random_string”“命名”{特殊= false上= false長度= 6}當地人{前綴= " - $ {random_string.naming演示。結果}"}
  • init.tf:這個文件初始化terrform所需的磚提供者AWS提供者.此文件還建立您的Databricks帳戶憑證,並指示terrform使用E2版本在AWS平台上的Databricks。Beplay体育安卓版本

    有關Terraform文檔,請參見身份驗證在Terraform網站上。

    terraform {required_providers {databricks = {source = "databricks/databricks" version = "1.0.0"} aws = {source = "hashicorp/aws" version = "3.49.0"}} provider "aws" {region = var.region} //初始化provider為"MWS"模式,提供新的工作空間。// alias = "mws"指示數據ricks連接到https://accounts.cloud.www.eheci.com,創建//一個使用E2版本的數據ricks在AWS平台上的工作空間。Beplay体育安卓版本//參見https://registry.terraform.io/providers/databricks/databricks/latest/docs#authentication provider "databricks" {alias = "mws" host = "https://accounts.cloud.www.eheci.com" username = var.databricks_account_username password = var.databricks_account_password}
  • cross-account-role.tf:該文件指示Terraform在您的AWS帳戶中創建所需的IAM跨帳戶角色和相關策略。此角色使數據ricks能夠在您的AWS帳戶內采取必要的操作。看到創建跨帳戶IAM角色

    關於Terraform的相關文檔,請參見Terraform網站上的以下內容:

    //在您的AWS帳戶中創建所需的AWS STS假設角色策略。//參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/data-sources/aws_assume_role_policy data "databricks_aws_assume_role_policy" "this" {external_id = var.databricks_account_id} //在您的AWS帳戶中創建所需的IAM角色。//請參見https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role resource "aws_iam_role" "cross_account_role" {name = "${local. role . "Prefix}-crossaccount" assume_role_policy = data.databricks_aws_assume_role_policy.this. databricks_aws_assume_role_policy.this. "json tags = var.tags} //在你的AWS賬戶中創建所需的AWS跨賬戶策略。//請參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/data-sources/aws_crossaccount_policy data "databricks_aws_crossaccount_policy" "this"{} //在您的AWS帳戶中創建所需的IAM角色inline policy。//請參見https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy resource "aws_iam_role_policy" "this" {name = "${local。Prefix}-policy" role = aws_iam_role.cross_account_role. "Id policy = data.databricks_aws_crossaccount_policy.this。//正確配置跨帳戶角色,以便在您的AWS帳戶中創建新的工作空間。//請參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_credentials資源"databricks_mws_credentials" "this" {provider = databricks. {MWS account_id = var.databricks_account_id role_arn = aws_iam_role.cross_account_role。Arn credentials_name = "${local。前綴}-creds" depends = [aws_iam_role_policy.]這]}
  • vpc.tf:該文件用於指導terrform在您的AWS帳戶中創建所需的VPC。看到Customer-managed VPC

    關於Terraform的相關文檔,請參見Terraform網站上的以下內容:

    //允許訪問AWS Region內的可用分區列表,該列表以變量的形式配置。特遣部隊和init.tf。//參見https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones data "aws_availability_zones" "available"{} //在您的AWS帳戶中創建所需的VPC資源。//請參見https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest module "vpc" {source = "terraform-aws-modules/vpc/aws" version = "3.2.0" name = local。前綴cidr = var.cidr_block azs = data.aws_availability_zones.available.names tags = var.tags enable_dns_hostname = true enable_nat_gateway = true single_nat_gateway = true create_igw = true public_subnet = [cidrsubnet(var. cfg)]Cidr_block, 3,0)] private_subnet = [cidrsubnet(var. cfg, 3,0)]Cidr_block, 3,1), cidrsubnet(var。Cidr_block, 3,2)] manage_default_security_group = true default_security_group_name = "${local. cfg, 2) "prefix}-sg" default_security_group_egress = [{cidr_blocks = "0.0.0.0/0"}] default_security_group_ingress = [{description = "Allow all internal TCP and UDP" self = true}]} //在AWS賬戶內創建需要的VPC終端。//參見https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest/submodules/vpc-endpoints module "vpc_endpoints" {source = "terraform-aws-modules/vpc/aws//modules/vpc-endpoints" version = "3.2.0" vpc_id = module.vpc。vpc_id security_group_ids = [module.vpc.default_security_group_id] endpoints = {s3 = {service = "s3" service_type = "Gateway" route_table_ids = flatten([module.vpc.default_security_group_id])private_route_table_ids, module.vpc.public_route_table_ids])標簽= {Name = "${local. properties "Prefix}-s3-vpc-endpoint"}}, STS = {service = " STS " private_dns_enabled = true subnet_ids = module.vpc。private_subnets tags = {Name = "${local. properties "。Prefix}-sts-vpc-endpoint"}}, kineis -streams = {service = " kineis -streams" private_dns_enabled = true subnet_ids = module.vpc。private_subnets tags = {Name = "${local. properties "。prefix}- kineis - VPC -endpoint"}}} tags = var.tags} //正確配置AWS帳號下的Databricks的VPC和子網。 // See https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_networks resource "databricks_mws_networks" "this" { provider = databricks.mws account_id = var.databricks_account_id network_name = "${local.prefix}-network" security_group_ids = [module.vpc.default_security_group_id] subnet_ids = module.vpc.private_subnets vpc_id = module.vpc.vpc_id }
  • root-bucket.tf:該文件指示Terraform在您的AWS帳戶中創建所需的Amazon S3根桶。Databricks將諸如集群日誌、筆記本修訂和作業結果等工件存儲到S3桶中,這通常被稱為根鬥

    關於Terraform的相關文檔,請參見Terraform網站上的以下內容:

    //創建S3根桶//請參見https://registry.terraform.io/modules/terraform-aws-modules/s3-bucket/aws/latest resource "aws_s3_bucket" "root_storage_bucket" {bucket = "${local. local. "前綴}-rootbucket" acl = "私有"版本{啟用= false} force_destroy = true標簽=合並(var. xml)標簽,{Name = "${local。prefix}-rootbucket"})} //忽略S3根桶以及該桶中包含的所有對象的公共訪問控製列表。//請參見https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block resource "aws_s3_bucket_public_access_block" "root_storage_bucket" {bucket = aws_s3_bucket.root_storage_bucket. "Id ignore_public_acls = true depends = [aws_s3_bucket.]root_storage_bucket]} //為您的AWS帳戶內的S3根桶配置一個簡單的訪問策略,以便Databricks能夠訪問其中的數據。//請參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/data-sources/aws_bucket_policy data "databricks_aws_bucket_policy" "this" {bucket = aws_s3_bucket.root_storage_bucket. "bucket} //將訪問策略綁定到您AWS帳戶內的S3根桶。//請參見https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_policy resource "aws_s3_bucket_policy" "root_bucket_policy" {bucket = aws_s3_bucket.root_storage_bucket. "Id policy = data.databricks_aws_bucket_policy.this。Json依賴= [aws_s3_bucket_public_access_block.]root_storage_bucket]} //在您的AWS帳戶內為新的Databricks工作區配置S3根桶。//請參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_storage_configurations資源"databricks_mws_storage_configurations" "this" {provider = databricks. {MWS account_id = var.databricks_account_id bucket_name = aws_s3_bucket.root_storage_bucket。桶storage_configuration_name = "${local;前綴}存儲”}
  • workspace.tf:該文件指示Terraform在您的Databricks帳戶中創建工作區。該文件還包括terrform輸出值表示工作區的URL和Databricks個人訪問令牌為您的Databricks用戶在您的新工作區。

    關於Terraform的相關文檔,請參見Terraform網站上的以下內容:

    //設置Databricks工作區,在AWS平台上使用E2版本的Databricks。Beplay体育安卓版本//請參見https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_workspaces資源"databricks_mws_workspaces" "this" {provider = databricks. {MWS account_id = var.databricks_account_id aws_region = var.region workspace_name = local。前綴deployment_name = local。前綴credentials_id = databricks_mws_credentials.this。Credentials_id storage_configuration_id = databricks_mws_storage_configuration_id .thisstorage_configuration_id network_id = databricks_mws_networks.this.network_id} //獲取databricks_workspace的URL。輸出“databricks_host”{值= databricks_mws_workspace .this。工作空間_url } // Initialize the Databricks provider in "normal" (workspace) mode. // See https://registry.terraform.io/providers/databricks/databricks/latest/docs#authentication provider "databricks" { // In workspace mode, you don't have to give providers aliases. Doing it here, however, // makes it easier to reference, for example when creating a Databricks personal access token // later in this file. alias = "created_workspace" host = databricks_mws_workspaces.this.workspace_url } // Create a Databricks personal access token, to provision entities within the workspace. resource "databricks_token" "pat" { provider = databricks.created_workspace comment = "Terraform Provisioning" lifetime_seconds = 86400 } // Export the Databricks personal access token's value, for integration tests to run on. output "databricks_token" { value = databricks_token.pat.token_value sensitive = true }
  • tutorial.tfvars:該文件包含您的Databricks帳戶ID、用戶名和密碼。因為你寫了指令* .tfvars.gitignore文件,它有助於避免意外檢查這些敏感值到遠程GitHub存儲庫。在該文件中,替換以下值:

    • < your-Databricks-account-username >與您的Databricks帳戶用戶名。

    • < your-Databricks-account-password >與您的Databricks帳戶密碼。

    • < your-Databricks-account-ID >與您的Databricks帳戶ID。

    databricks_account_username = "" databricks_account_password = "" databricks_account_id = ""

步驟3:創建所需的Databricks和AWS資源

在此步驟中,您指示Terraform創建新工作空間所需的所有Databricks和AWS資源。

  1. 在上述目錄下依次執行以下命令。這些命令指示Terraform將所有必需的依賴項下載到您的開發機器上,檢查Terraform文件中的說明,確定需要添加或刪除哪些資源,最後創建所有指定的資源。

    應用var-file“tutorial.tfvars”
  2. 在幾分鍾內,您的Databricks工作區就準備好了。使用工作空間的URL(顯示在命令的輸出中)登錄到工作空間。請確保使用Databricks工作區管理員憑證登錄。

步驟4:將更改提交到GitHub存儲庫

在這一步中,你將你的IaC源添加到GitHub中的存儲庫中。

在上述目錄下依次執行以下命令。這些命令在您的存儲庫中創建一個新的分支,將您的IaC源文件添加到該分支,然後將本地分支推到遠程存儲庫。

Git checkout -b databricks_workspace Git添加。gitignore Git添加cross-account-roleTf git添加init。Tf git添加根桶。Tf git添加變量。Tf git添加vpc。Tf git添加工作空間。Tf git commit -m“創建數據ricks E2工作區”git push origin

注意,本教程使用的是local狀態.如果你是唯一的開發者,這很好,但如果你是團隊合作,你應該考慮使用terrform遠程存儲代替。

第五步:清理

在此步驟中,如果您不再希望它們出現在您的Databricks或AWS帳戶中,您可以清理本教程中使用的資源。

要進行清理,請在上述目錄中運行以下命令,它將刪除工作區以及先前創建的其他相關資源。

起程拓殖摧毀

額外的資源