Panoramica di AWS CDK, esempi in TypeScript e Python e prestazioni

Strumento utile per l'ingegneria delle piattaforme su AWS

Indice

Il kit di sviluppo per il cloud di AWS (AWS CDK) è un framework che ti permette di definire e provvedere all’infrastruttura cloud utilizzando linguaggi di programmazione familiari come TypeScript, Python, Java e Go.

aws cdk chain of events

Questo framework open source semplifica l’infrastruttura come codice permettendo di modellare le risorse AWS con costrutti ad alto livello, e successivamente sintetizzandoli in modelli CloudFormation per il deployment. Questo rende più semplice sviluppare, distribuire e iterare sull’infrastruttura AWS in modo più mantenibile e testabile.

Ecco alcuni esempi brevi per AWS CDK in TypeScript e Python:

Esempio 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
    });
  }
}

Questo esempio crea un bucket S3 con la versionatura abilitata.

Esempio 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)

Questo crea in modo simile un bucket S3 con versionatura e una politica di rimozione per eliminare il bucket al momento dell’eliminazione dello stack.

Questi esempi illustrano come AWS CDK utilizza costrutti, classi e oggetti familiari per definire l’infrastruttura, che successivamente può essere distribuita facilmente tramite cdk deploy.

AWS CDK supporta altri risorse e modelli di infrastruttura più complessi oltre a questi esempi semplici. Integra inoltre bene con gli IDE, i framework di test e le pipeline CI/CD per migliorare l’esperienza dello sviluppatore e l’automazione.

TypeScript vs Python per AWS CDK

TypeScript e Python sono entrambi linguaggi pienamente supportati per lo sviluppo e la distribuzione con AWS CDK, ma hanno alcune differenze significative:

TypeScript

  • AWS CDK è originariamente implementato in TypeScript, che fornisce il controllo del tipo nativo, le interfacce e il tipaggio statico forte.
  • TypeScript beneficia della documentazione ufficiale più completa, degli esempi e del supporto della comunità. Questo rende più semplice trovare risorse e risolvere problemi.
  • IDE come Visual Studio Code offrono un supporto TypeScript eccellente con completamenti intelligenti, evidenziazione degli errori e ristrutturazione.
  • Poiché CDK stesso è scritto in TypeScript, l’uso tende a sentirsi più “nativo” e fluido con meno astrazioni.
  • Il tipaggio statico di TypeScript cattura molti problemi fin dall’inizio durante la compilazione, evitando alcuni errori in fase di esecuzione.
  • Gli sviluppatori che desiderano una forte sicurezza dei tipi e risorse della comunità più ampie possono preferire TypeScript per CDK.

Python

  • Il supporto per Python è stabile e funzionale ma è un binding sul core TypeScript tramite jsii, che si basa su tipaggio dinamico con hinting dei tipi opzionali.
  • Python utilizza convenzioni di nomi snake_case invece del camelCase di TypeScript, quindi sono necessari alcuni piccoli aggiustamenti sintattici quando si traducono gli esempi.
  • Python ha meno esempi ufficiali e risorse della comunità, che possono rendere più difficile imparare e risolvere problemi per i principianti.
  • Il tipaggio dinamico significa che alcuni errori di tipo appaiono solo in fase di esecuzione invece che in fase di compilazione, potenzialmente causando un rilevamento ritardato degli errori. Tuttavia, i moduli Python hanno annotazioni di tipo che possono essere utilizzate con IDE o strumenti di analisi statica come MyPy.
  • Gli sviluppatori Python apprezzano gli strumenti familiari come gli ambienti virtuali (virtualenv) e pip per la gestione dei pacchetti.
  • Python è preferito se il team o il progetto è già fortemente orientato a Python, anche se la documentazione e il supporto della comunità sono leggermente più limitati.

Sviluppo e distribuzione

  • Il Toolkit CDK (cdk deploy) funziona nello stesso modo indipendentemente dalla scelta del linguaggio poiché CDK sintetizza i modelli CloudFormation di AWS in modo trasparente.
  • Entrambi i linguaggi supportano l’intera gamma di risorse AWS e costrutti.
  • La scelta tra di loro spesso dipende dall’esperienza del team con il linguaggio, dal supporto della comunità disponibile e dalla preferenza per il tipaggio statico rispetto a quello dinamico.

Riepilogo

  • TypeScript offre un’esperienza più matura e polidata con documentazione più ricca, tipaggio forte e integrazione nativa poiché CDK è costruito su di esso.
  • Python offre funzionalità robuste e facilità d’uso per gli sviluppatori Python, ma con meno esempi e alcuni aggiustamenti aggiuntivi a causa del tipaggio dinamico e delle traduzioni tra idiomi linguistici.
  • Se si desidera uno sviluppo rapido con risorse estese, TypeScript è spesso raccomandato. Se il progetto o il team è orientato a Python, rimane una scelta buona e pienamente supportata nonostante alcuni piccoli compromessi.

Questo è in linea con i feedback della comunità e la documentazione ufficiale di AWS che descrive i rispettivi pro e contro per lo sviluppo e la distribuzione con AWS CDK. Entrambi i linguaggi possono essere utilizzati efficacemente; la scelta dipende dalle tue priorità per la disciplina del tipaggio, la familiarità con il linguaggio e il supporto dell’ecosistema.

Linguaggi ufficialmente supportati per AWS CDK

Il Kit di sviluppo per il cloud di AWS (AWS CDK) supporta ufficialmente i seguenti linguaggi di programmazione:

  • TypeScript
  • JavaScript
  • Python
  • Java
  • C# (.NET)
  • Go

Tutti questi linguaggi sono supportati a pieno titolo, con il CDK originariamente sviluppato in TypeScript e successivamente esteso ad altri utilizzando uno strumento chiamato JSII, che genera binding linguistici per rendere il CDK naturale nella sintassi e nelle convenzioni di ciascun linguaggio.

Riguardo a quale linguaggio è migliore, dipende dalle tue preferenze e dal contesto:

  • TypeScript è spesso raccomandato come scelta migliore poiché AWS CDK è originariamente costruito in TypeScript. Ha l’ecosistema più maturo, la documentazione ufficiale più ricca e gli esempi della comunità. Il tipaggio statico e il forte supporto IDE migliorano la produttività dello sviluppatore e catturano molti errori fin dall’inizio.

  • Python è un’alternativa molto popolare, specialmente per coloro che provengono da un background Python. Ha una sintassi pulita che rende più intuitivo per i principianti, anche se il tipaggio dinamico significa che alcuni errori vengono rilevati solo in fase di esecuzione. La disponibilità di strumenti e esempi è solida ma non altrettanto estesa come quella di TypeScript.

  • Java, C# e Go sono pienamente supportati ma generalmente hanno meno esempi della comunità e documentazione leggermente meno estesa rispetto a TypeScript e Python. Sono adatti se il team è esperto in questi linguaggi.

In sintesi:

  • TypeScript offre l’esperienza più nativa, polidata e ampiamente supportata per lo sviluppo con AWS CDK.
  • Python fornisce una sintassi più semplice e un’esperienza più amichevole per i principianti con un supporto completo del CDK, ma con un po’ meno polimento negli strumenti.
  • Java, C# e Go sono buone opzioni se si adattano alle competenze esistenti del team o ai requisiti del progetto ma potrebbero richiedere più sforzo per trovare risorse di apprendimento.

La tua scelta dovrebbe considerare l’esperienza del team con il linguaggio, la disponibilità di esempi e supporto, e se preferisci il tipaggio statico (TypeScript, Java, C#) o dinamico (Python). Sia TypeScript che Python tendono ad essere le scelte più popolari e raccomandate per i progetti AWS CDK.

Prestazioni dei linguaggi nello sviluppo e nella distribuzione con AWS CDK

Quando si considera la migliore prestazione nello sviluppo e nella distribuzione con AWS CDK, è importante chiarire che la funzionalità core di AWS CDK—la sintesi dell’infrastruttura come codice in modelli CloudFormation e la distribuzione—è indipendente dal linguaggio. Tutti i linguaggi supportati (TypeScript, Python, Java, C#, Go) vengono compilati nello stesso sottostante modello AWS CloudFormation, quindi le prestazioni di distribuzione non differiscono per linguaggio.

Tuttavia, dal punto di vista delle prestazioni di sviluppo—inteso come efficienza, rilevamento degli errori, strumenti e facilità di codifica—TypeScript è generalmente considerato l’ambiente migliore per lo sviluppo con AWS CDK:

  • TypeScript è il linguaggio nativo di AWS CDK, originariamente sviluppato in esso. Questo porta al miglior strumento più fluido, al tipaggio statico più forte e al rilevamento degli errori più precoce durante lo sviluppo, rendendo il codice più veloce e meno soggetto a errori.
  • La documentazione più ricca, gli esempi della comunità e il supporto IDE (ad esempio, completamenti intelligenti e ristrutturazione in Visual Studio Code) esistono per TypeScript, accelerando la produttività dello sviluppatore.
  • Il codice TypeScript cattura molti errori in fase di compilazione, evitando sorprese in fase di esecuzione e problemi di distribuzione, che velocizza lo sviluppo iterativo e il debug.

Python è una seconda alternativa molto vicina per l’esperienza di sviluppo, apprezzata per la sua sintassi più semplice e leggibilità, popolarità in DevOps. Tuttavia, a causa del tipaggio dinamico e del fatto che è un binding JSII sul core TypeScript, alcuni errori emergono solo in fase di esecuzione, che può rallentare leggermente il debug e lo sviluppo.

Altri linguaggi come Java, C# e Go sono supportati ma generalmente hanno meno risorse, strumenti meno maturi e quindi potrebbero offrire meno velocità di sviluppo.

Riepilogo:

Aspetto TypeScript Python Altri (Java, C#, Go)
Implementazione nativa CDK No No
Tipaggio statico Forte (in fase di compilazione) Dinamico (in fase di esecuzione) Forte (in fase di compilazione)
Supporto strumenti & IDE Migliore (VS Code, completamento intelligente) Buono, ma meno maturo Meno maturo
Risorse della comunità/examples Più abbondanti Buone ma meno di TS Limitate
Velocità di sviluppo Veloce, meno errori Leggermente più lenta a causa del tipaggio dinamico Generalmente più lenta
Prestazioni di distribuzione Uguali (output CloudFormation) Uguali Uguali

Pertanto, TypeScript offre le migliori prestazioni di sviluppo con AWS CDK, rendendo lo sviluppo dell’infrastruttura più veloce, sicuro ed efficiente. Le prestazioni di distribuzione sono equivalenti in tutti i linguaggi supportati poiché producono gli stessi modelli CloudFormation.

Questo allinea con le linee guida ufficiali di AWS e l’esperienza comune della comunità che evidenziano il supporto nativo e ottimizzato di TypeScript per lo sviluppo con AWS CDK. Python rimane una forte alternativa, specialmente se il team lo preferisce o valuta la semplicità della sintassi. Gli altri linguaggi sono validi ma generalmente meno ottimali per uno sviluppo rapido.