教程:創建一個工作區起程拓殖
創建一個磚工作區需要許多步驟,尤其是當你使用磚和AWS帳戶的控製台。在本教程中,您將使用磚起程拓殖的提供者和AWS提供者以編程方式創建一個磚工作空間連同所需的AWS資源。這些供應商是基於HashiCorp起程拓殖一個很受歡迎的開放源代碼基礎設施代碼(IaC)工具來管理雲資源的生命周期操作。
需求
在AWS帳戶現有或新磚。創建一個新的磚平台的免費試用Beplay体育安卓版本賬戶,按照說明開始:設置帳戶和工作區。
請注意
新磚帳戶,您必須設置一個初始工作區,前麵的指令指導您完成。本教程使您能夠使用磚起程拓殖的提供者創建一個額外的工作超出了最初的一個。
客戶機ID和客戶的秘密服務主體的帳戶在你的磚賬戶管理的作用。看到使用OAuth身份驗證服務主體。
請注意
一個帳戶管理員的用戶名和密碼也可以用於驗證。然而,磚強烈建議您使用OAuth服務主體。使用一個帳戶管理員的用戶名和密碼而不是OAuth為服務主體,注意賬戶管理員的用戶名和密碼後在本教程中使用。
你的磚賬戶ID。這個值,跟進定位您的帳戶ID。
AWS帳戶與你的磚賬戶,權限AWS身份和訪問管理(IAM)用戶在AWS帳戶創建:
一個我cross-account政策和作用。
虛擬私有雲在亞馬遜VPC (VPC)和相關資源。
一個Amazon S3 bucket。
看到改變我的用戶權限在AWS網站上。
我用戶的AWS帳戶,一個AWS訪問密鑰,由一個AWS密鑰和一個AWS的秘密訪問鍵。看到管理訪問鍵(控製台)在AWS網站上。
現有的或新的GitHub帳戶。創建一個,看到注冊一個新的GitHub帳戶在GitHub上的網站。
步驟1:創建一個GitHub庫
在這個步驟中,您創建一個新的存儲庫在你起程拓殖GitHub存儲文件。這是一個最佳實踐來存儲、跟蹤和控製更改IaC文件在GitHub等係統。
登錄你的GitHub帳戶。
創建一個新的存儲庫在GitHub帳戶。存儲庫名稱
databricks-aws-terraform
。運行以下命令,一個命令,從開發機器的終端。在
git遠程
命令,取代< your-GitHub-username >
GitHub的用戶名。這些命令創建一個空目錄,起動器的內容,將其轉換為一個本地存儲庫,然後上傳本地存儲庫到新的存儲庫在GitHub帳戶。mkdir databricks-aws-terraformcddatabricks-aws-terraform回聲“AWS #起程拓殖供應商樣品磚”> > README。md git init git添加README。md git commit - m“第一次提交”git分支- m主要git遠程添加git@github.com起源:< your-GitHub-username > / databricks-aws-terraform.git git push - u主要起源
提示
如果你得到一個“沒有權限”錯誤後運行
git推
命令,看到與SSH連接到GitHub在GitHub上的網站。在你的根源
databricks-aws-terraform
目錄,使用您最喜歡的代碼編輯器創建一個文件命名.gitignore
用下麵的內容。這個文件指示GitHub排除指定的存儲庫中的文件。這是因為您將在本教程下載這些文件後。*。起程拓殖* .tfvars
步驟2:起程拓殖變量聲明和初始化
在這個步驟中,您生產的所有代碼,起程拓殖需要創建所需的磚和AWS資源。
創建以下七個文件你的根源databricks-aws-terraform
目錄中。這些文件定義你的磚工作區及其相關資源的AWS帳戶,在代碼中。鏈接到相關的磚和AWS文檔起程拓殖網站包括作為未來參考代碼中的注釋,並在相應的文本。
重要的
你必須提供起程拓殖AWS帳戶憑據。這些可以通過指定來源等環境變量或共享配置文件和憑證。看到身份驗證和配置在起程拓殖網站上。
警告
雖然起程拓殖支持硬編碼AWS帳戶憑據在起程拓殖文件中,這種方法是不可取的,因為它的風險秘密泄漏此類文件應致力於公共版本控製係統。
vars.tf
:該文件定義起程拓殖輸入變量使用在以後的文件:你的磚賬戶ID。
客戶機ID,也稱為應用程序ID和客戶的秘密賬戶管理服務主體在磚帳戶。
無類域間路由(CIDR)塊依賴虛擬私有雲(VPC)亞馬遜虛擬公共雲(亞馬遜VPC)。看到VPC基礎知識在AWS網站上。
這個文件還包括一個起程拓殖本地值和相關的邏輯將隨機生成的標識符分配給起程拓殖創建的資源在這些文件。
起程拓殖相關文檔,請參閱random_string(資源)在起程拓殖網站上。
變量“databricks_client_id”{}變量“databricks_client_secret”{}變量“databricks_account_id”{}變量“標簽”{默認={}}變量“cidr_block”{默認=“10.4.0.0/16”}變量“地區”{默認=“一來”}/ /見https://registry.terraform。io /供應商/ hashicorp /隨機/最近/ docs /資源/字符串資源“random_string”“命名”{特殊= false上= false長度= 6}當地人{前綴= " - $ {random_string.naming演示。結果}"}
請注意
一個帳戶管理員的用戶名和密碼也可以用於驗證。然而,磚強烈建議您使用OAuth服務主體。使用用戶名和密碼,改變前麵的變量:
變量“databricks_client_id”{}變量“databricks_client_secret”{}
這些變量而不是:
變量“databricks_account_username”{}變量“databricks_account_password”{}
init.tf
:該文件初始化與所需起程拓殖磚提供者和AWS提供者。這個文件還建立了你的磚賬戶憑證和指示起程拓殖使用E2版本AWS平台上的磚。Beplay体育安卓版本起程拓殖相關文檔,請參閱身份驗證在起程拓殖網站上。
起程拓殖{required_providers{磚= =“磚/磚"}{來源aws = ={來源“hashicorp / aws”version = " 3.49.0}}}提供者“aws”{地區= var.region} / /多工作站係統模式初始化供應商提供新的工作區。/ /別名= "多工作站係統"指示磚連接到https://accounts.cloud.m.eheci.com,創建/ /磚工作區使用AWS平台上的E2版本數據磚。Beplay体育安卓版本/ /見https://registry.terraform。io /供應商/磚/磚/最近/ docs #身份驗證提供者“磚”=“多工作站係統”{別名主機= " https://accounts.cloud.m.eheci.com " account_id = var.databricks_account_id client_id = var.databricks_client_id client_secret = var.databricks_client_secret}
請注意
一個帳戶管理員的用戶名和密碼也可以用於驗證。然而,磚強烈建議您使用OAuth服務主體。使用用戶名和密碼,改變前麵的字段:
client_id = var.databricks_client_id client_secret = var.databricks_client_secret
這些字段而不是:
用戶名= = var.databricks_account_password var.databricks_account_username密碼
cross-account-role.tf
:該文件指示起程拓殖創建所需的我cross-account AWS帳戶內的角色和相關政策。這個角色使磚AWS帳戶內采取必要的行動。看到為工作區部署創建了我的角色。起程拓殖相關文檔,請參閱以下起程拓殖網站:
/ /創建所需的AWS STS政策AWS帳戶中承擔的角色。/ /見https://registry.terraform。io /供應商/磚/磚/最近/ docs /數據源/ aws_assume_role_policy數據“databricks_aws_assume_role_policy”“這”{external_id = var.databricks_account_id} / /在AWS帳戶創建所需的我的角色。/ /見https://registry.terraform。io /供應商/ hashicorp / aws /最近/ docs /資源/ iam_role資源“aws_iam_role cross_account_role“{name = " ${當地。前綴}-crossaccount”assume_role_policy = data.databricks_aws_assume_role_policy.this。json標簽= var.tags} / /創建所需的AWS cross-account政策在AWS帳戶。/ /見https://registry.terraform。io /供應商/磚/磚/最近/ docs /數據源/ aws_crossaccount_policy數據“databricks_aws_crossaccount_policy”“這“{}/ /創建所需的內聯政策在AWS帳戶我的角色。/ /見https://registry.terraform。io /供應商/ hashicorp / aws /最近/ docs /資源/ iam_role_policy資源“aws_iam_role_policy”“這“{name = " ${當地。前綴}= aws_iam_role.cross_account_role政策”的作用。id policy = data.databricks_aws_crossaccount_policy.this.json } // Properly configure the cross-account role for the creation of new workspaces within your AWS account. // See https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_credentials resource "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.prefix}-creds" depends_on = [time_sleep.wait] } // Add a 20-second timer to avoid a failed credential validation check. resource "time_sleep" "wait" { create_duration = "20s" depends_on = [ aws_iam_role_policy.this ] }
vpc.tf
:該文件指示起程拓殖創建所需的VPC AWS帳戶。看到Customer-managed VPC。起程拓殖相關文檔,請參閱以下起程拓殖網站:
/ /允許訪問在AWS AWS可用性區域的列表區域中配置,var。特遣部隊和init.tf。/ /見https://registry.terraform。io /供應商/ hashicorp / aws /最近/ docs /數據源/ availability_zones數據“aws_availability_zones”“可用”{}/ / aws帳戶創建所需的VPC資源。/ /見https://registry.terraform。io /模塊/ terraform-aws-modules / vpc / aws /最新模塊“vpc”={來源“terraform-aws-modules / vpc / aws”=“3.2.0”名稱=當地版本。前綴cidr = var.cidr_block az = data.aws_availability_zones.available.names標簽= var.tags enable_dns_hostnames = true enable_nat_gateway = true single_nat_gateway = true create_igw = true public_subnets = [cidrsubnet (var。cidr_block 3 0)] private_subnets = [cidrsubnet (var。cidr_block 3 1), cidrsubnet (var。cidr_block 3 2)] manage_default_security_group = true default_security_group_name = " ${當地。前綴}sg“default_security_group_egress = [{cidr_blocks =“0.0.0.0/0”}] default_security_group_ingress =[{描述=“允許所有內部TCP和UDP”自我= true}]} / /創建所需的VPC端點AWS帳戶內。/ /見https://registry.terraform。io /模塊/ terraform-aws-modules / vpc / aws /最近/子/ vpc-endpoints模塊“vpc_endpoints”={來源“terraform-aws-modules / vpc / aws / /模塊/ vpc-endpoints”=“3.2.0”vpc_id = module.vpc版本。vpc_id security_group_ids = = {s3 = {(module.vpc.default_security_group_id)端點服務=“s3”service_type = route_table_ids =平([module.vpc“網關”。private_route_table_ids module.vpc.public_route_table_ids])標簽= {Name = " ${當地。prefix}-s3-vpc-endpoint" } }, sts = { service = "sts" private_dns_enabled = true subnet_ids = module.vpc.private_subnets tags = { Name = "${local.prefix}-sts-vpc-endpoint" } }, kinesis-streams = { service = "kinesis-streams" private_dns_enabled = true subnet_ids = module.vpc.private_subnets tags = { Name = "${local.prefix}-kinesis-vpc-endpoint" } } } tags = var.tags } // Properly configure the VPC and subnets for Databricks within your AWS account. // 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
:該文件指示起程拓殖創建所需的Amazon S3根鬥AWS帳戶內。磚家的構件(如集群日誌,筆記本修訂,S3存儲桶和工作結果,這是通常被稱為根鬥。起程拓殖相關文檔,請參閱以下起程拓殖網站:
/ /創建S3根鬥。/ /見https://registry.terraform。io /模塊/ terraform-aws-modules / s3 bucket / aws /最新資源“aws_s3_bucket”“root_storage_bucket”{桶= " ${當地。前綴}-rootbucket”acl = "私人"版本{啟用= false} force_destroy = = true標簽合並(var。標簽,{Name = " ${當地。前綴}-rootbucket "})} / /忽視公共訪問控製列表(acl)在S3根鬥和這個桶中包含的任何對象。/ /見https://registry.terraform。io /供應商/ hashicorp / aws /最近/ docs /資源/ s3_bucket_public_access_block資源“aws_s3_bucket_public_access_block”“root_storage_bucket”{桶= aws_s3_bucket.root_storage_bucket。(aws_s3_bucket id ignore_public_acls = true depends_on =。root_storage_bucket]} / /配置一個簡單的訪問政策S3根AWS帳戶內鬥,所以磚可以訪問數據。/ /見https://registry.terraform。io /供應商/磚/磚/最近/ docs /數據源/ aws_bucket_policy數據“databricks_aws_bucket_policy”“這”{桶= aws_s3_bucket.root_storage_bucket。桶}/ /訪問策略附加到S3根鬥AWS帳戶內。/ /見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 depends_on = [aws_s3_bucket_public_access_block.root_storage_bucket] } // Configure the S3 root bucket within your AWS account for new Databricks workspaces. // See https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/mws_storage_configurations resource "databricks_mws_storage_configurations" "this" { provider = databricks.mws account_id = var.databricks_account_id bucket_name = aws_s3_bucket.root_storage_bucket.bucket storage_configuration_name = "${local.prefix}-storage" }
workspace.tf
:該文件指示起程拓殖創建工作區磚內帳戶。這個文件還包括起程拓殖輸出值代表工作空間的URL和磚個人訪問令牌新磚用戶在你的工作區。起程拓殖相關文檔,請參閱以下起程拓殖網站:
/ /設置數據磚工作區使用AWS平台上的E2版本數據磚。Beplay体育安卓版本/ /見https://registry.terraform。io /供應商/磚/磚/最近/ docs /資源/ mws_workspaces資源“databricks_mws_workspaces”“這”{提供者=磚。多工作站係統account_id = var.databricks_account_id aws_region = var.region workspace_name =當地。前綴deployment_name =當地。前綴credentials_id = databricks_mws_credentials.this。credentials_id storage_configuration_id = databricks_mws_storage_configurations.this。storage_configuration_id network_id = databricks_mws_networks.this.network_id} / /捕獲磚工作空間的URL。“databricks_host”{value = databricks_mws_workspaces.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 account_id = var.databricks_account_id client_id = var.databricks_client_id client_secret = var.databricks_client_secret } // 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 }
請注意
一個帳戶管理員的用戶名和密碼也可以用於驗證。然而,磚強烈建議您使用OAuth服務主體。使用用戶名和密碼,改變前麵的字段:
client_id = var.databricks_client_id client_secret = var.databricks_client_secret
這些字段而不是:
用戶名= = var.databricks_account_password var.databricks_account_username密碼
tutorial.tfvars
:此文件包含你的磚帳戶ID和磚服務主體的客戶ID和客戶的秘密。包括指令* .tfvars
在.gitignore
文件有助於防止意外地檢查這些敏感值到遠程GitHub庫。databricks_client_id = " < your-Databricks-client-id > " databricks_client_secret = " < your-Databricks-client-secret >”databricks_account_id = < your-Databricks-account-ID >”
請注意
一個帳戶管理員的用戶名和密碼也可以用於驗證。然而,磚強烈建議您使用OAuth服務主體。使用用戶名和密碼,改變前麵的變量:
databricks_client_id = " < your-Databricks-client-id > " databricks_client_secret = " < your-Databricks-client-secret >”
這些變量而不是:
databricks_account_username = " < your-Databricks-account-username > " databricks_account_password = " < your-Databricks-account-password >”
步驟3:創建所需的磚和AWS資源
在這個步驟中,您指示起程拓殖創建所有必需的磚和AWS資源需要你的新工作區。
運行以下命令,一個命令,從前麵的目錄。這些命令指示起程拓殖下載所有必需的依賴項開發機器,檢查你起程拓殖的指令文件,確定哪些資源需要添加或刪除,最後,創建所有指定的資源。
起程拓殖init起程拓殖應用var文件=“tutorial.tfvars”
在幾分鍾內,你的磚工作區已經準備好了。使用工作空間的URL,顯示在命令的輸出,登錄到您的工作空間中。一定要和你的磚工作區管理員的登錄憑證。
第四步:提交您的更改你的GitHub庫
在這個步驟中,您在GitHub IaC源添加到存儲庫。
運行以下命令,一個命令,從前麵的目錄。這些命令創建一個新的存儲庫中的分支,IaC源文件添加到分支,然後推動本地分支到遠程存儲庫。
git checkout - b databricks_workspace git添加.gitignore git添加cross-account-role。tf git init。tf git添加root-bucket。tf git添加var。tf git添加vpc。tf git添加工作區。tf git commit - m“創建磚E2的工作區”git push起源的頭
注意,本教程使用的地方狀態。這是好如果你是唯一的開發人員,但是如果你合作在一個團隊中,磚強烈建議您使用起程拓殖偏遠的國家相反,它可以在一個團隊的所有成員之間共享。在起程拓殖支持存儲狀態起程拓殖雲,HashiCorp領事Amazon S3, Azure Blob存儲,穀歌雲存儲和其他選項。推動本地狀態GitHub,例如,可能意外暴露敏感數據如磚帳戶的用戶名、密碼、客戶機密,客戶id、或個人訪問令牌,這也可能引發GitGuardian警告。