Terraform na platformie Azure
Skonfiguruj dostawcę Terraform AzureRM, napisz podstawowy plan infrastruktury i dowiedz się, kiedy warto wybrać Terraform zamiast natywnych narzędzi ARM/Bicep.
Terraform na platformie Azure to bezpłatna lekcja Azure Fundamentals na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Azure Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Czym jest Terraform i dlaczego Azure?
Terraform to opracowane przez firmę HashiCorp narzędzie open source do zarządzania infrastrukturą jako kodem. W przeciwieństwie do Bicep Terraform jest niezależny od dostawcy chmury — jedna baza kodu Terraform może jednocześnie zarządzać zasobami na platformach Azure, AWS, GCP i u wielu innych dostawców. Na platformie Azure Terraform korzysta z dostawcy AzureRM do komunikacji z interfejsem API ARM, dzięki czemu jest popularnym wyborem w środowiskach wielochmurowych.
Dostawca Terraform AzureRM
Dostawca AzureRM to wtyczka, którą Terraform pobiera i wykorzystuje do tłumaczenia konfiguracji Terraform na wywołania interfejsu API ARM. Jest utrzymywana przez firmy HashiCorp i Microsoft oraz stanowi oficjalny sposób zarządzania zasobami platformy Azure za pomocą Terraform. Skonfiguruj dostawcę, podając identyfikator subskrypcji i metodę uwierzytelniania, a następnie uruchom terraform init, aby go pobrać.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Struktura plików Terraform
Typowy projekt Terraform dla platformy Azure jest podzielony na kilka plików .tf: plik main.tf zawiera deklaracje zasobów, variables.tf definiuje zmienne wejściowe, outputs.tf definiuje wartości wyjściowe, a terraform.tfvars zawiera wartości zmiennych dla konkretnego środowiska. Terraform automatycznie ładuje wszystkie pliki .tf z bieżącego katalogu, dlatego podział na wiele plików służy wyłącznie czytelności.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Deklarowanie zasobów platformy Azure
W Terraform zasoby platformy Azure deklaruje się za pomocą bloków resource. Typem bloku jest resource, po którym podaje się typ zasobu AzureRM (np. 'azurerm_resource_group') oraz nazwę lokalną używaną do odwoływania się do zasobu w konfiguracji. Nazwy właściwości w Terraform zapisuje się w konwencji snake_case, a nie w konwencji camelCase lub PascalCase używanej w ARM JSON.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}Proces Terraform: Init, Plan, Apply
Podstawowy proces Terraform składa się z trzech etapów. terraform init pobiera dostawcę AzureRM i konfiguruje backend. terraform plan porównuje konfigurację z bieżącym stanem i wyświetla różnice dotyczące zasobów, które zostaną utworzone, zmienione lub usunięte — podobnie jak funkcja what-if w ARM. terraform apply wykonuje plan i aktualizuje platformę Azure tak, aby odpowiadała konfiguracji.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyStan Terraform
Terraform przechowuje plik stanu (terraform.tfstate), w którym zapisuje bieżący stan wszystkich zarządzanych zasobów i mapuje je na konfigurację. Dzięki temu plikowi Terraform może wykrywać rozbieżności między konfiguracją a zasobami istniejącymi na platformie Azure. W środowiskach zespołowych stan należy przechowywać zdalnie na koncie Azure Storage Account (backend Terraform), aby wszyscy członkowie zespołu korzystali z tego samego pliku stanu.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Uwierzytelnianie Terraform na platformie Azure
Terraform obsługuje kilka metod uwierzytelniania na platformie Azure. Podczas pracy lokalnej użyj az login (uwierzytelnianie za pomocą Azure CLI) — Terraform automatycznie pobierze dane uwierzytelniające. W potokach CI/CD użyj obiektu Service Principal z wpisem tajnym klienta lub certyfikatem, przekazanym za pomocą zmiennych środowiskowych. W przypadku agentów lub maszyn wirtualnych hostowanych na platformie Azure użyj obiektu Managed Identity, aby zapewnić najbezpieczniejsze uwierzytelnianie bez wpisów tajnych.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planModuły Terraform wielokrotnego użytku
Podobnie jak moduły Bicep, moduły Terraform umożliwiają pakowanie i ponowne wykorzystywanie wzorców infrastruktury. Moduł to katalog zawierający pliki .tf. Odwołuje się do niego za pomocą bloku module, przekazuje dane wejściowe przez variables i korzysta z wartości wyjściowych. Terraform Registry zawiera setki modułów platformy Azure utworzonych przez społeczność i zweryfikowanych, których można używać bezpośrednio, na przykład modułu sieciowego AzureRM.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}Kiedy wybrać Terraform, a kiedy Bicep
Wybierz Bicep, gdy organizacja korzysta wyłącznie z platformy Azure i zależy jej na ścisłej integracji z nowymi funkcjami platformy Azure (Bicep obsługuje nowe typy zasobów od pierwszego dnia). Wybierz Terraform, gdy zarządzasz zasobami u wielu dostawców chmury, potrzebujesz rozbudowanego ekosystemu modułów społeczności lub preferujesz składnię HCL i zestaw narzędzi HashiCorp. Oba rozwiązania sprawdzają się we wdrożeniach wyłącznie na platformie Azure — często decydują preferencje organizacji.
Importowanie istniejących zasobów
Jeśli zasoby już istnieją na platformie Azure i zostały utworzone przed rozpoczęciem korzystania z Terraform, można objąć je zarządzaniem Terraform za pomocą terraform import. To polecenie pobiera bieżący stan zasobu i dodaje go do pliku stanu Terraform. Po zaimportowaniu zasobu należy ręcznie napisać odpowiadający mu blok konfiguracji, dopasować go do zaimportowanego zasobu, a następnie uruchomić terraform plan, aby potwierdzić brak różnic.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Najlepsze praktyki Terraform na platformie Azure
Podczas korzystania z Terraform na platformie Azure należy stosować następujące najlepsze praktyki: przechowywać stan zdalnie w usłudze Azure Blob Storage z włączoną blokadą stanu, używać obszarów roboczych lub oddzielnych plików stanu dla różnych środowisk, nigdy nie zatwierdzać wpisów tajnych w kontroli źródła — zamiast tego używać źródeł danych Azure Key Vault, przypinać wersje dostawców, aby uniknąć zmian powodujących niezgodność, oraz uruchamiać Terraform w potoku CI/CD (Azure Pipelines lub GitHub Actions) z bramkami zatwierdzania planu.
Szybki sprawdzian
Sprawdź swoją wiedzę na temat zagadnień Microsoft Azure Fundamentals (AZ-900) przedstawionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo następujące zagadnienia: Terraform to niezależne od chmury narzędzie IaC, które za pomocą dostawcy AzureRM zarządza zasobami platformy Azure; proces init, plan, apply umożliwia bezpieczne i przewidywalne wdrożenia; a zdalny stan w usłudze Azure Blob Storage jest niezbędny do współpracy zespołowej. Następnie omówimy tworzenie planów App Service i aplikacji Web Apps.
Często zadawane pytania
Czy lekcja „Terraform na platformie Azure” jest bezpłatna?
Tak — pełny tekst „Terraform na platformie Azure” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Azure Fundamentals, przejdź na CoddyKit PRO. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Terraform na platformie Azure”?
Skonfiguruj dostawcę Terraform AzureRM, napisz podstawowy plan infrastruktury i dowiedz się, kiedy warto wybrać Terraform zamiast natywnych narzędzi ARM/Bicep. Ćwiczysz Azure Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Azure Fundamentals?
Nie wymagamy żadnego doświadczenia. Azure Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Terraform na platformie Azure”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Azure Fundamentals?
Tak. Każda lekcja Azure Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Jak działa Azure Resource Manager
- Pisanie szablonów ARM
- Bicep: nowoczesna infrastruktura Azure jako kod
- Terraform na platformie Azure