Details zum E-Book

Python dla DevOps. Naucz się bezlitośnie skutecznej automatyzacji

Python dla DevOps. Naucz się bezlitośnie skutecznej automatyzacji

Noah Gift, Kennedy Behrman, Alfredo Deza, Grig Gheorghiu

E-book

Ostatnia dekada zmieniła oblicze IT. Kluczowego znaczenia nabrały big data, a chmura i automatyzacja rozpowszechniły się wszędzie tam, gdzie mowa o efektywności. Inżynierowie muszą wykorzystywać zalety systemów linuksowych w codziennej praktyce, aby zapewnić należyty poziom automatyzacji swoich zadań. Do tych celów świetnie nadaje się Python. Język ten zdobywa coraz większe uznanie z uwagi na jego wszechstronność, jak również wydajność, przenaszalność i bezpieczeństwo kodu. Warto więc wykorzystywać Pythona do administrowania systemami Linux wraz z takimi narzędziami DevOps jak Docker, Kubernetes i Terraform.

Dzięki tej książce dowiesz się, jak sobie z tym poradzić. Znalazło się w niej krótkie wprowadzenie do Pythona oraz do automatyzacji przetwarzania tekstu i obsługi systemu plików, a także do pisania własnych narzędzi wiersza poleceń. Zaprezentowano również przydatne narzędzia linuksowe, systemy zarządzania pakietami oraz systemy budowania, monitorowania i automatycznego testowania kodu. Zagadnienia te szczególnie zainteresują specjalistów DevOps. Ponadto zawarto tu podstawowe informacje o chmurze obliczeniowej, usługach IaC i systemach Kubernetes. Omówiono zasady uczenia maszynowego i inżynierii danych z perspektywy DevOps. Przedstawiono także kompletny przewodnik po procesach budowania, wdrażania oraz operacyjnego wykorzystywania modelu uczenia maszynowego z użyciem systemów Flask, sklearn, Docker i Kubernetes.

W tej książce:

  • wprowadzenie do Pythona
  • automatyczne przetwarzanie tekstu oraz automatyzacja operacji na plikach
  • automatyzacja za pomocą sprawdzonych narzędzi linuksowych
  • chmura, infrastruktura jako kod, Kubernetes i tryb bezserwerowy
  • uczenie maszynowe i inżynieria danych z perspektywy DevOps
  • tworzenie i operacjonalizacja projektu uczenia maszynowego

Python: tutaj ważna jest prawdziwa nowoczesność oprogramowania!


Przedmowa 13

1. Podstawy Pythona dla DevOps 21

  • Instalowanie i uruchamianie Pythona 21
    • Powłoka Pythona 22
    • Jupyter Notebooks 23
  • Programowanie proceduralne 23
    • Zmienne 24
    • Podstawowe operacje arytmetyczne 24
    • Komentarze 25
    • Funkcje wbudowane 25
    • Print 25
    • Range 26
  • Sterowanie przepływem kodu 26
    • If-elif-else 26
    • Pętle for 28
  • Pętle while 29
  • Obsługa wyjątków 29
  • Obiekty wbudowane 30
    • Czym jest obiekt? 30
    • Metody i atrybuty obiektu 31
    • Sekwencje 31
  • Funkcje 42
    • Anatomia funkcji 43
    • Funkcje jako obiekty 44
    • Funkcje anonimowe 45
  • Korzystanie z wyrażeń regularnych 45
    • Wyszukiwanie 46
    • Zbiory znaków 46
    • Klasy znaków 47
    • Grupy 47
    • Grupy nazwane 48
    • Znajdź wszystko 48
    • Iterator wyszukiwania 48
    • Podstawianie 49
    • Kompilowanie 49
  • Leniwe wartościowanie 50
    • Generatory 50
    • Generatory składane 51
  • Dodatkowe funkcjonalności IPythona 51
    • Korzystanie z IPythona do uruchamiania poleceń powłoki Unix 51
  • Ćwiczenia 53

2. Automatyzacja zadań dotyczących plików i systemu plików 55

  • Odczytywanie i zapisywanie plików 55
  • Korzystanie z wyrażeń regularnych do wyszukiwania tekstu 63
  • Przetwarzanie dużych plików 65
  • Szyfrowanie tekstu 66
    • Haszowanie z wykorzystaniem pakietu hashlib 66
    • Szyfrowanie z wykorzystaniem biblioteki cryptography 67
  • Moduł os 68
  • Zarządzanie plikami i katalogami za pomocą modułu os.path 69
  • Przeglądanie drzew katalogów za pomocą funkcji os.walk 73
  • Ścieżki jako obiekty modułu pathlib 73

3. Praca w wierszu polecenia 75

  • Praca w środowisku powłoki 75
    • Komunikacja z interpreterem za pomocą modułu sys 75
    • Wykonywanie zadań w systemie operacyjnym z wykorzystaniem modułu os 76
    • Inicjowanie procesów za pomocą modułu subprocess 77
  • Tworzenie narzędzi wiersza polecenia 78
    • Atrybut sys.argv 80
    • argparse 82
    • Pakiet click 85
    • Moduł fire 90
    • Implementowanie wtyczek 94
  • Studium przypadku: Turbodoładowanie Pythona za pomocą narzędzi wiersza polecenia 95
    • Kompilator Just-in-Time (JIT) Numba 96
    • Korzystanie z GPU w Pythonie za pomocą frameworka CUDA 97
    • Uruchamianie w Pythonie kodu na wielu rdzeniach i w wielu wątkach z wykorzystaniem modułu Numba 98
    • Klasteryzacja z wykorzystaniem modułu KMeans 100
  • Ćwiczenia 101

4. Przydatne narzędzia systemu Linux 103

  • Narzędzia dyskowe 104
    • Pomiar wydajności 104
    • Partycje 106
    • Odczytywanie specyficznych informacji o urządzeniu 107
  • Narzędzia sieciowe 108
    • Tunelowanie SSH 108
    • Pomiar wydajności HTTP za pomocą Apache Benchmark (ab) 109
    • Testowanie obciążenia za pomocą narzędzia molotov 110
  • Narzędzia do badania CPU 112
    • Przeglądanie procesów za pomocą htop 113
  • Korzystanie z Bash i ZSH 115
    • Personalizacja powłoki Pythona 116
    • Rekurencyjny globbing 116
    • Wyszukiwanie i zamiana z pytaniami o potwierdzenie 117
    • Usuwanie tymczasowych plików Pythona 118
    • Wyświetlanie listy procesów i jej filtrowanie 118
    • Uniksowe znaczniki czasu 119
  • Łączenie możliwości Pythona z powłoką Bash i ZSH 120
    • Generator losowych haseł 120
    • Czy mój moduł istnieje? 121
    • Zmiana katalogów na ścieżki do modułów 121
    • Konwersja pliku CSV na JSON 122
  • Jednowierszowe skrypty w Pythonie 123
    • Debugery 123
    • Jak szybko działa ten fragment kodu? 124
  • strace 125
  • Ćwiczenia 127
  • Zadanie związane ze studium przypadku 127

5. Zarządzanie pakietami 129

  • Dlaczego tworzenie pakietów jest ważne? 130
    • Kiedy tworzenie pakietu może być niepotrzebne? 130
  • Wytyczne dotyczące tworzenia pakietów 130
    • Opisowe wersjonowanie 131
    • Rejestr zmian 132
  • Wybór strategii 133
  • Sposoby tworzenia pakietów 133
    • Natywny pakiet Pythona 133
    • Pakiety w stylu Debiana 139
    • Pakiety RPM 145
  • Zarządzanie za pomocą systemd 151
    • Procesy długotrwałe 152
    • Konfiguracja 152
    • Plik modułu systemd 154
  • Instalacja modułu 155
    • Obsługa logów 156
  • Ćwiczenia 158
  • Zadanie związane ze studium przypadku 158

6. Continuous Integration i Continuous Deployment 159

  • Studium przypadku: konwersja źle utrzymywanej witryny bazującej na WordPressie do Hugo 159
    • Konfigurowanie Hugo 160
    • Konwersja witryny WordPress na posty Hugo 161
    • Utworzenie indeksu Algolia i jego uaktualnienie 163
    • Automatyzacja za pomocą Makefile 165
    • Instalacja z wykorzystaniem AWS CodePipeline 165
  • Studium przypadku: instalacja aplikacji Python App Engine za pomocą mechanizmu Google Cloud Build 166
  • Studium przypadku: NFSOPS 173

7. Monitorowanie i logowanie 175

  • Kluczowe pojęcia dotyczące budowania niezawodnych systemów 175
  • Niezmienne zasady DevOps 176
    • Centralne logowanie 176
    • Studium przypadku: produkcyjna baza danych zabija dyski twarde 177
    • Zbudować czy kupić? 178
    • Odporność na błędy 178
  • Monitorowanie 180
    • Graphite 180
    • StatsD 181
    • Prometheus 181
  • Oprzyrządowanie 185
    • Konwencje nazewnictwa 188
  • Logowanie 189
    • Dlaczego konfigurowanie logowania jest trudne? 189
    • basicconfig 189
    • Głębsza konfiguracja 190
    • Powszechne wzorce 194
  • Stos ELK 195
    • Logstash 197
    • Elasticsearch i Kibana 198
  • Ćwiczenia 201
  • Zadanie związane ze studium przypadku 202

8. Pytest dla DevOps 203

  • Testowanie za pomocą frameworka pytest 203
  • Pierwsze kroki z pytest 204
    • Testowanie z wykorzystaniem pytest 204
    • Różnice w stosunku do unittest 206
  • Cechy frameworka pytest 207
    • conftest.py 208
    • Niezwykła funkcja assert 208
    • Parametryzacja 209
  • Fikstury 211
    • Pierwsze kroki 211
    • Fikstury wbudowane 213
  • Testowanie infrastruktury 215
    • Co to jest walidacja systemowa? 216
    • Wprowadzenie do projektu Testinfra 217
    • Nawiązywanie połączeń ze zdalnymi węzłami 217
    • Funkcje i fikstury specjalne 220
  • Przykłady 222
  • Testowanie notatników Jupyter Notebooks z wykorzystaniem frameworka pytest 224
  • Ćwiczenia 225
  • Zadanie związane ze studium przypadku 225

9. Chmura obliczeniowa 227

  • Podstawy chmury obliczeniowej 228
  • Rodzaje chmur obliczeniowych 230
  • Rodzaje usług chmury obliczeniowej 231
    • IaaS 231
    • MaaS 235
    • PaaS 235
    • Przetwarzanie bezserwerowe 236
    • SaaS 239
  • Infrastruktura jako kod 239
  • Ciągłe dostawy 240
  • Wirtualizacja i kontenery 240
    • Wirtualizacja sprzętowa 240
    • Sieci SDN 241
    • Magazyny SDS 241
    • Kontenery 241
  • Wyzwania i możliwości przetwarzania rozproszonego 243
  • Współbieżność, wydajność i zarządzanie procesami w dobie chmury obliczeniowej 244
  • Zarządzanie procesami 245
    • Zarządzanie procesami z wykorzystaniem modułu subprocess 245
    • Korzystanie z modułu multiprocessing do rozwiązywania problemów 247
    • Rozwidlanie procesów za pomocą funkcji pool() 248
    • FaaS i tryb bezserwerowy 250
    • Wysokowydajny Python z wykorzystaniem pakietu Numba 251
    • Korzystanie z kompilatora Just in Time biblioteki Numba 251
    • Korzystanie z wysokowydajnych serwerów 252
  • Wniosek 252
  • Ćwiczenia 253
  • Studia przypadków 253

10. Infrastruktura jako kod 255

  • Klasyfikacja narzędzi automatyzacji infrastruktury 256
  • Dostarczanie ręczne 258
  • Automatyczne dostarczanie infrastruktury z wykorzystaniem systemu Terraform 259
    • Dostarczanie komory S3 259
    • Dostarczanie certyfikatu SSL z usługi AWS ACM 262
    • Dostarczanie dystrybucji Amazon CloudFront 263
    • Dostarczanie rekordu DNS Route 53 265
    • Kopiowanie statycznych plików do usługi S3 267
    • Usuwanie wszystkich zasobów AWS dostarczonych przez Terraform 267
  • Zautomatyzowane dostarczanie infrastruktury za pomocą systemu Pulumi 267
    • Tworzenie nowego projektu Pythona Pulumi dla usług AWS 268
    • Tworzenie wartości konfiguracyjnych dla stosu staging 272
    • Dostarczanie certyfikatu SSL ACM 273
    • Dostarczanie strefy Route 53 i rekordów DNS 273
    • Dostarczanie dystrybucji CloudFront 275
    • Dostarczanie rekordu DNS Route 53 dla adresu URL witryny 277
    • Tworzenie i wdrażanie nowego stosu 277
  • Ćwiczenia 279

11. Technologie kontenerowe: Docker i Docker Compose 281

  • Czym jest kontener Dockera? 282
  • Tworzenie, budowanie, uruchamianie i usuwanie obrazów i kontenerów Dockera 282
  • Publikowanie obrazów Dockera w Rejestrze Dockera 285
  • Uruchamianie kontenera Dockera z tego samego obrazu na innym hoście 287
  • Uruchamianie wielu kontenerów Dockera za pomocą systemu Docker Compose 289
  • Przenoszenie usług docker-compose do nowego hosta i systemu operacyjnego 299
  • Ćwiczenia 302

12. Orkiestracja kontenerów: Kubernetes 305

  • Przegląd pojęć związanych z systemem Kubernetes 306
  • Korzystanie z systemu Kompose do tworzenia manifestów Kubernetesa na podstawie pliku docker-compose.yaml 307
  • Instalacja manifestów Kubernetesa w lokalnym klastrze Kubernetesa z wykorzystaniem minikube 308
  • Uruchomienie klastra GKE Kubernetes w GCP za pomocą Pulumi 322
  • Instalacja przykładowej aplikacji Flask do GKE 324
  • Instalacja wykresów Helm Prometheus i Grafana 330
  • Niszczenie klastra GKE 334
  • Ćwiczenia 335

13. Technologie bezserwerowe 337

  • Wdrażanie tej samej funkcji Pythona do chmur dostawców z Wielkiej Trójki 339
    • Instalacja frameworka Serverless 340
    • Wdrażanie funkcji Pythona w usłudze AWS Lambda 340
    • Wdrażanie funkcji Pythona na platformie Google Cloud Functions 342
    • Wdrażanie funkcji Pythona w usłudze AWS Lambda 348
  • Wdrażanie funkcji Pythona do platform FaaS działających w trybie self-hosted 351
    • Wdrażanie funkcji Pythona do usługi OpenFaaS 352
  • Konfigurowanie tabeli DynamoDB, funkcji Lambda i metod API Gateway za pomocą AWS CDK 358
  • Ćwiczenia 376

14. MLOps i inżynieria uczenia maszynowego 377

  • Czym jest uczenie maszynowe? 377
    • Nadzorowane uczenie maszynowe 377
    • Modelowanie 380
  • Ekosystem uczenia maszynowego w Pythonie 382
    • Uczenie głębokie z wykorzystaniem frameworka PyTorch 383
  • Platformy uczenia maszynowego w chmurze 386
  • Model dojrzałości uczenia maszynowego 387
    • Najważniejsza terminologia uczenia maszynowego 388
    • Poziom 1. Formułowanie, identyfikowanie zakresu i definiowanie problemu 389
    • Poziom 2. Ciągłe dostawy danych 389
    • Poziom 3. Ciągłe dostawy oczyszczonych danych 391
    • Poziom 4. Ciągłe dostawy eksploracyjnych analiz danych 392
    • Poziom 5. Ciągłe dostarczania tradycyjnych narzędzi ML i AutoML 393
    • Poziom 6. Operacyjna pętla sprzężenia zwrotnego narzędzi ML 393
  • Model Sklearn Flask z wykorzystaniem systemów Kubernetes i Docker 394
  • Sklearn Flask z wykorzystaniem Kubernetesa i Dockera 397
    • EDA 398
    • Modelowanie 399
    • Dostrajanie skalowanego algorytmu GBM 399
    • Dopasowywanie modelu 400
    • Ocena 401
    • adhoc_predict 401
    • Przepływ pracy JSON 402
    • Skalowanie danych wejściowych 402
    • adhoc_predict z modułu Pickle 403
    • Skalowanie danych wejściowych 404
  • Ćwiczenia 404
  • Zadanie związane ze studium przypadku 405
  • Pytania i zadania kontrolne 405

15. Inżynieria danych 407

  • Small data 408
    • Obsługa plików typu small data 408
  • Zapis do pliku 409
  • Odczyt z pliku 409
  • Potok generatora używany w celu czytania i przetwarzania wierszy 409
  • Korzystanie z formatu YAML 410
  • Big Data 411
  • Narzędzia Big Data, komponenty i platformy 413
    • Źródła danych 413
    • Systemy plików 414
    • Przechowywanie danych 415
  • Pobieranie strumieni danych w czasie rzeczywistym 416
  • Studium przypadku: budowanie własnego potoku danych 417
  • Inżynieria danych w trybie bezserwerowym 418
    • Korzystanie z usługi AWS Lambda z wykorzystaniem zdarzeń CloudWatch 418
    • Logowanie z wykorzystaniem usług Amazon CloudWatch i AWS Lambda 419
    • Wykorzystanie usługi AWS Lambda w celu zapełniania kolejki w usłudze Amazon Simple Queue Service 420
    • Konfiguracja mechanizmu wyzwalającego zdarzenie CloudWatch 421
    • Tworzenie funkcji Lambda sterowanych zdarzeniami 422
    • Odczyt zdarzeń Amazon SQS z funkcji AWS Lambda 422
  • Wnioski 429
  • Ćwiczenia 429
  • Zadanie związane ze studium przypadku 430

16. Historie wojenne DevOps i wywiady 431

  • Studio filmowe nie może produkować filmów 432
  • Studio gier nie może opublikować gry 434
  • Uruchomienie skryptów Pythona zajmuje 60 sekund 435
  • Gaszenie pożarów za pomocą pamięci podręcznej i inteligentnej instrumentacji 437
  • Automatyzacja zabierze Ci pracę! 437
  • Antywzorce DevOps 439
    • Brak zautomatyzowanego serwera budowania 439
    • "Latanie po omacku" 439
    • Trudności w koordynacji jako stan ciągły 439
    • Brak pracy zespołowej 441
  • Wywiady 445
    • Glenn Solomon 445
    • Andrew Nguyen 446
    • Gabriella Roman 448
    • Rigoberto Roche 449
    • Jonathan LaCour 450
    • Ville Tuulos 452
    • Joseph Reis 454
    • Teijo Holzer 455
    • Matt Harrison 457
    • Michael Foord 458
  • Zalecenia 461
  • Ćwiczenia 462
  • Wyzwania 462
  • Projekt końcowy 462
  • Titel: Python dla DevOps. Naucz się bezlitośnie skutecznej automatyzacji
  • Autor: Noah Gift, Kennedy Behrman, Alfredo Deza, Grig Gheorghiu
  • Originaler Titel: Python for DevOps: Learn Ruthlessly Effective Automation
  • Übersetzung: Radosław Meryk
  • ISBN: 978-83-283-6831-6, 9788328368316
  • Veröffentlichungsdatum: 2020-11-24
  • Format: E-book
  • Artikelkennung: pytdev
  • Verleger: Helion