

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à.

# Distribuisci applicazioni multi-stack utilizzando AWS CDK con TypeScript
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript"></a>

*Dott. Rahul Sharad Gaikwad, Amazon Web Services*

## Riepilogo
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-summary"></a>

Questo modello fornisce un step-by-step approccio per la distribuzione di applicazioni su Amazon Web Services (AWS) utilizzando AWS Cloud Development Kit (AWS CDK) con TypeScript. Ad esempio, il pattern implementa un'applicazione di analisi in tempo reale senza server.

Il pattern crea e distribuisce applicazioni stack annidate. Lo stack AWS principale chiama gli CloudFormation stack secondari, o annidati.  Ogni stack secondario crea e distribuisce le risorse AWS definite nello stack. CloudFormation AWS CDK Toolkit, il comando dell'interfaccia a riga di comando (CLI)`cdk`, è l'interfaccia principale per gli stack. CloudFormation 

## Prerequisiti e limitazioni
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Cloud privato virtuale (VPC) e sottoreti esistenti
+ AWS CDK Toolkit installato e configurato
+ Un utente con autorizzazioni di amministratore e un set di chiavi di accesso.
+ Node.js
+ Interfaccia a riga di comando di AWS (CLI AWS)

**Limitazioni**
+ Poiché AWS CDK utilizza AWS CloudFormation, le applicazioni AWS CDK sono soggette a quote di CloudFormation servizio. Per ulteriori informazioni, consulta [AWS CloudFormation quotas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html).

**Versioni del prodotto**

Questo modello è stato creato e testato utilizzando i seguenti strumenti e versioni.
+ Kit di strumenti CDK AWS 1.83.0
+ Node.js 14.13.0
+ npm 7.0.14

Il modello dovrebbe funzionare con qualsiasi versione di AWS CDK o npm. Tieni presente che le versioni di Node.js dalla 13.0.0 alla 13.6.0 non sono compatibili con AWS CDK.

## Architecture
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-architecture"></a>

**Stack tecnologico Target**
+ Console AWS Amplify
+ Gateway Amazon API
+ AWS CDK
+ Amazon CloudFront
+ Amazon Cognito
+ Amazon DynamoDB
+ Amazon Data Firehose
+ Flusso di dati Amazon Kinesis
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)

**Architettura Target**

Il diagramma seguente mostra la distribuzione di applicazioni a stack multiplo utilizzando AWS CDK con. TypeScript

![\[Architettura dello stack nel VPC, con uno stack principale e due stack secondari che contengono risorse.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/8f92e86a-aa3d-4f8a-9b11-b92c52a7226c.png)


 

Il diagramma seguente mostra l'architettura dell'applicazione serverless in tempo reale di esempio.

![\[Architettura dell'applicazione nella regione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/2df00faf-f871-4aec-9655-19ba2eb14cf8.png)


 

## Tools (Strumenti)
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-tools"></a>

**Strumenti**
+ La console [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) è il centro di controllo per le distribuzioni complete di applicazioni web e mobili in AWS. L'hosting di Amplify Console offre un flusso di lavoro basato su git per l'hosting di app web serverless fullstack con distribuzione continua. L'interfaccia utente di amministrazione è un'interfaccia visiva per gli sviluppatori web e mobili di frontend per creare e gestire i backend di app al di fuori della console AWS.
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) è un servizio AWS per la creazione, la pubblicazione, la manutenzione, il monitoraggio e la protezione di REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) è un kit di sviluppo cloud a riga di comando che ti aiuta a interagire con la tua app AWS CDK. Il comando `cdk` CLI è lo strumento principale per interagire con l'app AWS CDK. Esegue la tua app, interroga il modello di applicazione che hai definito e produce e distribuisce i CloudFormation modelli AWS generati dal CDK AWS.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) è un servizio Web che accelera la distribuzione di contenuti Web statici e dinamici, come .html, .css, .js e file di immagine. CloudFront distribuisce i tuoi contenuti attraverso una rete mondiale di data center denominati edge location per ridurre la latenza e migliorare le prestazioni.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per le tue app Web e mobili. I tuoi utenti possono accedere direttamente o tramite terze parti.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL completamente gestito che offre prestazioni veloci e prevedibili con una scalabilità perfetta.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) è un servizio completamente gestito per la distribuzione di [dati di streaming](https://aws.amazon.com/streaming-data/) in tempo reale a destinazioni come Amazon S3, Amazon Redshift, OpenSearch Amazon Service, Splunk e qualsiasi endpoint HTTP o endpoint HTTP personalizzato di proprietà di provider di servizi terzi supportati.
+ [Amazon Kinesis Data](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) Streams è un servizio per la raccolta e l'elaborazione di grandi flussi di record di dati in tempo reale.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che supporta l'esecuzione di codice senza effettuare il provisioning o la gestione di server. Lambda esegue il codice solo quando è necessario e si dimensiona automaticamente, da poche richieste al giorno a migliaia al secondo. Verrà addebitato soltanto il tempo di calcolo consumato e non verrà addebitato alcun costo quando il codice non è in esecuzione.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

**Codice**

Il codice per questo modello è allegato.

## Epiche
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-epics"></a>

### Installa AWS CDK Toolkit
<a name="install-aws-cdk-toolkit"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa AWS CDK Toolkit. | Per installare AWS CDK Toolkit a livello globale, esegui il seguente comando.`npm install -g aws-cdk` | DevOps | 
| Verifica la versione. | Per verificare la versione di AWS CDK Toolkit, esegui il comando seguente. `cdk --version` | DevOps | 

### Configura le credenziali AWS
<a name="set-up-aws-credentials"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura le credenziali. | Per configurare le credenziali, esegui il `aws configure` comando e segui le istruzioni.<pre>$aws configure<br />AWS Access Key ID [None]: <br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre> | DevOps | 

### Scarica il codice del progetto
<a name="download-the-project-code"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica il codice del progetto allegato. | Per ulteriori informazioni sulla directory e sulla struttura dei file, consulta la sezione *Informazioni aggiuntive*. | DevOps | 

### Esegui il bootstrap dell'ambiente AWS CDK
<a name="bootstrap-the-aws-cdk-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia l'ambiente. | Per distribuire il CloudFormation modello AWS nell'account e nella regione AWS che desideri utilizzare, esegui il comando seguente.`cdk bootstrap <account>/<Region>`Per ulteriori informazioni, consulta la [documentazione di AWS](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html). | DevOps | 

### Crea e distribuisci il progetto
<a name="build-and-deploy-the-project"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Compilare il progetto. | Per creare il codice del progetto, esegui il `npm run build` comando. | DevOps | 
| Distribuisci il progetto | Per distribuire il codice del progetto, esegui il `cdk deploy` comando. |  | 

### Verifica gli output
<a name="verify-outputs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica la creazione dello stack. | Nella Console di gestione AWS, scegli **CloudFormation**. Negli stack del progetto, verifica che siano stati creati uno stack principale e due stack secondari. | DevOps | 

### Eseguire il test dell’applicazione
<a name="test-the-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia dati a Kinesis Data Streams. | Configura il tuo account AWS per inviare dati a Kinesis Data Streams utilizzando Amazon Kinesis Data Generator (KDG). Per ulteriori informazioni, consulta [Amazon Kinesis Data](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html) Generator. | DevOps | 
| Crea un utente Amazon Cognito. | [Per creare un utente Amazon Cognito, scarica il modello cognito-setup.json CloudFormation dalla sezione Crea *un utente Amazon Cognito della pagina di aiuto di Kinesis Data Generator*.](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html) **Avvia il modello, quindi inserisci il nome utente e la password di Amazon **Cognito**.**La scheda **Output** elenca l'URL di Kinesis Data Generator. | DevOps | 
| Accedi a Kinesis Data Generator | Per accedere a KDG, utilizza le credenziali di Amazon Cognito che hai fornito e l'URL di Kinesis Data Generator. | DevOps | 
| Testare l'applicazione. | **In KDG, in **Record template, Template** **1**, incolla il codice di test dalla sezione *Informazioni aggiuntive* e scegli Invia dati.** | DevOps | 
| Gateway API di prova. | Dopo che i dati sono stati inseriti, prova API Gateway utilizzando il `GET` metodo per recuperare i dati. | DevOps | 

## Risorse correlate
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-resources"></a>

**Riferimenti**
+ [Kit di sviluppo AWS per il cloud](https://aws.amazon.com/cdk/)
+ [CDK AWS su GitHub](https://github.com/aws/aws-cdk)
+ [Lavorare con stack annidati](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)
+ [Esempio di AWS: analisi in tempo reale senza server](https://github.com/aws-samples/serverless-realtime-analytics)

## Informazioni aggiuntive
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-additional"></a>

**Dettagli di directory e file**

Questo modello imposta le seguenti tre pile.
+ `parent-cdk-stack.ts`— Questo stack funge da stack principale e chiama le due applicazioni secondarie come stack annidati. 
+ `real-time-analytics-poc-stack.ts`— Questo stack annidato contiene l'infrastruttura e il codice dell'applicazione.
+ `real-time-analytics-web-stack.ts`— Questo stack annidato contiene solo il codice statico dell'applicazione Web.

*File importanti e relative funzionalità*
+ `bin/real-time-analytics-poc.ts`— Punto di ingresso dell'applicazione AWS CDK. Carica tutti gli stack definiti in. `lib/`
+ `lib/real-time-analytics-poc-stack.ts`— Definizione dello stack dell'applicazione AWS CDK ()`real-time-analytics-poc`.
+ `lib/real-time-analytics-web-stack.ts`— Definizione dello stack dell'applicazione AWS CDK ()`real-time-analytics-web-stack`.
+ `lib/parent-cdk-stack.ts`— Definizione dello stack dell'applicazione AWS CDK ()`parent-cdk`.
+ `package.json`— manifesto del modulo npm, che include il nome, la versione e le dipendenze dell'applicazione.
+ `package-lock.json`— Gestito da npm.
+ `cdk.json`— Toolkit per l'esecuzione dell'applicazione.
+ `tsconfig.json`— La TypeScript configurazione del progetto.
+ `.gitignore`— Elenco di file che Git dovrebbe escludere dal controllo del codice sorgente.
+ `node_modules`— Gestito da npm; include le dipendenze del progetto.

La seguente sezione di codice nello stack principale chiama le applicazioni secondarie come stack CDK AWS annidati.

```
import * as cdk from '@aws-cdk/core';
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { RealTimeAnalyticsPocStack } from './real-time-analytics-poc-stack';
import { RealTimeAnalyticsWebStack } from './real-time-analytics-web-stack';


export class CdkParentStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);


    new RealTimeAnalyticsPocStack(this, 'RealTimeAnalyticsPocStack');
    new RealTimeAnalyticsWebStack(this, 'RealTimeAnalyticsWebStack');
  }
}
```

**Codice per i test**

```
session={{date.now('YYYYMMDD')}}|sequence={{date.now('x')}}|reception={{date.now('x')}}|instrument={{random.number(9)}}|l={{random.number(20)}}|price_0={{random.number({"min":10000, "max":30000})}}|price_1={{random.number({"min":10000, "max":30000})}}|price_2={{random.number({"min":10000, "max":30000})}}|price_3={{random.number({"min":10000, "max":30000})}}|price_4={{random.number({"min":10000, "max":30000})}}|price_5={{random.number({"min":10000, "max":30000})}}|price_6={{random.number({"min":10000, "max":30000})}}|price_7={{random.number({"min":10000, "max":30000})}}|price_8={{random.number({"min":10000, "max":30000})}}|
```

**Test dell'API Gateway**

Sulla console API Gateway, prova API Gateway utilizzando il `GET` metodo. 

![\[Console API Gateway con GET selezionato in OPZIONI.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/452e5b8f-6d61-401d-8484-e5a436cb6f1b.png)


 

## Allegati
<a name="attachments-0ac29a11-1362-4084-92ed-6b85205763ca"></a>

[Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/0ac29a11-1362-4084-92ed-6b85205763ca/attachments/attachment.zip)