{"id":48874,"date":"2023-06-20T00:32:56","date_gmt":"2023-05-06T15:20:41","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/"},"modified":"2024-04-30T09:42:43","modified_gmt":"2024-04-30T01:42:43","slug":"%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a"},"content":{"rendered":"<p>\u7531\u4e8e\u4e4b\u524d\u53ea\u662f\u7ffb\u8bd1\u4e86\u6587\u4ef6\uff0c\u5b9e\u9645\u4e0a\u5e76\u6ca1\u6709\u505a\u8fc7\uff0c\u6240\u4ee5\u6211\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u6b65\u9aa4\u8fdb\u884c\u90e8\u7f72\u3002Git\u7684\u6b65\u9aa4\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd9\u91cc\u4e5f\u6709\u8bf4\u660e\u6b65\u9aa4\u7684\u3002<\/p>\n<p>&nbsp;<\/p>\n<div>\u8bf7\u6ce8\u610f\uff0c\u672c\u6587\u662f\u4f7f\u7528Mac\u8fdb\u884c\u7684\u64cd\u4f5c\u3002<br \/>\n\u8fd9\u662f\u5c06\u5e94\u7528\u90e8\u7f72\u81f3AWS\u7684\u8fc7\u7a0b\u3002\u91c7\u7528\u4e86\u5ba2\u6237\u7ba1\u7406VPC\u5e76\u4e14\u672a\u4f7f\u7528PrivateLink\u7684\u90e8\u7f72\u914d\u7f6e\u3002<\/div>\n<h1>\u51c6\u5907\u597d<\/h1>\n<h2>Terraform\u7684\u5b89\u88c5<\/h2>\n<p>&nbsp;<\/p>\n<p>\u5728\u7ec8\u7aef\u4e2d\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"go\">brew tap hashicorp\/tap\r\nbrew install hashicorp\/tap\/terraform\r\n<\/span><\/code><\/pre>\n<p>\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u65f6\uff0c<\/p>\n<pre class=\"post-pre\"><code>==&gt; Installing terraform from hashicorp\/tap\r\nError: Your Command Line Tools are too outdated.\r\nUpdate them from Software Update in System Preferences.\r\n\r\nIf that doesn't show you any updates, run:\r\n  sudo rm -rf \/Library\/Developer\/CommandLineTools\r\n  sudo xcode-select --install\r\n\r\nAlternatively, manually download them from:\r\n  https:\/\/developer.apple.com\/download\/all\/.\r\nYou should download the Command Line Tools for Xcode 13.4.\r\n<\/code><\/pre>\n<p>\u5982\u679c\u51fa\u73b0\u4ee5\u4e0b\u9519\u8bef\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u6765\u66f4\u65b0\u547d\u4ee4\u884c\u5de5\u5177\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo rm -rf \/Library\/Developer\/CommandLineTools\r\nsudo xcode-select --install\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5\u548c\u914d\u7f6eAWS CLI\u3002<\/h2>\n<p>\u6211\u4f1a\u4f7f\u7528\u8fd9\u4e2aGUI\u5b89\u88c5\u7a0b\u5e8f\u6765\u5b89\u88c5\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\u6b64\u8bbe\u5b9a\uff0c\u8bf7\u83b7\u53d6AWS\u8bbf\u95ee\u5bc6\u94a5\uff0c\u5e76\u5728\u6267\u884caws configure\u65f6\u6307\u5b9a\u3002<\/p>\n<p>&nbsp;<\/p>\n<h1>Terraform\u7684\u8bbe\u5b9a (Terraform de<\/h1>\n<p>\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u76ee\u5f55\u5e76\u8fdb\u5165\u8be5\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">mkdir <\/span>normal_workspace\r\n<span class=\"nb\">cd <\/span>normal_workspace\r\n<\/code><\/pre>\n<p>\u5728\u63a5\u4e0b\u6765\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u5c06\u521b\u5efa\u4e00\u4e9b\u6587\u4ef6\u3002<\/p>\n<h2>vars.tf -&gt; \u53d8\u91cf.tf<\/h2>\n<p>\u8fd9\u662f\u4e00\u4e2a\u5b9a\u4e49\u53d8\u91cf\u7684\u6587\u4ef6\u3002\u8bf7\u6839\u636e\u9700\u8981\u66f4\u65b0\u8981\u90e8\u7f72\u5230\u7684AWS\u533a\u57df\uff08region\uff09\u548cVPC\u7684CIDR\uff08cidr_block\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">variable<\/span> <span class=\"s2\">\"databricks_account_username\"<\/span> <span class=\"p\">{}<\/span>\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"databricks_account_password\"<\/span> <span class=\"p\">{}<\/span>\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"databricks_account_id\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"tags\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"cidr_block\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"10.4.0.0\/16\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">variable<\/span> <span class=\"s2\">\"region\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">default<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"ap-northeast-1\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/random\/latest\/docs\/resources\/string<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"random_string\"<\/span> <span class=\"s2\">\"naming\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">special<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">false<\/span>\r\n  <span class=\"nx\">upper<\/span>   <span class=\"p\">=<\/span> <span class=\"kc\">false<\/span>\r\n  <span class=\"nx\">length<\/span>  <span class=\"p\">=<\/span> <span class=\"mi\">6<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"nx\">locals<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">prefix<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"demo-<\/span><span class=\"k\">${<\/span><span class=\"nx\">random_string<\/span><span class=\"p\">.<\/span><span class=\"nx\">naming<\/span><span class=\"p\">.<\/span><span class=\"nx\">result<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u521d\u59cb\u5316.tf<\/h2>\n<p>\u4f7f\u7528\u5fc5\u8981\u7684Databricks\u63d0\u4f9b\u7a0b\u5e8f\u548cAWS\u63d0\u4f9b\u7a0b\u5e8f\u6765\u521d\u59cb\u5316Terraform\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">terraform<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">required_providers<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">databricks<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">source<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"databricks\/databricks\"<\/span>\r\n      <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"1.0.0\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"nx\">aws<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">source<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"hashicorp\/aws\"<\/span>\r\n      <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"3.49.0\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">provider<\/span> <span class=\"s2\">\"aws\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">region<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">region<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Initialize provider in \"MWS\" mode to provision the new workspace.<\/span>\r\n<span class=\"c1\">\/\/ alias = \"mws\" instructs Databricks to connect to https:\/\/accounts.cloud.databricks.com, to create<\/span>\r\n<span class=\"c1\">\/\/ a Databricks workspace that uses the E2 version of the Databricks on AWS platform.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs#authentication<\/span>\r\n<span class=\"k\">provider<\/span> <span class=\"s2\">\"databricks\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">alias<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"mws\"<\/span>\r\n  <span class=\"nx\">host<\/span>     <span class=\"p\">=<\/span> <span class=\"s2\">\"https:\/\/accounts.cloud.databricks.com\"<\/span>\r\n  <span class=\"nx\">username<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_username<\/span>\r\n  <span class=\"nx\">password<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_password<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u8de8\u8d26\u6237\u89d2\u8272.tf<\/h2>\n<p>\u6211\u4f1a\u5728\u60a8\u7684AWS\u5e10\u6237\u4e0a\u521b\u5efa\u6240\u9700\u7684IAM\u8de8\u5e10\u6237\u89d2\u8272\u548c\u76f8\u5173\u7b56\u7565\u3002<\/p>\n<div>\u8bf7\u6ce8\u610f\uff0c\u4ee5\u4e0b\u7684&#8221;time_sleep.wait_for_cross_account_role&#8221;\u8d44\u6e90\u662f\u4e3a\u4e86\u7b49\u5f85IAM\u89d2\u8272\u7684\u521b\u5efa\u800c\u8bbe\u7f6e\u7684\u3002<\/div>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Create the required AWS STS assume role policy in your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/data-sources\/aws_assume_role_policy<\/span>\r\n<span class=\"k\">data<\/span> <span class=\"s2\">\"databricks_aws_assume_role_policy\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">external_id<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_id<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create the required IAM role in your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/resources\/iam_role<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_iam_role\"<\/span> <span class=\"s2\">\"cross_account_role\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>               <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-crossaccount\"<\/span>\r\n  <span class=\"nx\">assume_role_policy<\/span> <span class=\"p\">=<\/span> <span class=\"k\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_aws_assume_role_policy<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span>\r\n  <span class=\"nx\">tags<\/span>               <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">tags<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create the required AWS cross-account policy in your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/data-sources\/aws_crossaccount_policy<\/span>\r\n<span class=\"k\">data<\/span> <span class=\"s2\">\"databricks_aws_crossaccount_policy\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create the required IAM role inline policy in your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/resources\/iam_role_policy<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_iam_role_policy\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">name<\/span>   <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-policy\"<\/span>\r\n  <span class=\"nx\">role<\/span>   <span class=\"p\">=<\/span> <span class=\"nx\">aws_iam_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">cross_account_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span>\r\n  <span class=\"nx\">policy<\/span> <span class=\"p\">=<\/span> <span class=\"k\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_aws_crossaccount_policy<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"time_sleep\"<\/span> <span class=\"s2\">\"wait_for_cross_account_role\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">depends_on<\/span>      <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">aws_iam_role_policy<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">,<\/span> <span class=\"nx\">aws_iam_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">cross_account_role<\/span><span class=\"p\">]<\/span>\r\n  <span class=\"nx\">create_duration<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"20s\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Properly configure the cross-account role for the creation of new workspaces within your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/resources\/mws_credentials<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"databricks_mws_credentials\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">provider<\/span>         <span class=\"p\">=<\/span> <span class=\"nx\">databricks<\/span><span class=\"p\">.<\/span><span class=\"nx\">mws<\/span>\r\n  <span class=\"nx\">account_id<\/span>       <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_id<\/span>\r\n  <span class=\"nx\">role_arn<\/span>         <span class=\"p\">=<\/span> <span class=\"nx\">aws_iam_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">cross_account_role<\/span><span class=\"p\">.<\/span><span class=\"nx\">arn<\/span>\r\n  <span class=\"nx\">credentials_name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-creds\"<\/span>\r\n  <span class=\"nx\">depends_on<\/span>       <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">time_sleep<\/span><span class=\"p\">.<\/span><span class=\"nx\">wait_for_cross_account_role<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>vpc.tf \u7684\u542b\u4e49\u662f\u4ec0\u4e48\uff1f<\/h2>\n<p>\u6211\u5c06\u4f7f\u7528Terraform\u6307\u793a\u60a8\u5728\u60a8\u7684AWS\u8d26\u6237\u4e0a\u521b\u5efaDatabricks\u6240\u9700\u7684VPC\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Allow access to the list of AWS Availability Zones within the AWS Region that is configured in vars.tf and init.tf.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/data-sources\/availability_zones<\/span>\r\n<span class=\"k\">data<\/span> <span class=\"s2\">\"aws_availability_zones\"<\/span> <span class=\"s2\">\"available\"<\/span> <span class=\"p\">{}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create the required VPC resources in your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/modules\/terraform-aws-modules\/vpc\/aws\/latest<\/span>\r\n<span class=\"k\">module<\/span> <span class=\"s2\">\"vpc\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">source<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"terraform-aws-modules\/vpc\/aws\"<\/span>\r\n  <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"3.2.0\"<\/span>\r\n\r\n  <span class=\"nx\">name<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span>\r\n  <span class=\"nx\">cidr<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr_block<\/span>\r\n  <span class=\"nx\">azs<\/span>  <span class=\"p\">=<\/span> <span class=\"k\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">aws_availability_zones<\/span><span class=\"p\">.<\/span><span class=\"nx\">available<\/span><span class=\"p\">.<\/span><span class=\"nx\">names<\/span>\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">tags<\/span>\r\n\r\n  <span class=\"nx\">enable_dns_hostnames<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">enable_nat_gateway<\/span>   <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">single_nat_gateway<\/span>   <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">create_igw<\/span>           <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n\r\n  <span class=\"nx\">public_subnets<\/span>  <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">cidrsubnet<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr_block<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)]<\/span>\r\n  <span class=\"nx\">private_subnets<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">cidrsubnet<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr_block<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">),<\/span>\r\n                     <span class=\"nx\">cidrsubnet<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">cidr_block<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">)]<\/span>\r\n\r\n  <span class=\"nx\">manage_default_security_group<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">default_security_group_name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-sg\"<\/span>\r\n\r\n  <span class=\"nx\">default_security_group_egress<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[{<\/span>\r\n    <span class=\"nx\">cidr_blocks<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"0.0.0.0\/0\"<\/span>\r\n  <span class=\"p\">}]<\/span>\r\n\r\n  <span class=\"nx\">default_security_group_ingress<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[{<\/span>\r\n    <span class=\"nx\">description<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"Allow all internal TCP and UDP\"<\/span>\r\n    <span class=\"nx\">self<\/span>        <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"p\">}]<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create the required VPC endpoints within your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/modules\/terraform-aws-modules\/vpc\/aws\/latest\/submodules\/vpc-endpoints<\/span>\r\n<span class=\"k\">module<\/span> <span class=\"s2\">\"vpc_endpoints\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">source<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"terraform-aws-modules\/vpc\/aws\/\/modules\/vpc-endpoints\"<\/span>\r\n  <span class=\"nx\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"3.2.0\"<\/span>\r\n\r\n  <span class=\"nx\">vpc_id<\/span>             <span class=\"p\">=<\/span> <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc_id<\/span>\r\n  <span class=\"nx\">security_group_ids<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">default_security_group_id<\/span><span class=\"p\">]<\/span>\r\n\r\n  <span class=\"nx\">endpoints<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">s3<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">service<\/span>         <span class=\"p\">=<\/span> <span class=\"s2\">\"s3\"<\/span>\r\n      <span class=\"nx\">service_type<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"Gateway\"<\/span>\r\n      <span class=\"nx\">route_table_ids<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">flatten<\/span><span class=\"p\">([<\/span>\r\n        <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">private_route_table_ids<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">public_route_table_ids<\/span><span class=\"p\">])<\/span>\r\n      <span class=\"nx\">tags<\/span>            <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-s3-vpc-endpoint\"<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">sts<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">service<\/span>             <span class=\"p\">=<\/span> <span class=\"s2\">\"sts\"<\/span>\r\n      <span class=\"nx\">private_dns_enabled<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n      <span class=\"nx\">subnet_ids<\/span>          <span class=\"p\">=<\/span> <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">private_subnets<\/span>\r\n      <span class=\"nx\">tags<\/span>                <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-sts-vpc-endpoint\"<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">kinesis<\/span><span class=\"err\">-<\/span><span class=\"nx\">streams<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">service<\/span>             <span class=\"p\">=<\/span> <span class=\"s2\">\"kinesis-streams\"<\/span>\r\n      <span class=\"nx\">private_dns_enabled<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n      <span class=\"nx\">subnet_ids<\/span>          <span class=\"p\">=<\/span> <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">private_subnets<\/span>\r\n      <span class=\"nx\">tags<\/span>                <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-kinesis-vpc-endpoint\"<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">tags<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Properly configure the VPC and subnets for Databricks within your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/resources\/mws_networks<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"databricks_mws_networks\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">provider<\/span>           <span class=\"p\">=<\/span> <span class=\"nx\">databricks<\/span><span class=\"p\">.<\/span><span class=\"nx\">mws<\/span>\r\n  <span class=\"nx\">account_id<\/span>         <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_id<\/span>\r\n  <span class=\"nx\">network_name<\/span>       <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-network\"<\/span>\r\n  <span class=\"nx\">security_group_ids<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">default_security_group_id<\/span><span class=\"p\">]<\/span>\r\n  <span class=\"nx\">subnet_ids<\/span>         <span class=\"p\">=<\/span> <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">private_subnets<\/span>\r\n  <span class=\"nx\">vpc_id<\/span>             <span class=\"p\">=<\/span> <span class=\"k\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc<\/span><span class=\"p\">.<\/span><span class=\"nx\">vpc_id<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u6839\u6876.tf<\/h2>\n<p>\u6211\u5c06\u5728\u60a8\u7684AWS\u5e10\u6237\u4e2d\u521b\u5efaDatabricks\u6240\u9700\u7684S3\u6839\u5b58\u50a8\u6876\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Create the S3 root bucket.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/modules\/terraform-aws-modules\/s3-bucket\/aws\/latest<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_s3_bucket\"<\/span> <span class=\"s2\">\"root_storage_bucket\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">bucket<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-rootbucket\"<\/span>\r\n  <span class=\"nx\">acl<\/span>    <span class=\"p\">=<\/span> <span class=\"s2\">\"private\"<\/span>\r\n  <span class=\"nx\">versioning<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">enabled<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">false<\/span>\r\n  <span class=\"p\">}<\/span>\r\n  <span class=\"nx\">force_destroy<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">tags<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">merge<\/span><span class=\"p\">(<\/span><span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">tags<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-rootbucket\"<\/span>\r\n  <span class=\"p\">})<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Ignore public access control lists (ACLs) on the S3 root bucket and on any objects that this bucket contains.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/resources\/s3_bucket_public_access_block<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_s3_bucket_public_access_block\"<\/span> <span class=\"s2\">\"root_storage_bucket\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">bucket<\/span>             <span class=\"p\">=<\/span> <span class=\"nx\">aws_s3_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span>\r\n  <span class=\"nx\">ignore_public_acls<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n  <span class=\"nx\">depends_on<\/span>         <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">aws_s3_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Configure a simple access policy for the S3 root bucket within your AWS account, so that Databricks can access data in it.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/data-sources\/aws_bucket_policy<\/span>\r\n<span class=\"k\">data<\/span> <span class=\"s2\">\"databricks_aws_bucket_policy\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">bucket<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">aws_s3_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">bucket<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Attach the access policy to the S3 root bucket within your AWS account.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/hashicorp\/aws\/latest\/docs\/resources\/s3_bucket_policy<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"aws_s3_bucket_policy\"<\/span> <span class=\"s2\">\"root_bucket_policy\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">bucket<\/span>     <span class=\"p\">=<\/span> <span class=\"nx\">aws_s3_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span>\r\n  <span class=\"nx\">policy<\/span>     <span class=\"p\">=<\/span> <span class=\"k\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_aws_bucket_policy<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span>\r\n  <span class=\"nx\">depends_on<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"nx\">aws_s3_bucket_public_access_block<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">]<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Configure the S3 root bucket within your AWS account for new Databricks workspaces.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/resources\/mws_storage_configurations<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"databricks_mws_storage_configurations\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">provider<\/span>                   <span class=\"p\">=<\/span> <span class=\"nx\">databricks<\/span><span class=\"p\">.<\/span><span class=\"nx\">mws<\/span>\r\n  <span class=\"nx\">account_id<\/span>                 <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_id<\/span>\r\n  <span class=\"nx\">bucket_name<\/span>                <span class=\"p\">=<\/span> <span class=\"nx\">aws_s3_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">root_storage_bucket<\/span><span class=\"p\">.<\/span><span class=\"nx\">bucket<\/span>\r\n  <span class=\"nx\">storage_configuration_name<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span><span class=\"k\">}<\/span><span class=\"s2\">-storage\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u5de5\u4f5c\u7a7a\u95f4.tf<\/h2>\n<p>\u7ed9\u60a8\u7684Databricks\u5e10\u6237\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u533a\uff0c\u901a\u8fc7Terraform\u8fdb\u884c\u6307\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ Set up the Databricks workspace to use the E2 version of the Databricks on AWS platform.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs\/resources\/mws_workspaces<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"databricks_mws_workspaces\"<\/span> <span class=\"s2\">\"this\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">provider<\/span>        <span class=\"p\">=<\/span> <span class=\"nx\">databricks<\/span><span class=\"p\">.<\/span><span class=\"nx\">mws<\/span>\r\n  <span class=\"nx\">account_id<\/span>      <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">databricks_account_id<\/span>\r\n  <span class=\"nx\">aws_region<\/span>      <span class=\"p\">=<\/span> <span class=\"kd\">var<\/span><span class=\"p\">.<\/span><span class=\"nx\">region<\/span>\r\n  <span class=\"nx\">workspace_name<\/span>  <span class=\"p\">=<\/span> <span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span>\r\n  <span class=\"nx\">deployment_name<\/span> <span class=\"p\">=<\/span> <span class=\"kd\">local<\/span><span class=\"p\">.<\/span><span class=\"nx\">prefix<\/span>\r\n\r\n  <span class=\"nx\">credentials_id<\/span>           <span class=\"p\">=<\/span> <span class=\"nx\">databricks_mws_credentials<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">credentials_id<\/span>\r\n  <span class=\"nx\">storage_configuration_id<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">databricks_mws_storage_configurations<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">storage_configuration_id<\/span>\r\n  <span class=\"nx\">network_id<\/span>               <span class=\"p\">=<\/span> <span class=\"nx\">databricks_mws_networks<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">network_id<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Capture the Databricks workspace's URL.<\/span>\r\n<span class=\"k\">output<\/span> <span class=\"s2\">\"databricks_host\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">value<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">databricks_mws_workspaces<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">workspace_url<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Initialize the Databricks provider in \"normal\" (workspace) mode.<\/span>\r\n<span class=\"c1\">\/\/ See https:\/\/registry.terraform.io\/providers\/databricks\/databricks\/latest\/docs#authentication<\/span>\r\n<span class=\"k\">provider<\/span> <span class=\"s2\">\"databricks\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"c1\">\/\/ In workspace mode, you don't have to give providers aliases. Doing it here, however,<\/span>\r\n  <span class=\"c1\">\/\/ makes it easier to reference, for example when creating a Databricks personal access token<\/span>\r\n  <span class=\"c1\">\/\/ later in this file.<\/span>\r\n  <span class=\"nx\">alias<\/span> <span class=\"p\">=<\/span> <span class=\"s2\">\"created_workspace\"<\/span>\r\n  <span class=\"nx\">host<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">databricks_mws_workspaces<\/span><span class=\"p\">.<\/span><span class=\"nx\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">workspace_url<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Create a Databricks personal access token, to provision entities within the workspace.<\/span>\r\n<span class=\"k\">resource<\/span> <span class=\"s2\">\"databricks_token\"<\/span> <span class=\"s2\">\"pat\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">provider<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">databricks<\/span><span class=\"p\">.<\/span><span class=\"nx\">created_workspace<\/span>\r\n  <span class=\"nx\">comment<\/span>  <span class=\"p\">=<\/span> <span class=\"s2\">\"Terraform Provisioning\"<\/span>\r\n  <span class=\"nx\">lifetime_seconds<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">86400<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\">\/\/ Export the Databricks personal access token's value, for integration tests to run on.<\/span>\r\n<span class=\"k\">output<\/span> <span class=\"s2\">\"databricks_token\"<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">value<\/span>     <span class=\"p\">=<\/span> <span class=\"nx\">databricks_token<\/span><span class=\"p\">.<\/span><span class=\"nx\">pat<\/span><span class=\"p\">.<\/span><span class=\"nx\">token_value<\/span>\r\n  <span class=\"nx\">sensitive<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">true<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u6559\u7a0b.tfvars<\/h2>\n<p>\u8bf7\u6307\u5b9a\u4e0a\u8ff0\u6587\u4ef6\u4e2d\u5f15\u7528\u7684Databricks\u8d26\u6237ID\u3001\u8d26\u6237\u6240\u6709\u8005\u7684\u7528\u6237ID\u548c\u5bc6\u7801\u3002\u4e0d\u5efa\u8bae\u5728\u6587\u4ef6\u4e2d\u786c\u7f16\u7801\uff0c\u56e0\u6b64\u5c06\u5176\u62c6\u5206\u4e3a\u5355\u72ec\u7684\u6587\u4ef6\u3002\u5982\u679c\u4f7f\u7528git\uff0c\u8bf7\u5728.gitignore\u6587\u4ef6\u4e2d\u5305\u542b*.tfvars\u4ee5\u6392\u9664\u8fd9\u4e9b\u6269\u5c55\u540d\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">databricks_account_username<\/span> <span class=\"err\">=<\/span> <span class=\"s2\">\"&lt;your-Databricks-account-username&gt;\"<\/span>\r\n<span class=\"nx\">databricks_account_password<\/span> <span class=\"err\">=<\/span> <span class=\"s2\">\"&lt;your-Databricks-account-password&gt;\"<\/span>\r\n<span class=\"nx\">databricks_account_id<\/span> <span class=\"err\">=<\/span> <span class=\"s2\">\"&lt;your-Databricks-account-ID&gt;\"<\/span>\r\n<\/code><\/pre>\n<h1>\u4f7f\u7528Terraform\u521b\u5efaDatabricks\u548cAWS\u8d44\u6e90<\/h1>\n<p>\u901a\u8fc7\u6267\u884c\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u5c06\u751f\u6210\u6240\u5b9a\u4e49\u7684\u8d44\u6e90\u5e76\u90e8\u7f72\u5de5\u4f5c\u7a7a\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform init\r\nterraform apply <span class=\"nt\">-var-file<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"tutorial.tfvars\"<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d880b913a08637a6c1f0b\/48-0.png\" alt=\"Screenshot 2023-01-10 at 17.17.27.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d880b913a08637a6c1f0b\/49-0.png\" alt=\"Screenshot 2023-01-10 at 17.19.58.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d880b913a08637a6c1f0b\/50-0.png\" alt=\"Screenshot 2023-01-10 at 17.39.51.png\" \/><\/div>\n<p>\u96c6\u7fa4\u4e5f\u5df2\u7ecf\u542f\u52a8\u4e86\u3002\u591a\u4e48\u65b9\u4fbf\u554a\u3002<\/p>\n<h1>\u6e05\u7406\u5de5\u4f5c<\/h1>\n<p>\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06\u6240\u6709\u8d44\u6e90\u9500\u6bc1\u3002\u540c\u65f6\u9700\u8981\u63d0\u4f9bDatabricks\u8d26\u6237ID\u3001\u8d26\u6237\u6240\u6709\u8005\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>terraform destroy\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u7ecf\u5e38\u4f1a\u5fd8\u8bb0\u8d44\u6e90\u7684\u6e05\u7406\uff0c\u6240\u4ee5\u8fd9\u4e2a\u529f\u80fd\u975e\u5e38\u6709\u5e2e\u52a9\u3002<\/p>\n<p>\u4e0b\u4e00\u6b65\uff0c\u6211\u5c06\u5c1d\u8bd5\u5176\u4ed6\u7684\u90e8\u7f72\u6a21\u5f0f\u3002<\/p>\n<h3>Databricks \u514d\u8d39\u8bd5\u7528<\/h3>\n<p>Databricks \u514d\u8d39\u8bd5\u7528<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7531\u4e8e\u4e4b\u524d\u53ea\u662f\u7ffb\u8bd1\u4e86\u6587\u4ef6\uff0c\u5b9e\u9645\u4e0a\u5e76\u6ca1\u6709\u505a\u8fc7\uff0c\u6240\u4ee5\u6211\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u6b65\u9aa4\u8fdb\u884c\u90e8\u7f72\u3002Git\u7684\u6b65\u9aa4\u5c06\u88ab\u5ffd\u7565\u3002 &#038;nbsp [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48874","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528terraform\u90e8\u7f72databricks\u5de5\u4f5c\u533a\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a\" \/>\n<meta property=\"og:description\" content=\"\u7531\u4e8e\u4e4b\u524d\u53ea\u662f\u7ffb\u8bd1\u4e86\u6587\u4ef6\uff0c\u5b9e\u9645\u4e0a\u5e76\u6ca1\u6709\u505a\u8fc7\uff0c\u6240\u4ee5\u6211\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u6b65\u9aa4\u8fdb\u884c\u90e8\u7f72\u3002Git\u7684\u6b65\u9aa4\u5c06\u88ab\u5ffd\u7565\u3002 &amp;nbsp [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528terraform\u90e8\u7f72databricks\u5de5\u4f5c\u533a\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-06T15:20:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T01:42:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d880b913a08637a6c1f0b\/48-0.png\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-05-06T15:20:41+00:00\",\"dateModified\":\"2024-04-30T01:42:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528terraform\u90e8\u7f72databricks\u5de5\u4f5c\u533a\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a","og_description":"\u7531\u4e8e\u4e4b\u524d\u53ea\u662f\u7ffb\u8bd1\u4e86\u6587\u4ef6\uff0c\u5b9e\u9645\u4e0a\u5e76\u6ca1\u6709\u505a\u8fc7\uff0c\u6240\u4ee5\u6211\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u6b65\u9aa4\u8fdb\u884c\u90e8\u7f72\u3002Git\u7684\u6b65\u9aa4\u5c06\u88ab\u5ffd\u7565\u3002 &nbsp [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528terraform\u90e8\u7f72databricks\u5de5\u4f5c\u533a\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-05-06T15:20:41+00:00","article_modified_time":"2024-04-30T01:42:43+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d880b913a08637a6c1f0b\/48-0.png"}],"author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"7 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/","name":"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-05-06T15:20:41+00:00","dateModified":"2024-04-30T01:42:43+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u4f7f\u7528Terraform\u90e8\u7f72Databricks\u5de5\u4f5c\u533a"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8terraform%e9%83%a8%e7%bd%b2databricks%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48874"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48874\/revisions"}],"predecessor-version":[{"id":91152,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48874\/revisions\/91152"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}