- Składnia
- Modularyzacja
- Idempotentność
- Tworzenie stosów na platformie AWS
Dokumentacja narzędzi użytych do realizacji zadania:
-Dokumentacja zasobów terraform
Instalacja zależności:
Adres repozytorium: https://github.com/mwidera/iac-labs-infra
- Wydaj polecenie
sudo groupadd docker; sudo usermod -aG docker $USER; newgrp docker
- Sprawdź działanie aplikacji:
terraform --version
- Jeśli aplikacja nie jest zainstalowana, wykonaj polecenie:
wget https://releases.hashicorp.com/terraform/1.10.3/terraform_1.10.3_linux_amd64.zip
- Rozpakuj pobrany plik:
unzip terraform_1.10.3_linux_amd64.zip
- Przenieś plik do katalogu binarnego:
sudo mv terraform /usr/local/bin/
- Zweirfikuj działanie aplikacji:
terraform --version
- Zweryfikuj działanie
pulumi version
- Wykonaj polecenie:
curl -fsSL https://get.pulumi.com | sh
- Ustaw zmienną PATH:
export PATH=$PATH:/home/student/.pulumi/bin
- Zweryfikuj działanie
pulumi version
- Sprawdź czy aplikacja istnieje:
localstack --version
- Jeśli aplikacja nie jest zainstalowana, wykonaj polecenie:
curl -Lo localstack-cli-4.0.0.tar.gz https://github.com/localstack/localstack-cli/releases/download/v4.0.0/localstack-cli-4.0.0-linux-amd64-onefile.tar.gz
- Wypakuj pobrany plik:
sudo tar xvzf localstack-cli-*.tar.gz -C /usr/local/bin
- Zweryfikuj działanie aplikacji:
localstack --version
- Uruchom
localstack start
sudo apt install python3-pip vim git
-
Wydaj następujące polecenia:
python3 -m venv venv source venv/bin/activate pip install terraform-local pulumi-local
Klucz i sekret pobierz z konta AWSowego
export AWS_ACCESS_KEY_ID=ALAMAKOTAASDASDX
export AWS_SECRET_ACCESS_KEY="przykladowykluczo2KyARbABVJavS2b1234"
-
Wykonaj klonowanie repozytorium do przestrzeni roboczej
-
Wydaj polecenie pobrania git modułu (potrzebne do zadań 3 i 6):
git submodule init git submodule update
- Przejdź do katalogu
cd terraform/zad1
i następnie do podkatalogów niżej (1-import
,2-zmienne
,3-moduly
) - Otwórz plik
main.tf
w każdym z katalogów: 1-import, 2-zmienne, 3-moduly - Wykonaj
terraform init
(albo:tflocal
) i obserwuj pobrane zależności. - Użyj
terraform plan
iterraform apply
do zaaplikowania infrastruktury. - Zweryfikuj działanie infrastruktury
- Sprawdź idempotentność stosu poprzez ponowne wydanie polecenia
terraform apply
- Wydaj polecenie
terraform state list
a następnieterraform state show <nazwa_zasobu>
by poznać stan zasobów - Zanotuj efekty powyzszych poleceń w sprawozdaniu - jako tekst (nie zrzut ekranu, albo załącznik)
- Zniszcz środowisko poleceniem
terraform destroy
- W linii 47 pliku
main.tf
zmodyfikuj AMI przed zaaplikowaniem w chmurze AWS - Wydaj polecenie
terraform taint <nazwa_zasobu>
, by oznaczyć zasób jako element do zastąpienia i ponów krok wcześniejszy
-
Wyjaśnij działanie sekcji
variables
ioutputs
. -
Opisz zastosowanie
terraform taint
. -
Wyjaśnij działanie części kodu zamieszczonego poniżej:
provider "aws" { region = "eu-central-1" } provider "aws" { alias = "east" region = "us-east-1" }
- Przejdź do katalogu
cd terraform/zad2
- Wykonaj
terraform init
. - Użyj
terraform plan
iterraform apply
- Dla maszyn z puli VMWare uzyj polecenia
sudo groupadd docker; sudo usermod -aG docker $USER; newgrp docker
-
Zmodyfikuj infrastrukturę, korzystając z zasobu docker_tag.
Przykładowy zasób jaki należy dodać do :
resource "docker_tag" "tag_<indeks>" { <<wykorzystaj_dokumentacje>> }
-
Wydaj polecenie
terraform state list
a następnieterraform show
by poznać stan zasobów -
Zanotuj efekty powyzszych poleceń w sprawozdaniu - jako tekst (nie zrzut ekranu, albo załącznik)
-
Zniszcz środowisko poleceniem
terraform destroy
- Wyjaśnij rolę pliku
terraform.tfstate
Uruchomienie aplikacji lokalnie jako element odwzorowania środowiska docelowego
-
Przejdź do katalogu
cd terraform/zad3
-
Dodaj brakujący obraz w pliku
images.tf
z wykorzystaniem sekcjiresource
Składnia obrazu dostępna jest pod tym adresemObraz nazwij
postgres
-
Dodaj brakujący zasób (bazę danych) z wykorzystaniem sekcji
resource
Składnia kontenera dostępna jest pod tym adresemKontener nazwij
db
Podepnij kontener do wspólnej wirtualnej sieci
tfnet
Stworzony wcześniej obraz
postgres
wykorzystaj jako obraz bazowy dla konteneradb
Dodaj zmienne środowiskowe niezbędne do poprawnego działania stworzonego kontenera:
"POSTGRES_DB=app", "POSTGRES_USER=app_user", "POSTGRES_PASSWORD=app_pass"
-
Wydaj polecenie
terraform state list
a następnieterraform show
by poznać stan zasobów -
Zanotuj efekty powyzszych poleceń w sprawozdaniu - jako tekst (nie zrzut ekranu, albo załącznik)
-
Zniszcz środowisko poleceniem
terraform destroy
- Porównaj docker-compose i terraform w kontekście tworzenia lokalnego środowiska
- Jak wyglądałby plik docker-compose dla tego środowiska?
-
Przejdź do katalogu pulumi/zad1
-
Wykonaj polecenie
pulumi new aws-python --force
-
Podaj parametry wykonania np.
project name: zad1, project description: Empty, stack name: nr_indeksu
-
Zapoznaj się z zawartością stworzonego projektu w pliku
__main__.py
-
Wydaj polecenie
pulumi up
-
Na potrzeby tego zadania każdy z uczestników musi dodać swoje środowisko do zdalnego zasobu zarządzania stanem (app.pulumi.com)
-
Stwórz konto na potrzeby realizacji tego zadania (jest darmowe oraz można je stworzyć z wykorzystaniem GitHuba)
-
Dodaj plik
index.html
w obecnym katalogu:<html> <body> <h1>Hello, World!</h1> </body> </html>
-
Zmodyfikuj plik
__main__.py
dodając:public_access_block = s3.BucketPublicAccessBlock( 'public-access-block', bucket=bucket.id, block_public_acls=False ) def public_read_policy_for_bucket(bucket_name): return pulumi.Output.json_dumps({ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ pulumi.Output.format("arn:aws:s3:::{0}/*", bucket_name), ] }] }) s3.BucketPolicy('bucket-policy', bucket=bucket.id, policy=public_read_policy_for_bucket(bucket.id), opts=pulumi.ResourceOptions(depends_on=[public_access_block]) ) bucketObject = s3.BucketObject( 'index.html', content_type='text/html', bucket=bucket.id, source=pulumi.FileAsset('index.html'), )
zmień s3 bucket w następujący sposób:
bucket = s3.Bucket('my-bucket', website=s3.BucketWebsiteArgs(index_document="index.html") )
ostatecznie zmień efekt końcowy tak by poznać adres statycznie stworzonej strony:
pulumi.export('bucket_endpoint', pulumi.Output.concat('http://', bucket.website_endpoint))
-
Wydaj polecenie
pulumi preview
by zweryfikować wprowadzone zmiany -
Wykonaj polecenie
pulumi up
by wdrożyć zmiany -
Czy strona wynikowa działa?
-
Zniszcz środowisko
pulumi down
Pytania:
- Jakie języki programowania są wspierane przez Pulumi?
- Gdzie jest trzymany stan tworzonego stosu?
- Przejdź do katalogu pulumi/zad2
- Na potrzeby tego zadania zarówno jak i
__main__.py
zostały wstępnie przygotowane - Zapoznaj się z plikiem i zaaplikuj go (tym razem nie ma obowiązku wydawania polecenia
pulumi new
)
Pytania:
- Porównaj tworzenie stosu z wykorzystaniem Pulumi do tworzenia stosu Terraform