1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Databricks Terraformプロバイダー

Last updated at Posted at 2022-05-12

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 CLITerraform CLIAWS CLIが含まれます。これらのツールのセットアップ後に、後ほどお使いのDatabricksワークスペースと関連するAWSクラウドインフラストラクチャを管理するために使うベースのTerraform設定を作成するステップを完了します。

注意
この手順においては、Databricks管理者としてDatabricksワークスペースにアクセスできること、対応するAWSアカウントにアクセスできること、そのAWSアカウント内でTerraformを実行する適切なアクセス権を持っていることを前提としています。詳細に関しては、以下を参照ください。

  1. Databricksアカウント内でTerraformがDatabricks APIを呼び出せるようにするためにDatabricksのパーソナルアクセストークンを作成します。詳細については、Authentication using Databricks personal access tokensをご覧下さい。

  2. Databricksコマンドラインインタフェース(CLI)をインストールし、このパーソナルアクセストークンに対する接続プロファイルを作成するために、databricks configure --token --profile <profile name>を実行することでDatabricksパーソナルアクセストークンを用いてDatabricks CLIを設定します。<profile name>を接続プロファイルに対する一意の名前で置き換えてください。詳細に関しては、Databricks CLIの"Set up authentication"と"Connection profiles"セクションをご覧ください。

    Bash
    databricks configure --token --profile <profile name>
    

    ティップス
    それぞれのパーソナルアクセストークンはDatabricksアカウント内の固有のユーザーに紐づけられます。Terraformが使用できるようにしたいそれぞれのDatabricksパーソナルアクセストークンに対して、databricks configure --token --profile <profile name>コマンド(<profile name>をユニークな名称で置き換えます)を実行します。

  3. Terraform CLIをインストールします。詳細はTerraformウェブサイトのDownload Terraformをご覧ください。

  4. AWSシークレットキーとAWSシークレットアクセスキーから構成されるAWSアクセスキーを作成します。詳細はAWSウェブサイトのManaging access keys (console)をご覧下さい。

  5. AWS CLIをインストールし、aws configure --profile <profile name>コマンドを実行することで、AWSアクセスキーでAWS CLIを設定します。<profile name>をこの接続プロファイルに対するユニークな名称で置き換えてください。詳細はAWSウェブサイトのInstalling, updating, and uninstalling the AWS CLI version 2Quick configuration with aws configureをご覧ください。

    Bash
    aws configure --profile <profile name>
    

    ティップス
    それぞれのAWSアクセスキーはAWSアカウントの特定のIAMユーザーに紐づけられます。Terraformに使わせたいそれぞれのAWSアクセスキーに対して、aws configure --profile <profile name>コマンド(<profile name>をユニークな名称で置き換えます)を実行します。

    この手順では、AWS CLIと、認証を行うためにデフォルトの場所にある共有認証情報/設定を使用します。別の認証オプションに関しては、TerraformレジストリウェブサイトのAuthenticationをご覧ください。

  6. お使いのターミナルで、空のディレクトリを作成してそこに移動します。(それぞれの別のセットのTerraform設定ファイルには自身のディレクトリが必要となります)例えば、mkdir terraform_demo && cd terraform_demoとなります。

    Bash
    mkdir terraform_demo && cd terraform_demo
    
  7. 空のディレクトリ内で、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
    }
    
  8. main.tfファイルの以下の値を置き換えて保存します。

    • <AWS connection profile name>をステップ5で作成したAWS接続プロファイル名に置き換えます。
    • <AWS Region code>をTerraformで利用したいAWSリージョン(例えば、us-west-2)で置き換えます。
    • <Databricks connection profile name>をステップ2で作成したDatabricks接続プロファイル名で置き換えます。
  9. terraform initコマンドを実行することで、main.tfファイルがある作業ディレクトリを初期化します。詳細はTerraformウェブサイトのCommand: initをご覧ください。

    Bash
    terraform init
    

    Terraformがawsdatabricksのプロバイダーをダウンロードし、現在の作業ディレクトリの.terraformという名前の非表示のサブディレクトリ内にインストールします。terraform initコマンドは、どのバージョンのプロバイダーがインストールされたのかを表示します。また、Terraformは使用したプロバイダーバージョンを正確に示す.terraform.lock.hclというロックファイルも作成するので、お使いのプロジェクトで使用されるプロバイダーをいつアップデートするのかをコントロールすることができます。

  10. 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は、管理するリソースのIDとプロパティをこのterraform.tfstateファイルに格納するので、あとでこれらのリソースを更新、廃棄することができます。

サンプル設定

既存のDatabricksワークスペース内にノートブックとこのノートブックを実行するジョブを作成するサンプルTerraform設定を作成するには、以下の手順を完了してください。

注意
以下のサンプルTerraform設定は、既存のDatabricksワークスペースのみとやりとりを行います。このため、このサンプルを実行する際にはAWS CLIを設定する必要がなく、お使いのmain.tfファイルに変数aws_connection_profileaws_regionawsプロバイダーを含める必要はありません。

  1. 使い始めるで作成した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
    }
    
  2. <Your email address>をあなたのメールアドレスで置換してファイルを保存します。

  3. terraform applyを実行します。

  4. ノートブックとジョブが作成されたことを確認します。terraform applyコマンドの出力で、notebook_urljob_urlのURLが表示されるのでこれらにアクセスします。

  5. ジョブを実行します。JobsページでRun Nowをクリックします。ジョブが完了したらご自身のメールボックスを確認します。

  6. このサンプルを完了したら、terraform destroyを実行してDatabricksワークスペースからノートブックとジョブを削除します。

  7. ノートブックとジョブが削除されたことを確認します。ノートブックとJobsページリフレッシュし、リソースが見つからないメッセージが表示されることを確認します。

次のステップ

  1. ワークスペースと関連するインフラストラクチャを作成します。
  2. Databricksワークスペースのワークスペースリソースを管理します。

トラブルシューティング

Terraform固有のサポートに関しては、HashiCorp Discussサイトの最新の Terraformトピックを参照してください。Databricks Terraformプロバイダー固有の問題に関しては、databrickslabs/terraform-provider-databricksのGitHubリポジトリのIssuesをご覧下さい。

追加リソース

Databricks 無料トライアル

Databricks 無料トライアル

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?