다음을 통해 공유


Terraform CDK Databricks 공급자

참고 항목

이 문서에서는 타사에서 개발한 CDKTF(Cloud Development Kit for Terraform)에 대해 설명합니다. 공급자에게 문의하려면 Terraform 커뮤니티를 참조하세요.

이 문서에서는 Terraform CDK Databricks 공급자 및 Cloud Development Kit for Terraform(CDKTF)함께 Python을 사용하는 방법을 보여 줍니다. CDKTF는 이 문서에서는 친숙한 프로그래밍 언어, 도구 및 엔지니어링 사례를 사용하여 Azure Databricks 리소스를 만들고 배포하고 관리할 수 있는 타사 IaC(Infrastructure as Code) 플랫폼입니다. 이 문서에서는 Python을 사용하는 방법을 보여 주지만 CDKTF는 TypeScript, Java, C# 및 Go와 같은 추가 언어를 지원합니다.

Terraform CDK Databricks 공급자는 Databricks Terraform 공급자를 기반으로 합니다. 자세한 내용은 Terraform Cloud를 참조하세요. CDKTF는 AWS CDK(AWS Cloud Development Kit)를 기반으로 합니다.

요구 사항

이 문서에서 리소스를 기존 작업 영역에 배포하므로 Azure Databricks 작업 영역이 있어야 합니다.

로컬 개발 컴퓨터에 다음이 설치되어 있어야 합니다.

  • Terraform, 버전 1.1 이상. Terraform이 설치되어 있는지 여부와 설치된 버전을 확인하려면 터미널 또는 PowerShell을 사용하여 terraform -v 명령을 실행합니다. 아직 설치하지 않았으면 Terraform을 설치합니다.

    terraform -v
    
  • Node.js, 버전 16.13 이상 그리고 npm. Node.js 및 npm 설치 여부와 설치된 버전을 확인하려면 node -vnpm -v 명령을 실행합니다. 최신 버전의 Node.js에는 npm이 이미 포함되어 있습니다. Node.js 및 이 아직 설치되지 않았으면 npm.

    node -v
    npm -v
    
  • CDKTF CLI. CDKTF CLI 설치 여부와 설치된 버전을 확인하려면 cdktf --version 명령을 실행합니다. 아직 설치하지 않았으면 npm을 사용하여 CDKTF CLI를 설치합니다.

    cdktf --version
    

    Homebrew를 사용하여 macOS에 CDKTF CLI를 설치할 수도 있습니다. CDKTF 설치를 참조하세요.

  • Python 버전 3.7 이상 및 pipenv 버전 2021.5.29 이상. Python 및 pipenv 설치 여부와 설치된 버전을 확인하려면 python --versionpipenv --version 명령을 실행합니다. Python 을 설치하고 아직 설치되지 않은 경우 pipenv를 설치합니다.

    python --version
    pipenv --version
    
  • 사용하려는 지원되는 인증 유형에 대해 구성된 Azure Databricks 인증입니다. Databricks Terraform 공급자 설명서의 인증을 참조하세요.

1단계: CDKTF 프로젝트 만들기

이 단계에서는 로컬 개발 머신에서 CDKTF 프로젝트에 필요한 디렉터리 구조를 설정합니다. 그런 다음, 이 디렉터리 구조 내에서 CDKTF 프로젝트를 만듭니다.

  1. CDKTF 프로젝트에 대해 빈 디렉터리를 만든 다음, 전환합니다. 터미널 또는 PowerShell을 사용하여 다음 명령을 실행합니다.

    Unix, Linux 및 macOs

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. 다음 명령을 실행하여 CDKTF 프로젝트를 만듭니다.

    cdktf init --template=python --local
    
  3. 프로젝트 이름을 묻는 메시지가 표시되면 cdktf-demo 키를 눌러 기본 프로젝트 이름 를 적용합니다.

  4. 프로젝트 설명을 묻는 메시지가 표시되면 Enter 키를 눌러 기본 프로젝트 설명을 적용합니다.

  5. 기존 Terraform 프로젝트에서 시작하시겠습니까? 메시지가 표시되면 N을 입력하고 Enter 키를 누릅니다.

  6. CDKTF 팀에 충돌 보고서를 보내시겠습니까? 메시지가 표시되면 n을 입력하고 Enter 키를 누릅니다.

CDKTF는 cdktf-demo 디렉터리에 다음 파일 및 하위 디렉터리를 만듭니다.

  • .gitignore - 이 프로젝트를 원격 Git 리포지토리로 푸시하려는 경우 Git에서 무시하는 파일 및 디렉터리 목록입니다.
  • cdktf.json - CDKTF 프로젝트에 대한 구성 설정이 포함되어 있습니다. 구성 설정에 대한 자세한 내용은 구성 파일을 참조하세요.
  • help - CDKTF 프로젝트 작업에 사용할 수 있는 몇 가지 다음 단계에 대한 정보가 포함되어 있습니다.
  • main-test.py - CDKTF 프로젝트에 기록할 수 있는 지원 단위 테스트가 포함되어 있습니다. 단위 테스트에 대한 자세한 내용은 단위 테스트를 참조하세요.
  • main.py - CDKTF 프로젝트에 대해 작성하는 Python 코드가 포함되어 있습니다.
  • PipfilePipfile.lock - CDKTF 프로젝트에 대해 코드 종속성을 관리합니다.

2단계: 리소스 정의

이 단계에서는 Terraform CDK Databricks 공급자를 사용하여 Notebook 및 해당 Notebook을 실행하는 작업을 정의합니다.

  1. 프로젝트 종속성을 설치합니다. 사용 pipenv, CdKTF 프로젝트에 Terraform CDK Databricks Provider 를 설치하여 Azure Databricks 리소스를 생성합니다. 이렇게 하려면 다음을 실행합니다.

    pipenv install cdktf-cdktf-provider-databricks
    
  2. 파일의 main.py 내용을 다음 코드로 바꿉니다. 이 코드는 Azure Databricks 작업 영역에서 CDKTF를 인증한 다음 Notebook을 실행하는 작업과 함께 Notebook을 생성합니다. 이 코드에 대한 구문 설명서를 보려면 Python에 대한 Terraform CDK Databricks 공급자 생성 참조를 참조하세요.

    #!/usr/bin/env python
    from constructs import Construct
    from cdktf import (
      App, TerraformStack, TerraformOutput
    )
    from cdktf_cdktf_provider_databricks import (
      data_databricks_current_user,
      job, notebook, provider
    )
    import vars
    from base64 import b64encode
    
    class MyStack(TerraformStack):
      def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)
    
        provider.DatabricksProvider(
          scope = self,
          id    = "databricksAuth"
        )
    
        current_user = data_databricks_current_user.DataDatabricksCurrentUser(
          scope     = self,
          id_       = "currentUser"
        )
    
        # Define the notebook.
        my_notebook = notebook.Notebook(
          scope          = self,
          id_            = "notebook",
          path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
          language       = "PYTHON",
          content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
        )
    
        # Define the job to run the notebook.
        my_job = job.Job(
          scope = self,
          id_ = "job",
          name = f"{vars.resource_prefix}-job",
          task = [ 
            job.JobTask(
              task_key = f"{vars.resource_prefix}-task",
              new_cluster = job.JobTaskNewCluster(
                num_workers   = vars.num_workers,
                spark_version = vars.spark_version,
                node_type_id  = vars.node_type_id
              ),
              notebook_task = job.JobTaskNotebookTask(
                notebook_path = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py"
              ),
              email_notifications = job.JobTaskEmailNotifications(
                on_success = [ current_user.user_name ],
                on_failure = [ current_user.user_name ]
              )
            )
          ]
        )
    
        # Output the notebook and job URLs.
        TerraformOutput(
          scope = self,
          id    = "Notebook URL",
          value = my_notebook.url
        )
    
        TerraformOutput(
          scope = self,
          id    = "Job URL",
          value = my_job.url
        )
    
    app = App()
    MyStack(app, "cdktf-demo")
    app.synth()
    
  3. 와 동일한 디렉터리에 이름이 지정된 vars.py 파일을 만듭니다 main.py. 다음 값을 고유 값으로 바꿔서 작업자 수, Spark 런타임 버전 문자열노드 유형과 같은 리소스 접두사 및 클러스터 설정을 지정합니다.

    #!/usr/bin/env python
    resource_prefix = "cdktf-demo"
    num_workers     = 1
    spark_version   = "14.3.x-scala2.12"
    node_type_id    = "Standard_D3_v2"
    

3단계: 리소스 배포

이 단계에서는 CDKTF CLI를 사용하여 기존 Azure Databricks 작업 영역에 정의된 Notebook과 이 Notebook을 실행하는 작업을 배포합니다.

  1. CDKTF 프로젝트에 해당하는 Terraform 코드를 생성합니다. 이렇게 하려면 cdktf synth 명령을 실행합니다.

    cdktf synth
    
  2. 변경하기 전에 보류 중인 리소스 변경 내용을 검토할 수 있습니다. 다음을 실행합니다:

    cdktf diff
    
  3. cdktf deploy 명령을 실행하여 Notebook 및 작업을 배포합니다.

    cdktf deploy
    
  4. 승인하라는 메시지가 표시되면 Enter 키를 누릅니다. Terraform이 Notebook 및 작업을 만들고 작업 영역에 배포합니다.

4단계: 리소스와 상호 작용

이 단계에서는 지정된 Notebook을 실행하는 Azure Databricks 작업 영역에서 작업을 실행합니다.

  1. 작업 영역에서 작업이 실행할 Notebook을 보려면 명령의 출력에 표시되는 cdk deploy 링크를 복사하고 웹 브라우저의 주소 표시줄에 붙여넣습니다.
  2. 작업 영역에서 Notebook을 실행하는 작업을 보려면 명령의 출력에 표시되는 cdk deploy 링크를 복사하고 웹 브라우저의 주소 표시줄에 붙여넣습니다.
  3. 작업을 실행하려면 작업 페이지에서 지금 실행 단추를 클릭합니다.

(선택 사항) 5단계: 리소스 변경

이 선택적 단계에서는 Notebook의 코드를 변경하고, 변경된 Notebook을 다시 배포한 다음, 변경된 Notebook을 다시 실행하는 작업을 사용합니다.

Notebook을 변경하지 않으려면 6단계: 정리로 건너뜁니다.

  1. 파일에서 main.py 변수 선언을 notebook 다음에서 변경합니다.

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    )
    

    다음으로:

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b'''
    data = [
       { "Category": 'A', "ID": 1, "Value": 121.44 },
       { "Category": 'B', "ID": 2, "Value": 300.01 },
       { "Category": 'C', "ID": 3, "Value": 10.99 },
       { "Category": 'E', "ID": 4, "Value": 33.87}
    ]
    
    df = spark.createDataFrame(data)
    
    display(df)
    ''').decode("UTF-8")
    )
    

    참고 항목

    아래와 같이 큰따옴표(''')가 있는 코드 줄이 코드 편집기의 가장자리에 맞춰지도록 합니다. 그렇지 않으면 Terraform은 새 Python 코드가 실행되지 않을 수 있는 추가 공백을 Notebook에 삽입합니다.

  2. CDKTF 프로젝트에 해당하는 Terraform 코드를 다시 생성합니다. 이렇게 하려면 다음을 실행합니다.

    cdktf synth
    
  3. 변경하기 전에 보류 중인 리소스 변경 내용을 검토할 수 있습니다. 다음을 실행합니다:

    cdktf diff
    
  4. cdktf deploy 명령을 실행하여 Notebook 변경 내용을 배포합니다.

    cdktf deploy
    
  5. 승인하라는 메시지가 표시되면 Enter 키를 누릅니다. Terraform이 Notebook 콘텐츠를 변경합니다.

  6. 작업 영역에서 작업이 실행할 변경된 Notebook을 보려면 앞에서 연 Notebook을 새로고침하거나 명령의 출력에 표시되는 cdk deploy 링크를 복사하고 웹 브라우저의 주소 표시줄에 붙여넣습니다.

  7. 작업 영역에서 변경된 Notebook을 실행하는 작업을 보려면 앞에서 연 작업을 새로고침하거나 명령의 출력에 표시되는 cdk deploy 링크를 복사하고 웹 브라우저의 주소 표시줄에 붙여넣습니다.

  8. 작업을 실행하려면 작업 페이지에서 지금 실행 단추를 클릭합니다.

6단계: 정리

이 단계에서 CDKTF CLI를 사용하여 Azure Databricks 작업 영역에서 Notebook 및 작업을 제거합니다.

  1. cdktf destroy 명령을 실행하여 작업 영역에서 리소스를 제거합니다.

    cdktf destroy
    
  2. 승인하라는 메시지가 표시되면 Enter 키를 누릅니다. Terraform이 작업 영역에서 리소스를 제거합니다.

테스트

CDKTF 프로젝트를 배포하기 전에 테스트할 수 있습니다. CDKTF 설명서의 단위 테스트를 참조하세요.

Python 기반 CDKTF 프로젝트의 경우 패키지 의 클래스와 함께 cdktf Python 테스트 프레임워크 Testing를 사용하여 테스트를 작성하고 실행할 수 있습니다. 명명된 test_main.py 다음 예제 파일은 이 문서의 이전 파일에서 CDKTF 코드를 테스트합니다 main.py . 첫 번째 테스트는 프로젝트의 Notebook에 Notebook 콘텐츠의 예상 Base64로 인코딩된 표현이 포함되는지 여부를 확인합니다. 두 번째 테스트는 프로젝트의 작업에 예상된 작업 이름이 포함되는지 여부를 확인합니다. 이러한 테스트를 실행하려면 프로젝트의 루트 디렉터리에서 명령을 실행 pytest 합니다.

from cdktf import App, Testing
from cdktf_cdktf_provider_databricks import job, notebook
from main import MyStack

class TestMain:
  app = App()
  stack = MyStack(app, "cdktf-demo")
  synthesized = Testing.synth(stack)

  def test_notebook_should_have_expected_base64_content(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = notebook.Notebook.TF_RESOURCE_TYPE,
      properties = {
        "content_base64": "ZGlzcGxheShzcGFyay5yYW5nZSgxMCkp"
      }
    )

  def test_job_should_have_expected_job_name(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = job.Job.TF_RESOURCE_TYPE,
      properties = {
        "name": "cdktf-demo-job"
      }
    )

추가 리소스