Udostępnij za pośrednictwem


Dostawca zasobów usługi Pulumi Databricks

Uwaga

W tym artykule opisano rozwiązanie Pulumi, które nie jest ani udostępniane ani obsługiwane przez usługę Databricks. Aby skontaktować się z dostawcą, zobacz Pomoc techniczna aplikacji Pulumi.

W tym artykule pokazano, jak używać języków Python i Pulumi, innej firmy, platformy infrastruktury jako kodu (IaC), która umożliwia tworzenie, wdrażanie i zarządzanie zasobami usługi Azure Databricks przy użyciu znanych języków programowania, narzędzi i praktyk inżynieryjnych. Chociaż w tym artykule pokazano, jak używać języka Python i dostawcy zasobów usługi Pulumi Databricks, pulumi obsługuje inne języki oprócz języka Python dla usługi Azure Databricks, w tym TypeScript, JavaScript, Go i C#.

Dostawca zasobów usługi Pulumi Databricks jest oparty na dostawcy narzędzia Terraform usługi Databricks. Aby uzyskać więcej informacji, zobacz Terraform Cloud.

Wymagania

  • Konto Pulumi. Zarejestruj się w aplikacji Pulumi, jeśli nie masz jeszcze konta pulumi. Aplikacja Pulumi jest bezpłatna dla użytkowników indywidualnych i oferuje bezpłatną warstwę dla zespołów.

  • Środowisko Python w wersji 3.6 lub nowszej. Aby sprawdzić, czy masz zainstalowany język Python, uruchom polecenie python --version z poziomu terminalu lub programu PowerShell. Zainstaluj język Python, jeśli jeszcze go nie zainstalowano.

    Uwaga

    Niektóre instalacje języka Python mogą wymagać użycia polecenia python3 zamiast python. Jeśli tak, zastąp wartość python w python3 całym tym artykule.

  • Adres URL usługi Azure Databricks dla obszaru roboczego, na przykład https://adb-1234567890123456.7.azuredatabricks.net.

  • Poświadczenia dostępu do usługi Azure Databricks. Projekty pulumi Databricks obsługują następujące typy uwierzytelniania usługi Azure Databricks:

W poniższych krokach pokazano, jak utworzyć projekt usługi Pulumi Databricks przy użyciu języka Python. Aby zapoznać się z samouczkiem z perspektywy najpierw dostawcy usług w chmurze, zobacz Wprowadzenie do platformy Azure w dokumentacji aplikacji Pulumi. Aby zapoznać się z samouczkiem z perspektywy języka programowania, zobacz Python, Node.js (JavaScript, TypeScript), Go i .NET (C#, VB, F#) w dokumentacji aplikacji Pulumi.

Krok 1. Tworzenie projektu Pulumi

W tym kroku na lokalnym komputerze deweloperskim skonfigurowaliśmy niezbędną strukturę katalogów dla projektu Pulumi. Następnie utworzysz projekt Pulumi w tej strukturze katalogów.

  1. W terminalu lub za pomocą programu PowerShell utwórz pusty katalog, a następnie przejdź do niego, na przykład:

    Unix, Linux i macOS

    mkdir pulumi-demo
    cd pulumi-demo
    

    Windows

    md pulumi-demo
    cd pulumi-demo
    
  2. Zainstaluj aplikację Pulumi, uruchamiając następujące polecenie w zależności od systemu operacyjnego:

    Unix, Linux

    Zainstaluj program Pulumi w systemie Unix lub Linux przy użyciu narzędzia curl:

    curl -fsSL https://get.pulumi.com | sh
    

    MacOS

    Zainstaluj oprogramowanie Pulumi w systemie macOS przy użyciu oprogramowania Homebrew:

    brew install pulumi/tap/pulumi
    

    Windows

    Zainstaluj program Pulumi w systemie Windows przy użyciu programu PowerShell z podwyższonym poziomem uprawnień za pośrednictwem menedżera pakietów Chocolatey:

    choco install pulumi
    

    Aby uzyskać alternatywne opcje instalacji programu Pulumi, zobacz Pobieranie i instalowanie w dokumentacji aplikacji Pulumi.

  3. Utwórz podstawowy projekt Pulumi języka Python, uruchamiając następujące polecenie:

    pulumi new python
    

    Napiwek

    Możesz również utworzyć projekt Pulumi na koncie Pulumi w trybie online (Projekty > utwórz projekt). Nie ma jednak szablonu projektu dla usługi Azure Databricks.

  4. Jeśli zostanie wyświetlony monit, naciśnij Enter , a następnie użyj przeglądarki internetowej, aby zalogować się do konta Pulumi w trybie online, jeśli jeszcze się nie zalogowano. Po zalogowaniu wróć do terminalu lub programu PowerShell.

  5. Po wyświetleniu monitu o nazwę projektu zaakceptuj domyślną nazwę pulumi-demo projektu, naciskając Enter.

  6. Po wyświetleniu monitu o opis projektu wprowadź A demo Python Pulumi Databricks project i naciśnij Enter.

  7. po wyświetleniu monitu o nazwę stosu zaakceptuj domyślną nazwę stosudev, naciskając Enter. Aplikacja Pulumi tworzy następujące pliki i podkatalog w pulumi-demo katalogu:

    • Pulumi.yaml, która jest listą ustawień projektu Pulumi.
    • __main__.py, który zawiera kod języka Python pisany dla projektu Pulumi.
    • requirements.txt, która jest listą obsługi pakietów kodu języka Python instalowanych przez program Pulumi dla projektu.
    • .gitignore, która jest listą plików i katalogów, które usługa Git ignoruje, jeśli chcesz wypchnąć ten projekt do zdalnego repozytorium Git.
    • Podkatalog venv zawiera pomocniczy kod środowiska wirtualnego języka Python używany przez program Pulumi dla projektu.
  8. Wykonaj początkowe wdrożenie stosu projektu dev , uruchamiając następujące polecenie:

    pulumi up
    
  9. Po wyświetleniu monitu o wykonanie tej aktualizacji naciśnij strzałki w górę, aby przejść do pozycji tak , a następnie naciśnij Enter.

  10. Skopiuj wyświetlony link Wyświetl na żywo i wklej go na pasku adresu przeglądarki internetowej, co spowoduje przejście do konta Pulumi w trybie online. Zostaną dev wyświetlone szczegóły działania stosu dla pulumi-demo projektu. Obecnie nie ma zbyt wiele do zobaczenia, ponieważ nie ma jeszcze żadnych zasobów w stosie. Te zasoby są tworzone w następnym kroku.

Krok 2. Tworzenie zasobów usługi Databricks

W tym kroku użyjesz dostawcy zasobów usługi Pulumi Databricks do utworzenia istniejącego obszaru roboczego usługi Azure Databricks, notesu i zadania do uruchomienia tego notesu.

  1. W wygenerowanych plikach __main.py__ programu Pulumi użyj preferowanego edytora tekstów lub zintegrowanego środowiska projektowego (IDE), aby wprowadzić następujący kod. Ten kod deklaruje zasoby notesu i zadania usługi Pulumi Databricks oraz ich ustawienia:

    """A Python Pulumi program"""
    
    import pulumi
    from pulumi_databricks import *
    from base64 import b64encode
    
    # Get the authenticated user's workspace home directory path and email address.
    # See https://www.pulumi.com/registry/packages/databricks/api-docs/getcurrentuser
    user_home_path     = get_current_user().home
    user_email_address = get_current_user().user_name
    
    # Define the name prefix to prepend to the resource names that are created
    # for the Notebook and Job resources. To do this, you can use a Pulumi
    # configuration value instead of hard-coding the name prefix in this file.
    #
    # To set a Pulumi configuration value, run the following command, which sets
    # a "resource-prefix" configuration value to "pulumi-demo" in the
    # associated "Pulumi.<stack-name>.yaml" configuration file:
    #
    # pulumi config set resource-prefix "pulumi-demo"
    #
    # For more information about defining and retrieving hard-coded values, see
    # https://www.pulumi.com/docs/intro/concepts/config
    config = pulumi.config.Config()
    resource_prefix = config.require('resource-prefix')
    
    # Define cluster resource settings.
    node_type = config.require('node-type')
    
    # Create a Notebook resource.
    # See https://www.pulumi.com/registry/packages/databricks/api-docs/notebook
    # This example adds a single cell to the notebook, which is constructed from
    # a single base64-encoded string. In practice, you would replace this:
    #
    # language       = "PYTHON",
    # content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    #
    # With this:
    #
    # source         = "path/to/local/my-notebook.py"
    #
    # To provide more notebook content easier and faster. Also, the notebook's language
    # is automatically detected. If you specify a notebook path, be sure that it does
    # not end in .ipynb, as Pulumi relies on the workspace import API, which doesn't
    # rely on any specific extensions such as .ipynb in the notebook path.
    notebook = Notebook(
      resource_name  = f"{resource_prefix}-notebook",
      path           = f"{user_home_path}/Pulumi/{resource_prefix}-notebook.py",
      language       = 'PYTHON',
      content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    )
    
    # Export the URL of the Notebook, so that you can easily browse to it later.
    # See https://www.pulumi.com/docs/intro/concepts/stack/#outputs
    pulumi.export('Notebook URL', notebook.url)
    
    # Create a Job resource.
    # See https://www.pulumi.com/registry/packages/databricks/api-docs/job
    # This job uses the most recent Databricks Runtime long-term support (LTS)
    # runtime programmatic version ID at the time this article was first published,
    # which is 14.3.x-scala2.12. You can replace this with a later version.
    job = Job(
      resource_name = f"{resource_prefix}-job",
      name = f"{resource_prefix}-job",
      tasks = [
        JobTaskArgs(
          task_key = f"{resource_prefix}-task",
          new_cluster   = JobNewClusterArgs(
            num_workers   = 1,
            spark_version = "14.3.x-scala2.12",
            node_type_id  = node_type
          ),
          notebook_task = JobNotebookTaskArgs(
            notebook_path = f"{user_home_path}/Pulumi/{resource_prefix}-notebook.py"
          )
        )
      ],
      email_notifications = JobEmailNotificationsArgs(
        on_successes = [ user_email_address ],
        on_failures  = [ user_email_address ]
      )
    )
    
    # Export the URL of the Job, so that you can easily browse to it later.
    # See https://www.pulumi.com/docs/intro/concepts/stack/#outputs
    pulumi.export('Job URL', job.url)
    
  2. Zdefiniuj wartość konfiguracji o nazwie resource-prefixi ustaw ją na wartość zakodowaną pulumi-demow formacie , uruchamiając następujące polecenie. Aplikacja Pulumi używa tej wartości konfiguracji, aby nazwać notes i zadanie:

    pulumi config set resource-prefix "pulumi-demo"
    

    Aplikacja Pulumi tworzy plik o nazwie Pulumi.dev.yaml w tym samym katalogu co __main__.py plik i dodaje następujący kod do tego pliku YAML:

    config:
      pulumi-demo:resource_prefix: pulumi-demo
    

    Użycie wartości konfiguracji pozwala kodowi być bardziej modularny i wielokrotnego użytku. Teraz ktoś inny może ponownie użyć pliku __main__.py i zdefiniować inną wartość zmiennej resource_prefix bez zmiany zawartości __main__.py pliku.

  3. Zdefiniuj wartość konfiguracji o nazwie node-typei ustaw ją na następującą ustaloną wartość, uruchamiając następujące polecenie. Aplikacja Pulumi używa tej wartości konfiguracji do określenia typu klastra, w ramach którego działa zadanie.

    pulumi config set node-type "Standard_D3_v2"
    

    Zawartość Pulumi.dev.yaml pliku wygląda teraz następująco:

    config:
      pulumi-demo:node-type: Standard_D3_v2
      pulumi-demo:resource-prefix: pulumi-demo
    
  4. Aby umożliwić aplikacji Pulumi uwierzytelnianie w obszarze roboczym usługi Azure Databricks, zdefiniuj określone wartości konfiguracji usługi Azure Databricks, uruchamiając powiązane polecenia. Na przykład w przypadku uwierzytelniania osobistego tokenu dostępu usługi Azure Databricks uruchom następujące polecenia. W tych poleceniach:

    • Zastąp <workspace-instance-url> ciąg adresem URL obszaru roboczego, na przykład https://adb-1234567890123456.7.azuredatabricks.net.

    • Zastąp <access-token> ciąg wartością tokenu dostępu. Pamiętaj, aby określić --secret opcję. Spowoduje to, że aplikacja Pulumi szyfruje token dostępu jako najlepsze rozwiązanie w zakresie zabezpieczeń.

      Uwaga

      Domyślnie pulumi używa klucza szyfrowania dla stosu zarządzanego przez usługę Pulumi Service i soli dla wartości do szyfrowania wartości. Aby użyć alternatywnego dostawcy szyfrowania, zobacz Konfigurowanie szyfrowania wpisów tajnych w dokumentacji aplikacji Pulumi.

    pulumi config set databricks:host "<workspace-instance-url>"
    pulumi config set databricks:token "<access-token>" --secret
    

    Zawartość Pulumi.dev.yaml pliku wygląda teraz następująco:

    config:
      databricks:host: <your-workspace-instance-url>
      databricks:token:
        secure: <an-encrypted-version-of-your-access-token>
      pulumi-demo:node-type: Standard_D3_v2
      pulumi-demo:resource_prefix: pulumi-demo
    

    Aby użyć innego typu uwierzytelniania usługi Azure Databricks, zobacz Wymagania. Zobacz również artykuł Configuration in the Pulumi Databricks repository in GitHub (Konfiguracja w repozytorium Pulumi Databricks w usłudze GitHub).

Krok 3. Wdrażanie zasobów

W tym kroku aktywujesz środowisko wirtualne języka Python, które pulumi udostępnia dla projektu w ramach uruchamiania szablonu projektu Pulumi Python. To środowisko wirtualne pomaga zapewnić, że używasz poprawnej wersji języka Python, Pulumi i dostawcy zasobów usługi Pulumi Databricks. Dostępnych jest kilka platform środowiska wirtualnego języka Python, takich jak venv, virtualenv i pipenv. W tym artykule i szablonie projektu Pulumi Python użyj polecenia venv. venv jest już dołączony do języka Python. Aby uzyskać więcej informacji, zobacz Tworzenie środowisk wirtualnych.

  1. Aktywuj środowisko wirtualne języka Python, uruchamiając następujące polecenie z pulumi-demo katalogu w zależności od systemu operacyjnego i typu powłoki:

    Platforma Powłoka Polecenie aktywowania środowiska wirtualnego
    Unix, Linux, macOS bash/zsh source venv/bin/activate
    ryba source venv/bin/activate.fish
    csh/tcsh source venv/bin/activate.csh
    PowerShell Core venv/bin/Activate.ps1
    Windows cmd.exe venv\Scripts\activate.bat
    PowerShell venv\Scripts\Activate.ps1
  2. Zainstaluj dostawcę zasobów usługi Pulumi Databricks z poziomu indeksu pakietów języka Python (PyPI) w środowisku wirtualnym, uruchamiając następujące polecenie:

    pip install pulumi-databricks
    

    Uwaga

    Niektóre instalacje pip programu mogą wymagać użycia pip3 programu zamiast pip. Jeśli tak, zastąp wartość pip w pip3 całym tym artykule.

  3. Wyświetl podgląd zasobów utworzonych przez program Pulumi, uruchamiając następujące polecenie:

    pulumi preview
    

    Jeśli zgłoszono jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.

    Aby wyświetlić szczegółowy raport na koncie Pulumi w trybie online tego, co zrobi Pulumi, skopiuj wyświetlony link Wyświetl na żywo i wklej go na pasku adresu przeglądarki internetowej.

  4. Utwórz i wdróż zasoby w obszarze roboczym usługi Azure Databricks, uruchamiając następujące polecenie:

    pulumi up
    
  5. Po wyświetleniu monitu o wykonanie tej aktualizacji naciśnij strzałki w górę, aby przejść do pozycji tak , a następnie naciśnij Enter. Jeśli zgłoszono jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.

  6. Aby wyświetlić szczegółowy raport na koncie Pulumi w trybie online tego, co zrobił Pulumi, skopiuj wyświetlony link Wyświetl na żywo i wklej go na pasku adresu przeglądarki internetowej.

Krok 4. Interakcja z zasobami

W tym kroku uruchomisz zadanie w obszarze roboczym usługi Azure Databricks, który uruchamia określony notes.

  1. Aby wyświetlić notes, który zadanie zostanie uruchomione w obszarze roboczym, skopiuj wyświetlony link Adres URL notesu i wklej go na pasku adresu przeglądarki internetowej.
  2. Aby wyświetlić zadanie uruchamiające notes w obszarze roboczym, skopiuj wyświetlony link Adres URL zadania i wklej go na pasku adresu przeglądarki internetowej.
  3. Aby uruchomić zadanie, kliknij przycisk Uruchom teraz na stronie zadania.
  4. Po zakończeniu działania zadania, aby wyświetlić wyniki przebiegu zadania, na liście Ukończone przebiegi (ostatnie 60 dni) na stronie zadania kliknij ostatni wpis czasu w kolumnie Godzina rozpoczęcia. W okienku Dane wyjściowe zostanie wyświetlony wynik uruchomienia kodu notesu, który wyświetla liczby od 1 do 10.

(Opcjonalnie) Krok 5. Wprowadzanie zmian w zasobie

W tym opcjonalnym kroku zmienisz kod notesu, ponownie wdrożysz zmieniony notes, a następnie użyjesz zadania, aby ponownie uruchomić zmieniony notes.

Jeśli nie chcesz wprowadzać żadnych zmian w notesie, przejdź do kroku 6: Czyszczenie.

  1. Wróć do __main.py__ pliku, zmień ten wiersz kodu:

    content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    

    W tym celu, a następnie zapisz plik:

      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")
    

    Ta zmiana powoduje, że notes wyświetli zawartość określonej ramki danych zamiast cyfr od 1 do 10.

    Uwaga

    Upewnij się, że wiersze kodu rozpoczynające się od data i kończące ''').decode("UTF-8") się na są wyrównane do krawędzi edytora kodu. W przeciwnym razie pulumi wstawi dodatkowe białe znaki do notesu, co może spowodować niepowodzenie uruchomienia nowego kodu języka Python.

  2. Opcjonalnie wyświetl podgląd zasobu, który zostanie zmieniony przez program Pulumi, uruchamiając następujące polecenie:

    pulumi preview
    

    Jeśli zgłoszono jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.

    Aby wyświetlić szczegółowy raport na koncie Pulumi w trybie online tego, co zrobi Pulumi, skopiuj wyświetlony link Wyświetl na żywo i wklej go na pasku adresu przeglądarki internetowej.

  3. Wdróż zmianę zasobu w obszarze roboczym usługi Azure Databricks, uruchamiając następujące polecenie:

    pulumi up
    
  4. Po wyświetleniu monitu o wykonanie tej aktualizacji naciśnij strzałki w górę, aby przejść do pozycji tak , a następnie naciśnij Enter. Jeśli zgłoszono jakiekolwiek błędy, napraw je, a następnie uruchom polecenie ponownie.

  5. Aby wyświetlić szczegółowy raport na koncie Pulumi w trybie online tego, co zrobił Pulumi, skopiuj wyświetlony link Wyświetl na żywo i wklej go na pasku adresu przeglądarki internetowej.

  6. Aby wyświetlić zmieniony notes w obszarze roboczym, skopiuj wyświetlony link Adres URL notesu i wklej go na pasku adresu przeglądarki internetowej.

  7. Aby ponownie uruchomić zadanie ze zmienionym notesem, skopiuj wyświetlony link Adres URL zadania i wklej go na pasku adresu przeglądarki internetowej. Następnie kliknij przycisk Uruchom teraz na stronie zadania.

  8. Po zakończeniu działania zadania, aby wyświetlić wyniki przebiegu zadania, na liście Ukończone przebiegi (ostatnie 60 dni) na stronie zadania kliknij ostatni wpis czasu w kolumnie Godzina rozpoczęcia. W okienku Dane wyjściowe zostanie wyświetlony wynik uruchomienia kodu notesu, który wyświetla zawartość określonej ramki danych.

Krok 6. Czyszczenie

W tym kroku poinstruujesz aplikację Pulumi, aby usunąć notes i zadanie z obszaru roboczego usługi Azure Databricks, a także usunąć pulumi-demo projekt i jego dev stos z konta Pulumi w trybie online.

  1. Usuń zasoby z obszaru roboczego usługi Azure Databricks, uruchamiając następujące polecenie:

    pulumi destroy
    
  2. Po wyświetleniu monitu o usunięcie naciśnij strzałki w górę, aby przejść do pozycji tak , a następnie naciśnij Enter.

  3. Usuń projekt Pulumi i jego dev stos z konta Pulumi pulumi-demo w trybie online, uruchamiając następujące polecenie:

    pulumi stack rm dev
    
  4. Po wyświetleniu monitu o usunięcie wpisz dev , a następnie naciśnij Enter.

  5. Aby dezaktywować venv środowisko wirtualne języka Python, uruchom następujące polecenie:

    deactivate
    

Testowanie

Projekt Pulumi można przetestować przed jego wdrożeniem. Zobacz Testowanie programów Pulumi w dokumentacji pulumi.

W celu testowania jednostkowego projektów Pulumi opartych na języku Python można pisać i uruchamiać testy jednostkowe przy użyciu struktury testowej języka Python wraz z przestrzenią nazw pulumi.runtime pakietu Pulumi.runtime. Aby uruchomić testy pod kątem symulowanych zasobów, zastąp wywołania do aplikacji Pulumi (i azure Databricks) pozorami. Zobacz Artykuł Testy jednostkowe programów Pulumi w dokumentacji pulumi.

Poniższy przykładowy plik o nazwie infra.py makiety implementacji notesu i zadania zadeklarowanego w pliku tego artykułu main.py . Testy jednostkowe w tym przykładzie sprawdzają, czy zawartość notesu zakodowana w formacie Base64, nazwa zadania i adresat wiadomości e-mail pod kątem pomyślnego zadania uruchamia wszystkie oczekiwane wartości. W związku z tym tylko te powiązane właściwości są wyśmiewane tutaj z przykładowymi wartościami. Ponadto wymagane wartości właściwości zasobu muszą być zawsze podane, nawet jeśli nie planujesz ich używać w testach jednostkowych. W tym przykładzie te wymagane wartości są ustawione na wartości losowe my-mock- , a te wartości nie są testowane.

# infra.py

from pulumi_databricks import (
  Notebook,
  Job,
  JobEmailNotificationsArgs
)

notebook = Notebook(
  resource_name  = 'my-mock-notebook-resource-name',
  path           = 'my-mock-notebook-path',
  content_base64 = 'ZGlzcGxheShzcGFyay5yYW5nZSgxMCkp'
)

job = Job(
  resource_name = 'my-mock-job-resource-name',
  name          = 'pulumi-demo-job',
  email_notifications = JobEmailNotificationsArgs(
    on_successes = [ 'someone@example.com' ]
  )
)

Poniższy przykładowy plik test_main.py sprawdza, czy powiązane właściwości zwracają oczekiwane wartości.

# test_main.py

import pulumi
from pulumi_databricks import *
import unittest
import infra

# Set up mocking.
class MyMocks(pulumi.runtime.Mocks):
  def new_resource(self, type_, name, inputs, provider, id_):
    return [name + '_id', inputs]

  def call(self, token, args, provider):
    return {}

pulumi.runtime.set_mocks(MyMocks())

class TestNotebookAndJob(unittest.TestCase):
  @pulumi.runtime.test
  def test_notebook(self):
    def check_notebook_content_base64(args):
      content_base64 = args
      # Does the notebook's Base64-encoded content match the expected value?
      self.assertIn('ZGlzcGxheShzcGFyay5yYW5nZSgxMCkp', content_base64)

    # Pass the mocked notebook's content_base64 property value to the test.
    return pulumi.Output.all(infra.notebook.content_base64).apply(check_notebook_content_base64)

  @pulumi.runtime.test
  def test_job(self):
    def check_job_name_and_email_onsuccesses(args):
      name, email_notifications = args
      # Does the job's name match the expected value?
      self.assertIn('pulumi-demo-job', name)
      # Does the email address for successful job runs match the expected value?
      self.assertIn('someone@example.com', email_notifications['on_successes'])

    # Pass into the test the mocked job's property values for the job's name
    # and the job's email address for successful runs.
    return pulumi.Output.all(
      infra.job.name,
      infra.job.email_notifications
    ).apply(check_job_name_and_email_onsuccesses)

Aby uruchomić te testy i wyświetlić wyniki testu, uruchom następujące polecenie z katalogu głównego projektu Pulumi:

python -m unittest

Aby uzyskać informacje o innych rodzajach testów, które można uruchomić, zobacz następujące artykuły w dokumentacji aplikacji Pulumi:

Więcej zasobów