

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

# Eliminazione automatica degli AWS CloudFormation stack e delle risorse associate
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*SANDEEP SINGH e James Jacob, Amazon Web Services*

## Riepilogo
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)è un servizio ampiamente utilizzato per la gestione dell'infrastruttura cloud come codice (IaC). *Quando lo utilizzi CloudFormation, gestisci le risorse correlate come una singola unità chiamata stack.* Puoi creare, aggiornare ed eliminare una raccolta di risorse mediante la creazione, l’aggiornamento e l’eliminazione di stack.

A volte, non sono più necessarie le risorse in una CloudFormation pila. A seconda delle risorse e delle relative configurazioni, può essere complicato eliminare uno stack e le risorse associate. Nei sistemi di produzione reali, le eliminazioni a volte falliscono o richiedono molto tempo a causa di condizioni o restrizioni contrastanti che non possono essere annullate. CloudFormation Può richiedere un'attenta pianificazione ed esecuzione per garantire che tutte le risorse vengano eliminate correttamente in modo efficiente e coerente. Questo modello descrive come configurare un framework che consenta di gestire l'eliminazione di CloudFormation stack che comportano le seguenti complessità:
+ **Risorse con protezione da eliminazione**: per alcune risorse potrebbe essere abilitata la protezione da eliminazione. Esempi comuni sono le tabelle [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) e i bucket [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)). La protezione da eliminazione impedisce l'eliminazione automatica, ad esempio l'eliminazione totale. CloudFormation Se si desidera eliminare queste risorse, è necessario ignorare o disabilitare temporaneamente la protezione da eliminazione manualmente o programmaticamente. È necessario considerare attentamente le implicazioni dell'eliminazione di queste risorse prima di procedere.
+ **Risorse con politiche di conservazione**: alcune risorse, come AWS Key Management Service (AWS KMS) chiavi () e bucket Amazon S3, potrebbero avere politiche di conservazione che specificano per quanto tempo devono essere conservate dopo la richiesta di eliminazione. È necessario tenere conto di queste politiche nella strategia di pulizia per mantenere la conformità alle politiche organizzative e ai requisiti normativi.
+ **Eliminazione ritardata delle funzioni Lambda collegate a un VPC**: l'eliminazione di una funzione collegata a [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)un cloud privato virtuale (VPC) può richiedere dai 5 ai 40 minuti, a seconda delle molteplici dipendenze interconnesse coinvolte nel processo. Se scolleghi la funzione dal VPC prima di eliminare lo stack, puoi ridurre questo ritardo a meno di 1 minuto.
+ **Risorse non create direttamente da CloudFormation**: in alcuni progetti di applicazioni, le risorse potrebbero essere create all'esterno dello CloudFormation stack originale, dall'applicazione stessa o dalle risorse fornite tramite lo stack. Di seguito sono riportati due esempi:
  + CloudFormation potrebbe fornire un'istanza [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) che esegue uno script di dati utente. Quindi, questo script potrebbe creare un [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)parametro per archiviare i dati relativi all'applicazione. Questo parametro non è gestito tramite. CloudFormation
  + CloudFormation potrebbe fornire una funzione Lambda che genera automaticamente un gruppo [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) per l'archiviazione dei log. Questo gruppo di log non è gestito tramite. CloudFormation

  Anche se queste risorse non sono gestite direttamente da CloudFormation, spesso devono essere ripulite quando lo stack viene eliminato. Se non vengono gestite, possono diventare orfane e portare a un consumo inutile di risorse.

Sebbene queste barriere possano causare complessità, sono intenzionali e critiche. Consentire CloudFormation di ignorare tutti i vincoli e di eliminare indiscriminatamente le risorse potrebbe portare a conseguenze dannose e impreviste in molti scenari. Tuttavia, in qualità di ingegnere del cloud responsabile della gestione dell'ambiente, a volte potrebbe essere necessario ignorare questi vincoli, in particolare negli ambienti di sviluppo, test DevOps o gestione temporanea.

**Risultati aziendali mirati**

Implementando questo framework, è possibile ottenere i seguenti vantaggi:
+ **Gestione dei costi**: la pulizia regolare ed efficiente degli ambienti temporanei, ad esempio degli ambienti di test di accettazione da parte degli utenti, aiuta a evitare che le risorse funzionino più a lungo del necessario. end-to-end Ciò può ridurre significativamente i costi.
+ **Sicurezza: la** pulizia automatizzata delle risorse obsolete o inutilizzate riduce la superficie di attacco e aiuta a mantenere un ambiente sicuro. AWS 
+ **Efficienza operativa**: una pulizia regolare e automatizzata può offrire i seguenti vantaggi operativi:
  + Gli script automatici che rimuovono vecchi gruppi di log o bucket Amazon S3 vuoti possono migliorare l'efficienza operativa mantenendo l'ambiente pulito e gestibile.
  + L'eliminazione e la ricreazione rapide degli stack supportano un'iterazione rapida per la progettazione e l'implementazione, che può portare a un'architettura più solida e resiliente.
  + L'eliminazione e la ricostruzione regolari degli ambienti possono aiutarti a identificare e risolvere potenziali problemi. Questo può aiutarti a garantire che l'infrastruttura sia in grado di resistere a scenari del mondo reale.

## Prerequisiti e limitazioni
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ [Python versione 3.6 o successiva, installata](https://www.python.org/downloads/)
+ AWS Command Line Interface [(AWS CLI), [installato e configurato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitazioni**
+ Viene utilizzata una convenzione di denominazione per identificare le risorse da eliminare. Il codice di esempio in questo modello utilizza un prefisso per il nome della risorsa, ma è possibile definire una convenzione di denominazione personalizzata. Le risorse che non utilizzano questa convenzione di denominazione non verranno identificate o successivamente eliminate.

## Architecture
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

Il diagramma seguente mostra come questo framework identifica lo CloudFormation stack di destinazione e le risorse aggiuntive ad esso associate.

![\[Le fasi che individuano, elaborano ed eliminano gli CloudFormation stack e le risorse associate.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


Il diagramma mostra il flusso di lavoro seguente:

1. **Raccogliere risorse**: il framework di automazione utilizza una convenzione di denominazione per restituire tutti gli CloudFormation stack pertinenti, i repository Amazon Elastic Container Registry (Amazon ECR), le tabelle DynamoDB e i bucket Amazon S3.
**Nota**  
Le funzioni per questa fase utilizzano i [paginatori](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), una funzionalità di Boto3 che astrae il processo di iterazione su un set di risultati API troncato. Questo assicura che tutte le risorse vengano elaborate. [Per ottimizzare ulteriormente le prestazioni, prendete in considerazione l'applicazione del filtro [lato server o l'utilizzo JMESPath per eseguire il filtraggio lato](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) client.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

1. **Preelaborazione**: il framework di automazione identifica e risolve i vincoli del servizio che devono essere ignorati per consentire l'eliminazione delle risorse. CloudFormation Ad esempio, modifica l'`DeletionProtectionEnabled`impostazione per le tabelle DynamoDB in. `False` Nell'interfaccia a riga di comando, per ogni risorsa, viene visualizzato un messaggio che chiede se si desidera sovrascrivere il vincolo.

1. **Elimina stack: il framework di automazione elimina lo stack**. CloudFormation Nell'interfaccia a riga di comando, viene visualizzato un messaggio che richiede se si desidera eliminare lo stack.

1. **Postelaborazione**: il framework di automazione elimina tutte le risorse correlate che non sono state fornite direttamente come parte dello stack. CloudFormation Esempi di questi tipi di risorse includono i parametri e i gruppi di CloudWatch log di Systems Manager. Funzioni separate raccolgono queste risorse, le preelaborano e quindi le eliminano. Nell'interfaccia a riga di comando, per ogni risorsa, viene visualizzato un messaggio che chiede se si desidera eliminare la risorsa.
**Nota**  
Le funzioni per questa fase utilizzano [gli impaginatori](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), una funzionalità di Boto3 che astrae il processo di iterazione su un set di risultati API troncato. Questo assicura che tutte le risorse vengano elaborate. [Per ottimizzare ulteriormente le prestazioni, prendete in considerazione l'applicazione del filtro [lato server o l'utilizzo JMESPath per eseguire il filtraggio lato](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) client.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

**Automazione e scalabilità**

Se CloudFormation lo stack include altre risorse che non sono incluse nel codice di esempio o se lo stack presenta un vincolo che non è stato risolto in questo schema, puoi adattare il framework di automazione al tuo caso d'uso. Segui la stessa metodologia di raccolta delle risorse, pre-elaborazione, eliminazione dello stack e quindi post-elaborazione.

## Tools (Strumenti)
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita in e. Account AWS Regioni AWS
+ [CloudFormation Command Line Interface (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) è uno strumento open source che ti aiuta a sviluppare e testare estensioni di terze parti AWS e quindi a registrarle per l'uso in. CloudFormation
+ [AWS SDK per Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)è un kit di sviluppo software che ti aiuta a integrare la tua applicazione, libreria o script Python con. Servizi AWS

**Altri strumenti**
+ [Click](https://click.palletsprojects.com/en/stable/) è uno strumento Python che consente di creare interfacce a riga di comando.
+ [Poetry](https://python-poetry.org/docs/) è uno strumento per la gestione delle dipendenze e la creazione di pacchetti in Python.
+ [Pyenv](https://github.com/pyenv/pyenv) è uno strumento che ti aiuta a gestire e passare da una versione di Python all'altra.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Il codice per questo pattern è disponibile nel GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)repository.

## Best practice
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Etichettate le risorse per una facile identificazione**: implementate una [strategia di etichettatura](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) per identificare le risorse create per ambienti e scopi diversi. I tag possono semplificare il processo di pulizia aiutandoti a filtrare le risorse in base ai relativi tag.
+ **Imposta i cicli di vita delle** risorse: definisci i cicli di vita delle risorse per eliminarle automaticamente dopo un determinato periodo. Questa pratica consente di garantire che gli ambienti temporanei non diventino oneri di costo permanenti.

## Epiche
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Installa strumenti
<a name="install-tools"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingegnere | 
| Installa Poetry. | Segui le [istruzioni](https://python-poetry.org/docs/) (documentazione di Poetry) per installare Poetry nell'ambiente virtuale di destinazione. | DevOps ingegnere | 
| Installare le dipendenze. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingegnere | 
| (Opzionale) Installa Pyenv. | Segui le [istruzioni](https://github.com/pyenv/pyenv#installation) (GitHub) per installare Pyenv. | DevOps ingegnere | 

### (Facoltativo) Personalizza il framework
<a name="optional-customize-the-framework"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea funzioni che raccolgono, preelaborano ed eliminano le risorse di destinazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps ingegnere, Python | 

### Crea risorse di esempio
<a name="create-sample-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Creare un parametro Systems Manager. | Immettete il comando seguente per creare un parametro Systems Manager il cui provisioning non viene eseguito tramite CloudFormation:<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Creare un bucket Amazon S3. | Immetti il seguente comando per creare un bucket Amazon S3 che non viene fornito tramite: CloudFormation<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Elimina le risorse di esempio
<a name="delete-the-sample-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina lo CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Convalida l'eliminazione delle risorse. | Nell'output, verifica che tutte le risorse di esempio siano state eliminate. Per un esempio di output, consultate la sezione [Risorse aggiuntive](#automate-deletion-cloudformation-stacks-associated-resources-additional) di questo modello. | AWS DevOps | 

## Risorse correlate
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Eliminare uno stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentazione)
+ [Risoluzione dei problemi CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentazione)
+ [Fornire alle funzioni Lambda l'accesso alle risorse in un Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (documentazione Lambda)
+ [Come posso eliminare uno AWS CloudFormation stack bloccato nello stato DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Centro di conoscenza)AWS 

## Informazioni aggiuntive
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

Di seguito è riportato un esempio di output del `cfncli` comando:

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```