Generator Terraform AWS
Gotowy main.tf dla bucketu S3, instancji EC2 lub bazy RDS z tagami, outputami i bezpiecznymi ustawieniami domyślnymi.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Np. eu-central-1 (Frankfurt).
Unikalna w całym AWS, małe litery.
main.tf
Zasób
Region
Bloków resource
Linii
Rozmiar
Dostęp publiczny
Wszystkie 4 blokady włączone.
| Typ bloku | Adres w Terraform | Co robi |
|---|---|---|
| terraform | terraform | Wymagana wersja Terraform i providera AWS 5.x |
| provider | aws | Region eu-central-1 |
| resource | aws_s3_bucket.app_bucket | Bucket app-bucket |
| resource | aws_s3_bucket_versioning.app_bucket | Wersjonowanie obiektów włączone |
| resource | aws_s3_bucket_public_access_block.app_bucket | Blokada dostępu publicznego |
| output | app_bucket_id | Wartość po apply: id |
| output | app_bucket_arn | Wartość po apply: arn |
Zapisz plik jako main.tf w pustym katalogu i uruchom terraform init, terraform plan, terraform apply.
Ściąga: polecenia Terraform krok po kroku
| Polecenie | Do czego służy |
|---|---|
| terraform init | Pobiera providera hashicorp/aws i przygotowuje katalog roboczy (raz na początku i po zmianie wersji). |
| terraform fmt | Formatuje pliki .tf według stylu Terraform. |
| terraform validate | Sprawdza składnię i spójność konfiguracji bez tworzenia zasobów. |
| terraform plan -out=tfplan | Pokazuje, co zostanie utworzone, zmienione lub usunięte, i zapisuje plan. |
| terraform apply tfplan | Wykonuje zapisany plan w AWS. |
| terraform output | Wyświetla wartości z bloków output (np. ID, adres bazy). |
| terraform destroy | Usuwa wszystkie zasoby opisane w tej konfiguracji. |
AMI zależy od regionu
ID obrazu AMI jest inne w każdym regionie, a stare obrazy są wycofywane. Dlatego generator nie wpisuje stałego ID, tylko blok data "aws_ami", który przy plan wyszukuje najnowszy Amazon Linux 2023 lub Ubuntu 24.04. Typy Graviton (t4g, m6g, c7g) wymagają obrazu arm64, więc filtr dobiera architekturę do typu instancji.
Hasła i plik stanu
Wartość var.db_password zapisuje się w terraform.tfstate jawnym tekstem, nawet ze sensitive = true. Stan trzymaj w zdalnym, szyfrowanym backendzie z ograniczonym dostępem. Opcja Secrets Manager (manage_master_user_password) sprawia, że hasło tworzy i przechowuje AWS, a Terraform zna tylko ARN sekretu.
Reguły nazw
Bucket S3: 3–63 znaki, małe litery, cyfry, kropki i myślniki, nazwa unikalna w całym AWS. Identyfikator RDS: mała litera na początku, bez „--” i bez myślnika na końcu. Etykieta Terraform (np. app_bucket) powstaje z nazwy po zamianie znaków na „_”, a zaczynająca się cyfrą dostaje prefiks r_.
Bezpieczne ustawienia domyślne
S3 dostaje blokadę dostępu publicznego (4 przełączniki). EC2 wymaga IMDSv2, co utrudnia wykradzenie poświadczeń roli przez SSRF. RDS ma szyfrowany dysk. skip_final_snapshot = true jest wygodne w testach; na produkcji odznacz tę opcję, aby przed usunięciem bazy powstał snapshot.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator Terraform AWS
Terraform opisuje infrastrukturę jako kod. Zamiast klikać w konsoli AWS, definiujesz zasoby w plikach i wdrażasz je powtarzalnie. Generator Terraform AWS składa kompletny plik main.tf dla jednego zasobu: bucketu S3, instancji EC2 albo bazy RDS, razem z blokiem terraform, providerem, tagami i outputami.
Wspierane zasoby
| Zasób | Zastosowanie | Co trafia do pliku |
|---|---|---|
| S3 | magazyn plików, backup, hosting statyczny | aws_s3_bucket, opcjonalnie aws_s3_bucket_versioning i aws_s3_bucket_public_access_block; outputy id i arn |
| EC2 | maszyna wirtualna | data "aws_ami" (Amazon Linux 2023 lub Ubuntu 24.04) albo własne ID AMI, aws_instance z IMDSv2; outputy id i public_ip |
| RDS | zarządzana baza PostgreSQL, MySQL lub MariaDB | aws_db_instance z szyfrowanym dyskiem, zmienna db_password albo hasło w Secrets Manager; outputy id, endpoint (i secret_arn) |
Każdy plik zaczyna się od required_version = ">= 1.5" i providera hashicorp/aws w wersji ~> 5.0. Po wygenerowaniu kod można skopiować albo pobrać od razu jako main.tf.
Workflow
terraform init– pobiera providera AWS i przygotowuje katalog.terraform fmtiterraform validate– formatowanie i kontrola składni bez tworzenia zasobów.terraform plan -out=tfplan– podgląd zmian zapisany do pliku planu.terraform apply tfplan– wykonanie dokładnie tego planu w AWS.terraform output– odczyt ID, ARN, adresu IP lub endpointu bazy.
Zasoby usuwa terraform destroy. Bucket S3 z plikami da się tak usunąć tylko z włączoną opcją force_destroy.
Bezpieczeństwo
- Hasło bazy podawaj przez zmienną środowiskową
TF_VAR_db_passwordalbo zaznacz opcję Secrets Manager, wtedy hasło tworzy i przechowuje AWS. - Nie commituj pliku stanu (
terraform.tfstate):var.db_passwordzapisuje się w nim jawnym tekstem, nawet zsensitive = true. Użyj zdalnego, szyfrowanego backendu. - Blokada publicznego dostępu do S3 jest domyślnie włączona (cztery przełączniki). Odznacz ją tylko wtedy, gdy bucket ma serwować treści publicznie.
Jak działa generator Terraform AWS
Generator działa jak konwerter formularza na kod w składni HCL. Wybierasz zasób, wypełniasz pola i klikasz „Generuj Terraform”. Kod jest budowany na serwerze webp.pl, ale bez połączenia z AWS: nie podajesz kluczy dostępu, a narzędzie nie wysyła zapytań do API AWS i nie tworzy niczego w chmurze.
Przed złożeniem kodu formularz sprawdza dane według reguł AWS: format regionu (np. eu-central-1), nazwę bucketu S3 (3–63 znaki, małe litery, cyfry, kropki i myślniki, bez „..” i bez postaci adresu IP), identyfikator RDS (mała litera na początku, bez „--” i bez myślnika na końcu), typ instancji, ID AMI, klasę bazy, rozmiar dysku od 20 do 65 536 GiB i nazwę użytkownika (do 16 znaków). Błędne pole jest oznaczane, a kod nie powstaje, dopóki go nie poprawisz.
Mechanizm jest deterministyczny: te same wartości dają ten sam plik. Etykieta zasobu w Terraform powstaje z nazwy po zamianie znaków innych niż litery, cyfry i „_” na podkreślnik, więc app-bucket daje adres aws_s3_bucket.app_bucket. Nazwa zaczynająca się cyfrą dostaje prefiks r_. Tagi wpisujesz jako klucz=wartość, po jednej parze w linii; tag Name dodaje się sam z nazwy zasobu.
Generator odpowiada tylko za zapis konfiguracji. Nie sprawdza, czy nazwa jest wolna, czy typ maszyny jest dostępny w regionie ani czy limity konta pozwolą uruchomić zasób. To weryfikują Terraform i AWS przy plan i apply.
Przykład krok po kroku: baza RDS PostgreSQL
- Wybierz RDS i ustaw region
eu-central-1. Ta wartość trafia do blokuprovider "aws". - Wpisz identyfikator
sklep-db. Etykieta w kodzie tosklep_db, więc zasób ma adresaws_db_instance.sklep_db. - Zostaw silnik PostgreSQL, klasę
db.t3.micro, dysk 20 GiB i użytkownikadbadmin. Wersję silnika wybierze AWS (domyślną dla regionu). - Nie zaznaczaj Secrets Manager. Plik dostanie wtedy
password = var.db_passwordi blokvariable "db_password"z walidacją długości co najmniej 8 znaków. - Zostaw „Pomiń końcowy snapshot” dla środowiska testowego. Po odznaczeniu pojawi się
final_snapshot_identifier = "sklep-db-final". - Kliknij „Generuj Terraform” i pobierz
main.tf. Tabela pod kodem pokaże bloki:terraform,provider,aws_db_instance.sklep_db,db_passwordoraz outputysklep_db_idisklep_db_endpoint. - Uruchom
export TF_VAR_db_password='…', a potemterraform inititerraform plan. Baza trafi do domyślnego VPC regionu i domyślnej grupy zabezpieczeń.
Dla EC2 działa to podobnie, z jedną różnicą: zamiast stałego ID obrazu dostajesz blok data "aws_ami", który przy plan wyszukuje najnowszy obraz w regionie. Typy Graviton (np. t4g.small, m6g.large) dostają filtr na obraz arm64, pozostałe na x86_64.
Argumenty w wygenerowanym kodzie
| Blok | Argument | Wartość i uwagi |
|---|---|---|
| provider aws | region | tekst, np. eu-central-1; dotyczy wszystkich zasobów w pliku |
| aws_s3_bucket | bucket | nazwa globalnie unikalna w całym AWS |
| aws_s3_bucket | force_destroy | true tylko po zaznaczeniu opcji; pozwala usunąć bucket z zawartością |
| aws_s3_bucket_versioning | status | Enabled, gdy wersjonowanie jest zaznaczone |
| aws_s3_bucket_public_access_block | block_public_acls i 3 pozostałe | wszystkie cztery ustawione na true |
| aws_instance | ami | odwołanie do data.aws_ami albo własne ID w formacie ami- + 8 lub 17 znaków szesnastkowych |
| aws_instance | metadata_options | http_tokens = "required", czyli wymagany IMDSv2 |
| aws_db_instance | engine, instance_class | postgres, mysql lub mariadb; klasa w formacie db.rodzina.rozmiar |
| aws_db_instance | allocated_storage | liczba w GiB, od 20 do 65 536 |
| aws_db_instance | storage_encrypted | zawsze true |
| aws_db_instance | manage_master_user_password | true zamiast password, gdy hasło ma trzymać Secrets Manager |
| wszystkie zasoby | tags | Name z nazwy zasobu plus Twoje pary; razem do 50 tagów, bez prefiksu aws: |
Praktyczne wskazówki użycia
- Generator tworzy jeden zasób na plik. Jeśli potrzebujesz bucketu i bazy, wygeneruj dwa pliki i połącz je w jednym katalogu, usuwając powtórzony blok
terraformiprovider. - Ustal konwencję nazw przed pierwszym uruchomieniem. Przedrostek z nazwą projektu lub środowiska (np.
firma-prod-backup) chroni przed kolizją globalnie unikalnych nazw S3. - Drugi zasób tego samego typu wymaga innej nazwy, bo z niej powstaje etykieta. Dwa bloki
aws_instance.web_1w jednym katalogu zatrzymająterraform validate. - Na produkcji odznacz pomijanie końcowego snapshotu RDS, aby przed usunięciem bazy powstała jej kopia.
- Kod jest tekstem, więc diff w Git pokazuje dokładnie, co zmieniłeś. Do repozytorium dodaj
main.tf, ale nieterraform.tfstateani pliki.tfvarsz sekretami.
Czego narzędzie nie uwzględnia
- Stanu konta AWS: zajętej nazwy bucketu, istniejącego identyfikatora bazy ani dostępności typu instancji w regionie.
- Kosztów. Klasa instancji i rozmiar dysku to parametry konfiguracji, a nie wycena; ceny sprawdzisz w kalkulatorze AWS.
- Sieci. Nie powstaje VPC, podsieć, grupa bezpieczeństwa ani para kluczy SSH, więc EC2 i RDS lądują w domyślnym VPC. Dla produkcji dopisz te zasoby samodzielnie.
- Wersji silnika bazy, backendu stanu i modułów. Formularz sprawdza format danych, ale reszta konfiguracji zostaje po Twojej stronie.
Najczęstsze pytania
Co to plik stanu Terraform?
Terraform zapisuje w nim mapowanie między kodem a zasobami w AWS. Utrata stanu utrudnia zarządzanie infrastrukturą, dlatego trzymaj go zdalnie (np. w S3) z blokadą i szyfrowaniem.
Czym różni się terraform plan od apply?
plan pokazuje, co zostanie utworzone, zmienione lub usunięte, bez wprowadzania zmian. apply wykonuje je w AWS; z argumentem tfplan wykonuje dokładnie zapisany plan.
Czy potrzebuję konta AWS, żeby skorzystać z generatora?
Nie. Narzędzie tylko składa tekst konfiguracji i nie łączy się z żadnym kontem. Poświadczenia AWS są potrzebne dopiero przy uruchomieniu kodu w Terraform.
Dlaczego w kodzie EC2 nie ma stałego ID AMI?
ID obrazu jest inne w każdym regionie, a stare obrazy są wycofywane. Blok data "aws_ami" wyszukuje najnowszy Amazon Linux 2023 lub Ubuntu 24.04 przy każdym plan; własne ID możesz wpisać po wyborze opcji „Własne ID AMI”.
W jakiej wersji Terraform działa wygenerowany kod?
Plik wymaga Terraform 1.5 lub nowszego i providera AWS 5.x (~> 5.0). Provider 6.x nie zostanie pobrany, dopóki nie zmienisz tego ograniczenia.
Czy nazwa bucketu S3 musi być unikalna?
Tak, w całym AWS, a nie tylko w Twoim koncie czy regionie. Generator sprawdza format nazwy, ale nie to, czy jest wolna, więc dodaj przedrostek z nazwą projektu lub środowiska.