

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
<a name="projects"></a>

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
<a name="projects-universal"></a><a name="projects-universal-git"></a>

 `.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.<a name="projects-universal-gitignore"></a>

 `.gitignore`   
File di testo utilizzato da Git per specificare file e cartelle da ignorare.<a name="projects-universal-readme"></a>

 `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.<a name="projects-universal-cdk"></a>

 `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
<a name="projects-specific"></a>

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

**Example**  
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.
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.
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:  
+ \$1\$1init\$1\$1.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 a`requirements.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
 })
```
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);
  }});
 }
}
```
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.
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,
 })
}
```