Lavorare con i construct di CDK
Le app AWS CDK si basano sui construct come elementi strutturali essenziali. Quando padroneggi i construct, che tu usi quelli integrati dei servizi o crei pattern riutilizzabili, il tuo codice di infrastruttura diventa più modulare, manutenibile e leggibile.
Questa sezione ti insegna a usare i construct L2 (alto livello) e a sviluppare construct personalizzati che riducono i pattern ripetitivi.
Usare i construct L2
I construct L2 sono astrazioni native di CDK più semplici da usare rispetto a CloudFormation grezzo (L1). Hanno default sensati e type safety, spesso richiedono meno righe di codice per configurare una risorsa AWS.
Perché usare i construct L2?
- Meno boilerplate — meno campi obbligatori rispetto a L1
- Codice Python più leggibile e idiomatico
- Include metodi di utilità come
.add_to_role_policy()o.add_event_notification() - Gestisce automaticamente le dipendenze tra risorse
Esempio: Creare un bucket S3 usando L2
from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
self,
"MyBucket",
versioned=True,
encryption=s3.BucketEncryption.S3_MANAGED
)
L'equivalente construct L1, s3.CfnBucket, richiederebbe di impostare manualmente tutte le proprietà e definire la configurazione come dict grezzi — molto meno intuitivo.
Altri comuni construct L2 includono:
lambda_.Function()per AWS Lambdadynamodb.Table()per DynamoDBsqs.Queue()per SQSsns.Topic()per SNS
Creare construct personalizzati
La tua infrastruttura crescerà con pattern ricorrenti, come la creazione di funzioni Lambda con permessi specifici e bucket S3. I construct personalizzati sono la soluzione ideale in questo scenario.
I construct personalizzati ti permettono di combinare risorse correlate in un'unica unità logica, riutilizzabile tra stack o progetti.
Quando creare un construct personalizzato:
- Quando hai 3+ risorse sempre fornite insieme
- Quando vuoi incapsulare logica riutilizzabile
- Quando vuoi ridurre la duplicazione di codice tra stack
Esempio: un pattern riutilizzabile S3 + Lambda
from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
def __init__(self, scope: Construct, id: str) -> None:
super().__init__(scope, id)
# S3 bucket
self.bucket = s3.Bucket(self, "MyBucket")
# Lambda function
self.function = lambda_.Function(
self,
"MyFunction",
runtime=lambda_.Runtime.PYTHON_3_9,
handler="index.handler",
code=lambda_.Code.from_asset("lambda")
)
# Grant Lambda access to the S3 bucket
self.bucket.grant_read_write(self.function)
Ora puoi usare questo construct in qualsiasi stack così:
from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")
Prima di eseguire quanto sopra, crea una cartella chiamata lambda nella root del progetto e crea un file index.py con il seguente contenuto:
def handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
Suggerimenti per la riutilizzabilità
- Prefissa i file con
construct_o inseriscili in una cartellaconstructs/ - Esporre output come
self.bucketoself.functionper flessibilità - Mantieni ogni construct focalizzato su una sola responsabilità
Test e sintesi delle app CDK
Dopo aver scritto il codice della tua infrastruttura, è essenziale verificare cosa distribuirà CDK e, idealmente, testare che i tuoi stack si comportino come previsto. AWS CDK fornisce strumenti per sintetizzare template CloudFormation e scrivere test automatizzati per intercettare misconfigurazioni prima del deployment.
Sintetizzare i template
Il comando cdk synth genera il template CloudFormation dal tuo codice CDK.
cdk synth
Quando esegui questo comando, CDK:
- Carica la tua app (tramite
app.py) - Risolve tutti i construct e gli stack
- Produce template CloudFormation grezzi in YAML/JSON

Template CloudFormation sintetizzato
Per impostazione predefinita, l'output va al terminale, ma puoi anche reindirizzarlo a un file se necessario:
cdk synth > template.yaml
Questo è utile quando:
- Vuoi ispezionare il template reale prima del deployment
- Stai facendo il debug della struttura di uno stack
- Condividi il template con team che non usano CDK
Testare l'infrastruttura
Anche se testare l'infrastructure as code può sembrare insolito, è molto utile, soprattutto quando i tuoi stack diventano grandi o includono logica condizionale, cicli o construct riutilizzabili.
AWS CDK offre il modulo assertions per testare gli stack sintetizzati.
Scrivere un test semplice con pytest
Ecco un test di esempio che verifica se uno specifico componente (come un bucket S3) è incluso nello stack:
# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
app = cdk.App()
stack = CdkDatacampStack(app, "TestStack")
template = Template.from_stack(stack)
# Assert that an S3 bucket exists
template.resource_count_is("AWS::S3::Bucket", 1)
Per eseguire i test, assicurati che pytest sia installato:
pip install -U pytest
Poi esegui:
pytest
Se tutto passa, vedrai un segno di spunta verde. In caso contrario, l'output del test ti dirà cosa manca.
Output di Pytest che mostra l'esecuzione riuscita di tutti i casi di test per lo stack AWS CDK
Puoi anche includere validazioni nel tuo stack CDK. I test di validazione sono controlli a runtime all'interno del tuo codice di construct o stack che convalidano gli input prima del deployment. Aiutano a intercettare misconfigurazioni o a imporre vincoli nelle prime fasi del ciclo di sviluppo.
Poniamo di voler passare il bucket_name come variabile di contesto, ma vogliamo validare che:
- Il nome del bucket non sia vuoto
- Rispetti le regole di naming S3 (ad es., solo minuscole)
Crea un file chiamato test/test_storage_with_lambda.py e aggiungi quanto segue:
import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda
def test_missing_bucket_name():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="bucket_name is required"):
StorageWithLambda(stack, "FailingConstruct", bucket_name=None)
def test_bucket_name_uppercase():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="must be lowercase"):
StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")
Per testare la validazione, esegui il comando seguente:
test/test_storage_with_lambda.py
Output di Pytest che mostra l'esecuzione riuscita di tutti i casi di test per lo stack AWS CDK
Quando usare i test:
- Stai creando construct o pattern riutilizzabili.
- L'implementazione dei test serve a stabilire requisiti tecnici standard tra i membri del team.
- Vuoi intercettare regressioni o cambiamenti indesiderati durante il CI/CD.
Vuoi consolidare le tue conoscenze CDK in vista di un colloquio? Queste domande da colloquio su AWS DevOps possono aiutarti a prepararti.
Best practice e consigli per lavorare con AWS CDK
Dopo aver imparato a creare e distribuire stack CDK, dovresti seguire le best practice per mantenere il tuo codice di infrastruttura pulito, sicuro e scalabile. In questa sezione parleremo di come strutturare progetti grandi, gestire correttamente la sicurezza e integrare CDK nelle pipeline CI/CD.
Organizzare progetti di grandi dimensioni
Man mano che la tua app CDK cresce, diventa essenziale organizzare il codice in unità gestibili.
Usa più stack
Suddividi l'infrastruttura per ambito. Ad esempio:
- NetworkingStack: VPC, subnet, security group
- ComputeStack: EC2, Lambda
- StorageStack: S3, DynamoDB
Questo ti permette di distribuire, testare o eliminare parti della tua infrastruttura in modo indipendente. Ecco come può essere incluso in app.py:
network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")
Puoi anche passare risorse tra stack usando output o riferimenti.
Crea construct annidati riutilizzabili
Incapsula risorse correlate (come una Lambda e i suoi permessi) in un construct personalizzato, come hai fatto con StorageWithLambda. Questo migliora la leggibilità e la riutilizzabilità tra stack o app.
Usa configurazioni specifiche per ambiente
Supporta più ambienti (dev, staging, prod) usando:
cdk.jsoncon valori di contesto- Override da CLI:
cdk deploy -c env=prod - Logica condizionale nei tuoi stack
env = app.node.try_get_context("env")
if env == "prod":
bucket_name = "mycompany-prod-logs"
Sicurezza e permessi
Qualsiasi progetto di infrastruttura deve dare priorità alla sicurezza durante i processi di distribuzione automatizzata con AWS CDK. La sezione seguente dimostra una gestione sicura delle risorse IAM attraverso i principi del privilegio minimo.
Definisci ruoli IAM invece di usare i default
I construct CDK, tra cui Lambda o i task ECS, creano automaticamente ruoli IAM. Anche se comodo, può limitare il controllo su permessi e naming.
Meglio definire i ruoli esplicitamente:
from aws_cdk import aws_iam as iam
execution_role = iam.Role(
self,
"LambdaExecutionRole",
assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
description="Custom role for Lambda with least privilege",
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
]
)
Questo ruolo consente solo il logging e nient'altro di default.
Applica il principio del privilegio minimo
Evita di usare "*" in actions o resources a meno che non sia strettamente necessario.
Esempio:
lambda_fn.add_to_role_policy(
iam.PolicyStatement(
actions=["*"],
resources=["*"]
)
)
Puoi anche usare grant specifici per risorsa quando disponibili:
bucket.grant_read(lambda_fn)
Questo genera automaticamente la policy necessaria con accesso limitato al bucket S3.
Usa policy gestite quando possibile
Le policy gestite da AWS semplificano la manutenzione e riducono la probabilità di errori.
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")
Puoi allegarle a ruoli personalizzati per servizi come ECS, Batch o Step Functions.
Integrazione CI/CD
AWS CDK offre una potenza notevole grazie alla sua capacità di integrarsi con pipeline CI/CD moderne. CDK supporta la consegna automatizzata dell'infrastruttura tramite distribuzione di codice sotto controllo versione, funzionando con GitHub, GitLab e servizi nativi AWS, tra cui CodePipeline. Il sistema riduce gli errori umani, accorcia i cicli di feedback e abilita il deployment su più ambienti.
GitHub Actions: automatizzare i deployment CDK
Puoi usare GitHub Actions per sintetizzare, confrontare, testare e distribuire gli stack CDK a ogni push o pull request.
Guarda questo .github/workflows/deploy.yml:
name: Deploy CDK App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
npm install -g aws-cdk
- name: Run unit tests
run: pytest
- name: CDK Synth
run: cdk synth -c environment=prod
- name: Deploy to AWS
run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Usa cdk diff nelle PR per visualizzare in anteprima le modifiche all'infrastruttura prima del merge.
CDK pipelines: CI/CD nativo CDK con CodePipeline
Per deployment completamente gestiti all'interno di AWS, CDK fornisce un modulo chiamato aws_cdk.pipelines, che ti consente di definire l'intera pipeline CI/CD come codice, proprio come l'infrastruttura.
Ecco un esempio semplificato:
from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage # replace with your actual stage import
class PipelineStack(Stack):
def __init__(
self,
scope: Construct,
construct_id: str,
**kwargs
) -> None:
super().__init__(scope, construct_id, **kwargs)
# Define the source of the pipeline from a GitHub repository
source = pipelines.CodePipelineSource.git_hub(
repo_string="your-org/your-repo", # GitHub org/repo
branch="main",
authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
)
# Define the CodePipeline and its synthesis step
pipeline = pipelines.CodePipeline(
self,
"MyAppPipeline",
synth=pipelines.ShellStep(
"Synth",
input=source,
commands=[
"pip install -r requirements.txt",
"npm install -g aws-cdk",
"cdk synth"
]
)
)
# Add an application stage (e.g., production deployment)
pipeline.add_stage(
MyAppStage(self, "ProdStage")
)
Nel codice sopra:
SecretValue.secrets_manager("GITHUB_TOKEN")recupera in modo sicuro il tuo token GitHub da Secrets Manager.MyAppStagedovrebbe essere una classe che estendeStagee incapsula i tuoi stack CDK reali.
Se stai distribuendo sistemi di machine learning, l'integrazione di CDK con pratiche di continuous deployment è trattata nel nostro corso CI/CD for Machine Learning.
Conclusione
Questo tutorial ti ha mostrato come costruire e distribuire infrastruttura cloud in Python tramite le operazioni di AWS Cloud Development Kit (CDK). Hai imparato a:
- Creare il tuo primo stack CDK.
- Definire e validare bucket S3 e funzioni Lambda come risorse.
- Organizzare un progetto tramite construct personalizzati e pattern multi-stack.
- Applicare best practice di sicurezza secondo il principio del privilegio minimo.
- Automatizzare i deployment combinando GitHub Actions con CDK Pipelines.
- Scrivere test per validare la logica della tua infrastruttura.
Ora che hai distribuito la tua prima app CDK, ecco alcuni modi per fare un salto di qualità:
- Usa ambienti parametrizzati per dev/staging/prod
- Aggiungi CloudWatch Alarms, API Gateway o Step Functions
- Esplora construct CDK come
aws_s3_deployment,aws_ecs_patternsecdk.pipelines - Converte i tuoi construct in una libreria Python interna per la riutilizzabilità
Per continuare a imparare e costruire, da' un'occhiata al corso Introduction to AWS Boto in Python!
FAQ
Che cos'è AWS CDK e in cosa è diverso da CloudFormation o Terraform?
AWS CDK ti permette di definire l'infrastruttura cloud usando linguaggi di programmazione come Python, mentre CloudFormation e Terraform si basano su JSON/YAML o HCL. CDK offre un livello di astrazione superiore e riusabilità tramite i construct.
Devo conoscere CloudFormation per usare AWS CDK?
No, CDK astrae gran parte della complessità di CloudFormation. Tuttavia, conoscere CloudFormation aiuta quando usi construct di livello inferiore o durante il troubleshooting dei deployment.
Posso distribuire più ambienti (ad es., dev, prod) con AWS CDK?
Sì! CDK supporta configurazioni specifiche per ambiente usando valori di contesto e flag da CLI come cdk deploy -c env=prod.
Come testo il mio codice di infrastruttura CDK?
Puoi usare pytest insieme alle assertions di CDK e al modulo template per scrivere unit test che verificano le risorse e le configurazioni del tuo stack prima del deployment.
Cosa succede dietro le quinte quando eseguo cdk deploy?
cdk deploy sintetizza il tuo codice Python in un template CloudFormation, lo carica su AWS e effettua il provisioning delle risorse definite nel tuo account.
Rahul Sharma è un AWS Ambassador, DevOps Architect e blogger tecnico specializzato in cloud computing, pratiche DevOps e tecnologie open source. Con esperienza in AWS, Kubernetes e Terraform, semplifica concetti complessi per chi studia e per i professionisti attraverso articoli e tutorial coinvolgenti. Rahul è appassionato di risolvere le sfide DevOps e di condividere idee per dare forza alla community tech.



Gestire l'infrastruttura cloud con template JSON o YAML grezzi può essere noioso e soggetto a errori. L'AWS Cloud Development Kit (CDK) cambia le carte in tavola permettendoti di definire le risorse cloud usando linguaggi di programmazione moderni come Python, TypeScript, Java e C#.
Con CDK, l'infrastruttura diventa codice riutilizzabile, testabile e sotto controllo di versione. Ti consente di ragionare come uno sviluppatore anche quando esegui il provisioning di sistemi cloud complessi.
In questo tutorial imparerai a configurare un progetto AWS CDK usando Python. Ti guideremo nella scrittura del tuo primo stack, nell'aggiunta di una risorsa AWS essenziale e nella distribuzione sul tuo account AWS. Alla fine avrai una chiara comprensione di come funziona CDK e di come usarlo per gestire l'infrastruttura in modo developer-friendly, con il codice.
Per comprendere meglio le pratiche alla base di strumenti come AWS CDK, esplora i principi fondamentali nel nostro corso DevOps Concepts.
Prerequisiti
Prima di metterci a scrivere codice con AWS CDK, assicurati che il tuo ambiente sia configurato correttamente. Ecco cosa ti serve:
Account AWS per fare esperimenti
Ti serve l'accesso a un account AWS per distribuire l'applicazione che costruiremo. Se il tuo sistema è già configurato con le credenziali di un utente con privilegi di amministratore, puoi passare oltre.
Se non hai ancora un account AWS, creane uno qui.
Per un percorso di apprendimento strutturato sui fondamenti di AWS, l'AWS Cloud Practitioner track è un ottimo punto di partenza.
Utente amministratore
Ti servirà un utente con accesso programmatico e permessi completi per seguire la guida.
Nella schermata finale, annota il tuo Access key ID e la Secret access key. Ti serviranno nel prossimo passaggio.
Configura le tue credenziali AWS
Apri un terminale ed esegui:
Ti verrà chiesto di inserire le credenziali dalla console IAM:
Scegli un IDE per lo sviluppo
AWS CDK permette agli sviluppatori di lavorare in un ambiente di programmazione completo invece che su template YAML o JSON. Questo ambiente ricco di funzionalità ti consente di usare il tuo IDE preferito beneficiando di completamento del codice, linting in tempo reale e strumenti di refactoring per una gestione efficiente dell'infrastructure as code.
Per la migliore esperienza di sviluppo con il CDK in Python, ti suggerisco un IDE che supporti:
Installa Python e pip
Per usare AWS CDK con Python, devi avere Python versione 3.8 o superiore installato sul tuo sistema. Se non ce l'hai ancora, puoi scaricare l'ultima versione dal sito ufficiale di Python.
Se usi Windows, assicurati che Python sia aggiunto alla variabile d'ambiente
PATHdel sistema. Per verificare, apri un terminale o prompt dei comandi ed esegui:Se vedi un errore tipo "command not found" o simile, probabilmente Python non è nel tuo
PATH. La soluzione più semplice è spuntare la casella "Add Python 3.x to PATH" durante l'installazione.Ti servirà anche pip, il gestore pacchetti di Python, per installare in seguito le dipendenze di AWS CDK. La maggior parte delle distribuzioni moderne di Python include già pip preinstallato.
Se non è installato, segui la guida ufficiale di installazione di pip.
Primi passi con AWS CDK
Prima di scrivere codice, è essenziale capire cos'è AWS CDK, perché esiste e come si inserisce nel mondo più ampio dell'infrastructure as code (IaC). Questa sezione introduce i concetti chiave alla base di CDK e mostra come si confronta con altri popolari strumenti IaC.
Cos'è AWS CDK e perché si usa?
AWS Cloud Development Kit (CDK) è un framework open-source che consente di creare infrastruttura cloud tramite linguaggi di programmazione familiari, tra cui Python, TypeScript, Java e C#.
CDK permette di generare template CloudFormation in modo programmatico tramite vero codice, invece di richiedere la scrittura manuale di template JSON o YAML.
Questo significa che puoi:
Alla base, CDK ruota attorno a tre concetti principali:
Gerarchia visiva di un'app AWS CDK
CDK vs Terraform vs CloudFormation
La tabella seguente descrive le differenze tra gli strumenti disponibili in AWS per gestire l'infrastruttura.
Caratteristica
AWS CDK
Terraform
AWS CloudFormation
Supporto linguaggi
Python, TypeScript, Java, C#
HCL (dichiarativo)
YAML / JSON
Livello di astrazione
Alto (OOP + librerie)
Medio
Basso
Modularità
Forte (construct, classi)
Forte (moduli)
Debole (stack annidati)
Gestione dello stato
Gestito da CloudFormation
Gestito da Terraform (tfstate)
Gestito da CloudFormation
Multi-cloud
Solo AWS
Sì
Solo AWS
Linguaggi supportati e prerequisiti
AWS CDK supporta più linguaggi di programmazione, permettendo agli sviluppatori di scegliere quello con cui si sentono più a loro agio:
In questo tutorial ci concentreremo su Python, ma i concetti di base valgono per tutti i linguaggi supportati.
Installazione e setup
Ora che il tuo ambiente è pronto, è il momento di usare Python per creare l'impalcatura della tua prima app AWS CDK. Il comando
initdi CDK imposta l'intera struttura del progetto, inclusi file, directory e un ambiente virtuale, per aiutarti a iniziare velocemente.Crea una directory di progetto
Apri il terminale ed esegui il seguente comando per creare una nuova directory e spostarti al suo interno:
Inizializza l'app CDK
Questo crea un progetto iniziale preconfigurato con un esempio di base che include:
cdk_datacamp_stack)cdk.jsonche configura come viene eseguita la tua app CDK.venv) per le dipendenze PythonAl termine del comando, vedrai un output simile a questo:
Impalcatura del progetto CDK in Python
Configurazione dell'ambiente virtuale
Se il processo
cdk initnon crea automaticamente un ambiente virtuale, puoi farlo manualmente:Una volta attivato, installa le dipendenze richieste:
Comprendere i concetti di CDK
Prima di approfondire il codice, vediamo come i componenti principali di AWS CDK — app, stack e construct — lavorano insieme nella pratica. Ora che sai cosa rappresenta ciascuno, è essenziale vedere come interagiscono per formare un'infrastruttura scalabile e modulare.
Analizzeremo anche i diversi livelli di construct (L1, L2, L3) ed esamineremo le librerie CDK che lo rendono possibile.
App, stack e construct
Ora che conosci App, Stack e Construct dalle sezioni precedenti, capiamo come lavorano insieme in un'applicazione CDK.
Pensala come costruire una casa:
In codice, la relazione appare così:
Qui, l'App istanzia uno Stack, che include Construct come un bucket S3.
Capire i livelli dei construct: L1, L2 e L3
In AWS CDK, i construct sono disponibili in tre livelli di astrazione, dandoti flessibilità in base al livello di controllo o semplicità di cui hai bisogno.
Livello 1 (L1) – Construct CloudFormation
Sono i mattoni grezzi generati direttamente dalla specifica AWS CloudFormation. Ogni risorsa AWS in CloudFormation ha un equivalente construct L1 in CDK; i loro nomi iniziano sempre con "Cfn".
I construct L1 espongono ogni possibile opzione di configurazione ma non offrono astrazioni o default. Sono ideali quando ti serve controllo totale o quando usi funzionalità AWS più nuove non ancora incapsulate dai construct di livello superiore.
s3.CfnBucketLivello 2 (L2) – Construct nativi di AWS CDK
I construct L2 forniscono un'astrazione più elevata e developer-friendly rispetto ai L1. Sono componenti con opinioni e default sensati, con metodi integrati che semplificano i compiti quotidiani. Sono pensati per l'uso di tutti i giorni e riducono il boilerplate pur offrendo un buon livello di personalizzazione.
s3.Bucket– Puoi creare un bucket con versioning con una sola riga di codice.Livello 3 (L3) – Pattern di construct
I construct L3 sono astrazioni che raggruppano più risorse AWS in pattern architetturali comuni. Possono essere forniti da AWS o creati come componenti riutilizzabili dalla community o da te. Usa i construct L3 per incapsulare la complessità e riutilizzare pattern di infrastruttura tra progetti o team.
aws_s3_deployment.BucketDeployment– Combina un bucket S3 e una strategia di deployment per automatizzare il caricamento degli asset.La maggior parte degli sviluppatori parte dai construct L2 e introduce i L1 solo quando necessario. I L3 diventano utili quando il tuo progetto cresce e vuoi astrarre pattern ripetuti in componenti riutilizzabili.
Librerie e moduli CDK
Quando costruisci con AWS CDK non interagisci direttamente con CloudFormation grezzo. Usi invece le librerie modulari di CDK, che forniscono construct per servizi AWS come S3, Lambda, IAM e altri. Tutti i moduli dei servizi AWS sono inclusi nel pacchetto principale chiamato
aws-cdk-libe sono ulteriormente organizzati per servizio.Librerie comunemente usate in Python
Di seguito alcune delle librerie (o moduli) più usate di
aws-cdk-libnei progetti Python:aws_cdk.aws_s3– Per creare bucket S3aws_cdk.aws_lambda– Per definire funzioni Lambdaaws_cdk.aws_iam– Per gestire ruoli e permessiaws_cdk.aws_dynamodb– Per lavorare con tabelle DynamoDBaws_cdk.aws_ec2– Per componenti di rete come VPC e security groupaws_cdk.aws_sns/aws_cdk.aws_sns_subscriptions– Per topic SNS e i loro sottoscrittoriQuesti moduli vengono importati solo quando servono, mantenendo il progetto leggero e modulare.
Come importare e usare un modulo CDK
Per usare un servizio AWS specifico, importi il relativo modulo e richiami le sue classi construct. Ad esempio, per creare un bucket S3:
Questo esempio usa il construct L2
s3.Bucket, che include default integrati come opzioni di cifratura e versioning.Se ti serve un altro servizio, importa il suo modulo allo stesso modo:
Nota: Nel tuo
requirements.txt, in genere ti servono solo:Questi due pacchetti ti danno accesso a tutti i construct di AWS CDK e alle funzionalità del framework core.
Creare il tuo primo stack CDK
Dopo aver appreso il funzionamento interno di AWS CDK, puoi mettere in pratica queste conoscenze. La sezione seguente ti guida nella creazione di uno stack CDK operativo usando Python. Prima di distribuirli sul tuo account AWS, creerai una struttura di progetto tramite codice e implementerai risorse AWS reali, come bucket S3 e funzioni Lambda.
Creare l'impalcatura di un nuovo progetto
Quando esegui il comando
cdk initcon il flag--language python, viene configurata una struttura di progetto completa che appare più o meno così:Struttura delle cartelle di un progetto AWS CDK in Python
Il file
app.pyè dove è definita l'App, e il filecdk_datacamp_stack.pyè dove scrivi il codice per il tuo Stack e i Construct.Suggerimento: Puoi rinominare il file o la classe dello stack in base allo scopo della tua app, ad esempio
storage_stack.pyomonitoring_stack.py.Aggiungere risorse AWS
Ora aggiungiamo alcune risorse AWS al tuo stack CDK. Scriverai questo codice all'interno del metodo
__init__()della tua classeStacknel file cdk_datacamp_stack.py.Bucket S3
Funzione Lambda
Distribuire lo stack
Dopo aver aggiunto le risorse, è ora di distribuirle su AWS.
Nel terminale, attiva il tuo ambiente virtuale ed esegui:
Questo:
Se è la prima volta che distribuisci lo stack, ti verrà chiesto di approvare le modifiche.
Dopo la distribuzione, puoi: