Przegląd AWS CDK, przykłady w TypeScript i Python oraz wydajność
Dobry narzędzie do inżynierii platformy na AWS
AWS Cloud Development Kit (AWS CDK) to framework umożliwiający definiowanie i wdrażanie infrastruktury chmurowej przy użyciu znanych języków programowania takich jak TypeScript, Python, Java oraz Go.
Ten open-source framework upraszcza infrastrukturę jako kod, umożliwiając modelowanie zasobów AWS za pomocą konstrukcji na wysokim poziomie, a następnie syntezuje je w szablony CloudFormation do wdrożenia. To ułatwia rozwijanie, wdrażanie i iterację nad infrastrukturą AWS w bardziej utrzymanym i testowanym sposób.
Oto krótkie przykładowe fragmenty kodu dla AWS CDK w TypeScript i Python:
Przykład TypeScript:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY
});
}
}
Ten przykład tworzy zbiornik S3 z włączoną wersjonowaniem.
Przykład Python:
from aws_cdk import (
Stack,
aws_s3 as s3,
RemovalPolicy
)
from constructs import Construct
class MyStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "MyFirstBucket",
versioned=True,
removal_policy=RemovalPolicy.DESTROY)
To tworzy podobnie wersjonowany zbiornik S3 z zasadą usuwania, która usunie go przy usunięciu stosu.
Te przykłady ilustrują, jak AWS CDK korzysta z znanych konstrukcji językowych, klas i obiektów do definiowania infrastruktury, która może być łatwo wdrażana za pomocą cdk deploy
.
AWS CDK obsługuje inne zasoby i bardziej złożone wzorce infrastruktury poza tymi prostymi przykładami. Integruje się również dobrze z IDE, frameworkami testowymi oraz pipelineami CI/CD, aby poprawić doświadczenie dewelopera i automatyzację.
TypeScript vs Python dla AWS CDK
TypeScript i Python są oba pełni obsługiwane języki dla rozwoju i wdrażania AWS CDK, ale mają pewne znaczące różnice:
TypeScript
- AWS CDK został oryginalnie zaimplementowany w TypeScript, co zapewnia natywne sprawdzanie typów, interfejsy i silne statyczne typowanie.
- TypeScript korzysta z najbardziej kompletnych oficjalnych dokumentacji, przykładów i wsparcia społecznościowego. To ułatwia znalezienie zasobów i rozwiązywanie problemów.
- IDE takie jak Visual Studio Code oferują doskonałą obsługę TypeScript z inteligentnym uzupełnianiem, podświetlaniem błędów i refaktoryzacją.
- Ponieważ sam CDK jest napisany w TypeScript, jego użycie czuje się bardziej „natywnie” i płynnie, z mniejszą liczbą abstrakcji.
- Statyczne typowanie TypeScripta wykrywa wiele problemów w czasie budowania, unikając niektórych błędów w czasie wykonywania.
- Deweloperzy, którzy chcą ściślejsze bezpieczeństwo typów i większe zasoby społecznościowe, mogą preferować TypeScript dla CDK.
Python
- Obsługa Pythona jest stabilna i pełna funkcjonalności, ale jest to wiązanie nad jądrem TypeScript za pomocą jsii, opierające się na dynamicznym typowaniu z opcjonalnymi wskazówkami typów.
- Python korzysta z konwencji nazewnictwa snake_case zamiast camelCase w TypeScript, więc przy tłumaczeniu przykładów wymagane są drobne korekty składniowe.
- Python ma mniej oficjalnych przykładów i zasobów społecznościowych, co może utrudniać naukę i debugowanie dla początkujących.
- Dynamiczne typowanie oznacza, że niektóre błędy typu pojawiają się dopiero w czasie wykonywania, a nie w czasie kompilacji, co może opóźniać wykrywanie błędów. Jednak moduły Pythona mają wskazówki typów, które mogą być wykorzystywane w IDE lub narzędziach analizy statycznej takich jak MyPy.
- Deweloperzy Pythona cenią znane narzędzia takie jak wirtualne środowiska (virtualenv) i pip do zarządzania pakietami.
- Python jest preferowany, jeśli Twoja drużyna lub projekt jest już bardzo oparty na Pythonie, mimo że dokumentacja i wsparcie społecznościowe są trochę słabsze.
Rozwój i wdrażanie
- Narzędzie CDK Toolkit (
cdk deploy
) działa tak samo niezależnie od wyboru języka, ponieważ CDK syntezuje szablony AWS CloudFormation w tle. - Oba języki obsługują pełny zakres zasobów AWS i konstrukcji.
- Wybór między nimi często zależy od kompetencji Twojej drużyny w danym języku, dostępności wsparcia społecznościowego i preferencji dla typowania statycznego vs. dynamicznego.
Podsumowanie
- TypeScript oferuje najbardziej dojrzałe i wypracowane doświadczenie z bogatszą dokumentacją, silnym typowaniem i natywną integracją, ponieważ CDK został zbudowany na jego bazie.
- Python oferuje solidną funkcjonalność i łatwy w użyciu doświadczenie dla programistów Pythona, ale z mniejszą liczbą przykładów i pewnymi dodatkowymi wyzwaniami z powodu dynamicznego typowania i tłumaczenia między idiomy językowe.
- Jeśli chcesz szybkiego rozwoju z dużą liczbą zasobów, TypeScript jest często zalecany. Jeśli Twój projekt lub drużyna jest oparta na Pythonie, Python nadal jest dobrym, pełni obsługiwany wyborem, mimo drobnych kompromisów.
To zgadza się z opinią społeczności i oficjalną dokumentacją AWS opisującą ich odpowiednie zalety i wady w zakresie rozwoju i wdrażania AWS CDK. Oba języki mogą być używane skutecznie; Twój wybór zależy od Twoich priorytetów dotyczących dyscypliny typowania, znajomości języka i wsparcia ekosystemu.
Oficjalnie obsługiwane języki dla AWS CDK
AWS Cloud Development Kit (AWS CDK) oficjalnie obsługuje następujące języki programowania:
- TypeScript
- JavaScript
- Python
- Java
- C# (.NET)
- Go
Wszystkie te języki są pierwszorzędnie obsługiwane, a CDK oryginalnie został rozwijany w TypeScript, a następnie rozszerzony na inne języki przy użyciu narzędzia nazywanego JSII, które generuje wiązania językowe, aby CDK czuł się naturalnie w składni i konwencjach każdego języka.
W kwestii, który język jest lepszy, zależy to od Twoich preferencji i kontekstu:
-
TypeScript jest często zalecany jako najlepszy wybór, ponieważ AWS CDK został oryginalnie zbudowany w TypeScript. Ma najbardziej dojrzały ekosystem, najbardziej bogatą oficjalną dokumentację i przykłady społecznościowe. Jego statyczne typowanie i silne wsparcie IDE poprawia produktywność dewelopera i wykrywa wiele błędów wczesnie.
-
Python jest bardzo popularną alternatywą, szczególnie dla tych, którzy pochodzą z tła Pythona. Ma czystą składnię, która czyni ją bardziej intuicyjną dla początkujących, choć dynamiczne typowanie oznacza, że niektóre błędy są wykrywane dopiero w czasie wykonywania. Narzędzia i dostępność przykładów w Pythonie są solidne, ale nie tak rozbudowane jak w TypeScript.
-
Java, C# i Go są pełni obsługiwane, ale ogółem mają mniej przykładów społecznościowych i mniej rozbudowaną dokumentację w porównaniu do TypeScript i Python. Są odpowiednie, jeśli Twoja drużyna ma doświadczenie w tych językach.
Podsumowując:
- TypeScript oferuje najbardziej naturalne, wypracowane i szeroko obsługiwane doświadczenie w zakresie rozwoju AWS CDK.
- Python oferuje prostszą składnię i doświadczenie przyjazne dla początkujących z pełną obsługą CDK, ale z lekkim brakiem polerowania narzędzi.
- Java, C# i Go są dobrymi opcjami, jeśli pasują one do Twoich istniejących umiejętności lub wymagań projektowych, ale mogą wymagać więcej wysiłku przy wyszukiwaniu zasobów edukacyjnych.
Twój wybór powinien uwzględniać kompetencje Twojej drużyny w danym języku, dostępność przykładów i wsparcia oraz preferencję dla typowania statycznego (TypeScript, Java, C#) czy dynamicznego (Python). Oba TypeScript i Python są zwykle najbardziej popularne i zalecane w projektach AWS CDK.
Wydajność języków w rozwoju i wdrażaniu AWS CDK
Kiedy rozważamy najlepszą wydajność w rozwoju i wdrażaniu AWS CDK, ważne jest, aby zrozumieć, że sama podstawa funkcjonalności AWS CDK – syntezowanie infrastruktury jako kodu w szablony CloudFormation i wdrażanie – jest niezależna od języka. Wszystkie obsługiwane języki (TypeScript, Python, Java, C#, Go) kompilują się do tych samych podstawowych szablonów AWS CloudFormation, więc wydajność wdrażania nie różni się między językami.
Jednak z perspektywy wydajności rozwoju – czyli efektywności, wykrywania błędów, narzędzi i łatwości kodowania – TypeScript jest ogólnie uznawany za najlepsze środowisko językowe dla AWS CDK:
- TypeScript jest oryginalnym językiem AWS CDK, rozwijanym w nim. To prowadzi do najbardziej płynnych narzędzi, najsilniejszego typowania statycznego i najwcześniejszego wykrywania błędów podczas rozwoju, co czyni kodowanie szybszym i mniej wrażliwym na błędy.
- Najbardziej bogata dokumentacja, przykłady społecznościowe i wsparcie IDE (takie jak inteligentne uzupełnianie i refaktoryzacja w Visual Studio Code) istnieje dla TypeScript, co przyspiesza produktywność dewelopera.
- Kod TypeScript wykrywa wiele błędów w czasie kompilacji, unikając nieprzewidzianych sytuacji w czasie wykonywania i problemów z wdrażaniem, co przyspiesza iteracyjny rozwój i debugowanie.
Python jest bardzo bliskim drugim miejscem w doświadczeniu rozwoju, ceniony za prostszą, bardziej czytelną składnię i popularność w DevOps. Jednak z powodu dynamicznego typowania i tego, że jest to wiązanie językowe JSII nad jądrem TypeScript, niektóre błędy pojawiają się dopiero w czasie wykonywania, co może nieco opóźnić debugowanie i rozwój.
Inne języki, takie jak Java, C# i Go, są obsługiwane, ale ogółem mają mniej zasobów, mniej dojrzałe narzędzia i zatem mogą oferować mniejszą szybkość rozwoju.
Podsumowanie:
Aspekt | TypeScript | Python | Pozostałe (Java, C#, Go) |
---|---|---|---|
Natywna implementacja CDK | Tak | Nie | Nie |
Typowanie statyczne | Silne (w czasie kompilacji) | Dynamiczne (w czasie wykonywania) | Silne (w czasie kompilacji) |
Wsparcie narzędzi i IDE | Najlepsze (VS Code, Autocomplete) | Dobre, ale mniej dojrzałe | Mniej dojrzałe |
Zasoby społecznościowe | Najwięcej | Dobre, ale mniej niż TypeScript | Ograniczone |
Szybkość rozwoju | Szybka, mniej wrażliwa na błędy | Szybsza, ale z dynamicznym typowaniem | Ogólnie wolniejsza |
Wydajność wdrażania | Taka sama (wynik CloudFormation) | Taka sama | Taka sama |
Zatem TypeScript oferuje najlepszą wydajność w rozwoju z AWS CDK, czyniąc kodowanie infrastruktury szybszym, bezpieczniejszym i bardziej wydajnym. Wydajność wdrażania jest taka sama we wszystkich obsługiwanych językach, ponieważ wszystkie generują te same szablony CloudFormation.
To zgadza się z oficjalnymi wskazówkami AWS i szerokim doświadczeniem społeczności, które podkreślają natywną i zoptymalizowaną obsługę TypeScript w rozwoju AWS CDK. Python nadal jest silną alternatywą, szczególnie jeśli Twoja drużyna go preferuje lub ceni prostotę składni. Pozostałe języki są wdrażalne, ale zwykle mniej optymalne do szybkiego rozwoju.
Linki powiązane z AWS CDK
- https://en.wikipedia.org/wiki/AWS_Cloud_Development_Kit
- https://github.com/aws/aws-cdk
- https://github.com/aws-samples/aws-cdk-examples
- https://docs.aws.amazon.com/cdk/v2/guide/languages.html
- https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/
Inne przydatne linki
- TypeScript Cheatsheet
- [Python Cheatsheet]({{语 “/post/2024/08/python-cheat-sheet” >}} “Python Cheatsheet”)
- Wydajność AWS Lambda: JavaScript vs Python vs Golang
- Warstwowe Lambdy z AWS SAM i Python
- AWS SAM + AWS SQS + Python PowerTools
- uv - Nowy menedżer pakietów, projektów i środowisk Pythona