

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

# Automatizza la distribuzione di applicazioni annidate utilizzando AWS SAM
<a name="automate-deployment-of-nested-applications-using-aws-sam"></a>

*Dott. Rahul Sharad Gaikwad, Ishwar Chauthaiwale, Dmitry Gulin e Tabby Ward, Amazon Web Services*

## Riepilogo
<a name="automate-deployment-of-nested-applications-using-aws-sam-summary"></a>

Su Amazon Web Services (AWS), AWS Serverless Application Model (AWS SAM) Serverless Application Model (AWS) Serverless Application Model (AWS) Serverless Application Model (AWS SAM) è un framework open source che fornisce una sintassi abbreviata per esprimere funzioni APIs, database e mappature delle sorgenti degli eventi. Con solo poche righe per ogni risorsa, puoi definire l'applicazione che desideri e modellarla utilizzando YAML. Durante la distribuzione, SAM trasforma ed espande la sintassi SAM in sintassi AWS CloudFormation che puoi usare per creare applicazioni serverless più velocemente.

AWS SAM semplifica lo sviluppo, la distribuzione e la gestione di applicazioni serverless sulla piattaforma AWS. Fornisce un framework standardizzato, una distribuzione più rapida, funzionalità di test locali, gestione delle risorse, perfetta integrazione con gli strumenti di sviluppo e una community di supporto. Queste caratteristiche lo rendono uno strumento prezioso per creare applicazioni serverless in modo efficiente ed efficace.

Questo modello utilizza modelli AWS SAM per automatizzare la distribuzione di applicazioni annidate. Un'applicazione annidata è un'applicazione all'interno di un'altra applicazione. Le applicazioni principali chiamano le proprie applicazioni secondarie. Si tratta di componenti liberamente accoppiati di un'architettura serverless. 

Utilizzando applicazioni annidate, puoi creare rapidamente architetture serverless altamente sofisticate riutilizzando servizi o componenti creati e gestiti in modo indipendente ma composti utilizzando AWS SAM e Serverless Application Repository. Le applicazioni annidate ti aiutano a creare applicazioni più potenti, a evitare il lavoro duplicato e a garantire la coerenza e le migliori pratiche tra i tuoi team e le tue organizzazioni. Per dimostrare le applicazioni annidate, il pattern distribuisce un esempio di applicazione [AWS serverless per il carrello degli acquisti](https://github.com/aws-samples/aws-sam-nested-stack-sample).

## Prerequisiti e limitazioni
<a name="automate-deployment-of-nested-applications-using-aws-sam-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un cloud privato virtuale (VPC) e sottoreti esistenti
+ Un ambiente di sviluppo integrato come Visual Studio Code (per ulteriori informazioni, consulta [Tools to Build on AWS](https://aws.amazon.com/getting-started/tools-sdks/#IDE_and_IDE_Toolkits))
+ Libreria Python wheel installata utilizzando pip install wheel, se non è già installata

**Limitazioni**
+ Il numero massimo di applicazioni che possono essere annidate in un'applicazione serverless è 200.
+ Il numero massimo di parametri per un'applicazione annidata può essere 60.

**Versioni del prodotto**
+ Questa soluzione è basata sull'interfaccia a riga di comando AWS SAM (AWS SAM CLI) versione 1.21.1, ma questa architettura dovrebbe funzionare con le versioni successive dell'interfaccia a riga di comando AWS SAM.

## Architecture
<a name="automate-deployment-of-nested-applications-using-aws-sam-architecture"></a>

**Stack tecnologico Target**
+ Gateway Amazon API
+ AWS SAM
+ Amazon Cognito
+ Amazon DynamoDB
+ AWS Lambda
+ Coda Amazon Simple Queue Service (Amazon SQS)

**Architettura di destinazione**

Il diagramma seguente mostra come vengono effettuate le richieste degli utenti ai servizi di acquisto tramite chiamata APIs. La richiesta dell'utente, incluse tutte le informazioni necessarie, viene inviata ad Amazon API Gateway e all'autorizzatore Amazon Cognito, che esegue i meccanismi di autenticazione e autorizzazione per. APIs

Quando un elemento viene aggiunto, eliminato o aggiornato in DynamoDB, un evento viene inserito in DynamoDB Streams, che a sua volta avvia una funzione Lambda. Per evitare l'eliminazione immediata dei vecchi elementi come parte di un flusso di lavoro sincrono, i messaggi vengono inseriti in una coda SQS, che avvia una funzione di lavoro per eliminare i messaggi.

![\[Operazioni POST e PUT da API Gateway alle funzioni Lambda a DynamoDB e Product Service.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5b454bae-5fd4-405d-a37d-6bafc3fcf889.png)


In questa configurazione della soluzione, AWS SAM CLI funge da interfaccia per gli stack CloudFormation AWS. I modelli AWS SAM distribuiscono automaticamente applicazioni annidate. Il modello SAM principale chiama i modelli secondari e lo stack principale distribuisce gli CloudFormation stack secondari. Ogni stack secondario crea le risorse AWS definite nei modelli AWS SAM CloudFormation .

![\[Processo in quattro fasi che utilizza AWS SAM CLI con uno stack principale e tre CloudFormation stack secondari.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5828026e-72ad-4a3f-a5f2-bffac0f13e42.png)


1. Crea e distribuisci gli stack.

1. Lo CloudFormation stack di autenticazione contiene Amazon Cognito.

1. Lo CloudFormation stack di prodotti contiene una funzione Lambda e Amazon API Gateway

1. Lo CloudFormation stack Shopping contiene una funzione Lambda, Amazon API Gateway, la coda SQS e il database Amazon DynamoDB.

## Tools (Strumenti)
<a name="automate-deployment-of-nested-applications-using-aws-sam-tools"></a>

**Strumenti**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.
+ [AWS Serverless Application Model (AWS SAM) Serverless Application Model (AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) SAM) è un framework open source che ti aiuta a creare applicazioni serverless nel cloud AWS.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fornisce una coda ospitata sicura, durevole e disponibile che ti aiuta a integrare e disaccoppiare sistemi e componenti software distribuiti.

**Codice**

Il codice per questo modello è disponibile nel repository GitHub [AWS SAM Nested Stack Sample](https://github.com/aws-samples/aws-sam-nested-stack-sample).

## Epiche
<a name="automate-deployment-of-nested-applications-using-aws-sam-epics"></a>

### Installa AWS SAM CLI
<a name="install-aws-sam-cli"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa AWS SAM CLI. | Per installare AWS SAM CLI, consulta le istruzioni nella documentazione di [AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html). | DevOps ingegnere | 
| Configura le credenziali AWS. | Per impostare le credenziali AWS in modo che la CLI di AWS SAM possa effettuare chiamate ai servizi AWS per tuo conto, esegui `aws configure` il comando e segui le istruzioni.<pre>$aws configure<br />AWS Access Key ID [None]: <your_access_key_id><br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre>[Per ulteriori informazioni sulla configurazione delle credenziali, consulta Autenticazione e credenziali di accesso.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)  | DevOps ingegnere | 

### Inizializza il progetto AWS SAM
<a name="initialize-the-aws-sam-project"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository di codice AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps ingegnere | 
| Implementa modelli per inizializzare il progetto. | Per inizializzare il progetto, esegui il comando. `SAM init` Quando viene richiesto di scegliere una fonte per il modello, scegliete. `Custom Template Location` | DevOps ingegnere | 

### Compila e crea il codice del modello SAM
<a name="compile-and-build-the-sam-template-code"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esamina i modelli di applicazione AWS SAM. | Esamina i modelli per le applicazioni annidate. Questo esempio utilizza i seguenti modelli di applicazioni annidate:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps ingegnere | 
| Rivedi il modello principale. | Esamina il modello che richiamerà i modelli di applicazione annidati. In questo esempio, il modello principale è. `template.yml` Tutte le applicazioni separate sono annidate nell'unico modello `template.yml` principale. | DevOps ingegnere | 
| Compila e crea il codice modello AWS SAM.  | Utilizzando l'AWS SAM CLI, esegui il comando seguente.<pre>sam build</pre> | DevOps ingegnere | 

### Implementa il modello AWS SAM
<a name="deploy-the-aws-sam-template"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa le applicazioni. | Per avviare il codice modello SAM che crea gli CloudFormation stack di applicazioni annidate e distribuisce il codice nell'ambiente AWS, esegui il comando seguente.<pre>sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND</pre>Il comando richiederà alcune domande. Rispondi a tutte le domande con`y`. | DevOps ingegnere | 

### Verifica della distribuzione
<a name="verify-the-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica le pile. | Per esaminare gli CloudFormation stack AWS e le risorse AWS definiti nei modelli AWS SAM, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps ingegnere | 

## Risorse correlate
<a name="automate-deployment-of-nested-applications-using-aws-sam-resources"></a>

**Riferimenti**
+ [Modello di applicazioni serverless AWS (AWS SAM)](https://aws.amazon.com/serverless/sam/#:~:text=The%20AWS%20Serverless%20Application%20Model,and%20model%20it%20using%20YAML.)
+ [AWS SAM su GitHub](https://github.com/aws/serverless-application-model)
+ [Microservizio Serverless Shopping Cart](https://github.com/aws-samples/aws-serverless-shopping-cart) (applicazione di esempio AWS)

**Tutorial e video**
+ [Crea un'app serverless](https://youtu.be/Hv3YrP8G4ag)
+ [AWS Online Tech Talks: creazione e implementazione di applicazioni serverless con AWS SAM](https://youtu.be/1NU7vyJw9LU)

## Informazioni aggiuntive
<a name="automate-deployment-of-nested-applications-using-aws-sam-additional"></a>

Dopo che tutto il codice è a posto, l'esempio ha la seguente struttura di directory:
+ [sam\$1stacks](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html) — Questa cartella contiene il layer. `shared.py` Un layer è un archivio di file che contiene librerie, un runtime personalizzato o altre dipendenze. Con i livelli, puoi utilizzare le librerie nella tua funzione senza doverle includere in un pacchetto di distribuzione.
+ *product-mock-service*— Questa cartella contiene tutte le funzioni e i file Lambda relativi al prodotto.
+ *shopping-cart-service*— Questa cartella contiene tutte le funzioni e i file Lambda relativi agli acquisti.