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
zamiastpython
. Jeśli tak, zastąp wartośćpython
wpython3
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:
- Uwierzytelnianie osobistego tokenu dostępu usługi Azure Databricks (
databricks:authType pat
) - Uwierzytelnianie tożsamości zarządzanych platformy Azure (
databricks:authType azure-msi
) - Uwierzytelnianie jednostki usługi MS Entra (
databricks:authType azure-client-secret
) - Uwierzytelnianie interfejsu wiersza polecenia platformy Azure (
databricks:authType azure-cli
)
- Uwierzytelnianie osobistego tokenu dostępu 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.
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
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.
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.
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.
Po wyświetleniu monitu o nazwę projektu zaakceptuj domyślną nazwę
pulumi-demo
projektu, naciskając Enter.Po wyświetleniu monitu o opis projektu wprowadź
A demo Python Pulumi Databricks project
i naciśnij Enter.po wyświetleniu monitu o nazwę stosu zaakceptuj domyślną nazwę stosu
dev
, naciskając Enter. Aplikacja Pulumi tworzy następujące pliki i podkatalog wpulumi-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.
Wykonaj początkowe wdrożenie stosu projektu
dev
, uruchamiając następujące polecenie:pulumi up
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.
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 dlapulumi-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.
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)
Zdefiniuj wartość konfiguracji o nazwie
resource-prefix
i ustaw ją na wartość zakodowanąpulumi-demo
w 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ść zmiennejresource_prefix
bez zmiany zawartości__main__.py
pliku.Zdefiniuj wartość konfiguracji o nazwie
node-type
i 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
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ładhttps://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.
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
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życiapip3
programu zamiastpip
. Jeśli tak, zastąp wartośćpip
wpip3
całym tym artykule.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.
Utwórz i wdróż zasoby w obszarze roboczym usługi Azure Databricks, uruchamiając następujące polecenie:
pulumi up
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.
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.
- 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.
- 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.
- Aby uruchomić zadanie, kliknij przycisk Uruchom teraz na stronie zadania.
- 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.
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.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.
Wdróż zmianę zasobu w obszarze roboczym usługi Azure Databricks, uruchamiając następujące polecenie:
pulumi up
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.
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.
Aby wyświetlić zmieniony notes w obszarze roboczym, skopiuj wyświetlony link Adres URL notesu i wklej go na pasku adresu przeglądarki internetowej.
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.
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.
Usuń zasoby z obszaru roboczego usługi Azure Databricks, uruchamiając następujące polecenie:
pulumi destroy
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.
Usuń projekt Pulumi i jego
dev
stos z konta Pulumipulumi-demo
w trybie online, uruchamiając następujące polecenie:pulumi stack rm dev
Po wyświetleniu monitu o usunięcie wpisz
dev
, a następnie naciśnij Enter.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: