AWS Progetti CDK - AWS Cloud Development Kit (AWS CDK) v2

Questa è la AWS CDK v2 Developer Guide. Il vecchio CDK v1 è entrato in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS Progetti CDK

Un progetto AWS Cloud Development Kit (AWS CDK) rappresenta i file e le cartelle che contengono il codice CDK. I contenuti varieranno in base al linguaggio di programmazione.

È possibile creare il progetto AWS CDK manualmente o con il comando AWS CDK Command Line Interface (AWS CDK CLI). cdk init In questo argomento, faremo riferimento alla struttura del progetto e alle convenzioni di denominazione di file e cartelle create dalla CLI AWS CDK. Puoi personalizzare e organizzare i tuoi progetti CDK in base alle tue esigenze.

Nota

La struttura del progetto creata dalla CLI AWS CDK può variare tra le versioni nel tempo.

File e cartelle universali

.git

Se è git stato installato, la CLI AWS CDK inizializza automaticamente un Git repository per il tuo progetto. La .git directory contiene informazioni sul repository.

.gitignore

File di testo utilizzato da Git per specificare file e cartelle da ignorare.

README.md

File di testo che fornisce linee guida di base e informazioni importanti per la gestione del progetto AWS CDK. Modificate questo file se necessario per documentare informazioni importanti relative al progetto CDK.

cdk.json

File di configurazione per il AWS CDK. Questo file fornisce istruzioni alla CLI AWS CDK su come eseguire l'app.

File e cartelle specifici della lingua

I file e le cartelle seguenti sono unici per ogni linguaggio di programmazione supportato.

TypeScript

Di seguito è riportato un esempio di progetto creato nella my-cdk-ts-project directory utilizzando il cdk init --language typescript comando:

my-cdk-ts-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-ts-project.ts ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-ts-project-stack.ts ├── node_modules ├── package-lock.json ├── package.json ├── test │ └── my-cdk-ts-project.test.ts └── tsconfig.json
.npmignore

File che specifica quali file e cartelle ignorare durante la pubblicazione di un pacchetto nel npm registro. Questo file è simile a.gitignore, ma è specifico per npm i pacchetti.

bin/my-cdk-ts-project.ts

Il file dell'applicazione definisce l'app CDK. I progetti CDK possono contenere uno o più file di applicazione. I file dell'applicazione vengono memorizzati nella bin cartella.

Di seguito è riportato un esempio di file applicativo di base che definisce un'app CDK:

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MyCdkTsProjectStack } from '../lib/my-cdk-ts-project-stack'; const app = new cdk.App(); new MyCdkTsProjectStack(app, 'MyCdkTsProjectStack');
jest.config.js

File di configurazione per Jest. Jest è un popolare framework JavaScript di test.

lib/my-cdk-ts-project-stack.ts

Il file stack definisce lo stack CDK. All'interno dello stack, definisci AWS risorse e proprietà utilizzando costrutti.

Di seguito è riportato un esempio di file stack di base che definisce uno stack CDK:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class MyCdkTsProjectStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // code that defines your resources and properties go here } }
node_modules

Cartella comune in Node.js progetti che contengono dipendenze per il tuo progetto.

package-lock.json

File di metadati che funziona con il package.json file per gestire le versioni delle dipendenze.

package.json

File di metadati comunemente utilizzato in Node.js progetti. Questo file contiene informazioni sul progetto CDK come il nome del progetto, le definizioni degli script, le dipendenze e altre informazioni a livello di progetto di importazione.

test/my-cdk-ts-project.test.ts

Viene creata una cartella di test per organizzare i test per il progetto CDK. Viene inoltre creato un file di test di esempio.

È possibile scrivere test TypeScript e utilizzarli Jest per compilare il TypeScript codice prima di eseguire i test.

tsconfig.json

File di configurazione utilizzato nei TypeScript progetti che specifica le opzioni del compilatore e le impostazioni del progetto.

JavaScript

Di seguito è riportato un esempio di progetto creato nella my-cdk-js-project directory utilizzando il cdk init --language javascript comando:

my-cdk-js-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-js-project.js ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-js-project-stack.js ├── node_modules ├── package-lock.json ├── package.json └── test └── my-cdk-js-project.test.js
.npmignore

File che specifica quali file e cartelle ignorare durante la pubblicazione di un pacchetto nel npm registro. Questo file è simile a.gitignore, ma è specifico per npm i pacchetti.

bin/my-cdk-js-project.js

Il file dell'applicazione definisce l'app CDK. I progetti CDK possono contenere uno o più file di applicazione. I file dell'applicazione vengono memorizzati nella bin cartella.

Di seguito è riportato un esempio di file applicativo di base che definisce un'app CDK:

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { MyCdkJsProjectStack } = require('../lib/my-cdk-js-project-stack'); const app = new cdk.App(); new MyCdkJsProjectStack(app, 'MyCdkJsProjectStack');
jest.config.js

File di configurazione per Jest. Jest è un popolare framework JavaScript di test.

lib/my-cdk-js-project-stack.js

Il file stack definisce lo stack CDK. All'interno dello stack, definisci AWS risorse e proprietà utilizzando costrutti.

Di seguito è riportato un esempio di file stack di base che definisce uno stack CDK:

const { Stack, Duration } = require('aws-cdk-lib'); class MyCdkJsProjectStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // code that defines your resources and properties go here } } module.exports = { MyCdkJsProjectStack }
node_modules

Cartella comune in Node.js progetti che contengono dipendenze per il tuo progetto.

package-lock.json

File di metadati che funziona con il package.json file per gestire le versioni delle dipendenze.

package.json

File di metadati comunemente utilizzato in Node.js progetti. Questo file contiene informazioni sul progetto CDK come il nome del progetto, le definizioni degli script, le dipendenze e altre informazioni a livello di progetto di importazione.

test/my-cdk-js-project.test.js

Viene creata una cartella di test per organizzare i test per il progetto CDK. Viene inoltre creato un file di test di esempio.

È possibile scrivere test JavaScript e utilizzarli Jest per compilare il JavaScript codice prima di eseguire i test.

Python

Di seguito è riportato un esempio di progetto creato nella my-cdk-py-project directory utilizzando il cdk init --language python comando:

my-cdk-py-project ├── .git ├── .gitignore ├── .venv ├── README.md ├── app.py ├── cdk.json ├── my_cdk_py_project │ ├── __init__.py │ └── my_cdk_py_project_stack.py ├── requirements-dev.txt ├── requirements.txt ├── source.bat └── tests ├── __init__.py └── unit
.venv

La CLI CDK crea automaticamente un ambiente virtuale per il tuo progetto. La .venv directory si riferisce a questo ambiente virtuale.

app.py

Il file dell'applicazione definisce l'app CDK. I progetti CDK possono contenere uno o più file di applicazione.

Di seguito è riportato un esempio di file applicativo di base che definisce un'app CDK:

#!/usr/bin/env python3 import os import aws_cdk as cdk from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack app = cdk.App() MyCdkPyProjectStack(app, "MyCdkPyProjectStack") app.synth()
my_cdk_py_project

Directory che contiene i file dello stack. La CLI CDK crea quanto segue qui:

  • __init__.py — Un file di definizione del pacchetto Python vuoto.

  • my_cdk_py_project— File che definisce lo stack CDK. Quindi definisci AWS le risorse e le proprietà all'interno dello stack utilizzando i costrutti.

Di seguito è riportato un esempio di file stack:

from aws_cdk import Stack from constructs import Construct class MyCdkPyProjectStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # code that defines your resources and properties go here
requirements-dev.txt

File simile arequirements.txt, ma utilizzato per gestire le dipendenze specificamente per scopi di sviluppo piuttosto che di produzione.

requirements.txt

File comune utilizzato nei progetti Python per specificare e gestire le dipendenze del progetto.

source.bat

File Batch per Windows che viene utilizzato per configurare l'ambiente virtuale Python.

tests

Directory che contiene i test per il progetto CDK.

Di seguito è riportato un esempio di test unitario:

import aws_cdk as core import aws_cdk.assertions as assertions from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack def test_sqs_queue_created(): app = core.App() stack = MyCdkPyProjectStack(app, "my-cdk-py-project") template = assertions.Template.from_stack(stack) template.has_resource_properties("AWS::SQS::Queue", { "VisibilityTimeout": 300 })
Java

Di seguito è riportato un esempio di progetto creato nella my-cdk-java-project directory utilizzando il cdk init --language java comando:

my-cdk-java-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── pom.xml └── src ├── main └── test
pom.xml

File che contiene informazioni di configurazione e metadati relativi al progetto CDK. Questo file fa parte di Maven.

src/main

Directory contenente i file dell'applicazione e dello stack.

Di seguito è riportato un esempio di file di applicazione:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class MyCdkJavaProjectApp { public static void main(final String[] args) { App app = new App(); new MyCdkJavaProjectStack(app, "MyCdkJavaProjectStack", StackProps.builder() .build()); app.synth(); } }

Di seguito è riportato un esempio di file stack:

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; public class MyCdkJavaProjectStack extends Stack { public MyCdkJavaProjectStack(final Construct scope, final String id) { this(scope, id, null); } public MyCdkJavaProjectStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // code that defines your resources and properties go here } }
src/test

Directory contenente i file di test. Di seguito è riportato un esempio:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.assertions.Template; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Test; public class MyCdkJavaProjectTest { @Test public void testStack() throws IOException { App app = new App(); MyCdkJavaProjectStack stack = new MyCdkJavaProjectStack(app, "test"); Template template = Template.fromStack(stack); template.hasResourceProperties("AWS::SQS::Queue", new HashMap<String, Number>() {{ put("VisibilityTimeout", 300); }}); } }
C#

Di seguito è riportato un esempio di progetto creato nella my-cdk-csharp-project directory utilizzando il cdk init --language csharp comando:

my-cdk-csharp-project ├── .git ├── .gitignore ├── README.md ├── cdk.json └── src ├── MyCdkCsharpProject └── MyCdkCsharpProject.sln
src/MyCdkCsharpProject

Directory contenente i file dell'applicazione e dello stack.

Di seguito è riportato un esempio di file di applicazione:

using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace MyCdkCsharpProject { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyCdkCsharpProjectStack(app, "MyCdkCsharpProjectStack", new StackProps{}); app.Synth(); } } }

Di seguito è riportato un esempio di file stack:

using Amazon.CDK; using Constructs; namespace MyCdkCsharpProject { public class MyCdkCsharpProjectStack : Stack { internal MyCdkCsharpProjectStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // code that defines your resources and properties go here } } }

Questa directory contiene anche quanto segue:

  • GlobalSuppressions.cs— File utilizzato per sopprimere avvisi o errori specifici del compilatore in tutto il progetto.

  • .csproj— File basato su XML utilizzato per definire le impostazioni del progetto, le dipendenze e creare configurazioni. ---

src/MyCdkCsharpProject.sln

Microsoft Visual Studio Solution File utilizzato per organizzare e gestire progetti correlati.

Go

Di seguito è riportato un esempio di progetto creato nella my-cdk-go-project directory utilizzando il cdk init --language go comando:

my-cdk-go-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── go.mod ├── my-cdk-go-project.go └── my-cdk-go-project_test.go
go.mod

File che contiene informazioni sul modulo e viene utilizzato per gestire le dipendenze e il controllo delle versioni per Go progetto.

my-cdk-go-project.go

File che definisce l'applicazione e gli stack CDK.

Di seguito è riportato un esempio:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type MyCdkGoProjectStackProps struct { awscdk.StackProps } func NewMyCdkGoProjectStack(scope constructs.Construct, id string, props *MyCdkGoProjectStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // The code that defines your resources and properties go here return stack } func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewMyCdkGoProjectStack(app, "MyCdkGoProjectStack", &MyCdkGoProjectStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return nil }
my-cdk-go-project_test.go

File che definisce un test di esempio.

Di seguito è riportato un esempio:

package main import ( "testing" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/assertions" "github.com/aws/jsii-runtime-go" ) func TestMyCdkGoProjectStack(t *testing.T) { // GIVEN app := awscdk.NewApp(nil) // WHEN stack := NewMyCdkGoProjectStack(app, "MyStack", nil) // THEN template := assertions.Template_FromStack(stack, nil) template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ "VisibilityTimeout": 300, }) }