Databricks Terraform provider | Databricks on AWS [2022/3/21時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
HashiCorp Terraformは、複数のクラウドプロバイダーにまたがる安全かつ予測可能なクラウドインフラストラクチャの構築のための人気のあるオープンソースツールです。柔軟かつパワフルなツールを用いてDatabricksワークスペースと関連するクラウドインフラストラクチャを管理するためにDatabricks Terraformプロバイダーを活用することができます。Databricks Terraformプロバイダーのゴールは、皆様のデータプラットフォームの最も複雑なデプロイ、管理の自動化をサポートする全てのDatabricks REST APIをサポートすると言うことです。Databricksの利用者は、クラスター、ジョブをデプロイ、管理し、Databricksワークスペースを配備し、データアクセスを設定するためにDatabricks Terraformプロバイダーを活用しています。
実験段階
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を実行する適切なアクセス権を持っていることを前提としています。詳細に関しては、以下を参照ください。
-
Databricksアカウント内でTerraformがDatabricks APIを呼び出せるようにするためにDatabricksのパーソナルアクセストークンを作成します。詳細については、Authentication using Databricks personal access tokensをご覧下さい。
-
Databricksコマンドラインインタフェース(CLI)をインストールし、このパーソナルアクセストークンに対する接続プロファイルを作成するために、
databricks configure --token --profile <profile name>
を実行することでDatabricksパーソナルアクセストークンを用いてDatabricks CLIを設定します。<profile name>
を接続プロファイルに対する一意の名前で置き換えてください。詳細に関しては、Databricks CLIの"Set up authentication"と"Connection profiles"セクションをご覧ください。Bashdatabricks configure --token --profile <profile name>
ティップス
それぞれのパーソナルアクセストークンはDatabricksアカウント内の固有のユーザーに紐づけられます。Terraformが使用できるようにしたいそれぞれのDatabricksパーソナルアクセストークンに対して、databricks configure --token --profile <profile name>
コマンド(<profile name>
をユニークな名称で置き換えます)を実行します。 -
Terraform CLIをインストールします。詳細はTerraformウェブサイトのDownload Terraformをご覧ください。
-
AWSシークレットキーとAWSシークレットアクセスキーから構成されるAWSアクセスキーを作成します。詳細はAWSウェブサイトのManaging access keys (console)をご覧下さい。
-
AWS CLIをインストールし、
aws configure --profile <profile name>
コマンドを実行することで、AWSアクセスキーでAWS CLIを設定します。<profile name>
をこの接続プロファイルに対するユニークな名称で置き換えてください。詳細はAWSウェブサイトのInstalling, updating, and uninstalling the AWS CLI version 2とQuick configuration with aws configureをご覧ください。Bashaws configure --profile <profile name>
ティップス
それぞれのAWSアクセスキーはAWSアカウントの特定のIAMユーザーに紐づけられます。Terraformに使わせたいそれぞれのAWSアクセスキーに対して、aws configure --profile <profile name>
コマンド(<profile name>
をユニークな名称で置き換えます)を実行します。この手順では、AWS CLIと、認証を行うためにデフォルトの場所にある共有認証情報/設定を使用します。別の認証オプションに関しては、TerraformレジストリウェブサイトのAuthenticationをご覧ください。
-
お使いのターミナルで、空のディレクトリを作成してそこに移動します。(それぞれの別のセットのTerraform設定ファイルには自身のディレクトリが必要となります)例えば、
mkdir terraform_demo && cd terraform_demo
となります。Bashmkdir terraform_demo && cd terraform_demo
-
空のディレクトリ内で、
main.tf
という名前のファイルを作成します。このファイルに以下の内容を追加し、ファイルを保存します。variable "aws_connection_profile" { description = "The name of the AWS connection profile to use." type = string default = "<AWS connection profile name>" } variable "aws_region" { description = "The code of the AWS Region to use." type = string default = "<AWS Region code>" } variable "databricks_connection_profile" { description = "The name of the Databricks connection profile to use." type = string default = "<Databricks connection profile name>" } 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
ファイルの以下の値を置き換えて保存します。-
<AWS connection profile name>
をステップ5で作成したAWS接続プロファイル名に置き換えます。 -
<AWS Region code>
をTerraformで利用したいAWSリージョン(例えば、us-west-2
)で置き換えます。 -
<Databricks connection profile name>
をステップ2で作成したDatabricks接続プロファイル名で置き換えます。
-
-
terraform init
コマンドを実行することで、main.tf
ファイルがある作業ディレクトリを初期化します。詳細はTerraformウェブサイトのCommand: initをご覧ください。Bashterraform init
Terraformが
aws
とdatabricks
のプロバイダーをダウンロードし、現在の作業ディレクトリの.terraform
という名前の非表示のサブディレクトリ内にインストールします。terraform init
コマンドは、どのバージョンのプロバイダーがインストールされたのかを表示します。また、Terraformは使用したプロバイダーバージョンを正確に示す.terraform.lock.hcl
というロックファイルも作成するので、お使いのプロジェクトで使用されるプロバイダーをいつアップデートするのかをコントロールすることができます。 -
terraform apply
コマンドを実行して、希望する状態の設定になるまで変更を適用します。詳細はTerraformウェブサイトのCommand: applyをご覧ください。Bashterraform apply
main.tf
ファイルではまだリソースが指定されていないので、出力はApply complete! Resources: 0 added, 0 changed, 0 destroyed
となります。また、Terraformはterraform.tfstate
というファイルにデータを書き込みます。リソースを作成するには、サンプル設定、次のステップのステップに進んでください。あるいは作成したいリソースを指定するために両方を実行し、再度terraform apply
を実行してください。Terraformは、管理するリソースのIDとプロパティをこのterraform.tfstate
ファイルに格納するので、あとでこれらのリソースを更新、廃棄することができます。
サンプル設定
既存のDatabricksワークスペース内にノートブックとこのノートブックを実行するジョブを作成するサンプルTerraform設定を作成するには、以下の手順を完了してください。
注意
以下のサンプルTerraform設定は、既存のDatabricksワークスペースのみとやりとりを行います。このため、このサンプルを実行する際にはAWS CLIを設定する必要がなく、お使いのmain.tf
ファイルに変数aws_connection_profile
、aws_region
やaws
プロバイダーを含める必要はありません。
-
使い始めるで作成した
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 = ["<Your email address>"] } // Get information about the Databricks user that is calling // the Databricks API (the one associated with "databricks_connection_profile"). data "databricks_current_user" "me" {} // Create a simple, sample notebook. Store it in a subfolder within // the Databricks current user's folder. The notebook contains the // following basic Spark code in Python. 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 ) } // Create a job to run the sample notebook. The job will create // a cluster to run on. The cluster will use the smallest available // node type and run the latest version of Spark. // Get the smallest available node type to use for the cluster. Choose // only from among available node types with local storage. data "databricks_node_type" "smallest" { local_disk = true } // Get the latest Spark version to use for the cluster. data "databricks_spark_version" "latest" {} // Create the job, emailing notifiers about job success or failure. 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 } } // Print the URL to the notebook. output "notebook_url" { value = databricks_notebook.this.url } // Print the URL to the job. output "job_url" { value = databricks_job.this.url }
-
<Your email address>
をあなたのメールアドレスで置換してファイルを保存します。 -
terraform apply
を実行します。 -
ノートブックとジョブが作成されたことを確認します。
terraform apply
コマンドの出力で、notebook_url
とjob_url
のURLが表示されるのでこれらにアクセスします。 -
ジョブを実行します。JobsページでRun Nowをクリックします。ジョブが完了したらご自身のメールボックスを確認します。
-
このサンプルを完了したら、
terraform destroy
を実行してDatabricksワークスペースからノートブックとジョブを削除します。 -
ノートブックとジョブが削除されたことを確認します。ノートブックとJobsページリフレッシュし、リソースが見つからないメッセージが表示されることを確認します。
次のステップ
- ワークスペースと関連するインフラストラクチャを作成します。
- Databricksワークスペースのワークスペースリソースを管理します。
トラブルシューティング
Terraform固有のサポートに関しては、HashiCorp Discussサイトの最新の Terraformトピックを参照してください。Databricks Terraformプロバイダー固有の問題に関しては、databrickslabs/terraform-provider-databricksのGitHubリポジトリのIssuesをご覧下さい。
追加リソース
- Tutorial: Create a workspace with the Databricks Terraform provider
- TerraformレジストリウェブサイトのDatabricks Provider Documentation
- TerraformウェブサイトのTerraform Documentation