

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

# DevOps
<a name="devops-pattern-list"></a>

**Topics**
+ [Accelera MLOps con Backstage e modelli Amazon SageMaker AI self-service](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Automatizza le operazioni AWS dell'infrastruttura utilizzando Amazon Bedrock](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Automatizza CloudFront gli aggiornamenti quando gli endpoint del bilanciamento del carico cambiano utilizzando Terraform](automate-cloudfront-updates-when-load-balancer-endpoints-change.md)
+ [Automatizza le CodeGuru revisioni Amazon per le applicazioni AWS CDK Python utilizzando Actions GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatizza l'implementazione dei Catena di approvvigionamento di AWS data lake in una configurazione multi-repository utilizzando GitHub Actions, Artifactory e Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatizza la valutazione delle risorse AWS](automate-aws-resource-assessment.md)
+ [Installa automaticamente i sistemi SAP utilizzando strumenti open source](install-sap-systems-automatically-by-using-open-source-tools.md)
+ [Automatizza il portafoglio e la distribuzione dei prodotti di AWS Service Catalog utilizzando AWS CDK](automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.md)
+ [Automatizza la gestione dinamica delle pipeline per l'implementazione di soluzioni hotfix in ambienti Gitflow utilizzando e AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Eliminazione automatica degli AWS CloudFormation stack e delle risorse associate](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatizza l'inserimento e la visualizzazione di metriche personalizzate di Amazon MWAA su Amazon Managed Grafana utilizzando Terraform](automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.md)
+ [Automatizza la distribuzione di stack set utilizzando AWS e AWS CodePipeline CodeBuild](automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.md)
+ [Associa automaticamente una policy gestita da AWS per Systems Manager ai profili di EC2 istanza utilizzando Cloud Custodian e AWS CDK](automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.md)
+ [Crea automaticamente CI/CD pipeline e cluster Amazon ECS per microservizi utilizzando AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Crea e invia immagini Docker ad Amazon ECR utilizzando GitHub Actions e Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Crea e testa app iOS con AWS CodeCommit, AWS e CodePipeline AWS Device Farm](build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm.md)
+ [Configura l'autenticazione TLS reciproca per le applicazioni in esecuzione su Amazon EKS](configure-mutual-tls-authentication-for-applications-running-on-amazon-eks.md)
+ [Automatizza la creazione di risorse Amazon WorkSpaces Applications utilizzando AWS CloudFormation](automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.md)
+ [Crea un parser di log personalizzato per Amazon ECS utilizzando un router di log Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Crea un framework di orchestrazione delle risorse basato su API utilizzando Actions e Terragrunt GitHub](create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.md)
+ [Crea richieste pull automatizzate per l' AWS infrastruttura gestita da Terraform utilizzando Actions GitHub](create-automated-pull-requests-for-terraform-managed-aws-infrastructure.md)
+ [Crea automaticamente pipeline CI dinamiche per progetti Java e Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Implementa i canarini CloudWatch Synthetics utilizzando Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Implementa una ChatOps soluzione per gestire i risultati della scansione SAST utilizzando Amazon Q Developer nelle applicazioni di chat, azioni personalizzate e CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Implementa sistemi agentici su Amazon Bedrock con il framework CrewAI utilizzando Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Implementa un job AWS Glue con una pipeline CodePipeline CI/CD AWS](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Distribuisci codice in più regioni AWS utilizzando AWS CodePipeline CodeCommit, AWS e AWS CodeBuild](deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild.md)
+ [Distribuisci carichi di lavoro dalle DevOps pipeline di Azure ai cluster Amazon EKS privati](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Esegui le query SQL di Amazon Redshift utilizzando Terraform](execute-redshift-sql-queries-using-terraform.md)
+ [Esporta i report di AWS Backup da tutta l'organizzazione in AWS Organizations come file CSV](export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.md)
+ [Esporta i tag per un elenco di EC2 istanze Amazon in un file CSV](export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.md)
+ [Genera un CloudFormation modello AWS contenente le regole gestite di AWS Config utilizzando Troposphere](generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.md)
+ [Offri alle istanze di SageMaker notebook l'accesso temporaneo a un CodeCommit repository in un altro account AWS](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Implementa una strategia di ramificazione GitHub Flow per ambienti con più account DevOps](implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implementa una strategia di ramificazione Gitflow per ambienti con più account DevOps](implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implementa una strategia di ramificazione Trunk per ambienti con più account DevOps](implement-a-trunk-branching-strategy-for-multi-account-devops-environments.md)
+ [Implementa la scansione Checkov centralizzata e personalizzata per applicare le policy prima di implementare l'infrastruttura AWS](centralized-custom-checkov-scanning.md)
+ [Implementa la diagnostica e la risoluzione dei problemi di Kubernetes basate sull'intelligenza artificiale con K8SGPT e l'integrazione con Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Rileva automaticamente le modifiche e avvia diverse CodePipeline pipeline per un monorepo in CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Integra un repository Bitbucket con AWS Amplify utilizzando AWS CloudFormation](integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.md)
+ [Avvia un CodeBuild progetto su più account AWS utilizzando Step Functions e una funzione proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Gestione del failover Multi-AZ per i cluster EMR utilizzando Application Recovery Controller](multi-az-failover-spark-emr-clusters-arc.md)
+ [Gestisci le blue/green distribuzioni di microservizi su più account e regioni utilizzando i servizi di codice AWS e le chiavi multiregionali AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Monitora i repository Amazon ECR per le autorizzazioni wildcard utilizzando AWS e AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Ottimizza le implementazioni serverless multi-account utilizzando i flussi di lavoro e Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Esegui il provisioning di AWS Service Catalog prodotti basati su AWS CloudFormation modelli utilizzando GitHub Actions](provision-aws-service-catalog-products-using-github-actions.md)
+ [Fornisci ruoli IAM con privilegi minimi implementando una soluzione di distribuzione automatica di ruoli](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)
+ [Pubblica i CloudWatch parametri di Amazon in un file CSV](publish-amazon-cloudwatch-metrics-to-a-csv-file.md)
+ [Rimuovi Amazon EC2 Entries Account AWS dall'altra AWS Managed Microsoft AD parte utilizzando l' AWS Lambda automazione](remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.md)
+ [Rimuovi EC2 le voci Amazon nello stesso Account AWS modulo AWS Managed Microsoft AD utilizzando l' AWS Lambda automazione](remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.md)
+ [Esegui test unitari per i lavori ETL in Python AWS Glue utilizzando il framework pytest](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [Configura una CI/CD pipeline utilizzando AWS CodePipeline e AWS CDK](set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.md)
+ [Configura la registrazione centralizzata su scala aziendale utilizzando Terraform](set-up-centralized-logging-at-enterprise-scale-by-using-terraform.md)
+ [Configura end-to-end la crittografia per le applicazioni su Amazon EKS utilizzando cert-manager e Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Semplifica la distribuzione di applicazioni multi-tenant Amazon EKS utilizzando Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Semplifica lo sviluppo e la distribuzione di bot Amazon Lex utilizzando un flusso di lavoro automatizzato](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Coordina la dipendenza dalle risorse e l'esecuzione delle attività utilizzando il costrutto AWS Fargate WaitCondition hook](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Usa repository di sorgenti Git di terze parti in AWS CodePipeline](use-third-party-git-source-repositories-in-aws-codepipeline.md)
+ [Crea una CI/CD pipeline per convalidare le configurazioni Terraform utilizzando AWS CodePipeline](create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.md)
+ [Altri modelli](devops-more-patterns-pattern-list.md)

# Accelera MLOps con Backstage e modelli Amazon SageMaker AI self-service
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates"></a>

*Ashish Bhatt, Shashank Hirematt e Shivanshu Suryakar, Amazon Web Services*

## Riepilogo
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-summary"></a>

Organizations che utilizzano sistemi di machine learning operations (MLOps) affrontano sfide significative in termini di scalabilità, standardizzazione e protezione della propria infrastruttura ML. Questo modello introduce un approccio trasformativo che combina [Backstage](https://backstage.io/), un portale per sviluppatori open source, con [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/) e moduli Infrastructure as Code (IaC) rafforzati per migliorare il modo in cui i team di data science possono sviluppare, distribuire e gestire i flussi di lavoro ML.

[I moduli IAc per questo pattern sono disponibili nell'archivio dei moduli. GitHub AWS AIOps ](https://github.com/awslabs/aiops-modules/tree/main/modules/sagemaker) Questi moduli offrono modelli predefiniti per configurare l'infrastruttura ML e creare ambienti ML coerenti. Tuttavia, i data scientist spesso hanno difficoltà a utilizzare direttamente questi modelli perché richiedono competenze in materia di infrastruttura. L'aggiunta di un portale per sviluppatori come Backstage offre ai data scientist un modo intuitivo per implementare ambienti ML standardizzati senza dover comprendere i dettagli dell'infrastruttura sottostante.

Utilizzando Backstage come piattaforma self-service e integrando modelli di intelligenza artificiale preconfigurati, puoi: SageMaker 
+ Accelera il time-to-value delle tue iniziative di machine learning.
+ Contribuisci a rafforzare la sicurezza e la governance coerenti.
+ Fornisci ai data scientist ambienti standardizzati e conformi.
+ Riduci il sovraccarico operativo e la complessità dell'infrastruttura.

Questo modello fornisce una soluzione che affronta le sfide critiche di MLOps e fornisce anche un framework scalabile e ripetibile che consente l'innovazione mantenendo al contempo gli standard organizzativi.

**Destinatari**

Questo modello è destinato a un vasto pubblico coinvolto nel machine learning, nell'architettura cloud e nell'ingegneria delle piattaforme all'interno di un'organizzazione. Questo include:
+ **Ingegneri ML** che desiderano standardizzare e automatizzare le implementazioni dei flussi di lavoro ML.
+ **Scienziati dei dati** che desiderano accedere in modalità self-service ad ambienti ML preconfigurati e conformi.
+ **Ingegneri di piattaforma** responsabili della creazione e della manutenzione di piattaforme di sviluppo interne e dell'infrastruttura condivisa.
+ **Architetti del cloud** che progettano soluzioni cloud scalabili, sicure ed economiche per. MLOps
+ **DevOps ingegneri** interessati a estendere le pratiche di integrazione continua e distribuzione continua (CI/CD) al provisioning e ai flussi di lavoro dell'infrastruttura ML.
+ Responsabili **tecnici e manager** che supervisionano le iniziative di machine learning e desiderano migliorare la produttività, la governance e il time-to-market dei team.

Per ulteriori informazioni sulle MLOps sfide, sui MLOps moduli di SageMaker intelligenza artificiale e su come la soluzione fornita da questo modello può soddisfare le esigenze dei team di machine learning, consulta la sezione [Informazioni aggiuntive](#accelerate-mlops-with-backstage-and-sagemaker-templates-additional).

## Prerequisiti e limitazioni
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-prereqs"></a>

**Prerequisiti**
+ AWS Identity and Access Management (IAM) [ruoli e autorizzazioni](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#prerequisites) per il provisioning di risorse nel Account AWS
+ Comprensione dei concetti di [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), [SageMaker Projects](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-whatis.html), [SageMaker Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html) e [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)
+ Comprensione dei principi IaC ed esperienza con strumenti come [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)

**Limitazioni**
+ **Copertura limitata dei modelli**. [Attualmente, la soluzione supporta solo i AIOps moduli SageMaker relativi all'intelligenza artificiale della soluzione più ampiaAIOps .](https://github.com/awslabs/aiops-modules) Altri moduli, come Ray on Amazon Elastic Kubernetes Service (Amazon EKS), MLflow Apache Airflow e il fine-tuning per Amazon Bedrock, non sono ancora disponibili come modelli di Backstage.
+ **Impostazioni predefinite non configurabili.** I modelli utilizzano configurazioni predefinite fisse dei AIOps SageMaker moduli senza alcuna personalizzazione. Non è possibile modificare i tipi di istanze, le dimensioni di archiviazione, le configurazioni di rete o le politiche di sicurezza tramite l'interfaccia Backstage, il che limita la flessibilità per casi d'uso specifici.
+ **AWS-solo supporto**. La piattaforma è progettata esclusivamente per le AWS implementazioni e non supporta scenari multicloud. Organizations che utilizzano servizi cloud esterni Cloud AWS non possono utilizzare questi modelli per le proprie esigenze di infrastruttura ML.
+ Gestione **manuale delle credenziali**. È necessario fornire manualmente le AWS credenziali per ogni distribuzione. Questa soluzione non fornisce l'integrazione con i provider di identità aziendali o la rotazione AWS IAM Identity Center automatica delle credenziali.
+ **Gestione limitata del ciclo di vita**. I modelli non dispongono di funzionalità complete per la gestione del ciclo di vita delle risorse, come politiche di pulizia automatizzate, consigli per l'ottimizzazione dei costi e rilevamento delle deviazioni dell'infrastruttura. È necessario gestire e monitorare manualmente le risorse distribuite dopo la creazione.

## Architecture
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-architecture"></a>

Il diagramma seguente mostra l'architettura della soluzione per un portale per sviluppatori unificato che standardizza e accelera l'implementazione dell'infrastruttura ML con l'intelligenza artificiale in tutti gli ambienti. SageMaker 

![\[Architettura per un portale unificato per sviluppatori con Backstage, CNOE, Actions e Seed-Farmer. GitHub\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c16160cf-d637-423e-93a7-485ffbb28646/images/233adab3-83cf-42f3-a1de-72d0b8ade5ae.png)


In questa architettura:

1. [AWS i progetti di modernizzazione delle applicazioni](https://github.com/aws-samples/appmod-blueprints.git) forniscono la configurazione dell'infrastruttura con un cluster [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) come base per il framework [Cloud Native Operational Excellence (CNOE](https://cnoe.io/)). Questa soluzione completa affronta le complesse sfide di gestione dell'infrastruttura nativa del cloud fornendo una piattaforma di sviluppo interna scalabile (IDP). I progetti offrono un approccio strutturato alla configurazione di un'infrastruttura solida e flessibile in grado di adattarsi alle esigenze organizzative in evoluzione.

1. Il framework open source CNOE consolida DevOps gli strumenti e risolve la frammentazione dell'ecosistema attraverso un approccio ingegneristico di piattaforma unificato. Riunendo strumenti e tecnologie diversi, semplifica il complesso panorama dello sviluppo nativo del cloud, in modo che i team possano concentrarsi sull'innovazione anziché sulla gestione della toolchain. Il framework fornisce una metodologia standardizzata per la selezione, l'integrazione e la gestione degli strumenti di sviluppo.

1. Con CNOE, Backstage viene distribuito come out-of-the-box soluzione all'interno del cluster Amazon EKS. [Backstage include una solida autenticazione tramite [Keycloak e flussi di lavoro di implementazione completi](https://www.keycloak.org/) tramite Argo CD.](https://argo-cd.readthedocs.io/en/stable/) Questa piattaforma integrata crea un ambiente centralizzato per la gestione dei processi di sviluppo e fornisce ai team un unico posto per accedere, implementare e monitorare la propria infrastruttura e le proprie applicazioni in più ambienti.

1. Un GitHub repository contiene modelli AIOps software preconfigurati che coprono l'intero ciclo di vita dell'IA. SageMaker Questi modelli soddisfano le esigenze critiche dell'infrastruttura ML, tra cui il provisioning di SageMaker Studio, la formazione dei modelli, le pipeline di inferenza e il monitoraggio dei modelli. Questi modelli ti aiutano ad accelerare le tue iniziative di machine learning e a garantire la coerenza tra diversi progetti e team.

1. [GitHub Actions](https://github.com/features/actions) [implementa un flusso di lavoro automatizzato che attiva dinamicamente l'approvvigionamento delle risorse tramite l'utilità Seed-Farmer.](https://github.com/awslabs/seed-farmer) Questo approccio integra il catalogo Backstage con il repository dei AIOps moduli e crea un processo di implementazione dell'infrastruttura semplificato. L'automazione riduce l'intervento manuale, minimizza l'errore umano e garantisce una creazione di infrastrutture rapida e coerente in diversi ambienti.

1. Ti [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)aiuta a definire e fornire l'infrastruttura sotto forma di codice e garantisce l'implementazione ripetibile, sicura e conforme delle risorse su determinate aree. Account AWS Questo approccio offre la massima governance con un intervento manuale minimo, in modo da poter creare modelli di infrastruttura standardizzati che possono essere facilmente replicati, controllati in base alla versione e verificati.

## Tools (Strumenti)
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che consente di definire e fornire l'infrastruttura nel codice. Cloud AWS 
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/) è un servizio di machine learning gestito che ti aiuta a creare e addestrare modelli di machine learning per poi distribuirli in un ambiente ospitato pronto per la produzione.

**Altri strumenti**
+ [Backstage](https://backstage.io/) è un framework open source che ti aiuta a creare portali interni per sviluppatori.
+ [GitHub Actions](https://github.com/features/actions) è una CI/CD piattaforma che automatizza i flussi di lavoro di sviluppo software, comprese attività come la creazione, il test e la distribuzione del codice.

**Archivi di codice**

Questo modello utilizza codice e modelli dai seguenti GitHub repository:
+ [AIOps piattaforma di sviluppo interna (IDP) con](https://github.com/aws-samples/sample-aiops-idp-backstage/) repository Backstage
+ SageMaker [Moduli relativi all'intelligenza artificiale dal repository dei moduli AWS AIOps ](https://github.com/awslabs/aiops-modules)
+ [Ingegneria moderna](https://github.com/aws-samples/appmod-blueprints) sul repository AWS

**Implementazione**

Questa implementazione utilizza un modello di implementazione di livello di produzione per Backstage tratto dal [Modern](https://github.com/aws-samples/appmod-blueprints) engineering on repository. AWS Questo approccio semplifica notevolmente il processo di configurazione incorporando al contempo le AWS migliori pratiche per la sicurezza e la scalabilità.

La sezione [Epics](#accelerate-mlops-with-backstage-and-sagemaker-templates-epics) di questo modello delinea l'approccio di implementazione. Per istruzioni dettagliate sull' step-by-stepimplementazione, consulta la [guida completa all'implementazione](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md) disponibile nella [piattaforma di sviluppo AIOps interna (IDP) con](https://github.com/aws-samples/sample-aiops-idp-backstage/) repository Backstage. L'implementazione include:
+ Implementazione iniziale della piattaforma Backstage
+ Integrazione di modelli SageMaker software con Backstage
+ Utilizzo e manutenzione dei modelli di Backstage

La guida all'implementazione include anche indicazioni per la manutenzione continua, la risoluzione dei problemi e la scalabilità della piattaforma.

## Best practice
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-best-practices"></a>

Segui queste best practice per contribuire a garantire la sicurezza, la governance e l'eccellenza operativa nelle implementazioni MLOps dell'infrastruttura.

**Gestione dei modelli**
+ Non apportare mai modifiche sostanziali ai modelli attivi.
+ Verifica sempre accuratamente gli aggiornamenti prima di distribuirli in produzione.
+ Mantieni versioni dei modelli chiare e ben documentate.

**Sicurezza**
+ Associa GitHub le azioni a specifici algoritmi di commit secure hash (SHAs) per aiutare a prevenire gli attacchi alla catena di approvvigionamento.
+ Utilizza ruoli IAM con privilegi minimi con autorizzazioni granulari.
+ [Archivia le credenziali sensibili in Secrets e. GitHub [Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)](https://docs.github.com/en/actions/concepts/security/secrets)
+ Non codificare mai le credenziali nei modelli.

**Governance e tracciamento**
+ Implementa standard completi di etichettatura delle risorse.
+ Abilita il monitoraggio preciso dei costi e la conformità.
+ Mantieni percorsi di controllo chiari per le modifiche all'infrastruttura.

Questa guida fornisce una solida base per l'implementazione di queste best practice utilizzando i moduli Backstage, SageMaker AI e IaC.

## Epiche
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-epics"></a>

### Configura il tuo ambiente ML
<a name="set-up-your-ml-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa Backstage. | Questa fase utilizza i progetti del [Modern Engineering on AWS](https://github.com/aws-samples/appmod-blueprints) repository per creare un'infrastruttura robusta e scalabile che integri più soluzioni per creare un IDP centralizzato Servizi AWS per i flussi di lavoro ML. Segui le istruzioni nella [sezione relativa alla distribuzione in backstage della guida all'implementazione](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#backstage-deployment) per clonare il repository, installare le dipendenze, avviare le variabili di ambiente di configurazione e distribuire la piattaforma Backstage. AWS CDK L'infrastruttura utilizza Amazon EKS come piattaforma di orchestrazione dei container per la distribuzione di componenti IDP. L'architettura Amazon EKS include configurazioni di rete sicure per stabilire un rigoroso isolamento della rete e controllare i modelli di accesso. La piattaforma si integra con i meccanismi di autenticazione per aiutare a proteggere l'accesso degli utenti a tutti i servizi e gli ambienti. | Ingegnere della piattaforma | 
| Configura i tuoi modelli di SageMaker intelligenza artificiale. | Questo passaggio utilizza gli script nella [piattaforma di sviluppo GitHub AIOps interna (IDP) con repository Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). Segui le istruzioni nella sezione sulla [configurazione del SageMaker modello](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-template-setup) della guida alla distribuzione per clonare il repository, impostare i prerequisiti ed eseguire lo script di installazione.Questo processo crea un repository che contiene i modelli di SageMaker intelligenza artificiale necessari per l'integrazione con Backstage. | Ingegnere della piattaforma | 
| Integra i**** modelli di SageMaker intelligenza artificiale con Backstage. | Segui le istruzioni nella sezione sull'[integrazione dei SageMaker modelli](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-templates-integration) della guida all'implementazione per registrare i tuoi modelli di SageMaker intelligenza artificiale.Questo passaggio integra i AIOps moduli (modelli SageMaker AI dell'ultimo passaggio) nella distribuzione Backstage in modo da poter soddisfare in autonomia le esigenze dell'infrastruttura ML. | Ingegnere della piattaforma | 
| Usa i modelli di SageMaker intelligenza artificiale di Backstage. | Segui le istruzioni nella sezione [Utilizzo dei SageMaker modelli](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#using-sagemaker-templates) della guida alla distribuzione per accedere al portale Backstage e creare l'ambiente ML in SageMaker Studio.Nel portale Backstage, puoi scegliere tra i modelli di SageMaker intelligenza artificiale disponibili, incluse opzioni per ambienti SageMaker Studio, SageMaker notebook, modelli di SageMaker progetto personalizzati e pipeline di distribuzione dei modelli. Dopo aver fornito i parametri di configurazione, la piattaforma crea automaticamente repository dedicati e fornisce risorse tramite Actions e Seed-Farmer. AWS GitHub È possibile monitorare i progressi tramite i registri GitHub delle azioni e il catalogo dei componenti Backstage. | Scienziato dei dati, ingegnere dei dati, sviluppatore | 

### Gestisci i modelli per la governance e la conformità
<a name="manage-templates-for-governance-and-compliance"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna i modelli di SageMaker intelligenza artificiale. | Per aggiornare un modello di SageMaker intelligenza artificiale in Backstage, segui questi passaggi.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingegnere della piattaforma | 
| Crea e gestisci più versioni di un modello. | Per modificare o aggiornare rapidamente, potresti voler creare più versioni di un modello di SageMaker intelligenza artificiale.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Ingegnere della piattaforma | 

### Estendi il tuo ambiente ML
<a name="extend-your-ml-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Espandi la copertura dei modelli oltre l' SageMaker IA. | La soluzione attuale implementa solo modelli relativi all' SageMaker intelligenza artificiale AIOps . È possibile estendere l'ambiente ML aggiungendo [AIOps moduli](https://github.com/awslabs/aiops-modules) e integrando modelli software personalizzati per applicazioni aggiuntive. Servizi AWS È possibile crearli utilizzando l'interfaccia di progettazione dei modelli in Backstage, implementando azioni di scaffolder personalizzate o gestendo gli archivi di modelli con metadati standard. La piattaforma supporta il controllo delle versioni dei modelli, la condivisione tra team e i flussi di lavoro di convalida per garantire la coerenza. [Per ulteriori informazioni, consulta la documentazione di Backstage.](https://backstage.io/docs/overview/what-is-backstage/)Puoi anche implementare modelli di ereditarietà dei modelli per creare versioni specializzate dei modelli di base. Questa estensibilità consente di gestire diverse AWS risorse e applicazioni oltre all' SageMaker intelligenza artificiale, preservando al contempo l'esperienza semplificata degli sviluppatori e mantenendo gli standard dell'organizzazione. | Ingegnere della piattaforma | 
| Usa l'iniezione dinamica dei parametri. | I modelli attuali utilizzano configurazioni predefinite senza personalizzazione ed eseguono la CLI Seed-Farmer per distribuire risorse con variabili predefinite. È possibile estendere la configurazione predefinita utilizzando l'iniezione dinamica dei parametri per configurazioni specifiche del modulo. | Ingegnere della piattaforma | 
| Migliora la sicurezza e la conformità. | Per migliorare la sicurezza nella creazione di risorse AWS, puoi abilitare l'integrazione del controllo degli accessi basato sul ruolo (RBAC) con single sign-on (SSO), SAML, OpenID Connect (OIDC) e policy come applicazione del codice. | Ingegnere della piattaforma | 
| Aggiungi la pulizia automatica delle risorse. | È possibile abilitare funzionalità per le politiche di pulizia automatizzate e aggiungere anche il rilevamento e la correzione delle deviazioni dell'infrastruttura. | Ingegnere della piattaforma | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi l'infrastruttura Backstage e le risorse SageMaker AI. | Quando hai finito di utilizzare l'ambiente ML, segui le istruzioni nella sezione [Pulizia e gestione delle risorse](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#cleanup-and-resource-management) della guida all'implementazione per rimuovere l'infrastruttura Backstage ed eliminare le risorse di SageMaker intelligenza artificiale nel tuo ambiente ML. | Ingegnere della piattaforma | 

## risoluzione dei problemi
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| AWS CDK errori di bootstrap |  Verifica AWS le credenziali e la configurazione della regione. | 
| Problemi di accesso al cluster Amazon EKS | Controlla la configurazione di **kubectl** e le autorizzazioni IAM. | 
| Problemi di connettività con Application Load Balancer | Assicurati che i gruppi di sicurezza consentano il traffico in entrata sulla porta 80/443. | 
| GitHub problemi di integrazione | Verifica le autorizzazioni dei GitHub token e l'accesso all'organizzazione. | 
| SageMaker Errori di implementazione dell'IA | Controlla le [Servizio AWS quote e le autorizzazioni](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) IAM. | 

## Risorse correlate
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-resources"></a>
+ [Ingegneria della piattaforma](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-caf-platform-perspective/platform-eng.html) (nella guida *AWS Cloud Adoption Framework: Platform perspective*)
+ [Documentazione Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/)
+ [Modelli di software Backstage (sito](https://backstage.io/docs/features/software-templates/) Web Backstage)
+ [AIOps repository di moduli](https://github.com/awslabs/aiops-modules) (raccolta di moduli IAc riutilizzabili per ML)
+ [AIOps piattaforma di sviluppo interna (IDP](https://github.com/aws-samples/sample-aiops-idp-backstage/)) con repository Backstage
+ [Ingegneria moderna](https://github.com/aws-samples/appmod-blueprints) sul repository AWS
+ [Sito Web Cloud Native Operational Excellence (CNOE)](https://cnoe.io/)

## Informazioni aggiuntive
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-additional"></a>

**Sfide aziendali**

Organizations che intraprendono o ampliano le proprie MLOps iniziative spesso incontrano queste sfide aziendali e tecniche:
+ **Ambienti incoerenti**. La mancanza di ambienti di sviluppo e implementazione standardizzati rende difficile la collaborazione e aumenta i rischi di implementazione.
+ Sovraccarico di **approvvigionamento manuale**. La configurazione manuale di un'infrastruttura ML con SageMaker Studio, bucket Amazon Simple Storage Service (Amazon S3), ruoli IAM CI/CD e pipeline richiede molto tempo ed è soggetta a errori e distoglie i data scientist dal loro compito principale di sviluppo di modelli.
+ **Mancanza** di reperibilità e riutilizzo. La mancanza di un catalogo centralizzato rende difficile trovare modelli ML, set di dati e pipeline esistenti. Ciò comporta un lavoro ridondante e la perdita di opportunità di riutilizzo.
+ **Governance e conformità complesse**. Garantire che i progetti di machine learning aderiscano alle politiche di sicurezza organizzative, alle normative sulla privacy dei dati e agli standard di conformità come l'Health Insurance Portability and Accountability Act (HIPAA) e il Regolamento generale sulla protezione dei dati (GDPR) può essere difficile senza barriere automatizzate.
+ **Tempi di valorizzazione lenti.** L'effetto cumulativo di queste sfide si traduce in un prolungamento dei cicli di vita dei progetti di machine learning e ritarda la realizzazione del valore aziendale derivante dagli investimenti in machine learning.
+ **Rischi** per la sicurezza. Configurazioni incoerenti e processi manuali possono introdurre vulnerabilità di sicurezza che rendono difficile l'applicazione dei privilegi minimi e l'isolamento della rete.

Questi problemi prolungano i cicli di sviluppo, aumentano il sovraccarico operativo e introducono rischi per la sicurezza. La natura iterativa del machine learning richiede flussi di lavoro ripetibili e una collaborazione efficiente.

Gartner prevede che entro il 2026, l'80% delle organizzazioni di ingegneria del software disporrà di team di piattaforma. (Vedi [Platform Engineering consente agli sviluppatori di essere migliori, più veloci e più felici sul sito Web di Gartner](https://www.gartner.com/en/experts/top-tech-trends-unpacked-series/platform-engineering-empowers-developers).) Questa previsione evidenzia come un IDP possa accelerare la distribuzione del software. In qualità di IDP, Backstage aiuta a ripristinare l'ordine in un'infrastruttura complessa in modo che i team possano fornire codice di alta qualità in modo rapido e sicuro. L'integrazione di Backstage con AIOps moduli rinforzati ti aiuta a passare dalla risoluzione dei problemi reattiva alla prevenzione proattiva.

**MLOps SageMaker moduli**

I [AIOps moduli](https://github.com/awslabs/aiops-modules) del GitHub repository utilizzati per questo modello forniscono una base preziosa per la standardizzazione MLOps AWS tramite IaC riutilizzabili e rinforzati. Questi moduli racchiudono le migliori pratiche per il provisioning di SageMaker progetti, pipeline e risorse di rete e storage associate, con l'obiettivo di ridurre la complessità e accelerare la configurazione degli ambienti ML. È possibile utilizzare questi modelli per vari casi MLOps d'uso per stabilire modelli di distribuzione coerenti e sicuri che promuovano un approccio più governato ed efficiente ai flussi di lavoro ML. 

L'utilizzo diretto AIOps dei moduli spesso richiede ai team della piattaforma di implementare e gestire questi modelli IaC, il che può rappresentare una sfida per i data scientist che desiderano un accesso self-service. La scoperta e la comprensione dei modelli disponibili, la configurazione dei parametri necessari e l'attivazione della loro implementazione potrebbero richiedere l'utilizzo di Servizio AWS console di navigazione o l'interazione diretta con gli strumenti IaC. Ciò può creare attriti, aumentare il carico cognitivo per i data scientist che preferiscono concentrarsi sulle attività di machine learning e potenzialmente portare a parametrizzazioni incoerenti o deviazioni dagli standard organizzativi se questi modelli non sono gestiti tramite un'interfaccia centralizzata e intuitiva. L'integrazione di questi potenti AIOps moduli con un IDP come Backstage aiuta ad affrontare queste sfide fornendo un'esperienza self-service semplificata, una maggiore reperibilità e controlli di governance più solidi per l'utilizzo di questi elementi costitutivi standardizzati. MLOps 

**Backstage come IDP**

Una piattaforma di sviluppo interna (IDP) è un livello self-service creato dai team di piattaforma per semplificare e standardizzare il modo in cui gli sviluppatori creano, distribuiscono e gestiscono le applicazioni. Riduce la complessità dell'infrastruttura e offre agli sviluppatori un facile accesso a strumenti, ambienti e servizi tramite un'interfaccia unificata.

L'obiettivo principale di un IDP è migliorare l'esperienza e la produttività degli sviluppatori mediante:
+ Abilitare il self-service per attività come la creazione e l'implementazione di servizi.
+ Promuovere la coerenza e la conformità tramite modelli standard.
+ Integrazione degli strumenti durante l'intero ciclo di vita dello sviluppo (CI/CD, monitoraggio e documentazione).

Backstage è un portale per sviluppatori open source creato da Spotify e ora parte della Cloud Native Computing Foundation (CNCF). Aiuta le organizzazioni a creare il proprio IDP fornendo una piattaforma centralizzata ed estensibile per gestire componenti software, strumenti e documentazione. Con Backstage, gli sviluppatori possono:
+ Scopri e gestisci tutti i servizi interni tramite un catalogo software.
+ Crea nuovi progetti utilizzando modelli predefiniti tramite il plug-in scaffolder.
+ Accedi a strumenti integrati come CI/CD pipeline, dashboard Kubernetes e sistemi di monitoraggio da un'unica posizione.
+ Mantieni una documentazione coerente e basata su markdown tramite. TechDocs

**DOMANDE FREQUENTI**

**Qual è la differenza tra l'utilizzo di questo modello di Backstage e la distribuzione manuale di SageMaker Studio tramite la console? SageMaker **

Il modello Backstage offre diversi vantaggi rispetto all'implementazione manuale della AWS console, tra cui configurazioni standardizzate che seguono le migliori pratiche organizzative, l'implementazione automatizzata di IaC tramite Seed-Farmer e le politiche di sicurezza e misure di conformità integrate e l' AWS CDK integrazione con i flussi di lavoro degli sviluppatori dell'organizzazione. GitHub Il modello crea anche implementazioni riproducibili con controllo delle versioni, che semplificano la replica degli ambienti nelle diverse fasi (sviluppo, gestione temporanea, produzione) e mantengono la coerenza tra i team. Inoltre, il modello include funzionalità di pulizia automatizzate e si integra con il sistema di gestione delle identità dell'organizzazione tramite Backstage. L'implementazione manuale tramite la console richiede AWS competenze approfondite e non fornisce il controllo della versione o lo stesso livello di standardizzazione e governance offerto dal modello. Per questi motivi, le implementazioni su console sono più adatte per esperimenti una tantum rispetto agli ambienti ML di produzione.

**Cos'è Seed-Farmer e perché questa soluzione lo utilizza?**

Seed-Farmer è uno strumento di orchestrazione AWS dell'implementazione che gestisce i moduli dell'infrastruttura utilizzando il. AWS CDK Questo modello utilizza Seed-Farmer perché fornisce componenti di infrastruttura standardizzati e riutilizzabili progettati specificamente per i AI/ML carichi di lavoro, gestisce automaticamente dipendenze complesse tra loro e garantisce implementazioni coerenti in diversi ambienti. Servizi AWS 

**Devo installare il per utilizzare questi modelli? AWS CLI **

No, non è necessario installarli AWS CLI sul computer. I modelli funzionano interamente tramite GitHub Actions nel cloud. Fornisci AWS le tue credenziali (chiave di accesso, chiave segreta e token di sessione) tramite l'interfaccia Backstage e la distribuzione avviene automaticamente nell'ambiente GitHub Actions.

**Quanto tempo è necessario per implementare un SageMaker ambiente Studio?**

Il completamento di una tipica implementazione di SageMaker Studio richiede 15-25 minuti. Ciò include il AWS CDK bootstrap (2-3 minuti), la configurazione della toolchain Seed-Farmer (3-5 minuti) e la creazione di risorse (10-15 minuti). L'ora esatta dipende dalla vostra configurazione Regione AWS e dalla complessità della vostra configurazione di rete.

**Posso implementare più SageMaker ambienti nello stesso Account AWS ambiente?**

Sì, è possibile. Ogni distribuzione crea risorse con nomi univoci in base al nome del componente fornito nel modello. Tuttavia, fai attenzione alle Servizio AWS quote: ogni account può avere un numero limitato di SageMaker domini per regione, quindi [controlla le quote](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) prima di creare più ambienti.

# Automatizza le operazioni AWS dell'infrastruttura utilizzando Amazon Bedrock
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock"></a>

*Ishwar Chauthaiwale e Anand Bukkapatnam Tirumala, Amazon Web Services*

## Riepilogo
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-summary"></a>

Nelle soluzioni native per il cloud, l'automazione delle operazioni delle infrastrutture comuni svolge un ruolo fondamentale nel mantenimento di ambienti efficienti, sicuri ed economici. La gestione manuale delle operazioni richiede molto tempo ed è soggetta a errori umani. Inoltre, i membri del team con diversi livelli di AWS esperienza devono svolgere queste attività garantendo al contempo la conformità ai protocolli di sicurezza. Questo modello dimostra come utilizzare Amazon Bedrock per automatizzare le operazioni di AWS infrastruttura comuni tramite l'elaborazione del linguaggio naturale (NLP).

Questo modello può aiutare le organizzazioni a sviluppare codice riutilizzabile, modulare e sicuro per la distribuzione di infrastrutture generative basate sull'intelligenza artificiale in più ambienti. Grazie alla sua attenzione all'infrastruttura come codice (IaC) e all'automazione, offre DevOps vantaggi chiave tra cui controllo delle versioni, implementazioni coerenti, riduzione degli errori, provisioning più rapido e collaborazione migliorata.

Il modello implementa un'architettura sicura che consente ai team di gestire le operazioni relative a fattori chiave, tra cui: Servizi AWS 
+ Gestione delle versioni dei bucket Amazon Simple Storage Service (Amazon S3)
+ Creazione di snapshot di Amazon Relational Database Service (Amazon RDS)
+ Gestione delle istanze Amazon Elastic Compute Cloud (Amazon EC2)

L'architettura utilizza endpoint Amazon Virtual Private Cloud (Amazon VPC) e reti private per comunicazioni sicure, AWS Lambda con funzioni che funzionano come esecutori di attività all'interno di sottoreti private. Amazon S3 fornisce la gestione dei dati e implementa ruoli e autorizzazioni completi AWS Identity and Access Management (IAM) per garantire controlli di accesso adeguati. Questa soluzione non include una funzionalità di cronologia chat e la chat non viene archiviata.

## Prerequisiti e limitazioni
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-prereqs"></a>
+ Un attivo Account AWS.
+ È necessario adottare adeguate misure di controllo degli accessi per garantire e controllare l'accesso. Esempi di controllo degli accessi includono l'utilizzo di modelli di base AWS Systems Manager, un ruolo IAM per la distribuzione e ruoli basati sui servizi, la disabilitazione dell'accesso pubblico ai bucket Amazon S3 e la configurazione di una coda di lettere morte.
+ [Una chiave () gestita dal cliente. AWS Key Management ServiceAWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)
+ AWS Command Line Interface (AWS CLI) versione 2 o successiva, [installata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) e [configurata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) nell'ambiente di distribuzione.
+ Terraform AWS Provider versione 4 o successiva [installato](https://registry.terraform.io/providers/-/aws/latest/docs/guides/version-4-upgrade) e configurato.
+ [Terraform versione 1.5.7 o successiva installata e configurata.](https://developer.hashicorp.com/terraform/install)
+ Rivedi e [definisci gli schemi OpenAPI per i gruppi di azione dei tuoi agenti in Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html) per proteggerti da accessi non autorizzati e mantenere l'integrità dei dati.
+ [Accesso abilitato](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) [nel tuo Account AWS per i modelli Amazon Titan Text Embeddings v2 richiesti e per i modelli Claude 3.5 Sonnet o Claude 3 Haiku Foundation.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) [Per evitare errori di distribuzione, verifica che la distribuzione di destinazione supporti i modelli richiesti. Regione AWS](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)
+ Un cloud privato virtuale (VPC) configurato che segue le best practice di [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-design.html).
+ Revisione completata della [politica di Amazon Responsible AI](https://aws.amazon.com/ai/responsible-ai/policy/).

**Versioni del prodotto**
+ Incorporamenti di testo Amazon Titan v2
+ Anthropic Claude 3.5 Sonnet o Claude 3 Haiku
+ Terraform Provider versione 4 o successiva AWS 
+ Terraform versione 1.5.7 o successiva

## Architecture
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Flusso di lavoro per automatizzare le operazioni comuni dell'infrastruttura AWS utilizzando Amazon Bedrock.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/924e503f-bfc5-4452-abdf-d72a58d4d36f/images/bd56ad29-b435-4543-8ee8-dc4e1d38df18.png)


L'architettura della soluzione è composta da più livelli che collaborano per elaborare le richieste in linguaggio naturale ed eseguire le operazioni corrispondenti AWS :

1. L'utente effettua richieste operative tramite la console di chat di Amazon Bedrock.

1. Il chatbot utilizza Amazon Bedrock Knowledge Bases per l'elaborazione delle richieste. Implementa il modello Amazon Titan Text Embeddings v2 per l'elaborazione del linguaggio naturale.

1. Se il prompt dell'utente include una richiesta di azione, il gruppo di azioni Amazon Bedrock utilizza il modello Anthropic Claude 3 Haiku o il modello Claude 3.5 Sonnet (a seconda della scelta) per la logica di esecuzione e definisce le operazioni tramite uno schema OpenAPI.

1. Il gruppo di azione raggiunge gli [endpoint](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) Amazon VPC utilizzando AWS PrivateLink per una comunicazione di servizio sicura.

1. La AWS Lambda funzione viene raggiunta tramite gli endpoint Amazon VPC per i servizi Amazon Bedrock.

1. Le funzioni Lambda sono il motore di esecuzione principale. In base alla richiesta, la funzione Lambda chiama l'API per eseguire azioni su. Servizi AWS La funzione Lambda gestisce anche il routing e l'esecuzione delle operazioni.

1. Vengono eseguite la richiesta Servizi AWS get the API dalla funzione Lambda e le operazioni corrispondenti.

1. La funzione Lambda calcola un payload di output compreso da Amazon Bedrock.

1. Questo payload viene inviato ad Amazon Bedrock utilizzando un servizio PrivateLink di comunicazione sicuro. Il modello di linguaggio di grandi dimensioni (LLM) utilizzato da Amazon Bedrock comprende questo payload e lo converte in un formato comprensibile per l'uomo.

1. L'output viene quindi mostrato all'utente sulla console di chat di Amazon Bedrock.

La soluzione consente le seguenti operazioni principali:
+ Amazon S3: abilita il controllo delle versioni dei bucket per il controllo delle versioni.
+ Amazon RDS: crea snapshot del database per il backup.
+ Amazon EC2: elenca le istanze e controlla l'avvio e l'arresto delle istanze.

## Tools (Strumenti)
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-tools"></a>

**Servizi AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) è un servizio completamente gestito che rende disponibili per l'uso modelli di base ad alte prestazioni (FMs) delle principali startup di intelligenza artificiale e di Amazon tramite un'API unificata.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che ti aiuta a interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornisce capacità di calcolo scalabile nel Cloud AWS. Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) è una configurazione serverless su richiesta per Amazon Service. OpenSearch 
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)ti aiuta a creare connessioni private unidirezionali dai tuoi cloud privati virtuali (VPCs) a servizi esterni al VPC.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) ti aiuta a configurare, gestire e scalare un database relazionale in. Cloud AWS
+ [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.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)ti aiuta a gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [infra-ops-orchestratoraws-samples/](https://github.com/aws-samples/infra-ops-orchestrator).

## Best practice
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-best-practices"></a>
+ Monitora regolarmente i log di esecuzione di Lambda. Per ulteriori informazioni, consulta [Monitoraggio e risoluzione dei problemi delle funzioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Per ulteriori informazioni sulle best practice, consulta [Best practice for working with AWS Lambda functions](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).
+ Rivedi periodicamente le configurazioni di sicurezza per garantire la conformità ai requisiti dell'organizzazione. Per ulteriori informazioni, consulta [Best practice in materia di sicurezza](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-bp.html).
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.

## Epiche
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-epics"></a>

### Implementazione della soluzione
<a name="deploy-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository sul computer locale, esegui il seguente comando:<pre>git clone "git@github.com:aws-samples/infra-ops-orchestrator.git"<br />cd infra-ops-orchestrator</pre> | AWS DevOps, DevOps ingegnere | 
| Modifica le variabili di ambiente. | Modifica il `terraform.tfvars` file. Nella directory principale del repository clonato. Esamina i segnaposti indicati da `[XXXXX]` e aggiornali in base al tuo ambiente. | AWS DevOps, DevOps ingegnere | 
| Crea l'infrastruttura. | Per creare l'infrastruttura, esegui i seguenti comandi:<pre>terraform init</pre><pre>terraform plan</pre>Esamina attentamente il piano di esecuzione. Se le modifiche pianificate sono accettabili, esegui il seguente comando:<pre>terraform apply --auto-approve</pre> | AWS DevOps, DevOps ingegnere | 

### Accedi alla soluzione
<a name="access-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Accedi alla soluzione. | Dopo una corretta implementazione, segui questi passaggi per utilizzare l'interfaccia basata sulla chat:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-infrastructure-operations-by-using-amazon-bedrock.html) | AWS DevOps, DevOps ingegnere | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse create. | Per eliminare tutta l'infrastruttura creata da questo modello, esegui il seguente comando:<pre>terraform plan -destroy </pre>Esamina attentamente il piano di distruzione. Se le eliminazioni pianificate sono accettabili, esegui il seguente comando:<pre>terraform destroy</pre>Nota: questo comando eliminerà definitivamente tutte le risorse create da questo modello. Il comando richiederà una conferma prima di rimuovere qualsiasi risorsa. | AWS DevOps, DevOps ingegnere | 

## Risoluzione dei problemi
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Comportamento dell'agente  | Per informazioni su questo problema, consulta [Test e risoluzione dei problemi del comportamento degli agenti nella documentazione](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) di Amazon Bedrock. | 
| Problemi relativi alla rete Lambda | Per informazioni su questi problemi, consulta [Risoluzione dei problemi di rete in Lambda nella documentazione di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html). | 
| autorizzazioni IAM | Per informazioni su questi problemi, consulta [Risoluzione](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) dei problemi di IAM nella documentazione IAM. | 

## Risorse correlate
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-resources"></a>
+ [Creazione di uno snapshot DB per un'istanza DB Single-AZ per Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [Definisci schemi OpenAPI per i gruppi d'azione dei tuoi agenti in Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html)
+ [Abilitazione del controllo delle versioni sui bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)
+ [Come funziona Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [Recupera dati e genera risposte AI con Amazon Bedrock Knowledge Bases](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Accedi in modo sicuro a Services Over AWS PrivateLink](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Arresta e avvia le istanze Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
+ [Utilizza i gruppi di azione per definire le azioni da eseguire per il tuo agente](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html)

# Automatizza CloudFront gli aggiornamenti quando gli endpoint del bilanciamento del carico cambiano utilizzando Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamil Selvan P, Mohan Annam e Naveen Suthar, Amazon Web Services*

## Riepilogo
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

Quando gli utenti di Amazon Elastic Kubernetes Service (Amazon EKS) eliminano e reinstallano la configurazione di ingresso tramite grafici Helm, viene creato un nuovo Application Load Balancer (ALB). Ciò crea un problema perché Amazon CloudFront continua a fare riferimento al vecchio record DNS di ALB. Di conseguenza, i servizi destinati a questo endpoint non saranno raggiungibili. [(Per ulteriori dettagli su questo flusso di lavoro problematico, consulta Informazioni aggiuntive.)](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional)

Per risolvere questo problema, questo schema descrive l'utilizzo di una AWS Lambda funzione personalizzata sviluppata con Python. Questa funzione Lambda rileva automaticamente quando viene creato un nuovo ALB tramite le regole di Amazon. EventBridge Utilizzando AWS SDK per Python (Boto3), la funzione aggiorna quindi la CloudFront configurazione con il nuovo indirizzo DNS di ALB, assicurando che il traffico venga indirizzato all'endpoint corretto.

Questa soluzione automatizzata mantiene la continuità del servizio senza routing o latenza aggiuntivi. Il processo aiuta a garantire che faccia CloudFront sempre riferimento all'endpoint DNS ALB corretto, anche quando l'infrastruttura sottostante cambia.

## Prerequisiti e limitazioni
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Un'applicazione Web di esempio per test e convalida che viene distribuita su Amazon EKS utilizzando Helm. Per ulteriori informazioni, consulta [Distribuire applicazioni con Helm su Amazon EKS nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) di Amazon EKS.
+ [Configura CloudFront per indirizzare le chiamate a un ALB creato da un controller di ingresso Helm.](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Per ulteriori informazioni, consulta [Install AWS Load Balancer Controller with Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) nella documentazione di Amazon EKS e [Limita l'accesso agli Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) nella documentazione. CloudFront 
+ Terraform [installato](https://developer.hashicorp.com/terraform/install?product_intent=terraform) e configurato in uno spazio di lavoro locale.

**Limitazioni**
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ Terraform versione 1.0.0 o successiva
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) versione 4.20 o successiva

## Architecture
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Flusso di lavoro da aggiornare CloudFront con il nuovo indirizzo DNS ALB rilevato tramite la regola. EventBridge\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Questa soluzione esegue le seguenti operazioni:

1. Il controller di ingresso Amazon EKS crea un nuovo Application Load Balancer (ALB) ogni volta che si verifica un riavvio o una distribuzione di Helm.

1. EventBridge cerca gli eventi di creazione di ALB.

1. L'evento di creazione ALB attiva la funzione Lambda.

1. La funzione Lambda è stata implementata sulla base di python 3.9 e utilizza l'API boto3 per la chiamata. Servizi AWS La funzione Lambda aggiorna la CloudFront voce con il nome DNS del load balancer più recente, ricevuto dagli eventi create load balancer.

## Tools (Strumenti)
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Servizi AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accelera la distribuzione dei tuoi contenuti web distribuendoli attraverso una rete mondiale di data center, che riduce la latenza e migliora le prestazioni.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [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**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.
+ [Terraform](https://www.terraform.io/) è uno strumento Infrastructure as Code (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

## Epiche
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Configura una workstation locale
<a name="set-up-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Imposta e configura la Git CLI. | Per installare e configurare l'interfaccia a riga di comando Git (CLI) nella workstation locale, segui le istruzioni Getting [Started — Installing Git nella documentazione Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). | DevOps ingegnere | 
| Crea la cartella del progetto e aggiungi i file. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

### Fornisci l'architettura di destinazione utilizzando la configurazione Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuire la soluzione. | Per distribuire risorse nell'obiettivo Account AWS, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

### Pulisci l'infrastruttura
<a name="clean-up-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci l'infrastruttura. | Per ripulire l'infrastruttura creata in precedenza, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore durante la convalida delle credenziali del provider | Quando esegui Terraform `apply` o `destroy` i comandi dal tuo computer locale, potresti riscontrare un errore simile al seguente:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Questo errore è causato dalla scadenza del token di sicurezza per le credenziali utilizzate nella configurazione del computer locale.Per risolvere l'errore, consulta [Impostare e visualizzare le impostazioni di configurazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) nella documentazione AWS Command Line Interface (AWS CLI). | 

## Risorse correlate
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS resources**
+ [Limita l'accesso agli Application Load Balancer](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Indirizza il traffico Internet con AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentazione Terraform**
+ [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Installa Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Stato remoto](https://developer.hashicorp.com/terraform/language/state/remote)

## Informazioni aggiuntive
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Flusso di lavoro problematico**

![\[Flusso di lavoro che produce l'ingresso DNS out-of-date ALB. CloudFront\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Quando l'utente accede all'applicazione, la chiamata va a. CloudFront

1. CloudFront indirizza le chiamate al rispettivo Application Load Balancer (ALB).

1. L'ALB include gli indirizzi IP di destinazione, che sono gli indirizzi IP dell'application pod. Da lì, l'ALB fornisce all'utente i risultati attesi.

Tuttavia, questo flusso di lavoro presenta un problema. Le distribuzioni delle applicazioni avvengono tramite grafici Helm. Ogni volta che viene effettuata una distribuzione o se qualcuno riavvia Helm, viene ricreato anche il rispettivo ingresso. Di conseguenza, il controller di bilanciamento del carico esterno ricrea l'ALB. Inoltre, durante ogni ricreazione, l'ALB viene ricreato con un nome DNS diverso. Per questo motivo, CloudFront avrà una voce obsoleta nelle impostazioni di origine. A causa di questa voce non aggiornata, l'applicazione non sarà raggiungibile dall'utente. Questo problema comporta tempi di inattività per gli utenti.

**Soluzione alternativa**

Un'altra soluzione possibile è creare un [DNS esterno](https://github.com/kubernetes-sigs/external-dns) per l'ALB e quindi indirizzarlo all'endpoint della zona ospitata privata Amazon Route 53. CloudFront Tuttavia, questo approccio aggiunge un ulteriore salto nel flusso dell'applicazione, che potrebbe causare latenza dell'applicazione. La soluzione della funzione Lambda di questo pattern non interrompe il flusso di corrente.

# Automatizza le CodeGuru revisioni Amazon per le applicazioni AWS CDK Python utilizzando Actions GitHub
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy e Sarat Chandra Pothula, Amazon Web Services*

## Riepilogo
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

Nota: a partire dal 7 novembre 2025, non puoi creare nuove associazioni di repository in Amazon CodeGuru Reviewer. Per informazioni sui servizi con funzionalità simili a CodeGuru Reviewer, consulta [la modifica della disponibilità di Amazon CodeGuru Reviewer nella documentazione](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) di CodeGuru Reviewer.

Questo modello mostra l'integrazione delle revisioni CodeGuru automatiche del codice di Amazon per le applicazioni AWS Cloud Development Kit (AWS CDK) Python, GitHub orchestrate tramite Actions. La soluzione implementa un'architettura serverless definita in Python AWS CDK . Automatizzando l'analisi del codice da parte di esperti all'interno della pipeline di sviluppo, questo approccio può fare quanto segue per i progetti Python AWS CDK :
+ Migliora la qualità del codice.
+ Semplifica i flussi di lavoro.
+ Massimizza i vantaggi dell'elaborazione senza server.

## Prerequisiti e limitazioni
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ AWS Command Line Interface [(AWS CLI) versione 2.9.11 o successiva, [installata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) e configurata.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Un GitHub account attivo e un GitHub repository con autorizzazioni di lettura e scrittura per il flusso di lavoro e creazione di richieste pull (PR) da parte di GitHub Actions per garantire il corretto funzionamento del flusso di lavoro PR.
+ Un ruolo OpenID Connect (OIDC) in GitHub Actions per implementare la soluzione in. Account AWS[Per creare il ruolo, usa il costrutto.AWS CDK](https://github.com/aws-samples/github-actions-oidc-cdk-construct)

**Limitazioni**
+ Amazon CodeGuru Profiler [supporta applicazioni](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support) scritte in tutti i linguaggi Java Virtual Machine (JVM) (come Scala e Kotlin) e runtime e Python 3.6 o versioni successive.
+ Amazon CodeGuru Reviewer [supporta le associazioni](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html) con gli archivi di codice Java e Python solo dai seguenti provider di sorgenti AWS CodeCommit: Bitbucket GitHub GitHub , Enterprise Cloud ed Enterprise Server. GitHub Inoltre, i repository Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) sono supportati solo tramite Actions. GitHub 
+ Non esiste un modo automatico per stampare i risultati durante la pipeline di integrazione e distribuzione continua (CI/CD). Invece, questo modello utilizza GitHub Actions come metodo alternativo per gestire e visualizzare i risultati.
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità regionale, consulta [i servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

Il diagramma seguente mostra l'architettura di questa soluzione.

![\[Flusso di lavoro per integrare la revisione CodeGuru del codice per le applicazioni GitHub AWS CDK Python utilizzando Actions.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


Come mostrato nel diagramma, quando uno sviluppatore crea una pull request (PR) per la revisione, GitHub Actions attiva i seguenti passaggi:

1. Assunzione del ruolo IAM: la pipeline utilizza il ruolo IAM specificato in GitHub Secrets per eseguire le attività di distribuzione.

1. Analisi del codice
   + CodeGuru Reviewer analizza il codice memorizzato nel bucket Amazon S3. Identifica i difetti e fornisce consigli per correzioni e ottimizzazioni.
   + CodeGuru Scansioni di sicurezza alla ricerca di violazioni e vulnerabilità delle policy.

1. Revisione dei risultati
   + La pipeline stampa un collegamento alla dashboard dei risultati nell'output della console.
   + Se vengono rilevati risultati critici, la pipeline fallisce immediatamente.
   + Per risultati di elevata, normale o bassa gravità, la pipeline continua con la fase successiva.

1. Approvazione PR
   + Un revisore deve approvare manualmente il PR.
   + Se il PR viene negato, la pipeline fallisce e interrompe le ulteriori fasi di implementazione.

1. Implementazione CDK: dopo l'approvazione delle pubbliche relazioni, inizia il processo di implementazione del CDK. Imposta quanto segue Servizi AWS e le risorse:
   + CodeGuru Profiler
   + AWS Lambda funzione
   + Coda Amazon Simple Queue Service (Amazon SQS)

1. Generazione di dati di profilazione — Per generare dati di profilazione sufficienti per CodeGuru Profiler:
   + La pipeline richiama la funzione Lambda più volte inviando periodicamente messaggi alla coda di Amazon SQS.

## Tools (Strumenti)
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software che ti aiuta a definire e fornire l'infrastruttura nel codice. Cloud 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 AWS CDK app.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) raccoglie dati sulle prestazioni di runtime dalle tue applicazioni live e fornisce consigli che possono aiutarti a ottimizzare le prestazioni delle tue applicazioni.
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) utilizza l'analisi dei programmi e l'apprendimento automatico per rilevare potenziali difetti difficili da individuare per gli sviluppatori. Quindi, CodeGuru Profiler offre suggerimenti per migliorare il codice Java e Python.
+ Amazon CodeGuru Security è uno strumento statico per la sicurezza delle applicazioni che utilizza l'apprendimento automatico per rilevare violazioni e vulnerabilità delle policy di sicurezza. Fornisce suggerimenti per affrontare i rischi per la sicurezza e genera parametri che ti consentono di monitorare il livello di sicurezza delle tue applicazioni.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [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.
+ [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.

**Altri strumenti**
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python).

## Best practice
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ Aderisci alle [migliori pratiche per lo sviluppo e l'implementazione](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) dell'infrastruttura cloud con. AWS CDK
+ Segui le [migliori pratiche di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) quando utilizzi i flussi di lavoro Servizi AWS in GitHub Actions, tra cui:
  + Non memorizzate le credenziali nel codice del repository.
  + [Assumi un ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles) per ricevere credenziali temporanee e utilizza credenziali temporanee quando possibile.
  + [Concedi il privilegio minimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) al ruolo IAM utilizzato nei GitHub flussi di lavoro di Actions. Concedi solo le autorizzazioni necessarie per eseguire le azioni nei flussi di lavoro Actions. GitHub 
  + [Monitora l'attività](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) del ruolo IAM utilizzato nei flussi di lavoro di GitHub Actions.
  + Ruota periodicamente tutte le credenziali a lungo termine che utilizzi.

## Epiche
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura AWS le credenziali. | Per esportare le variabili che definiscono lo stack Account AWS e il Regione AWS luogo in cui stai distribuendo, esegui i seguenti comandi:<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Le AWS credenziali per AWS CDK vengono fornite tramite variabili di ambiente. | AWS DevOps, DevOps ingegnere | 
| Clonare il repository. | Per clonare il repository sul computer locale, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps ingegnere | 
| Installa il CDK Toolkit. | Per confermare che CDK Toolkit sia installato e per verificarne la versione, esegui il seguente comando: <pre>cdk --version</pre>Se la versione di CDK Toolkit è precedente alla 2.27.0, inserisci il seguente comando per aggiornarla alla versione 2.27.0:<pre>npm install -g aws-cdk@2.27.0</pre>Se CDK Toolkit *non* è installato, esegui il seguente comando per installarlo:<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingegnere | 
| Installare le dipendenze richieste. | Per installare le dipendenze richieste dal progetto, esegui il seguente comando:<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps ingegnere | 
| Avvia l'ambiente CDK. | Per [avviare un ambiente](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) AWS CDK, esegui i seguenti comandi:<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Dopo aver avviato correttamente l'ambiente, dovrebbe essere visualizzato il seguente output:<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps, DevOps ingegnere | 

### Implementa l'app CDK
<a name="deploy-the-cdk-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Sintetizza l'app. AWS CDK  | Per sintetizzare un' AWS CDK app, esegui il seguente comando:<pre>cdk synth</pre>Per ulteriori informazioni su questo comando, vedete [cdk synthesize](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) nella documentazione. AWS CDK  | AWS DevOps, DevOps ingegnere | 
| Distribuisci le risorse. | Per distribuire le risorse, esegui il comando seguente:<pre>cdk deploy --require-approval never</pre>Il `--require-approval never` flag indica che il CDK approverà ed eseguirà automaticamente tutte le modifiche. Ciò include le modifiche che il CDK normalmente contrassegnerebbe come richiedenti una revisione manuale (come le modifiche alle politiche IAM o la rimozione di risorse). Assicurati che il codice CDK e la CI/CD pipeline siano ben testati e sicuri prima di utilizzare il `--require-approval never` flag negli ambienti di produzione. | AWS DevOps, DevOps ingegnere | 

### Crea GitHub segreti e token di accesso personale
<a name="create-github-secrets-and-personal-access-token"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i segreti richiesti in GitHub. | Per consentire ai flussi di lavoro di GitHub Actions di accedere alle AWS risorse in modo sicuro senza esporre informazioni sensibili nel codice del repository, crea dei segreti. Per creare i segreti in GitHub for`ROLE_TO_ASSUME`, and `CodeGuruReviewArtifactBucketName``AWS_ACCOUNT_ID`, segui le istruzioni in [Creazione di segreti per un repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository) nella documentazione di Actions. GitHub Di seguito sono riportate ulteriori informazioni sulle variabili:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingegnere | 
| Crea un token di accesso GitHub personale. | Per configurare un modo sicuro con cui autenticarsi e interagire con i flussi di lavoro GitHub Actions GitHub, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps ingegnere | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse. | Per pulire la tua app AWS CDK Python, esegui il seguente comando:<pre>cdk destroy --all</pre> | DevOps ingegnere | 

## Risoluzione dei problemi
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Visualizza il link ai risultati della dashboard. | Non è possibile stampare i risultati durante la CI/CD pipeline. Invece, questo modello utilizza GitHub Actions come metodo alternativo per gestire e visualizzare i risultati. | 

## Risorse correlate
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS resources**
+ [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)
+ [ CodeGuru Documentazione Amazon](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [Che cos'è AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub documentazione**
+ [Configurazione di OpenID Connect in Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Azioni](https://github.com/features/actions)
+ [Riutilizzo dei flussi di lavoro](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [Attivazione di un flusso di lavoro](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 

# Automatizza l'implementazione dei Catena di approvvigionamento di AWS data lake in una configurazione multi-repository utilizzando GitHub Actions, Artifactory e Terraform
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes"></a>

*Keshav Ganesh, Amazon Web Services*

## Riepilogo
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-summary"></a>

Questo modello fornisce un approccio automatizzato per l'implementazione e la gestione Catena di approvvigionamento di AWS dei data lake utilizzando funzionalità di integrazione continua multirepository e distribuzione continua (). CI/CD) pipeline. It demonstrates two deployment methods: automated deployment using GitHub Actions workflows, or manual deployment using Terraform directly. Both approaches use Terraform for infrastructure as code (IaC), with the automated method adding GitHub Actions and JFrog Artifactory for enhanced CI/CD

La soluzione sfrutta Catena di approvvigionamento di AWS Amazon Simple Storage Service (Amazon S3) per stabilire l'infrastruttura del data lake, utilizzando entrambi i metodi di distribuzione per automatizzare la configurazione e la creazione di risorse. AWS Lambda Questa automazione elimina le fasi di configurazione manuali e garantisce implementazioni coerenti in tutti gli ambienti. Inoltre, Catena di approvvigionamento di AWS elimina la necessità di competenze approfondite in materia di estrazione, trasformazione e caricamento (ETL) e può fornire approfondimenti e analisi basati su Amazon Quick Sight.

Implementando questo modello, le organizzazioni possono ridurre i tempi di implementazione, mantenere l'infrastruttura come codice e gestire i data lake della catena di fornitura attraverso un processo automatizzato e controllato dalla versione. L'approccio multirepository fornisce un controllo granulare degli accessi e supporta l'implementazione indipendente di diversi componenti. I team possono scegliere il metodo di implementazione più adatto agli strumenti e ai processi esistenti.

## Prerequisiti e limitazioni
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs"></a>

**Prerequisiti**

Assicurati che sul tuo computer locale sia installato quanto segue:
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versione 2
+ [GitHub CLI](https://docs.github.com/en/get-started/git-basics/set-up-git)
+ [Python v3.13](https://www.python.org/downloads/)
+ [Terraform v1.12](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) o versione successiva

Assicurati che siano presenti le seguenti condizioni prima della distribuzione:
+ Un attivo Account AWS.
+ Un [cloud privato virtuale (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) con due [sottoreti private](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) Account AWS a tua scelta. Regione AWS 
+ Autorizzazioni sufficienti per il ruolo AWS Identity and Access Management (IAM) utilizzato per l'implementazione nei seguenti servizi:
  + Catena di approvvigionamento di AWS — Accesso completo preferito per l'implementazione dei relativi componenti, come set di dati e flussi di integrazione, oltre ad accedervi da. Console di gestione AWS
  + Amazon CloudWatch Logs: per creare e gestire gruppi di CloudWatch log.
  + Amazon Elastic Compute Cloud (Amazon EC2) — Per i gruppi di sicurezza Amazon EC2 e gli endpoint Amazon Virtual Private Cloud (Amazon VPC).
  + Amazon EventBridge : destinato all'uso da Catena di approvvigionamento di AWS.
  + IAM: per creare ruoli AWS Lambda di servizio.
  + AWS Key Management Service (AWS KMS) — Per accedere al bucket AWS KMS keys utilizzato per il bucket di artefatti Amazon S3 e il bucket di staging Amazon S3. Catena di approvvigionamento di AWS 
  + AWS Lambda — Per creare le funzioni Lambda che distribuiscono i componenti. Catena di approvvigionamento di AWS 
  + Amazon S3: per accedere al bucket di artefatti Amazon S3, al bucket di registrazione degli accessi al server e al bucket di staging. Catena di approvvigionamento di AWS Se utilizzi la distribuzione manuale, sono necessarie anche le autorizzazioni per il bucket di artefatti Amazon S3 Terraform.
  + Amazon VPC: per creare e gestire un VPC.

Se preferisci utilizzare i flussi di lavoro GitHub Actions per la distribuzione, procedi come segue:
+ Configura [OpenID Connect (OIDC)](https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws#configuring-the-role-and-trust-policy) per il ruolo IAM con le autorizzazioni menzionate in precedenza.
+ Crea un ruolo IAM con autorizzazioni simili per accedere a. Console di gestione AWS Per ulteriori informazioni, consulta [Creare un ruolo per concedere le autorizzazioni a un utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) nella documentazione IAM.

Se preferisci eseguire una distribuzione manuale, procedi come segue:
+ Crea un utente IAM che assuma il ruolo IAM con le autorizzazioni menzionate in precedenza. Per ulteriori informazioni, consulta [Creare un ruolo per concedere le autorizzazioni a un utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) nella documentazione IAM.
+ [Assumi il ruolo](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-role.html) nel tuo terminale locale.

Se preferisci utilizzare i flussi di lavoro di GitHub Actions per la distribuzione, configura quanto segue:
+ Un [account JFrog Artifactory](https://jfrog.com/artifactory/?utm_source=google&utm_medium=cpc_search&utm_campaign=SearchDSKBrandAPACIN202506&utm_term=jfrog%20cloud&gads_network=g&utm_content=u-bin&gads_campaign_id=22674833884&gads_adgroup_id=184501797241&gads_extension_id=233003714635&gads_target_id=aud-312135645780:kwd-1598615735032&gads_matchtype=b&gad_source=1&gad_campaignid=22674833884&gbraid=0AAAAADqV85U5B37iapTR9IIFHBvydF5AQ&gclid=CjwKCAjwiY_GBhBEEiwAFaghvqdNV-odNLZXPHjT7NAwf8lA-QuMtg666hgvDW1oCJ4nn7wvf869_xoCW4IQAvD_BwE) per ottenere il nome host, il nome utente di accesso e il token di accesso di accesso.
+ Una [chiave di JFrog progetto e un archivio](https://jfrog.com/help/r/jfrog-platform-administration-documentation/step-1-set-up-a-new-project) per archiviare gli artefatti.

**Limitazioni**
+ L' Catena di approvvigionamento di AWS istanza non supporta tecniche complesse di trasformazione dei dati.
+ Catena di approvvigionamento di AWS è più adatto per i domini della catena di fornitura perché fornisce analisi e approfondimenti integrati. Per qualsiasi altro dominio, Catena di approvvigionamento di AWS può essere utilizzato come archivio dati come parte dell'architettura del data lake.
+ Potrebbe essere necessario migliorare le funzioni Lambda utilizzate in questa soluzione per gestire i tentativi di API e la gestione della memoria in un'implementazione su scala di produzione.
+ Alcune Servizi AWS non sono disponibili in tutte. Regioni AWS Per informazioni sulla disponibilità per regione, consulta [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-architecture"></a>

Puoi implementare questa soluzione utilizzando i flussi di lavoro GitHub Actions automatizzati o manualmente utilizzando Terraform.

**Distribuzione automatizzata con Actions GitHub **

Il diagramma seguente mostra l'opzione di distribuzione automatizzata che utilizza i flussi di lavoro GitHub Actions. JFrog Artifactory viene utilizzato per la gestione degli artefatti. Memorizza le informazioni sulle risorse e gli output per l'uso in una distribuzione multirepository.

![\[Opzione di distribuzione automatizzata che utilizza i flussi di lavoro GitHub Actions e. JFrog\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/d454a5c5-ed51-421c-a87f-ff74cfcb30be.png)


**Distribuzione manuale con Terraform**

Il diagramma seguente mostra l'opzione di distribuzione manuale tramite Terraform. Invece di JFrog Artifactory, Amazon S3 viene utilizzato per la gestione degli artefatti.

![\[Opzione di distribuzione manuale con Terraform e Amazon S3.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/1130e728-44d5-4ae7-9586-1e497f54352a.png)


**Workflow di implementazione**

I diagrammi mostrano il seguente flusso di lavoro:

1. Distribuisci l'infrastruttura e i database dei set di dati dei Catena di approvvigionamento di AWS servizi utilizzando uno dei seguenti metodi di distribuzione:
   + **Distribuzione automatizzata**: utilizza i flussi di lavoro di GitHub Actions per orchestrare tutte le fasi di distribuzione e utilizza JFrog Artifactory per la gestione degli artefatti.
   + **Distribuzione manuale**: esegue i comandi Terraform direttamente per ogni fase di distribuzione e utilizza Amazon S3 per la gestione degli artefatti.

1. Crea le AWS risorse di supporto necessarie per il funzionamento del servizio: Catena di approvvigionamento di AWS 
   + Endpoint e gruppi di sicurezza Amazon VPC
   + AWS KMS keys
   + CloudWatch Registra i gruppi di log

1. Crea e distribuisci le seguenti risorse di infrastruttura:
   + Funzioni Lambda che gestiscono (creano, aggiornano ed eliminano) l'istanza del Catena di approvvigionamento di AWS servizio, i namespace e i set di dati.
   + Catena di approvvigionamento di AWS gestione temporanea del bucket Amazon S3 per l'inserimento di dati

1. Implementa la funzione Lambda che gestisce i flussi di integrazione tra lo staging bucket e i set di dati. Catena di approvvigionamento di AWS Una volta completata l'implementazione, le fasi rimanenti del flusso di lavoro gestiscono l'inserimento e l'analisi dei dati.

1. Configura l'inserimento dei dati di origine nel bucket di Catena di approvvigionamento di AWS staging Amazon S3.

1. Dopo aver aggiunto i dati al bucket Catena di approvvigionamento di AWS di staging Amazon S3, il servizio attiva automaticamente il flusso di integrazione nei set di dati. Catena di approvvigionamento di AWS 

1. Catena di approvvigionamento di AWS si integra con Quick Sight Analytics per produrre dashboard basate sui dati acquisiti.

## Tools (Strumenti)
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-tools"></a>

**Servizi AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ti aiuta a centralizzare i log di tutti i tuoi sistemi e applicazioni, Servizi AWS così puoi monitorarli e archiviarli in modo sicuro.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che ti aiuta a interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornisce capacità di calcolo scalabile nel Cloud AWS. Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)ti aiuta a gestire centralmente l'accesso Single Sign-On (SSO) a tutte le tue applicazioni e a quelle sul cloud. Account AWS 
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Q](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) in Catena di approvvigionamento di AWS è un assistente AI generativo interattivo che ti aiuta a gestire la catena di approvvigionamento in modo più efficiente analizzando i dati nel tuo Catena di approvvigionamento di AWS data lake.
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) è un servizio di business intelligence (BI) su scala cloud che ti aiuta a visualizzare, analizzare e generare report sui dati in un'unica dashboard.
+ [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.
+ [Catena di approvvigionamento di AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)è un'applicazione gestita basata sul cloud che può essere utilizzata come archivio dati nelle organizzazioni per i domini della catena di fornitura, che può essere utilizzata per generare approfondimenti ed eseguire analisi sui dati acquisiti.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS. Un [endpoint Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) è un dispositivo virtuale che ti aiuta a connettere privatamente il tuo VPC a Supported Servizi AWS senza richiedere un gateway Internet, un dispositivo NAT, una connessione VPN o una connessione. AWS Direct Connect 

**Altri strumenti**
+ [GitHub Actions](https://docs.github.com/en/actions) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [HashiCorp Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) che ti aiuta a creare e gestire risorse cloud e locali.
+ [JFrog Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/jfrog-artifactory) fornisce l' end-to-endautomazione e la gestione di file binari e artefatti attraverso il processo di distribuzione delle applicazioni.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico. Questo modello utilizza Python con cui il codice della AWS funzione può interagire Catena di approvvigionamento di AWS

  .

## Best practice
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-best-practices"></a>
+ Mantieni la massima sicurezza possibile durante l'implementazione di questo modello. Come indicato in [Prerequisiti](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), assicurati che un [cloud privato virtuale (VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)) con [due sottoreti private](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) sia presente nel Account AWS Regione AWS tuo computer di tua scelta.
+ Utilizza [le chiavi gestite AWS KMS dal cliente](https://docs.aws.amazon.com/kms/latest/cryptographic-details/basic-concepts.html) laddove possibile e concedi loro autorizzazioni di accesso limitate.
+ Per configurare i ruoli IAM con il minimo accesso richiesto per l'acquisizione dei dati per questo pattern, consulta [Secure Data Ingestion from Source Systems to Amazon S3](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main?tab=readme-ov-file#secure-data-ingestion-from-source-systems-to-amazon-s3) nel repository di questo pattern.

## Epiche
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-epics"></a>

### (Entrambe le opzioni) Configura una workstation locale
<a name="both-options-set-up-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository di questo pattern, esegui il seguente comando nella tua workstation locale:<pre>git clone https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment.git<br />cd ASC-Deployment</pre> | AWS DevOps | 
| (Opzione automatizzata) Verifica i prerequisiti per la distribuzione. | Assicurati che i [prerequisiti](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) per la distribuzione automatizzata siano completi. | Proprietario dell'app | 
| (Opzione manuale) Preparati per la distribuzione dei Catena di approvvigionamento di AWS set di dati. | Per accedere alla `terraform-deployment` directory di`ASC-Datasets`, esegui il seguente comando:<pre>cd ASC-Datasets/terraform-deployment</pre>Per assumere il ruolo ARN creato nei [Prerequisiti](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), esegui il comando seguente:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Per configurare ed esportare le variabili di ambiente, esegui i seguenti comandi:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Datasets dir name><br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export AWS_USER_ROLE=<Enter user role ARN for AWS Console access and deployment><br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | AWS DevOps | 
| (Opzione manuale) Preparati a gestire i flussi di Catena di approvvigionamento di AWS integrazione durante la distribuzione. | Per accedere alla `terraform-deployment` directory di`ASC-Integration-Flows`, esegui il seguente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre>Per assumere il ruolo ARN creato in precedenza, esegui il seguente comando:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Per configurare ed esportare le variabili di ambiente, esegui i seguenti comandi:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Integration Flows dir name><br />export ASC_DATASET_VARS_REPO=<Enter Current ASC Datasets dir name>  #Must be the same directory name used for ASC Datasets deployment<br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | Proprietario dell'app | 

### (Opzione automatizzata) Distribuisci Catena di approvvigionamento di AWS set di dati utilizzando GitHub i flussi di lavoro Actions
<a name="automated-option-deploy-supplychain-datasets-using-github-actions-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia la `ASC-Datasets` cartella. | Per copiare la `ASC-Datasets` directory in una nuova posizione, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configura la `ASC-Datasets` directory. | Per configurarlo `ASC-Datasets` come repository autonomo nell'organizzazione, esegui i seguenti comandi:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Datasets standalone repository"<br />git remote add origin <INSERT_ASC_DATASETS_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configura il nome del ramo nel file di workflow .github. | Imposta il nome del ramo nel file del flusso di lavoro di [distribuzione](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/asc-datasets.yml) come mostrato nell'esempio seguente:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Proprietario dell'app | 
| Configura GitHub gli ambienti e configura i valori dell'ambiente. | Per configurare GitHub gli ambienti nella propria GitHub organizzazione, utilizzare le istruzioni in [Configurazione GitHub degli ambienti](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-github-environments) nell'archivio di questo modello.Per configurare [i valori di ambiente](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) nei file del flusso di lavoro, utilizzate le istruzioni in [Configurazione dei valori di ambiente nei file di flusso di lavoro](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) nel repository di questo pattern. | Proprietario dell'app | 
| Attiva il flusso di lavoro. | Per inviare le modifiche all' GitHub organizzazione e attivare il flusso di lavoro di distribuzione, esegui il comando seguente:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opzione automatizzata) Distribuisci flussi di Catena di approvvigionamento di AWS integrazione utilizzando i flussi di lavoro GitHub Actions
<a name="automated-option-deploy-supplychain-integration-flows-using-github-actions-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia la `ASC-Integration-Flows` cartella. | Per copiare la `ASC-Integration-Flows` directory in una nuova posizione, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configura la `ASC-Integration-Flows` directory. | Per configurare la `ASC-Integration-Flows` directory come archivio autonomo nell'organizzazione, esegui i seguenti comandi:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Integration-Flows standalone repository"<br />git remote add origin <INSERT_ASC_Integration_Flows_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configura il nome del ramo nel file di workflow .github. | Imposta il nome del ramo nel file del flusso di lavoro di [distribuzione](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/asc-integration-flows.yml) come mostrato nell'esempio seguente:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Proprietario dell'app | 
| Configura GitHub gli ambienti e configura i valori dell'ambiente. | Per configurare GitHub gli ambienti nella propria GitHub organizzazione, utilizzare le istruzioni in [Configurazione GitHub degli ambienti](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) nell'archivio di questo modello.Per configurare [i valori di ambiente](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) nei file del flusso di lavoro, utilizzate le istruzioni in [Configurazione dei valori di ambiente nei file di flusso di lavoro](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-environment-values-in-the-workflow-files) nel repository di questo pattern. | Proprietario dell'app | 
| Attiva il flusso di lavoro. | Per inviare le modifiche all' GitHub organizzazione e attivare il flusso di lavoro di distribuzione, esegui il comando seguente:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opzione manuale) Distribuisci Catena di approvvigionamento di AWS set di dati utilizzando Terraform
<a name="manual-option-deploy-supplychain-datasets-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Passa alla directory `terraform-deployment `. | Per accedere alla `terraform-deployment` directory di`ASC-Datasets`, esegui il seguente comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configura il bucket Amazon S3 dello stato Terraform. | Per configurare il bucket Amazon S3 dello stato Terraform, usa lo script seguente:<pre># Setup terraform bucket<br />chmod +x ../scripts/setup-terraform.sh<br />../scripts/setup-terraform.sh</pre> | AWS DevOps | 
| Configura il bucket Terraform Artifacts Amazon S3. | Per configurare il bucket Terraform Artifacts Amazon S3, usa lo script seguente:<pre># Setup terraform artifacts bucket<br />chmod +x ../scripts/setup-terraform-artifacts-bucket.sh<br />../scripts/setup-terraform-artifacts-bucket.sh</pre> | AWS DevOps | 
| Configura il backend Terraform e la configurazione dei provider. | Per configurare il backend Terraform e la configurazione dei provider, utilizza il seguente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genera un piano di distribuzione. | Per generare un piano di distribuzione, esegui i seguenti comandi:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implementa le configurazioni. | Per distribuire le configurazioni, esegui il comando seguente:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Aggiorna altre configurazioni e archivia gli output. | Per aggiornare le politiche AWS KMS chiave e archiviare gli output delle configurazioni applicate nel bucket Terraform Artifacts Amazon S3, esegui i seguenti comandi:<pre># Update AWS Supply Chain KMS Key policy with the service's requirements<br />chmod +x ../scripts/update-asc-kms-policy.sh<br />../scripts/update-asc-kms-policy.sh<br /></pre><pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy.sh<br />../scripts/update-kms-policy.sh<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Opzione manuale) Distribuisci i flussi Catena di approvvigionamento di AWS di integrazione dei servizi utilizzando Terraform
<a name="manual-option-deploy-supplychain-service-integration-flows-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Passa alla directory `terraform-deployment`. | Per accedere alla `terraform-deployment` directory di`ASC-Integration-Flows`, esegui il seguente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configura il backend Terraform e la configurazione dei provider. | Per configurare il backend Terraform e le configurazioni del provider, utilizza il seguente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genera un piano di distribuzione. | Per generare un piano di distribuzione, esegui i comandi seguenti. Questi comandi inizializzano l'ambiente Terraform, uniscono le variabili di configurazione `ASC-Datasets` con le configurazioni Terraform esistenti e generano un piano di implementazione.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implementa le configurazioni. | Per distribuire le configurazioni, esegui il comando seguente:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Aggiorna altre configurazioni. | Per aggiornare le politiche AWS KMS chiave e archiviare gli output delle configurazioni applicate nel bucket Terraform Artifacts Amazon S3, esegui i seguenti comandi:<pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy-through-s3.sh<br />../scripts/update-kms-policy-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Entrambe le opzioni) Inserisci dati
<a name="both-options-ingest-data"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Carica file CSV di esempio. | Per caricare file CSV di esempio per i set di dati, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Ingegnere dei dati | 

### (Entrambe le opzioni) Configura Catena di approvvigionamento di AWS l'accesso
<a name="both-options-set-up-supplychain-access"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura Catena di approvvigionamento di AWS l'accesso. | Per configurare Catena di approvvigionamento di AWS l'accesso da Console di gestione AWS, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Proprietario dell'app | 

### (Opzione automatizzata) Pulisci tutte le risorse utilizzando i flussi di lavoro GitHub Actions
<a name="automated-option-clean-up-all-resources-using-github-actions-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Attiva il flusso di lavoro Destroy per le risorse dei flussi di integrazione. | Attiva il [flusso di lavoro di distruzione](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/destroy-workflow.yml) `ASC-Integration-Flows` dal tuo ramo di distribuzione GitHub all'interno dell'organizzazione. | AWS DevOps | 
| Attiva il flusso di lavoro di distruzione delle risorse dei set di dati. | Attiva il [flusso di lavoro di distruzione](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/destroy-workflow.yml) `ASC-Datasets` dal tuo ramo di distribuzione all'interno GitHub dell'organizzazione. | AWS DevOps | 

### (Opzione manuale) Pulisci le risorse dai flussi di Catena di approvvigionamento di AWS integrazione utilizzando Terraform
<a name="manual-option-clean-up-resources-of-supplychain-integration-flows-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Passa alla directory `terraform-deployment`. | Per accedere alla `terraform-deployment` directory di`ASC-Integration-Flows`, esegui il seguente comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configura il backend Terraform e la configurazione dei provider. | Per configurare il backend Terraform e la configurazione dei provider, utilizza il seguente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genera un piano di distruzione dell'infrastruttura. | Per prepararti alla distruzione controllata dell' AWS infrastruttura generando un piano di smontaggio dettagliato, esegui i seguenti comandi. Il processo inizializza Terraform, incorpora le configurazioni Catena di approvvigionamento di AWS dei set di dati e crea un piano di distruzione che è possibile esaminare prima dell'esecuzione.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Esegui un piano di distruzione dell'infrastruttura. | Per eseguire la distruzione pianificata dell'infrastruttura, esegui il seguente comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Rimuovi gli output Terraform dal bucket Amazon S3. | Per rimuovere il file di output che è stato caricato durante la distribuzione di`ASC-Integration-Flows`, esegui il seguente comando:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

### (Opzione manuale) Pulisci le risorse dei set di dati di Catena di approvvigionamento di AWS servizio utilizzando Terraform
<a name="manual-option-clean-up-resources-of-supplychain-service-datasets-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Passa alla directory `terraform-deployment`. | Per accedere alla `terraform-deployment` directory di`ASC-Datasets`, esegui il seguente comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configura il backend Terraform e la configurazione dei provider. | Per configurare il backend Terraform e la configurazione dei provider, utilizza il seguente script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Genera un piano di distruzione dell'infrastruttura. | Per creare un piano per la distruzione delle risorse del Catena di approvvigionamento di AWS set di dati, esegui i seguenti comandi:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Bucket Amazon S3 vuoti. | Per svuotare tutti i bucket Amazon S3 (tranne il bucket di registrazione degli accessi al server, che è configurato per`force-destroy`), usa lo script seguente:<pre># Delete S3 buckets excluding server access logging bucket<br />chmod +x ../scripts/empty-s3-buckets.sh<br />../scripts/empty-s3-buckets.sh tfplan.out</pre> | AWS DevOps | 
| Esegui un piano di distruzione dell'infrastruttura. | Per eseguire la distruzione pianificata dell'infrastruttura del Catena di approvvigionamento di AWS set di dati utilizzando il piano generato, esegui il comando seguente:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Rimuovi gli output Terraform dal bucket di artefatti Terraform di Amazon S3. | Per completare il processo di pulizia, rimuovi il file di output che è stato caricato durante la distribuzione di eseguendo il comando seguente: `ASC-Datasets`<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

## Risoluzione dei problemi
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Un Catena di approvvigionamento di AWS set di dati o un flusso di integrazione non è stato distribuito correttamente a causa di errori Catena di approvvigionamento di AWS interni o autorizzazioni IAM insufficienti per il ruolo di servizio. | Innanzitutto, pulisci tutte le risorse. [Quindi, ridistribuisci le risorse del Catena di approvvigionamento di AWS[set di dati e quindi ridistribuisci le risorse](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/README.md) del flusso di integrazione. Catena di approvvigionamento di AWS](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/README.md) | 
| Il flusso di Catena di approvvigionamento di AWS integrazione non recupera i nuovi file di dati caricati per i set di dati. Catena di approvvigionamento di AWS  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | 

## Risorse correlate
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-resources"></a>

**AWS documentazione**
+ [Catena di approvvigionamento di AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)

**Altre risorse**
+ [Comprensione dei flussi di lavoro di GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions) (GitHub documentazione)

## Informazioni aggiuntive
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-additional"></a>

Questa soluzione può essere replicata per più set di dati e può essere interrogata per ulteriori analisi, tramite dashboard predefiniti forniti o integrazione Catena di approvvigionamento di AWS personalizzata con Amazon Quick Sight. Inoltre, puoi utilizzare Amazon Q per porre domande relative alla tua Catena di approvvigionamento di AWS istanza.

**Analizza i dati con Catena di approvvigionamento di AWS Analytics**

Per istruzioni su come configurare Catena di approvvigionamento di AWS Analytics, consulta [Impostazione di Catena di approvvigionamento di AWS Analytics](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/setting_analytics.html) nella Catena di approvvigionamento di AWS documentazione.

Questo modello ha dimostrato la creazione di set di dati **Calendar** e **Outbound\$1Order\$1Line**. Per creare un'analisi che utilizzi questi set di dati, procedi nel seguente modo:

1. Per analizzare i set di dati, utilizza la dashboard di **Seasonality** Analysis. Per aggiungere la dashboard, segui i passaggi in [Dashboard predefiniti](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/prebuilt_dashboards.html) nella documentazione. Catena di approvvigionamento di AWS 

1. Scegli la dashboard per visualizzarne l'analisi basata su file CSV di esempio per i dati del calendario e i dati della linea degli ordini in uscita.

La dashboard fornisce informazioni sulla domanda nel corso degli anni sulla base dei dati acquisiti per i set di dati. È possibile specificare ulteriormente ProductID, CustomerId, years e altri parametri per l'analisi.

**Usa Amazon Q per porre domande relative alla tua Catena di approvvigionamento di AWS istanza**

[Amazon Q in Catena di approvvigionamento di AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) è un assistente AI generativo interattivo che ti aiuta a gestire la catena di approvvigionamento in modo più efficiente. Amazon Q può fare quanto segue:
+ Analizza i dati nel tuo Catena di approvvigionamento di AWS data lake.
+ Fornisci informazioni operative e finanziarie.
+ Rispondi alle tue domande immediate sulla catena di fornitura.

Per ulteriori informazioni sull'uso di Amazon Q, consulta la sezione [Attivazione di Amazon Q in Catena di approvvigionamento di AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/enabling_QinASC.html) [e Uso](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/using_QinASC.html) di Amazon Q Catena di approvvigionamento di AWS nella Catena di approvvigionamento di AWS documentazione.

# Automatizza la valutazione delle risorse AWS
<a name="automate-aws-resource-assessment"></a>

*Naveen Suthar, Arun Bagal, Manish Garg e Sandeep Gawande, Amazon Web Services*

## Riepilogo
<a name="automate-aws-resource-assessment-summary"></a>

Questo modello descrive un approccio automatizzato per la configurazione delle funzionalità di valutazione delle risorse utilizzando l'[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html). Utilizzando questo modello, i team operativi raccolgono i dettagli di controllo delle risorse in modo automatizzato e visualizzano i dettagli di tutte le risorse distribuite in un account AWS su un'unica dashboard. Ciò è utile nei seguenti casi d'uso:
+ Identificazione degli strumenti Infrastructure as Code (IaC) e isolamento delle risorse create da diverse soluzioni IaC come [HashiCorp Terraform](https://www.terraform.io/), [AWS CloudFormation, AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) CDK [e AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ Recupero di informazioni relative al controllo delle risorse

Questa soluzione aiuterà anche il team dirigenziale a ottenere informazioni sulle risorse e le attività in un account AWS da un'unica dashboard. 


| 
| 
| Nota: [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) è un servizio a pagamento. Prima di eseguirlo per analizzare i dati e creare una dashboard, consulta i [prezzi di Amazon Quick Sight](https://aws.amazon.com/quicksight/pricing/). | 
| --- |

## Prerequisiti e limitazioni
<a name="automate-aws-resource-assessment-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Ruoli e autorizzazioni di AWS Identity and Access Management (IAM) con accesso alle risorse di provisioning
+ [Un [account Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) creato con accesso ad [Amazon Simple Storage Service (Amazon S3) e Amazon Athena](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ AWS CDK versione 2.55.1 o successiva installata 
+ [Python](https://www.python.org/downloads/release/python-390/) versione 3.9 o successiva installata

**Limitazioni**
+ Questa soluzione viene distribuita su un singolo account AWS.
+ La soluzione non terrà traccia degli eventi accaduti prima della sua implementazione a meno che AWS non CloudTrail fosse già stato configurato e archiviato i dati in un bucket S3.

**Versioni del prodotto**
+ AWS CDK versione 2.55.1 o successiva
+ Python versione 3.9 o successiva

## Architecture
<a name="automate-aws-resource-assessment-architecture"></a>

**Stack tecnologico Target**
+ Amazon Athena
+ AWS CloudTrail
+ AWS Glue
+ AWS Lambda
+ Amazon Quick Sight
+ Simple Storage Service (Amazon S3)

**Architettura Target**

Il codice CDK di AWS distribuirà tutte le risorse necessarie per configurare le funzionalità di valutazione delle risorse in un account AWS. Il diagramma seguente mostra il processo di invio dei CloudTrail log ad AWS Glue, Amazon Athena e Quick Sight.

![\[Valutazione delle risorse AWS con AWS Glue, Amazon Athena e Amazon QuickSight in un processo in sei fasi.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a504774e-db7a-4c36-a22c-ce56d252fb58/images/8f2b549d-33a8-4cbf-86fd-33244716b668.png)


1. CloudTrail invia i log a un bucket S3 per l'archiviazione.

1. Una notifica di evento richiama una funzione Lambda che elabora i log e genera dati filtrati.

1. I dati filtrati vengono archiviati in un altro bucket S3.

1. Un crawler AWS Glue è configurato sui dati filtrati presenti nel bucket S3 per creare uno schema nella tabella AWS Glue Data Catalog.

1. I dati filtrati sono pronti per essere interrogati da Amazon Athena.

1. I dati interrogati sono accessibili da Quick Sight per la visualizzazione.

**Automazione e scalabilità**
+ Questa soluzione può essere scalata da un account AWS a più account AWS se esiste un percorso a livello di organizzazione in CloudTrail AWS Organizations. Implementandola CloudTrail a livello organizzativo, puoi utilizzare questa soluzione anche per recuperare i dettagli di controllo delle risorse per tutte le risorse richieste.
+ Questo modello utilizza risorse serverless AWS per distribuire la soluzione.

## Tools (Strumenti)
<a name="automate-aws-resource-assessment-tools"></a>

**Servizi AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) è un servizio di query interattivo che ti aiuta ad analizzare i dati direttamente in Amazon S3 utilizzando SQL standard.
+ [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](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 AWS e regioni AWS.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) ti CloudTrail aiuta a controllare la governance, la conformità e il rischio operativo del tuo account AWS.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) è un servizio di estrazione, trasformazione e caricamento (ETL) completamente gestito. Ti aiuta a classificare, pulire, arricchire e spostare i dati in modo affidabile tra archivi di dati e flussi di dati. Questo modello utilizza un crawler AWS Glue e una tabella AWS Glue Data Catalog.
+ [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.
+ [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) è un servizio di business intelligence (BI) su scala cloud che ti aiuta a visualizzare, analizzare e generare report sui dati in un'unica dashboard.
+ [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.

**Repository di codice**

Il codice per questo pattern è disponibile nel GitHub [infrastructure-assessment-iac-automation](https://github.com/aws-samples/infrastructure-assessment-iac-automation)repository.

L'archivio del codice contiene i seguenti file e cartelle:
+ `lib`folder — I file di costruzione in Python del CDK AWS utilizzati per creare risorse AWS
+ `src/lambda_code`— Il codice Python che viene eseguito nella funzione Lambda
+ `requirements.txt`— L'elenco di tutte le dipendenze Python che devono essere installate
+ `cdk.json`— Il file di input per fornire i valori necessari per avviare le risorse

## Best practice
<a name="automate-aws-resource-assessment-best-practices"></a>

Imposta il monitoraggio e gli avvisi per la funzione Lambda. Per ulteriori informazioni, consulta [Monitoraggio e risoluzione dei problemi delle funzioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Per le best practice generali relative all'utilizzo delle funzioni Lambda, consulta la documentazione [AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epiche
<a name="automate-aws-resource-assessment-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository sul tuo computer locale. | Per clonare il repository, esegui il comando `git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git`. | AWS DevOps, DevOps ingegnere | 
| Configura l'ambiente virtuale Python e installa le dipendenze richieste. | Per configurare l'ambiente virtuale Python, esegui i seguenti comandi.<pre>cd infrastructure-assessment-iac-automation<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Per configurare le dipendenze richieste, esegui il comando. `pip install -r requirements.txt` | AWS DevOps, DevOps ingegnere | 
| Configura l'ambiente AWS CDK e sintetizza il codice CDK AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingegnere | 

### Configura le credenziali AWS sul tuo computer locale
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esporta le variabili per l'account e la regione in cui verrà distribuito lo stack. | Per fornire le credenziali AWS per AWS CDK utilizzando variabili di ambiente, esegui i seguenti comandi.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | AWS DevOps, DevOps ingegnere | 
| Configura il profilo AWS CLI. | Per configurare il profilo AWS CLI per l'account, segui le istruzioni nella documentazione [AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | AWS DevOps, DevOps ingegnere | 

### Configura e distribuisci lo strumento di valutazione delle risorse
<a name="configure-and-deploy-the-resource-assessment-tool"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci risorse nell'account. | Per distribuire risorse nell'account AWS utilizzando AWS CDK, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps | 
| Esegui il crawler AWS Glue e crea la tabella Data Catalog. | Un [crawler AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) viene utilizzato per mantenere dinamico lo schema dei dati. La soluzione crea e aggiorna le partizioni nella [tabella del catalogo dati di AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) eseguendo periodicamente il crawler come definito dallo scheduler del crawler di AWS Glue. Dopo che i dati sono disponibili nel bucket S3 di output, utilizza i seguenti passaggi per eseguire il crawler AWS Glue e creare lo schema della tabella Data Catalog per i test:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Il codice CDK AWS configura il crawler AWS Glue per l'esecuzione in un determinato momento, ma puoi anche eseguirlo su richiesta. | AWS DevOps, DevOps ingegnere | 
| Implementa il costrutto Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingegnere | 
| Crea la dashboard Quick Sight. | Per creare il dashboard e l'analisi Quick Sight di esempio, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Per ulteriori informazioni, consulta [Avvio di un'analisi in Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/creating-an-analysis.html) e [Tipi visivi in Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-visual-types.html). | AWS DevOps, DevOps ingegnere | 

### Pulisci tutte le risorse AWS nella soluzione
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi le risorse AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingegnere | 

### Configura funzionalità aggiuntive oltre all'automazione dello strumento di valutazione delle risorse AWS
<a name="set-up-additional-features-on-top-of-the-aws-resource-assessment-tool-automation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Monitora e pulisci le risorse create manualmente. | (Facoltativo) Se la tua organizzazione ha requisiti di conformità per creare risorse utilizzando strumenti IaC, puoi raggiungere la conformità utilizzando l'automazione degli strumenti di valutazione delle risorse AWS per recuperare le risorse assegnate manualmente. Puoi anche utilizzare lo strumento per importare le risorse in uno strumento IaC o per ricrearle. Per monitorare le risorse assegnate manualmente, esegui le seguenti attività di alto livello:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps ingegnere | 

## Risoluzione dei problemi
<a name="automate-aws-resource-assessment-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| AWS CDK restituisce errori. | Per assistenza con i problemi di AWS CDK, consulta [Risoluzione dei problemi comuni di AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Risorse correlate
<a name="automate-aws-resource-assessment-resources"></a>
+ [Creazione di funzioni Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Inizia a usare AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Lavorare con AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Creazione di una traccia di log CloudTrail ](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Inizia a usare Amazon Quick Sight](https://aws.amazon.com/quicksight/getting-started/)

## Informazioni aggiuntive
<a name="automate-aws-resource-assessment-additional"></a>

**Account multipli**

Per configurare le credenziali AWS CLI per più account, utilizza i profili AWS. Per ulteriori informazioni, consulta la sezione *Configurazione di più profili* in [Configurazione dell'interfaccia a riga di comando di AWS](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/).

**Comandi AWS CDK**

Quando lavori con AWS CDK, tieni presente i seguenti comandi utili:
+ Elenca tutti gli stack presenti nell'app

  ```
  cdk ls
  ```
+ Emette il modello AWS sintetizzato CloudFormation 

  ```
  cdk synth
  ```
+ Distribuisce lo stack nell'account e nella regione AWS predefiniti

  ```
  cdk deploy
  ```
+ Confronta lo stack distribuito con lo stato attuale

  ```
  cdk diff
  ```
+ Apre la documentazione di AWS CDK

  ```
  cdk docs
  ```

# Installa automaticamente i sistemi SAP utilizzando strumenti open source
<a name="install-sap-systems-automatically-by-using-open-source-tools"></a>

*Guilherme Sesterheim, Amazon Web Services*

## Riepilogo
<a name="install-sap-systems-automatically-by-using-open-source-tools-summary"></a>

Questo modello mostra come automatizzare l'installazione dei sistemi SAP utilizzando strumenti open source per creare le seguenti risorse:
+ Un database SAP S/4HANA 1909
+ Un'istanza SAP ABAP Central Services (ASCS)
+ Un'istanza SAP Primary Application Server (PAS)

HashiCorp Terraform crea l'infrastruttura del sistema SAP e Ansible configura il sistema operativo (OS) e installa le applicazioni SAP. Jenkins esegue l'installazione.

Questa configurazione trasforma l'installazione dei sistemi SAP in un processo ripetibile, che può contribuire ad aumentare l'efficienza e la qualità dell'implementazione.

**Nota**  
Il codice di esempio fornito in questo modello funziona sia per i sistemi ad alta disponibilità (HA) che per i sistemi non HA.

## Prerequisiti e limitazioni
<a name="install-sap-systems-automatically-by-using-open-source-tools-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un bucket Amazon Simple Storage Service (Amazon S3) che contiene tutti i tuoi file multimediali SAP
+ Un principal AWS Identity and Access Management (IAM) con una [chiave di accesso e una chiave segreta](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) e che dispone delle seguenti autorizzazioni:
  + **Autorizzazioni di sola lettura:** Amazon Route 53, AWS Key Management Service (AWS KMS)
  + **Autorizzazioni di lettura e scrittura:** Amazon S3, Amazon Elastic Compute Cloud (Amazon), EC2 Amazon Elastic File System (Amazon EFS), IAM, Amazon, Amazon CloudWatch DynamoDB
+ Una [zona ospitata privata](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) sulla Route 53
+ Un abbonamento a [Red Hat Enterprise Linux per SAP con HA e Update Services 8.2 Amazon](https://aws.amazon.com/marketplace/pp/prodview-5grz5a5thx7c2) Machine Image (AMI) in Amazon Marketplace
+ Una chiave [AWS KMS gestita dal cliente](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-keys)
+ Una coppia di [key pair Secure Shell (SSH)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
+ **Un [gruppo EC2 di sicurezza Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) che consente la connessione SSH sulla porta 22 dal nome host su cui si installa Jenkins (il nome host è molto probabilmente localhost)**
+ [Vagrant viene installato e configurato](https://www.vagrantup.com/) HashiCorp 
+ [VirtualBox](https://www.virtualbox.org/)di Oracle installato e configurato
+ Familiarità con Git, Terraform, Ansible e Jenkins

**Limitazioni**
+ Solo SAP S/4HANA 1909 è stato completamente testato per questo scenario specifico. Il codice Ansible di esempio in questo modello richiede una modifica se si utilizza un'altra versione di SAP HANA.
+ La procedura di esempio riportata in questo modello funziona per i sistemi operativi Mac OS e Linux. Alcuni comandi possono essere eseguiti solo su terminali basati su UNIX. Tuttavia, è possibile ottenere un risultato simile utilizzando comandi diversi e un sistema operativo Windows.

**Versioni del prodotto**
+ SAP S/4HANA 1909
+ Red Hat Enterprise Linux (RHEL) 8.2 o versioni successive

## Architecture
<a name="install-sap-systems-automatically-by-using-open-source-tools-architecture"></a>

Il diagramma seguente mostra un esempio di flusso di lavoro che utilizza strumenti open source per automatizzare l'installazione dei sistemi SAP in un account AWS:

![\[Il flusso di lavoro di esempio utilizza strumenti open source per automatizzare l'installazione dei sistemi SAP in un account AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/aaf11dac-38cc-4e89-be86-51d4409cf238/images/d7902f9d-f1be-461f-b69b-cf3c663c8f2f.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Jenkins orchestra l'esecuzione dell'installazione del sistema SAP eseguendo il codice Terraform e Ansible.

1. Il codice Terraform crea l'infrastruttura del sistema SAP.

1. Il codice Ansible configura il sistema operativo e installa le applicazioni SAP.

1. Un database SAP S/4HANA 1909, un'istanza ASCS e un'istanza PAS che includono tutti i prerequisiti definiti vengono installati su un'istanza Amazon. EC2 

**Nota**  
La configurazione di esempio in questo modello crea automaticamente un bucket Amazon S3 nel tuo account AWS per archiviare il file di stato Terraform.

**Stack tecnologico**
+ Terraform
+ Ansible
+ Jenkins
+ Un database SAP S/4HANA 1909
+ Un'istanza SAP ASCS
+ Un'istanza SAP PAS
+ Amazon EC2 

## Tools (Strumenti)
<a name="install-sap-systems-automatically-by-using-open-source-tools-tools"></a>

**Servizi AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) fornisce capacità di calcolo scalabile nel cloud AWS. Puoi avviare tutti i server virtuali di cui hai bisogno e scalarli rapidamente verso l'alto o verso il basso.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.
+ [Ansible](https://www.ansible.com/) è uno strumento open source di configurazione come codice (CaC) che aiuta ad automatizzare applicazioni, configurazioni e infrastrutture IT.
+ [Jenkins](https://www.jenkins.io/) è un server di automazione open source che consente agli sviluppatori di creare, testare e distribuire il proprio software.

**Codice**

[Il codice per questo pattern è disponibile nel repository -jenkins-ansible. GitHub aws-install-sap-with](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible)

## Epiche
<a name="install-sap-systems-automatically-by-using-open-source-tools-epics"></a>

### Configura i prerequisiti
<a name="configure-the-prerequisites"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi i tuoi file multimediali SAP a un bucket Amazon S3. | [Crea un bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) che contenga tutti i tuoi file multimediali SAP.[Assicurati di seguire la gerarchia delle cartelle di AWS Launch Wizard per **S/4HANA nella** documentazione di Launch Wizard.](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap-software-install-details.html) | Amministratore del cloud | 
| Installa VirtualBox. | Installazione e configurazione [VirtualBox](https://www.virtualbox.org/)tramite Oracle. | DevOps ingegnere | 
| Installa Vagrant. | Installa e configura [Vagrant tramite](https://www.vagrantup.com/). HashiCorp | DevOps ingegnere | 
| Configura il tuo account AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | Informazioni generali su AWS | 

### Crea ed esegui la tua installazione SAP
<a name="build-and-run-your-sap-installation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository di codice da. GitHub | Clona il repository [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible) su. GitHub | DevOps ingegnere | 
| Avvia il servizio Jenkins. | Apri il terminale Linux. Quindi, vai alla cartella locale che contiene la cartella del repository del codice clonato ed esegui il seguente comando:<pre>sudo vagrant up</pre>L'avvio di Jenkins richiede circa 20 minuti. In caso di esito positivo, il comando restituisce un messaggio che indica che il **servizio è attivo e funzionante**. | DevOps ingegnere | 
| Apri Jenkins in un browser web e accedi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | DevOps ingegnere | 
| Configura i parametri di installazione del sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Puoi configurare gli altri parametri non richiesti secondo necessità, in base al tuo caso d'uso. Ad esempio, puoi modificare l'ID di sistema SAP (SID) delle istanze, la password, i nomi e i tag predefiniti per il tuo sistema SAP. Tutte le variabili obbligatorie hanno **(Obbligatorio)** all'inizio dei loro nomi. | Amministratore di sistema AWS, DevOps ingegnere | 
| Esegui l'installazione del tuo sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Per informazioni sulle fasi della pipeline, consulta la sezione **Comprendere le fasi della pipeline** di [Automatizzare l'installazione di SAP con strumenti open source sul](https://aws.amazon.com/blogs/awsforsap/automating-sap-installation-with-open-source-tools/) blog di AWS.**Se si verifica un errore, sposta il cursore sulla casella di errore rossa che appare e scegli Logs.** Vengono visualizzati i log relativi alla fase della pipeline che ha generato un errore. La maggior parte degli errori si verifica a causa di impostazioni errate dei parametri. | DevOps ingegnere, amministratore di sistema AWS | 

## Risorse correlate
<a name="install-sap-systems-automatically-by-using-open-source-tools-resources"></a>
+ [DevOps per SAP — Installazione SAP: da 2 mesi a 2 ore](https://videos.itrevolution.com/watch/707351918/) (DevOps Enterprise Summit Video Library)

# Automatizza il portafoglio e la distribuzione dei prodotti di AWS Service Catalog utilizzando AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva e RAJNEESH TYAGI, Amazon Web Services*

## Riepilogo
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

AWS Service Catalog ti aiuta a gestire centralmente i cataloghi di servizi o *prodotti* IT approvati per l'uso nell'ambiente AWS della tua organizzazione. Una raccolta di prodotti è denominata *portfolio* e un portfolio contiene anche informazioni di configurazione. Con AWS Service Catalog, puoi creare un portafoglio personalizzato per ogni tipo di utente della tua organizzazione e quindi concedere l'accesso al portafoglio appropriato. Questi utenti possono quindi distribuire rapidamente qualsiasi prodotto di cui hanno bisogno all'interno del portafoglio.

Se si dispone di un'infrastruttura di rete complessa, ad esempio architetture multiregionali e multi-account, si consiglia di creare e gestire i portafogli Service Catalog in un unico account centrale. Questo modello descrive come utilizzare AWS Cloud Development Kit (AWS CDK) per automatizzare la creazione di portafogli Service Catalog in un account centrale, concedere agli utenti finali l'accesso ad essi e quindi, facoltativamente, fornire prodotti in uno o più account AWS target. Questa ready-to-use soluzione crea i portafogli Service Catalog nell'account di origine. Inoltre, facoltativamente, effettua il provisioning dei prodotti negli account di destinazione utilizzando gli CloudFormation stack AWS e aiuta a configurare TagOptions i prodotti:
+ **AWS CloudFormation StackSets**: puoi StackSets utilizzarlo per lanciare prodotti Service Catalog su più regioni e account AWS. In questa soluzione, hai la possibilità di effettuare il provisioning automatico dei prodotti quando la distribuisci. Per ulteriori informazioni, consulta [Using AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (Service Catalog documentation) e [StackSets concepts](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentation).
+ **TagOption libreria**: puoi gestire i tag sui prodotti forniti utilizzando la TagOption libreria. A *TagOption*è una coppia chiave-valore gestita in AWS Service Catalog. Non è un tag AWS, ma funge da modello per creare un tag AWS basato su TagOption. Per ulteriori informazioni, vedere [TagOption libreria](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (documentazione del Service Catalog).

## Prerequisiti e limitazioni
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo che desideri utilizzare come account di origine per l'amministrazione dei portafogli Service Catalog.
+ Se utilizzi questa soluzione per fornire prodotti in uno o più account di destinazione, l'account di destinazione deve già esistere ed essere attivo.
+ Autorizzazioni AWS Identity and Access Management (IAM) per accedere ad AWS Service Catalog CloudFormation, AWS e AWS IAM.

**Versioni del prodotto**
+ CDK AWS versione 2.27.0

## Architecture
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Stack tecnologico Target**
+ Portafogli Service Catalog in un account AWS centralizzato
+ Prodotti Service Catalog distribuiti nell'account di destinazione

**Architettura Target**

![\[AWS CDK crea portafogli Service Catalog e fornisce prodotti nell'account di destinazione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. Nell'account portfolio (o *source*), aggiorni il file **config.json** con l'account AWS, la regione AWS, il ruolo IAM, il portafoglio e le informazioni sul prodotto per il tuo caso d'uso.

1. Distribuisci l'applicazione AWS CDK.

1. **L'applicazione AWS CDK assume il ruolo IAM di implementazione e crea i portafogli e i prodotti Service Catalog definiti nel file config.json.**

   Se hai configurato StackSets per distribuire prodotti in un account di destinazione, il processo continua. Se non hai configurato alcun prodotto StackSets per fornire alcun prodotto, il processo è completo.

1. **L'applicazione AWS CDK assume il ruolo di **StackSet amministratore** e distribuisce lo CloudFormation stack set AWS definito nel file config.json.**

1. **Nell'account di destinazione, StackSets assume il ruolo di esecuzione ed effettua il provisioning dei prodotti. StackSet **

## Tools (Strumenti)
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-tools"></a>

**Servizi AWS**
+ [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.
+ [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.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) ti aiuta a gestire centralmente i cataloghi di servizi IT approvati per AWS. Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.

**Repository di codice**

Il codice per questo pattern è disponibile su GitHub, nel [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)repository. L'archivio del codice contiene i seguenti file e cartelle:
+ **cdk-sevicecatalog-app**— Questa cartella contiene l'applicazione AWS CDK per questa soluzione.
+ **config**: questa cartella contiene il file **config.json** e il CloudFormation modello per la distribuzione dei prodotti nel portafoglio Service Catalog.
+ **config/config.json**: questo file contiene tutte le informazioni di configurazione. Aggiorna questo file per personalizzare questa soluzione in base al tuo caso d'uso.
+ **config/templates**: questa cartella contiene i CloudFormation modelli per i prodotti Service Center.
+ **setup.sh**: questo script distribuisce la soluzione.
+ **uninstall.sh**: questo script elimina lo stack e tutte le risorse AWS create durante la distribuzione di questa soluzione.

[Per utilizzare il codice di esempio, segui le istruzioni nella sezione Epics.](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics)

## Best practice
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ I ruoli IAM utilizzati per implementare questa soluzione devono rispettare il [principio del privilegio minimo (documentazione IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Aderisci alle [migliori pratiche per lo sviluppo di applicazioni cloud con AWS CDK (](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/)post sul blog AWS).
+ Rispetta le [ CloudFormation best practice di AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation documentazione).

## Epiche
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa AWS CDK Toolkit. | Assicurati di avere installato AWS CDK Toolkit. Inserisci il seguente comando per confermare se è installato e verificare la versione. <pre>cdk --version</pre>Se AWS CDK Toolkit non è installato, inserisci il seguente comando per installarlo.<pre>npm install -g aws-cdk@2.27.0</pre>Se la versione di AWS CDK Toolkit è precedente alla 2.27.0, immetti il seguente comando per aggiornarla alla versione 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps ingegnere | 
| Clonare il repository. | Inserire il seguente comando. In *Clona il repository* nella sezione [Informazioni aggiuntive](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), puoi copiare il comando completo contenente l'URL del repository. Questo clona il repository da. [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation) GitHub<pre>git clone <repository-URL>.git</pre>Questo crea una `cd aws-cdk-servicecatalog-automation` cartella nella directory di destinazione. Immettete il seguente comando per navigare in questa cartella.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps ingegnere | 
| Configura le credenziali AWS. | Esegui i comandi seguenti: Questi esportano le seguenti variabili, che definiscono l'account AWS e la regione in cui stai distribuendo lo stack.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Le credenziali AWS per AWS CDK vengono fornite tramite variabili di ambiente. | AWS DevOps, DevOps ingegnere | 
| Configura le autorizzazioni per i ruoli IAM degli utenti finali. | Se intendi utilizzare i ruoli IAM per concedere l'accesso al portafoglio e ai prodotti in esso contenuti, i ruoli devono disporre delle autorizzazioni che devono essere assunte dal responsabile del **servizio servicecatalog.amazonaws.com**. Per istruzioni su come concedere queste autorizzazioni, consulta [Enabling trusted access with Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (documentazione di AWS Organizations). | AWS DevOps, DevOps ingegnere | 
| Configura i ruoli IAM richiesti da StackSets. | Se utilizzi StackSets il provisioning automatico dei prodotti negli account di destinazione, devi configurare i ruoli IAM che amministrano ed eseguono il set di stack.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps ingegnere | 

### Personalizza e distribuisci la soluzione
<a name="customize-and-deploy-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i CloudFormation modelli. | Nella `config/templates` cartella, crea CloudFormation modelli per tutti i prodotti che desideri includere nei tuoi portafogli. Per ulteriori informazioni, consulta [Working with AWS CloudFormation templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation documentazione). | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 
| Personalizza il file di configurazione. | Nella `config` cartella, apri il file **config.json** e definisci i parametri appropriati per il tuo caso d'uso. Salvo diversa indicazione, sono obbligatori i seguenti parametri:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Per un esempio di file di configurazione completato, consulta File di *configurazione di esempio* nella sezione [Informazioni aggiuntive](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Sviluppatore di app, DevOps ingegnere, AWS DevOps | 
| Distribuire la soluzione. | Inserire il seguente comando. **Questo distribuisce l'app AWS CDK ed effettua il provisioning dei portafogli e dei prodotti Service Catalog come specificato nel file config.json.**<pre>sh +x setup.sh</pre> | Sviluppatore di app, DevOps ingegnere, AWS DevOps | 
| Verifica la distribuzione. | Verifica la corretta implementazione effettuando le seguenti operazioni: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | Informazioni generali su AWS | 
| (Facoltativo) Aggiorna i portafogli e i prodotti. | Se desideri utilizzare questa soluzione per aggiornare i portafogli o i prodotti o per fornire nuovi prodotti:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Ad esempio, puoi aggiungere portafogli aggiuntivi o fornire più risorse. L'app AWS CDK implementa solo le modifiche. Se non ci sono modifiche ai portafogli o ai prodotti precedentemente distribuiti, la ridistribuzione non li influenza. | Sviluppatore di app, DevOps ingegnere, General AWS | 

### Pulisci la soluzione
<a name="clean-up-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| (Facoltativo) Rimuovi le risorse AWS distribuite da questa soluzione. | Se desideri eliminare un prodotto fornito, segui le istruzioni in [Eliminazione dei prodotti forniti](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) (documentazione del Service Catalog).Se desideri eliminare tutte le risorse create da questa soluzione, inserisci il seguente comando.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps ingegnere, sviluppatore di app | 

## Risorse correlate
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Libreria AWS Service Catalog Construct](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (riferimento alle API AWS)
+ [StackSets concetti](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentazione)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (marketing AWS)
+ [Utilizzo di Service Catalog con AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (AWS workshop)

## Informazioni aggiuntive
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Clonare il repository**

Immettere il seguente comando da cui clonare il repository. GitHub

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**File di configurazione di esempio**

Di seguito è riportato un file **config.json** di esempio con valori di esempio.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```

# Automatizza la gestione dinamica delle pipeline per l'implementazione di soluzioni hotfix in ambienti Gitflow utilizzando e AWS Service Catalog AWS CodePipeline
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions"></a>

*Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker e Vivek Thangamuthu, Amazon Web Services*

## Riepilogo
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-summary"></a>

**Nota**  
AWS CodeCommit non è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)

Questo modello affronta uno scenario di gestione di una pipeline dinamica di hotfix dedicata esclusivamente alla distribuzione sicura di soluzioni hotfix in un ambiente di produzione. La soluzione viene implementata e gestita utilizzando un portafoglio e un prodotto. AWS Service Catalog Per l'automazione degli eventi viene utilizzata una EventBridge regola Amazon. Le restrizioni vengono applicate utilizzando i vincoli del portafoglio di Service Catalog e i ruoli AWS Identity and Access Management (IAM) per gli sviluppatori. È consentita solo una AWS Lambda funzione per avviare il prodotto Service Catalog, attivata dalla EventBridge regola. [Questo modello è progettato per ambienti con una configurazione Gitflow specifica, descritta in Informazioni aggiuntive.](#automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional)

In genere, viene implementato un hotfix per risolvere problemi critici o di sicurezza segnalati in un ambiente live, come Production. Gli hotfix devono essere implementati direttamente solo negli ambienti di staging e produzione. Le pipeline di staging e production sono ampiamente utilizzate per le richieste di sviluppo regolari. Queste pipeline non possono essere utilizzate per implementare hotfix perché esistono funzionalità continue di garanzia della qualità che non possono essere promosse alla produzione. Per rilasciare gli hotfix, questo schema descrive una pipeline dinamica e di breve durata con le seguenti funzionalità di sicurezza:
+ **Creazione automatica**: una pipeline di hotfix viene creata automaticamente ogni volta che viene creato un ramo di hotfix in un repository. AWS CodeCommit 
+ **Restrizioni di accesso**: gli sviluppatori non hanno accesso alla creazione di questa pipeline al di fuori del processo di hotfix. 
+ **Fase controllata**: la pipeline dispone di una fase controllata con uno speciale token di accesso, che garantisce che una pull request (PR) possa essere creata una sola volta. 
+ **Fasi** di approvazione: le fasi di approvazione sono incluse nella pipeline per ottenere le approvazioni necessarie dalle parti interessate. 
+ **Eliminazione automatica**: la pipeline degli hotfix viene eliminata automaticamente ogni volta che un `hotfix` ramo viene eliminato dal CodeCommit repository dopo l'unione con un PR. 

## Prerequisiti e limitazioni
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-prereqs"></a>

**Prerequisiti**
+ Ne sono necessari tre attivi come Account AWS segue:
  + Account Tools: per l'integrazione continua e la configurazione della distribuzione continua (CI/CD).
  + Account Stage: per i test di accettazione da parte degli utenti.
  + Account di produzione: per un utente finale aziendale.
  + (Facoltativo) Aggiungi un account Account AWS che funga da account di controllo qualità. Questo account è necessario se si desidera sia una configurazione della pipeline principale, incluso il controllo qualità, sia una soluzione di pipeline hotfix per i test.
+ Uno AWS CloudFormation stack con una condizione opzionale da distribuire nell'account QA utilizzando la pipeline principale, se necessario. Il pattern può ancora essere testato senza la configurazione della pipeline principale creando ed eliminando un ramo. `hotfix`
+ Un bucket Amazon Simple Storage Service (Amazon S3) per archiviare CloudFormation i modelli utilizzati per creare prodotti Service Catalog.
+ Crea regole di approvazione PR per il CodeCommit repository in conformità ai requisiti di conformità (dopo aver creato il repository).
+ Limita le autorizzazioni IAM degli sviluppatori e dei responsabili del team per negare l'esecuzione della funzione [prcreation-lambda Lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) perché dovrebbe essere richiamata solo dalla pipeline.

**Limitazioni**
+ Il CloudFormation provider viene utilizzato nella fase di implementazione e l'applicazione viene distribuita utilizzando un set di modifiche. CloudFormation Se desideri utilizzare un'opzione di distribuzione diversa, modifica lo CodePipeline stack come richiesto.
+ Questo modello utilizza AWS CodeBuild e altri file di configurazione per distribuire un microservizio di esempio. Se hai un tipo di carico di lavoro diverso (ad esempio, carichi di lavoro serverless), devi aggiornare tutte le configurazioni pertinenti.
+ Questo modello distribuisce l'applicazione in un'unica soluzione Regione AWS (ad esempio, US East (Virginia settentrionale) us-east-1). Account AWS Per la distribuzione in più regioni, modifica il riferimento alla regione nei comandi e negli stack.
+ Alcune Servizi AWS non sono disponibili in tutte. Regioni AWS Per la disponibilità regionale, consulta [i servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-architecture"></a>

I diagrammi di questa sezione forniscono i flussi di lavoro per un evento del ciclo di vita di creazione e per un evento del ciclo di vita di eliminazione.

![\[Flusso di lavoro per creare un evento del ciclo di vita.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/3939f77c-4221-4c23-a3a1-3e8a294b2b32.png)


Il diagramma precedente per la creazione di un evento del ciclo di vita mostra quanto segue:

1. Lo sviluppatore crea una `hotfix-*` filiale nel CodeCommit repository per sviluppare una soluzione relativa all'hotfix.

1. L'evento di creazione del `hotfix-*` ramo viene acquisito tramite la regola. EventBridge I dettagli dell'evento includono il nome del repository e il nome del ramo.

1. La EventBridge regola richiama la funzione. AWS Lambda `hotfix-lambda-function` La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.

1. La funzione Lambda elabora l'input per recuperare il nome del repository e il nome del ramo. Avvia il prodotto Service Catalog con i valori recuperati dall'input elaborato.

1. Il prodotto Service Catalog include una configurazione della pipeline che implementerà la soluzione negli ambienti Stage e Production. Il blocco pipeline include le fasi di origine, compilazione e distribuzione. Inoltre, è prevista una fase di approvazione manuale per promuovere l'implementazione per l'ambiente di produzione.

1. La fase di origine recupera il codice dal repository e dal `hotfix-*` ramo creati nella prima fase. Il codice viene passato alla fase di compilazione tramite un bucket Amazon S3 per gli artefatti. Nella fase di creazione, viene creata un'immagine del contenitore che include l'hotfix sviluppato nella `hotfix-*` filiale e inserito in Amazon Elastic Container Registry (Amazon ECR) Elastic Container Registry (Amazon ECR).

1. La fase di distribuzione sull'ambiente di fase aggiorna Amazon Elastic Container Service (Amazon ECS) con l'immagine del contenitore più recente che include l'hotfix. L'hotfix viene distribuito creando ed eseguendo un set di modifiche. CloudFormation 

1. La funzione `prcreation-lambda` Lambda viene richiamata dopo una corretta implementazione nell'ambiente Stage. Questa funzione Lambda crea un PR dal `hotfix-*` ramo ai `main` rami `develop` e del repository. La funzione Lambda assicura che la correzione sviluppata nel `hotfix-*` ramo venga ricongiunta e inclusa nelle distribuzioni successive.

1. Una fase di approvazione manuale aiuta a garantire che le parti interessate necessarie esaminino la correzione e approvino l'implementazione in produzione.

1. La fase di distribuzione nell'ambiente di produzione aggiorna Amazon ECS con l'immagine del contenitore più recente che include l'hotfix. L'hotfix viene distribuito creando ed eseguendo un set di modifiche. CloudFormation 

![\[Flusso di lavoro per eliminare un evento del ciclo di vita.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/192aa897-bd9b-4a9f-804e-340371612b3b.png)


Il diagramma precedente per l'eliminazione di un evento del ciclo di vita mostra quanto segue:

1. Lo sviluppatore elimina il `hotfix-*` ramo dopo la corretta implementazione dell'hotfix nell'ambiente di produzione.

1. L'evento di eliminazione del `hotfix-*` ramo viene acquisito tramite una EventBridge regola. I dettagli dell'evento includono il nome del repository e il nome del ramo.

1. La EventBridge regola richiama la funzione Lambda. La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.

1. La funzione Lambda elabora l'input per recuperare il nome del repository e il nome del ramo. La funzione Lambda determina il rispettivo prodotto Service Catalog dall'input passato e quindi termina il prodotto.

1. La cessazione del prodotto fornito da Service Catalog elimina la pipeline e le risorse pertinenti create in precedenza in quel prodotto.

**Automazione e scalabilità**
+ Il modello include una EventBridge regola e una funzione Lambda, in grado di gestire più richieste di creazione di branch hotfix in parallelo. La funzione Lambda fornisce al prodotto Service Catalog la regola dell'evento corrispondente.
+ La configurazione della pipeline viene gestita utilizzando il prodotto Service Catalog, che fornisce funzionalità di controllo della versione. La soluzione è inoltre scalabile automaticamente per gestire più sviluppi di hotfix per la stessa applicazione in parallelo.
+ La funzione [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) assicura che queste modifiche all'hotfix vengano reintegrate anche nei branch `main` e nei branch tramite la creazione automatica di una richiesta pull. `develop` Questo approccio è essenziale per mantenere aggiornate le `main` e le `develop` branch con tutte le correzioni ed evitare potenziali regressioni del codice. Questo processo aiuta a mantenere la coerenza tra i rami e a prevenire le regressioni del codice assicurando che tutti i rami di lunga durata dispongano delle correzioni più recenti.

## Tools (Strumenti)
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-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 tra e. Account AWS Regioni AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per l'implementazione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)è un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git, senza dover gestire il proprio sistema di controllo del codice sorgente. AWS CodeCommit non è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Per ulteriori informazioni, vedi [Come migrare il tuo AWS CodeCommit repository verso un altro provider Git](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)consente di gestire centralmente i cataloghi di servizi IT approvati. AWS Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.
+ [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.

**Altri strumenti**
+ [CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) [è un linter che verifica i modelli CloudFormation YAML o JSON rispetto alle specifiche delle risorse. CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Esegue anche altri controlli, come la verifica di valori validi per le proprietà delle risorse e il rispetto delle migliori pratiche.
+ [cfn-nag](https://github.com/stelligent/cfn_nag) è uno strumento open source che identifica potenziali problemi di sicurezza nei CloudFormation modelli mediante la ricerca di modelli.
+ [Docker](https://www.docker.com/) è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container. Questo modello utilizza Docker per creare e testare le immagini dei container localmente.
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [dynamic\$1hotfix\$1codepipeline](https://github.com/aws-samples/dynamic_hotfix_codepipeline).

## Best practice
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-best-practices"></a>

Rivedi e modifica i ruoli IAM e le policy di controllo dei servizi (SCP) nel tuo ambiente per assicurarti che limitino l'accesso in modo appropriato. Questo è fondamentale per prevenire qualsiasi azione che possa prevalere sulle misure di sicurezza incluse in questo modello. Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.

## Epiche
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-epics"></a>

### Configura l'ambiente di lavoro
<a name="set-up-the-work-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il [repository](https://github.com/aws-samples/dynamic_hotfix_codepipeline) di esempio in una nuova directory nella posizione di lavoro, esegui il comando seguente:<pre>git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git</pre> | AWS DevOps | 
| Esporta le variabili di ambiente per la distribuzione CloudFormation in stack. | Definisci le seguenti variabili di ambiente che verranno utilizzate come input per gli CloudFormation stack più avanti in questo schema.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export BucketStartName=<BucketName></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export ProdAccount=<prodaccountnumber><br />export StageAccount=<stage/preprodaccountnumber><br />export QAAccount=<qaccountnumber><br />export ToolsAccount=<toolsaccountnumber><br />export DepRegion=<region></pre> | AWS DevOps | 

### Imposta i prerequisiti richiesti in Account AWS
<a name="set-up-prerequisites-required-in-aws-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea le risorse necessarie CI/CD nell'account degli strumenti. | Per distribuire lo CloudFormation stack nell'account degli strumenti, usa i seguenti comandi. (Rimuovi il `QAAccount` parametro se non utilizzi l'account QA per la configurazione.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre>Prendi nota delle risorse che il CodeCommit repository e Amazon ECR hanno creato dallo stack precedente. Questi parametri sono necessari per configurare il `main` ramo della pipeline nelle fasi successive. | AWS DevOps | 
| Crea le risorse necessarie per CI/CD gli account di carico di lavoro. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Aggiorna la policy S3 Artifact Bucket per consentire l'accesso agli account dei carichi di lavoro. | Per aggiornare i prerequisiti dello CloudFormation stack nell'account tools, utilizza i seguenti comandi per aggiungere tutte le autorizzazioni necessarie per gli account di carico di lavoro Stage e Production. (Rimuovi il `QAAccount` parametro se non lo usi per la configurazione).<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} PutPolicy=true \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre> | AWS DevOps | 

### Configura la funzione Lambda e le risorse del Service Catalog nell'account degli strumenti
<a name="set-up-lam-function-and-sc-resources-in-tools-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il portafoglio e i prodotti Service Catalog. | Per configurare il portafoglio e i prodotti Service Catalog, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Configura le funzioni Lambda. | Questa soluzione utilizza le seguenti funzioni Lambda per gestire i flussi di lavoro degli hotfix:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)Per consentire alle funzioni Lambda di fornire e terminare i prodotti Service Catalog quando le `hotfix ` filiali vengono create o eliminate tramite la EventBridge regola associata, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Crea una pipeline per la filiale principale e distribuisci l'applicazione negli account dei carichi di lavoro
<a name="create-pipeline-for-main-branch-and-deploy-application-in-workload-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura la pipeline per la `main` filiale. | Per configurare la pipeline per il ramo principale, esegui il seguente comando nell'account degli strumenti. Sostituisci i parametri per `MainProductId` e `MainProductArtifactId` con i valori degli `servicecatalogsetup` stack output.<pre>#InToolsAccount<br />aws servicecatalog provision-product \<br />    --product-id <MainProductId> \<br />    --provisioning-artifact-id <MainProductArtifactId> \<br />    --provisioned-product-name "${ApplicationName}-main-pipeline" \<br />    --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \<br />    --region=${DepRegion}</pre> | AWS DevOps | 
| Distribuisci l'applicazione utilizzando la `main` filiale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Crea la pipeline per un ramo hotfix-\$1 e distribuisci l'hotfix
<a name="create-the-pipeline-for-a-hotfix--branch-and-deploy-the-hotfix"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una `hotfix-*` filiale e applica le modifiche. | Per creare una pipeline per la `hotfix-*` filiale e distribuire l'hotfix negli account del carico di lavoro, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Elimina il `hotfix-check1` ramo. | Per eliminare il `hotfix-check1` ramo creato in precedenza, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci le risorse distribuite. | Per ripulire le risorse distribuite in precedenza, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>##In Tools Account##<br />aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}</pre><pre>##In Workload Accounts##<br />aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}</pre>Per ulteriori informazioni, vedere [Eliminazione dei prodotti forniti nella documentazione](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) del Service Catalog. | AWS DevOps | 

## Risoluzione dei problemi
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Le modifiche che hai apportato al CodeCommit repository non vengono distribuite. | Controlla la presenza di errori nei CodeBuild log nell'azione di compilazione di Docker. Per ulteriori informazioni, consulta la [documentazione relativa ad CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html). | 
| Il prodotto Service Catalog non viene fornito. | Esamina gli CloudFormation stack correlati per verificare la presenza di eventi non riusciti. Per ulteriori informazioni, consulta la [documentazione relativa ad CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html). | 

## Risorse correlate
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-resources"></a>
+ [Comandi Git di base](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-basic-git.html)
+ [Configura una policy IAM per limitare i push e le unioni a una filiale](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html#how-to-conditional-branch-create-policy)
+ [Connect a un AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [Concessione dell'accesso agli utenti](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)
+ [Trasferimento di un'immagine Docker a un repository privato Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Risoluzione dei problemi AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html)
+ [AWS CodePipeline Che cos'è?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

## Informazioni aggiuntive
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional"></a>

Questo modello è progettato per ambienti con una configurazione Gitflow adottata per il flusso di lavoro di sviluppo del CI/CD processo. Le pipeline seguono il ciclo di implementazione che parte dallo sviluppo e passa attraverso il controllo della qualità (QA), la fase e gli ambienti di produzione. La CI/CD configurazione include due filiali git con implementazioni promozionali negli ambienti come segue:
+ La `develop` filiale si distribuisce nell'ambiente di sviluppo.
+ La `main` filiale si occupa degli ambienti di controllo qualità, stage e produzione.

In questa configurazione, è difficile applicare un hotfix o una patch di sicurezza più velocemente del normale ciclo di distribuzione mentre è in corso lo sviluppo attivo di nuove funzionalità. È necessario un processo dedicato per rispondere agli hotfix o alle richieste di sicurezza, garantendo che gli ambienti live rimangano correttamente funzionanti e sicuri.

Tuttavia, è possibile utilizzare altre opzioni disponibili senza richiedere un processo di distribuzione dedicato se:
+ Il CI/CD processo è ben equipaggiato con test automatizzati, come test funzionali e end-to-end test, che eliminano la necessità di test manuali e impediscono ritardi nelle implementazioni in produzione. Tuttavia, se i test automatici non sono ben integrati nel CI/CD processo, apportare una piccola correzione all'ambiente di produzione può diventare complesso e complicato per gli sviluppatori. Questo perché potrebbero esserci nuove funzionalità in attesa di approvazione e approvazione nell'ambiente di controllo qualità. Un hotfix o una correzione di sicurezza non possono essere messi in produzione in modo semplice e simultaneo.
+ I team di sviluppo implementano continuamente nuove funzionalità nell'ambiente di produzione, integrando hotfix o patch di sicurezza nella distribuzione pianificata di ogni nuova funzionalità. In altre parole, il prossimo aggiornamento delle funzionalità dell'ambiente di produzione comprende due componenti: l'aggiunta di una nuova funzionalità e l'inclusione dell'hotfix o della patch di sicurezza. Tuttavia, se il ciclo di implementazione non è continuo, possono esserci più nuove funzionalità in attesa di approvazione nell'ambiente di controllo qualità. La gestione di versioni diverse e la garanzia che vengano riapplicate le modifiche corrette possono quindi diventare complesse e soggette a errori.

**Nota**  
Se utilizzi la [versione 2](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types.html#:~:text=V2%20type%20pipelines%20have%20the%20same%20structure) di AWS CodePipeline con i trigger appropriati configurati nella `hotfix` filiale, avrai comunque bisogno di un processo dedicato per rispondere alle richieste non pianificate. Nella versione 2, puoi impostare i trigger per le richieste push o pull. L'esecuzione verrà messa in coda o eseguita immediatamente, a seconda dello stato precedente della pipeline. Tuttavia, con una pipeline dedicata, le correzioni vengono applicate immediatamente all'ambiente di produzione, garantendo che i problemi urgenti vengano risolti senza indugio.

# 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']
```

# Automatizza l'inserimento e la visualizzazione di metriche personalizzate di Amazon MWAA su Amazon Managed Grafana utilizzando Terraform
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah e Satya Vajrapu, Amazon Web Services*

## Riepilogo
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

Questo modello illustra come utilizzare Amazon Managed Grafana per creare e monitorare metriche personalizzate che vengono acquisite da Amazon Managed Workflows for Apache Airflow (Amazon MWAA). Amazon MWAA funge da orchestratore per i flussi di lavoro, utilizzando Directed Acyclic Graphs () con script in Python. DAGs Questo modello è incentrato sul monitoraggio di metriche personalizzate, tra cui il numero totale di esecuzioni nell'ultima ora, il conteggio dei DAGs risultati superati e non riusciti ogni ora e la durata media di questi processi. DAGs Questa analisi mostra come Amazon Managed Grafana si integra con Amazon MWAA per consentire un monitoraggio completo e approfondimenti sull'orchestrazione dei flussi di lavoro all'interno di questo ambiente.

## Prerequisiti e limitazioni
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS con le autorizzazioni utente necessarie per creare e gestire quanto segue: Servizi AWS
  + AWS Identity and Access Management Ruoli e politiche (IAM)
  + AWS Lambda
  + Grafana gestito da Amazon
  + Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Timestream
+ Accesso a un ambiente shell che può essere un terminale sul computer locale o [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html).
+ Un ambiente shell con Git installato e l'ultima versione di AWS Command Line Interface (AWS CLI) installata e configurata. Per ulteriori informazioni, consulta [Installazione o aggiornamento alla versione più recente di AWS CLI nella](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) AWS CLI documentazione.
+ È installata la seguente versione di Terraform: `required_version = ">= 1.6.1, < 2.0.0"` Puoi usare [tfswitch per passare](https://tfswitch.warrensbox.com/) da una versione all'altra di Terraform.
+ Fonte di identità configurata per il tuo. AWS IAM Identity Center Account AWS Per ulteriori informazioni, consulta [Conferma le tue fonti di identità in IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html) nella documentazione di IAM Identity Center. Puoi scegliere tra l'impostazione predefinita IAM Identity Center directory, Active Directory o un provider di identità (IdP) esterno come Okta. Per ulteriori informazioni, vedere Risorse [correlate](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources).

**Limitazioni**
+ Alcune Servizi AWS non sono disponibili in tutte Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ Terraform `required_version = ">= 1.6.1, < 2.0.0"`
+ Amazon Managed Grafana versione 9.4 o successiva. Questo modello è stato testato nella versione 9.4.

## Architecture
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

Il seguente diagramma di architettura evidenzia l' Servizi AWS uso nella soluzione.

![\[Flusso di lavoro per automatizzare l'inserimento di metriche personalizzate di Amazon MWAA.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


Il diagramma precedente illustra il seguente flusso di lavoro:

1. Le metriche personalizzate all'interno di Amazon MWAA provengono da DAGs quelle eseguite all'interno dell'ambiente. Le metriche vengono caricate nel bucket Amazon S3 in un formato di file CSV. Di seguito vengono DAGs utilizzate le funzionalità di interrogazione del database di Amazon MWAA:
   + `run-example-dag`— Questo DAG contiene codice Python di esempio che definisce una o più attività. Viene eseguito ogni 7 minuti e stampa la data. Dopo aver stampato la data, il DAG include un'operazione per sospendere o sospendere l'esecuzione per una durata specifica.
   + `other-sample-dag`— Questo DAG viene eseguito ogni 10 minuti e stampa la data. Dopo aver stampato la data, il DAG include un'operazione per sospendere o sospendere l'esecuzione per una durata specifica.
   + `data-extract`— Questo DAG viene eseguito ogni ora, interroga il database Amazon MWAA e raccoglie i parametri. Dopo aver raccolto i parametri, questo DAG li scrive in un bucket Amazon S3 per ulteriori elaborazioni e analisi.

1. Per semplificare l'elaborazione dei dati, le funzioni Lambda vengono eseguite quando vengono attivate dagli eventi di Amazon S3, il che facilita il caricamento delle metriche in Timestream.

1. Timestream è integrato come fonte di dati in Amazon Managed Grafana, dove sono archiviate tutte le metriche personalizzate di Amazon MWAA.

1. Gli utenti possono interrogare i dati e creare dashboard personalizzati per visualizzare gli indicatori chiave delle prestazioni e ottenere informazioni sull'orchestrazione dei flussi di lavoro all'interno di Amazon MWAA.

## Tools (Strumenti)
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**Servizi AWS**
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)ti aiuta a gestire centralmente l'accesso Single Sign-On (SSO) a tutte le tue applicazioni e al cloud. Account AWS 
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi. In questo modello, AWS Lambda esegue il codice Python in risposta agli eventi di Amazon S3 e gestisce automaticamente le risorse di calcolo.
+ [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) è un servizio di visualizzazione dei dati completamente gestito che puoi utilizzare per interrogare, correlare, visualizzare e inviare avvisi su metriche, log e tracce. Questo modello utilizza Amazon Managed Grafana per creare una dashboard per la visualizzazione delle metriche e gli avvisi.
+ [Amazon Managed Workflows for Apache Airflow (Amazon MWAA) è un](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html) servizio di orchestrazione gestito per Apache Airflow che puoi utilizzare per configurare e gestire pipeline di dati nel cloud su larga scala. [Apache](https://airflow.apache.org/) Airflow è uno strumento open source utilizzato per creare, pianificare e monitorare in modo programmatico sequenze di processi e attività denominate flussi di lavoro. In questo modello, in Amazon MWAA vengono distribuiti un campione DAGs e un estrattore di parametri DAG.
+ [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. In questo modello, Amazon S3 viene utilizzato per DAGs archiviare script e metriche personalizzate in formato CSV.
+ [Amazon Timestream LiveAnalytics](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) for is è un database di serie temporali veloce, scalabile, completamente gestito e creato appositamente che semplifica l'archiviazione e l'analisi di trilioni di punti dati di serie temporali al giorno. Timestream for si integra LiveAnalytics anche con i servizi di uso comune per la raccolta, la visualizzazione e l'apprendimento automatico dei dati. In questo modello, viene utilizzato per importare i parametri personalizzati Amazon MWAA generati.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. Questo modello utilizza un modulo Terraform per automatizzare la fornitura dell'infrastruttura in. AWS

**Archivio di codice**

Il codice per questo pattern è disponibile GitHub nel repository [visualize-amazon-mwaa-custom-metrics-grafana](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana). La cartella contiene quanto segue: `stacks/Infra`
+ File di configurazione Terraform per tutte le risorse AWS 
+ File Grafana dashboard .json nella cartella `grafana`
+ Amazon Managed Workflows for Apache DAGs Airflow nella cartella `mwaa/dags`
+ Codice Lambda per analizzare il file.csv e memorizzare le metriche nel database Timestream nella cartella `src`
+ I file IAM Policy .json nella cartella `templates`

## Best practice
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

Terraform deve memorizzare lo stato dell'infrastruttura e della configurazione gestite in modo da poter mappare le risorse del mondo reale alla configurazione. Per impostazione predefinita, Terraform memorizza lo stato localmente in un file denominato. `terraform.tfstate` È fondamentale garantire la sicurezza e l'integrità del file di stato Terraform perché mantiene lo stato attuale dell'infrastruttura. Per ulteriori informazioni, consulta [Remote State](https://developer.hashicorp.com/terraform/language/state/remote) nella documentazione di Terraform. 

## Epiche
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### Implementa l'infrastruttura utilizzando Terraform
<a name="deploy-the-infrastructure-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'infrastruttura. | Per implementare l'infrastruttura della soluzione, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### Convalida le risorse dell'infrastruttura distribuite
<a name="validate-the-deployed-infrastructure-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida l'ambiente Amazon MWAA. | Per convalidare l'ambiente Amazon MWAA, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingegnere dei dati | 
| Verifica gli orari del DAG. | Per visualizzare ogni pianificazione DAG, vai alla scheda **Pianificazione** nell'interfaccia utente **Airflow**.Ciascuno dei seguenti sistemi DAGs ha una pianificazione preconfigurata, che viene eseguita nell'ambiente Amazon MWAA e genera parametri personalizzati: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)**Puoi anche vedere le esecuzioni riuscite di ogni DAG nella colonna Runs.**  | Ingegnere dei dati, AWS DevOps | 

### Configura l'ambiente Amazon Managed Grafana
<a name="configure-the-gra-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l'accesso all'area di lavoro Amazon Managed Grafana. | Gli script Terraform hanno creato lo spazio di lavoro, i dashboard e la pagina delle metriche di Amazon Managed Grafana richiesti. Per configurare l'accesso in modo da poterli visualizzare, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Installa il plug-in Amazon Timestream.  | Le metriche personalizzate di Amazon MWAA vengono caricate nel database Timestream. Utilizza il plug-in Timestream per visualizzare le metriche con i dashboard di Amazon Managed Grafana.Per installare il plug-in Timestream, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Per ulteriori informazioni, consulta [Estendi il tuo spazio di lavoro con i plugin nella documentazione](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins) di Amazon Managed Grafana. | AWS DevOps, DevOps ingegnere | 

### Visualizza le metriche personalizzate nella dashboard di Amazon Managed Grafana
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Visualizza la dashboard di Amazon Managed Grafana. | Per visualizzare le metriche che sono state inserite nell'area di lavoro di Amazon Managed Grafana, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)La pagina delle metriche della dashboard mostra le seguenti informazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Personalizza la dashboard di Amazon Managed Grafana. | Per personalizzare i dashboard per ulteriori miglioramenti futuri, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)[In alternativa, il codice sorgente di questa dashboard è disponibile nel `dashboard.json` file nella `stacks/infra/grafana` cartella del repository. GitHub ](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json) | AWS DevOps | 

### Pulisci AWS le risorse
<a name="clean-up-aws-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Metti in pausa le esecuzioni di Amazon MWAA DAG. | Per mettere in pausa le esecuzioni del DAG, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, ingegnere dei dati | 
| Elimina gli oggetti nei bucket Amazon S3. | Per eliminare i bucket Amazon S3 **mwaa-events-bucket-\$1 e **mwaa-metrics-bucket-\$1****, segui le istruzioni per l'uso della console Amazon S3 in Eliminazione di [un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) nella documentazione di Amazon S3. | AWS DevOps | 
| Distruggi le risorse create da Terraform. | Per distruggere le risorse create da Terraform e il file di stato locale Terraform associato, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## risoluzione dei problemi
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` | Aggiorna il tuo AWS CLI alla [versione più recente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | 
| Errore durante il caricamento delle fonti di dati - `Fetch error: 404 Not Found Instantiating…` | L'errore è intermittente. Attendi qualche minuto, quindi aggiorna le sorgenti dati per visualizzare l'origine dati Timestream elencata.  | 

## Risorse correlate
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS documentazione**
+ [Amazon Managed Grafana per dashboard e visualizzazione](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [Configura Amazon Managed Grafana per usare Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [Utilizzalo AWS IAM Identity Center con il tuo spazio di lavoro Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [Lavorare con DAGs Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS video**
+ [Configura IAM Identity Center con Amazon Managed Grafana per l'autenticazione, come mostrato nel video seguente.](https://www.youtube.com/watch?v=XX2Xcz-Ps9U)




[https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U? controlli = 0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ [Se IAM Identity Center non è disponibile, puoi anche integrare l'autenticazione Amazon Managed Grafana utilizzando un provider di identità (IdP) esterno come Okta, come mostrato nel video seguente.](https://www.youtube.com/watch?v=Z4JHxl2xpOg)




[https://www.youtube-nocookie.com/embed/A4 Og? JHxl2xp controlli = 0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## Informazioni aggiuntive
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

Puoi creare una soluzione completa di monitoraggio e avviso per il tuo ambiente Amazon MWAA, che consente una gestione proattiva e una risposta rapida a potenziali problemi o anomalie. Amazon Managed Grafana include le seguenti funzionalità:

**Avvisi**: puoi configurare gli avvisi in Amazon Managed Grafana in base a soglie o condizioni predefinite. Imposta notifiche e-mail per avvisare le parti interessate quando determinate metriche superano o scendono al di sotto delle soglie specificate. Per ulteriori informazioni, consulta [gli avvisi Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html) nella documentazione di Amazon Managed Grafana.

**Integrazione**: puoi integrare Amazon Managed Grafana con vari strumenti di terze parti come OpsGenie PagerDuty, o Slack per funzionalità di notifica avanzate. Ad esempio, puoi configurare webhook o integrarli per attivare incidenti e notifiche in queste piattaforme in base APIs agli avvisi generati in Amazon Managed Grafana. [Inoltre, questo modello fornisce un GitHub archivio per creare risorse.](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) AWS È possibile integrare ulteriormente questo codice con i flussi di lavoro di implementazione dell'infrastruttura.

# Automatizza la distribuzione di stack set utilizzando AWS e AWS CodePipeline CodeBuild
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild"></a>

*Thiyagarajan Mani, Mihir Borkar e Raghu Gowda, Amazon Web Services*

## Riepilogo
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-summary"></a>

Nella soluzione di integrazione continua e distribuzione continua (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsoluzione per questo requisito), la funzionalità di [amministratore di set di stack delegati](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) di AWS CloudFormation è utile perché consente un livello di sicurezza limitando l'accesso all'account di gestione. Tuttavia, AWS CodePipeline utilizza il modello di autorizzazioni gestite dai servizi per distribuire applicazioni in più account e regioni. È necessario utilizzare l'account di gestione AWS Organizations per eseguire la distribuzione con set di stack, poiché AWS CodePipeline non supporta la funzionalità di amministratore delegato degli stack set.

Questo modello descrive come aggirare questa limitazione. Il modello utilizza AWS CodeBuild e uno script personalizzato per automatizzare la distribuzione di stack set con AWS. CodePipeline Automatizza queste attività di distribuzione delle applicazioni:
+ Implementa un'applicazione come set di stack nelle unità organizzative esistenti () OUs
+ Estendi la distribuzione di un'applicazione ad altre regioni OUs  
+ Rimuovi un'applicazione distribuita da tutte o da alcune OUs regioni

## Prerequisiti e limitazioni
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-prereqs"></a>

**Prerequisiti**

Prima di seguire i passaggi indicati in questo schema:
+ Crea organizzazioni nel tuo account di gestione AWS Organizations. Per istruzioni, consulta la [documentazione di AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Abilita l'accesso affidabile tra AWS Organizations e utilizza CloudFormation le autorizzazioni gestite dai servizi. Per istruzioni, consulta [Enable trusted access with AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) nella CloudFormation documentazione.

**Limitazioni**

Il codice fornito con questo pattern presenta le seguenti limitazioni: 
+ È possibile distribuire un solo CloudFormation modello per un'applicazione; la distribuzione di più modelli non è attualmente supportata.
+ La personalizzazione dell'implementazione corrente richiede DevOps esperienza.
+ Questo modello non utilizza le chiavi AWS Key Management System (AWS KMS). Tuttavia, puoi abilitare questa funzionalità riconfigurando il CloudFormation modello incluso in questo pattern.

## Architecture
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-architecture"></a>

![\[Architettura di automazione della pipeline CI/CD\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/2dbca422-7f32-4f9c-a4aa-1f95b484b772.png)


Questa architettura per la pipeline di CI/CD implementazione gestisce quanto segue:
+ Limita l'accesso diretto all'account di gestione delegando la responsabilità della distribuzione dello stack set a un CI/CD account dedicato in qualità di amministratore dello stack set per le distribuzioni delle applicazioni.
+ Utilizza il modello di autorizzazione gestito dal servizio per distribuire automaticamente l'applicazione ogni volta che un nuovo account viene creato e mappato in un'unità organizzativa.
+ Garantisce la coerenza delle versioni dell'applicazione su tutti gli account a livello di ambiente.
+ Utilizza più fasi di approvazione a livello di repository e pipeline per fornire ulteriori livelli di sicurezza e governance per l'applicazione distribuita.
+ Supera l'attuale limitazione CodePipeline utilizzando uno script di distribuzione personalizzato per distribuire o rimuovere automaticamente set di stack e CodeBuild istanze di stack. [Per un'illustrazione del controllo del flusso e della gerarchia delle chiamate API implementate dallo script personalizzato, consulta la sezione Informazioni aggiuntive.](#automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional)
+ Crea set di stack individuali per gli ambienti di sviluppo, test e produzione. Inoltre, puoi creare set di stack che combinano più OUs regioni in ogni fase. Ad esempio, è possibile combinare sandbox e sviluppo OUs in una fase di sviluppo e implementazione.
+ Supporta la distribuzione o l'esclusione di applicazioni in un sottoinsieme di account o un elenco di. OUs

**Automazione e scalabilità**

Puoi utilizzare il codice fornito con questo pattern per creare un CodeCommit repository AWS e una pipeline di codice per la tua applicazione. Puoi quindi distribuirli come set di stack in più account a livello di unità organizzativa. Il codice automatizza anche componenti come gli argomenti di Amazon Simple Notification Service (Amazon SNS) per notificare gli approvatori, i ruoli AWS Identity and Access Management (IAM) richiesti e la policy di controllo del servizio (SCP) da applicare all'account di gestione.

## Tools (Strumenti)
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-tools"></a>

**Servizi AWS**
+ [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.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o istanze locali, funzioni AWS Lambda o servizi Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ti CodePipeline aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) è un servizio di gestione degli account che ti aiuta a consolidare più account AWS in un'organizzazione da creare e gestire centralmente.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.

**Repository di codici**

Il codice per questo pattern è disponibile nel repository GitHub [automated-code-pipeline-stackset-deployment](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment). Per la struttura delle cartelle e altri dettagli, consulta il [file readme](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment/blob/main/README.md) del repository.

## Best practice
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-best-practices"></a>

Questo modello limita l'accesso diretto all'account di gestione durante la distribuzione dell'applicazione a livello di unità organizzativa. L'aggiunta di più fasi di approvazione al processo di pipeline e repository contribuisce a fornire maggiore sicurezza e governance per le applicazioni e i componenti distribuiti utilizzando questo approccio.

## Epiche
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-epics"></a>

### Configurazione degli account in AWS Organizations
<a name="configure-accounts-in-aws-organizations"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita tutte le funzionalità dell'account di gestione. | Abilita tutte le funzionalità dell'account di gestione per la tua organizzazione seguendo le istruzioni nella [documentazione di AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html). | Amministratore AWS, amministratore della piattaforma | 
| Crea un CI/CD account. | In AWS Organizations, nella tua organizzazione, crea un CI/CD account dedicato e assegna un team che possieda e controlli l'accesso all'account. | Amministratore AWS | 
| Aggiungi un amministratore delegato. | Nell'account di gestione, registra l' CI/CD account creato nel passaggio precedente come amministratore delegato di stack set. Per istruzioni, consulta la [ CloudFormation documentazione AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). | Amministratore AWS, amministratore della piattaforma | 

### Crea un repository e CI/CD una pipeline di applicazioni
<a name="create-an-application-repository-and-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del codice. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crea argomenti SNS. | Puoi utilizzare il `sns-template.yaml` modello fornito nel GitHub repository per creare argomenti SNS e configurare le sottoscrizioni per le richieste di approvazione.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crea ruoli IAM per CI/CD i componenti. | Puoi utilizzare il `cicd-role-template.yaml` modello fornito nel GitHub repository per creare ruoli e policy IAM richiesti dai CI/CD componenti.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crea un CodeCommit repository e una pipeline di codice per la tua applicazione. | Puoi utilizzare il `cicd-pipeline-template.yaml` modello fornito nel repository per creare un GitHub CodeCommit repository e una pipeline di codice per la tua applicazione.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 

### Implementa un set di stack
<a name="deploy-a-stack-set"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository dell'applicazione. | Il modello di CI/CD pipeline utilizzato in precedenza crea un repository di applicazioni di esempio e una pipeline di codice. Per clonare e verificare il repository:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Sviluppatore di app, ingegnere dei dati | 
| Aggiungi artefatti applicativi. | Aggiorna il repository dell'applicazione utilizzando un modello. CloudFormation Questa soluzione supporta la distribuzione di un solo CloudFormation modello.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Sviluppatore di app, ingegnere dei dati | 
| Aggiorna il file di configurazione della distribuzione. | Aggiorna il `deployment_config.json` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html)Questo modello crea set di stack individuali per ogni ambiente aggiungendo il nome dell'ambiente al nome dello stack set fornito nel file di configurazione della distribuzione. | Sviluppatore di app, ingegnere dei dati | 
| Applica le modifiche e distribuisci lo stack set. | Applica le modifiche specificate nel modello dell'applicazione, quindi unisci e distribuisci lo stack set in più ambienti fase per fase:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Sviluppatore di app, ingegnere dei dati | 

## risoluzione dei problemi
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| L'implementazione fallisce con l'eccezione:*Cambia il nome del file dei parametri del modello come -parameter- .json con, i nomi predefiniti non sono consentiti* <application name><evn> | I file dei parametri del CloudFormation modello devono seguire la convenzione di denominazione specificata. Aggiorna i nomi dei file dei parametri e riprova. | 
| La distribuzione non riesce con l'eccezione:*Modificare il nome del CloudFormation modello in .yml, i valori predefiniti template.yml o template.yaml non sono consentiti* <application name> |  CloudFormation Il nome del modello deve seguire la convenzione di denominazione specificata. Aggiorna il nome del file e riprova. | 
| La distribuzione non riesce con l'eccezione:*Nessun CloudFormation modello valido e il relativo file di parametri trovati per l'ambiente \$1environment name\$1* | Controlla le convenzioni di denominazione dei file per il CloudFormation modello e il relativo file dei parametri per l'ambiente specificato. | 
| La distribuzione fallisce con l'eccezione:*Azione di distribuzione non valida fornita nel file di configurazione della distribuzione. Le opzioni valide sono 'deploy' e 'delete'.* | Hai specificato un valore non valido per il `deployment_action` parametro nel file di configurazione della distribuzione. Il parametro ha due valori validi: `deploy` e`delete`. Utilizzato `deploy` per creare e aggiornare i set di stack e le relative istanze di stack associate. `delete`Utilizzatelo solo quando desiderate rimuovere l'intero set di stack e le istanze di stack associate. | 

## Risorse correlate
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-resources"></a>
+ GitHub [automated-code-pipeline-stackset-repository di distribuzione](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment)
+ [Abilitazione di tutte le funzionalità dell'organizzazione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) (documentazione AWS Organizations)
+ [Registrare un amministratore delegato](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) ( CloudFormation documentazione AWS)
+ [Obiettivi a livello di account per set di stack gestiti dai servizi (documentazione AWS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/account-level-targets.html) CloudFormation 

## Informazioni aggiuntive
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional"></a>

**diagramma di flusso**

Il seguente diagramma di flusso illustra il controllo del flusso e la gerarchia delle chiamate API implementate dallo script personalizzato per automatizzare la distribuzione degli stack set.

![\[Controllo del flusso e chiamate API implementate dallo script Python\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/1898883a-62b7-40c2-8f08-9f2a9dda8404.png)


**Esempi di file di configurazione della distribuzione**

**Creazione di un nuovo set di stack**

Il seguente file di configurazione della distribuzione crea un nuovo stack set chiamato `sample-stack-set` nella regione AWS `us-east-1` in tre OUs.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Distribuzione di uno stack set esistente su un'altra unità organizzativa**

Se si distribuisce la configurazione mostrata nell'esempio precedente e si desidera distribuire lo stack set su un'unità organizzativa aggiuntiva chiamata `dev-org-unit-2` nell'ambiente di sviluppo, il file di configurazione della distribuzione potrebbe avere il seguente aspetto.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implementazione di uno stack esistente impostato in un'altra regione AWS**

Se distribuisci la configurazione mostrata nell'esempio precedente e desideri distribuire lo stack impostato in una regione AWS aggiuntiva (`us-east-2`) nell'ambiente di sviluppo per due OUs (`dev-org-unit-1`e`dev-org-unit-2`), il file di configurazione della distribuzione potrebbe essere simile al seguente. 

**Nota**  
Le risorse nel CloudFormation modello devono essere valide e specifiche della regione.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Rimozione di un'istanza stack da un'unità organizzativa o da una regione AWS**

Supponiamo che la configurazione di distribuzione mostrata nell'esempio precedente sia stata implementata. Il seguente file di configurazione rimuove le istanze dello stack da entrambe le regioni dell'unità organizzativa. `dev-org-unit-2`

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"],
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

Il seguente file di configurazione rimuove l'istanza dello stack dalla regione AWS `us-east-1` per entrambe OUs nell'ambiente di sviluppo.    

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Eliminazione dell'intero set di stack**

Il seguente file di configurazione di distribuzione elimina l'intero set di stack e tutte le istanze di stack associate.

```
{
     "deployment_action": "delete",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

****Esclusione di un account dalla distribuzione**

 Il seguente file di configurazione di distribuzione esclude l'account`111122223333`, che fa parte dell'unità organizzativa`dev-org-unit-1`, dalla distribuzione.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333"],
                                        "filter_type": "DIFFERENCE"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Distribuzione dell'applicazione su un sottoinsieme di account in un'unità organizzativa**

Il seguente file di configurazione di distribuzione distribuisce l'applicazione solo su tre account (`111122223333``444455556666`, e`777788889999`) nell'unità organizzativa. `dev-org-unit-1`

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333", "444455556666", "777788889999"],
                                        "filter_type": "INTERSECTION"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

# Associa automaticamente una policy gestita da AWS per Systems Manager ai profili di EC2 istanza utilizzando Cloud Custodian e AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour e Aaron Lennon, Amazon Web Services*

## Riepilogo
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Puoi integrare le istanze Amazon Elastic Compute Cloud (Amazon EC2) con AWS Systems Manager per automatizzare le attività operative e fornire maggiore visibilità e controllo. Per integrarsi con Systems Manager, EC2 le istanze devono avere una policy [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) installata e una policy `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) allegata ai profili delle istanze. 

Tuttavia, se vuoi assicurarti che tutti i profili di EC2 istanza abbiano la `AmazonSSMManagedInstanceCore` policy allegata, puoi affrontare problemi nell'aggiornamento di nuove EC2 istanze che non dispongono di profili di istanza o EC2 istanze che hanno un profilo di istanza ma non dispongono della policy. `AmazonSSMManagedInstanceCore` Inoltre, può essere difficile aggiungere questa policy su più account Amazon Web Services (AWS) e regioni AWS.

Questo modello aiuta a risolvere queste sfide implementando tre policy [Cloud Custodian](https://cloudcustodian.io/) nei tuoi account AWS:
+ La prima policy di Cloud Custodian verifica EC2 le istanze esistenti che hanno un profilo di istanza ma non dispongono della policy. `AmazonSSMManagedInstanceCore` La `AmazonSSMManagedInstanceCore` policy viene quindi allegata. 
+ La seconda policy di Cloud Custodian verifica EC2 le istanze esistenti senza un profilo di istanza e aggiunge un profilo di istanza predefinito a cui è associata la `AmazonSSMManagedInstanceCore` policy.
+ La terza policy Cloud Custodian crea funzioni [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) nei tuoi account per monitorare la creazione EC2 di istanze e profili di istanze. Ciò garantisce che la `AmazonSSMManagedInstanceCore` policy venga allegata automaticamente quando viene creata un' EC2 istanza.

Questo modello utilizza DevOps gli strumenti [AWS](https://aws.amazon.com/devops/) per ottenere una distribuzione continua e su larga scala delle policy di Cloud Custodian in un ambiente multi-account, senza fornire un ambiente di calcolo separato. 

## Prerequisiti e limitazioni
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Due o più account AWS attivi. Un account è l'*account di sicurezza* e gli altri sono *account membri*.
+ Autorizzazioni per il provisioning di risorse AWS nell'account di sicurezza. Questo modello utilizza [le autorizzazioni di amministratore](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), ma è necessario concedere le autorizzazioni in base ai requisiti e alle politiche dell'organizzazione.
+ Capacità di assumere un ruolo IAM dall'account di sicurezza agli account dei membri e creare i ruoli IAM richiesti. Per ulteriori informazioni su questo argomento, consulta [Delegare l'accesso tra account AWS utilizzando i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) nella documentazione IAM.
+ 
**Importante**  
AWS Command Line Interface (AWS CLI), installata e configurata. A scopo di test, puoi configurare AWS CLI utilizzando il `aws configure` comando o impostando le variabili di ambiente. : Questa opzione non è consigliata per gli ambienti di produzione e consigliamo di concedere a questo account solo l'accesso con il minimo privilegio. Per ulteriori informazioni su questo argomento, consulta [Concedere il privilegio minimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) nella documentazione IAM.
+ Il `devops-cdk-cloudcustodian.zip` file (allegato), scaricato sul computer locale.
+ Familiarità con Python.
+ Gli strumenti richiesti (Node.js, AWS Cloud Development Kit (AWS CDK) e Git), installati e configurati. Puoi utilizzare il `install-prerequisites.sh` file contenuto nel `devops-cdk-cloudcustodian.zip` file per**** installare questi strumenti. ****Assicurati di eseguire questo file con i privilegi di root. 

**Limitazioni**
+ Sebbene questo modello possa essere utilizzato in un ambiente di produzione, assicurati che tutti i ruoli e le policy IAM soddisfino i requisiti e le policy della tua organizzazione. 

**Versioni del pacchetto**
+ Cloud Custodian versione 0.9 o successiva
+ TypeScript versione 3.9.7 o successiva
+ Node.js versione 14.15.4 o successiva
+ `npm`versione 7.6.1 o successiva
+ AWS CDK versione 1.96.0 o successiva

## Architecture
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

Il diagramma mostra il flusso di lavoro seguente:

1. Le policy di Cloud Custodian vengono trasferite in un CodeCommit repository AWS nell'account di sicurezza. Una regola di Amazon CloudWatch Events avvia automaticamente la CodePipeline pipeline AWS.

1. La pipeline recupera il codice più recente CodeCommit e lo invia alla parte di integrazione continua della pipeline di integrazione continua e distribuzione continua (CI/CD) gestita da AWS. CodeBuild

1. CodeBuild esegue le DevSecOps azioni complete, inclusa la convalida della sintassi delle policy sulle policy di Cloud Custodian, ed esegue queste policy in modalità per verificare quali risorse vengono identificate. `--dryrun`

1. Se non ci sono errori, l'attività successiva avvisa un amministratore di rivedere le modifiche e approvare la distribuzione negli account dei membri.

**Stack tecnologico**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automazione e scalabilità**

Il modulo AWS CDK pipelines fornisce una CI/CD pipeline che utilizza CodePipeline per orchestrare la creazione e il test del codice sorgente CodeBuild, oltre alla distribuzione delle risorse AWS con gli stack AWS. CloudFormation Puoi utilizzare questo modello per tutti gli account dei membri e le regioni della tua organizzazione. Puoi anche estendere lo `Roles creation` stack per distribuire altri ruoli IAM nei tuoi account membro. 

## Tools (Strumenti)
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software per definire l'infrastruttura cloud nel codice e fornirla tramite AWS. CloudFormation
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che consente di interagire con i servizi AWS utilizzando i comandi nella shell della riga di comando.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito nel cloud.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che puoi utilizzare per archiviare e gestire risorse in modo privato.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per rilasciare il tuo software.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) è un servizio Web che ti aiuta a controllare in modo sicuro l'accesso alle risorse AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) è uno strumento che riunisce le dozzine di strumenti e script utilizzati dalla maggior parte delle organizzazioni per gestire i propri account cloud pubblici in un unico strumento open source.
+ [Node.js](https://nodejs.org/en/) è un JavaScript runtime basato sul motore V8 di Google Chrome. JavaScript 

**Codice**

Per un elenco dettagliato dei moduli, delle funzioni dell'account, dei file e dei comandi di distribuzione utilizzati in questo modello, consultate il `README` file nel `devops-cdk-cloudcustodian.zip` file (allegato).

## Epiche
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configura la pipeline con AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il CodeCommit repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Per ulteriori informazioni su questo argomento, consulta [Creazione di un CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) nella CodeCommit documentazione AWS. | Developer | 
| Installa gli strumenti richiesti. | Usa il `install-prerequisites.sh` file per installare tutti gli strumenti necessari su Amazon Linux. Questo non include la CLI di AWS perché è preinstallata.Per ulteriori informazioni su questo argomento, consulta la sezione [Prerequisiti](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) di [Getting started with the AWS CDK nella documentazione](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) di AWS CDK. | Developer | 
| Installa i pacchetti AWS CDK richiesti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)I seguenti pacchetti sono richiesti da AWS CDK e sono inclusi nel `requirements.txt` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 

### Configura il tuo ambiente
<a name="configure-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna le variabili richieste. | Apri il `vars.py` file nella cartella principale del tuo CodeCommit repository e aggiorna le seguenti variabili:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 
| Aggiorna il file account.yml con le informazioni sull'account del membro. | Per eseguire lo strumento [c7n-org Cloud Custodian](https://cloudcustodian.io/docs/tools/c7n-org.html) su più account, è necessario inserire il file di `accounts.yml` configurazione nella radice del repository. Di seguito è riportato un esempio di file di configurazione di Cloud Custodian per AWS:<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Developer | 

### Esegui il bootstrap degli account AWS
<a name="bootstrap-the-aws-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Potenzia l'account di sicurezza. | Avvia il programma `deploy_account` con l'`cloudcustodian_stack`applicazione eseguendo il seguente comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Developer | 
| Opzione 1 - Avvia automaticamente gli account dei membri. | Se la `cdk_bootstrap_member_accounts` variabile è impostata su `True` nel `vars.py` file, gli account specificati nella `member_accounts` variabile vengono automaticamente avviati dalla pipeline.Se necessario, puoi eseguire l'aggiornamento `*cdk_bootstrap_role*` con un ruolo IAM che puoi assumere dall'account di sicurezza e che dispone delle autorizzazioni necessarie per avviare il CDK AWS.I nuovi account aggiunti alla `member_accounts ` variabile vengono avviati automaticamente dalla pipeline in modo da poter distribuire i ruoli richiesti. | Developer | 
| Opzione 2: avvia manualmente gli account dei membri.  | Sebbene non sia consigliabile utilizzare questo approccio, puoi impostare il valore di `cdk_bootstrap_member_accounts` to `False` ed eseguire questo passaggio manualmente eseguendo il comando seguente:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Assicurati di aggiornare `{role_name}` i valori `{security_account_id}` and con il nome di un ruolo IAM che puoi assumere dall'account di sicurezza e che disponga delle autorizzazioni necessarie per avviare il CDK AWS.Puoi anche utilizzare altri approcci per avviare gli account dei membri, ad esempio con AWS CloudFormation. Per ulteriori informazioni su questo argomento, consulta [Bootstrapping nella documentazione](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) di AWS CDK. | Developer | 

### Implementa gli stack CDK AWS
<a name="deploy-the-aws-cdk-stacks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i ruoli IAM negli account dei membri. | Esegui il comando seguente per distribuire lo `member_account_roles_stack` stack e creare i ruoli IAM negli account dei membri:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Developer | 
| Implementa lo stack di pipeline Cloud Custodian. | Esegui il comando seguente per creare la `cloudcustodian_stack.py` pipeline Cloud Custodian da distribuire nell'account di sicurezza:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Developer | 

## Risorse correlate
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Guida introduttiva alla CDK AWS](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Allegati
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)

# Crea automaticamente CI/CD pipeline e cluster Amazon ECS per microservizi utilizzando AWS CDK
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk"></a>

*Varsha Raju, Amazon Web Services*

## Riepilogo
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-summary"></a>

Questo modello descrive come creare automaticamente l'integrazione continua e la distribuzione continua (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipeline) che è quindi possibile personalizzare o modificare in base ai requisiti dell'organizzazione. 

L'approccio del modello crea un ambiente di produzione e un ambiente non di produzione che dispongono ciascuno di un cloud privato virtuale (VPC) e di un cluster Amazon ECS configurati per l'esecuzione in due zone di disponibilità. Questi ambienti sono condivisi da tutti i tuoi microservizi e quindi crei una CI/CD pipeline per ogni microservizio. Queste CI/CD pipeline estraggono le modifiche da un repository di origine in AWS CodeCommit, creano automaticamente le modifiche e quindi le distribuiscono nei tuoi ambienti di produzione e non di produzione. Quando una pipeline completa con successo tutte le sue fasi, è possibile utilizzarla URLs per accedere al microservizio negli ambienti di produzione e non di produzione.

## Prerequisiti e limitazioni
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo.
+ Un bucket Amazon Simple Storage Service (Amazon S3) esistente che contiene `starter-code.zip` il file (allegato).
+ AWS Cloud Development Kit (AWS CDK), installato e configurato nel tuo account. Per ulteriori informazioni su questo argomento, consulta [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) nella documentazione di AWS CDK.
+ Python 3 e`pip`, installato e configurato. Per ulteriori informazioni su questo argomento, consulta la documentazione di [Python](https://www.python.org/).
+ Familiarità con AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS e AWS Fargate.
+ Familiarità con Docker.
+ Comprensione di e. CI/CD DevOps

**Limitazioni**
+ Si applicano i limiti generali dell'account AWS. Per ulteriori informazioni a riguardo, consulta le [quote dei servizi AWS](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) nella documentazione di AWS General Reference.

**Versioni del prodotto**
+ Il codice è stato testato utilizzando Node.js versione 16.13.0 e AWS CDK versione 1.132.0.

## Architecture
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-architecture"></a>

![\[Cloud AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/05ac2cad-408e-433f-8150-0a2b71f63cfd/images/6fa3dbef-88de-4b3f-ae41-dfa90256a058.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Uno sviluppatore di applicazioni inserisce il codice in un repository. CodeCommit 

1. Viene avviata una pipeline.

1. CodeBuild crea e invia l'immagine Docker a un repository Amazon ECR

1. CodePipeline distribuisce una nuova immagine su un servizio Fargate esistente in un cluster Amazon ECS non di produzione.

1. Amazon ECS inserisce l'immagine dal repository Amazon ECR in un servizio Fargate non di produzione.

1. Il test viene eseguito utilizzando un URL non di produzione.

1. Il release manager approva la distribuzione di produzione.

1. CodePipeline distribuisce la nuova immagine su un servizio Fargate esistente in un cluster Amazon ECS di produzione

1. Amazon ECS inserisce l'immagine dal repository Amazon ECR nel servizio Fargate di produzione.

1. Gli utenti di produzione accedono alla funzionalità utilizzando un URL di produzione.

**Stack tecnologico**
+ AWS CDK
+ CodeBuild
+ CodeCommit 
+ CodePipeline
+ Amazon ECR 
+ Amazon ECS 
+ Amazon VPC

**Automazione e scalabilità**

Puoi utilizzare l'approccio di questo modello per creare pipeline per microservizi distribuiti in uno stack AWS condiviso. CloudFormation L'automazione può creare più di un cluster Amazon ECS in ogni VPC e anche creare pipeline per microservizi distribuiti in un cluster Amazon ECS condiviso. Tuttavia, ciò richiede che tu fornisca nuove informazioni sulle risorse come input per lo stack della pipeline.

## Tools (Strumenti)
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-tools"></a>
+ [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html) — AWS Cloud Development Kit (AWS CDK) è un framework di sviluppo software per definire l'infrastruttura cloud in codice e fornirla tramite AWS. CloudFormation
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html): AWS CodeBuild è un servizio di build completamente gestito nel cloud. CodeBuild compila il codice sorgente, esegue test unitari e produce artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html): AWS CodeCommit è un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato repository Git nel cloud AWS. CodeCommit elimina la necessità di gestire il proprio sistema di controllo del codice sorgente o di preoccuparsi di scalarne l'infrastruttura.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html): AWS CodePipeline è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per rilasciare il tuo software. Puoi modellare e configurare rapidamente le diverse fasi di un processo di rilascio del software. CodePipeline automatizza i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) è un servizio di gestione dei container veloce e altamente scalabile che viene utilizzato per eseguire, arrestare e gestire i container su un cluster. Puoi eseguire le tue attività e i tuoi servizi su un'infrastruttura serverless gestita da AWS Fargate. In alternativa, per un maggiore controllo sulla tua infrastruttura, puoi eseguire attività e servizi su un cluster di istanze Amazon Elastic Compute Cloud (Amazon EC2) da te gestite.
+ [Docker](https://www.docker.com/): Docker aiuta gli sviluppatori a imballare, spedire ed eseguire qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

**Codice**

Il codice per questo pattern è disponibile nei `starter-code.zip` file `cicdstarter.zip` and (allegati).

## Epiche
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura la directory di lavoro per AWS CDK.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruttura cloud | 

### Crea l'infrastruttura condivisa
<a name="create-the-shared-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea l'infrastruttura condivisa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruttura cloud | 
| Monitora lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruttura cloud | 
| Testa lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Assicurati di registrare il IDs per i due VPCs e il gruppo di sicurezza IDs per i gruppi di sicurezza predefiniti in entrambi. VPCs | AWS DevOps, infrastruttura cloud | 

### Crea una CI/CD pipeline per un microservizio
<a name="create-a-ci-cd-pipeline-for-a-microservice"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea l'infrastruttura per il microservizio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)È inoltre possibile fornire i valori per entrambi i comandi utilizzando il `cdk.json` file nella directory. | AWS DevOps, infrastruttura cloud | 
| Monitora lo CloudFormation stack AWS. | Apri la CloudFormation console AWS e monitora l'avanzamento dello `myservice1-cicd-stack` stack. *Alla fine, lo stato cambia in. `CREATE_COMPLETE`* | AWS DevOps, infrastruttura cloud | 
| Testa lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) |  | 
| Usa la pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruttura cloud | 
| Ripeti questa epopea per ogni microservizio. | Ripeti le attività di questa epopea per creare una CI/CD pipeline per ciascuno dei tuoi microservizi. | AWS DevOps, infrastruttura cloud | 

## Risorse correlate
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-resources"></a>
+ [Usare Python con AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-python.html) 
+ [Guida di riferimento in Python per AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/python/index.html)
+ [Creazione di un servizio AWS Fargate utilizzando la CDK AWS](https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html)

## Informazioni aggiuntive
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-additional"></a>

**Comando `cdk synth`**

```
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
```

**`cdk deploy `command**

```
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice> 
```

## Allegati
<a name="attachments-05ac2cad-408e-433f-8150-0a2b71f63cfd"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/05ac2cad-408e-433f-8150-0a2b71f63cfd/attachments/attachment.zip)

# Crea e invia immagini Docker ad Amazon ECR utilizzando GitHub Actions e Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Riepilogo
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Questo modello spiega come creare GitHub flussi di lavoro riutilizzabili per creare il tuo Dockerfile e inviare l'immagine risultante ad Amazon Elastic Container Registry (Amazon ECR). Il pattern automatizza il processo di creazione dei tuoi Dockerfile utilizzando Terraform e Actions. GitHub Ciò riduce al minimo la possibilità di errori umani e riduce notevolmente i tempi di implementazione.

Un'azione GitHub push sul ramo principale del GitHub repository avvia la distribuzione delle risorse. Il flusso di lavoro crea un repository Amazon ECR unico basato sulla combinazione del nome dell' GitHub organizzazione e del repository. Quindi invia l'immagine Dockerfile al repository Amazon ECR.

## Prerequisiti e limitazioni
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un GitHub account attivo.
+ Un [GitHub repository.](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Terraform versione 1 o successiva [installata e configurata](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Un bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) per il backend Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3)
+ Una tabella [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) per lo state lock e la coerenza di Terraform. La tabella deve avere una chiave di partizione denominata `LockID` con un tipo di. `String` Se non è configurato, il blocco dello stato sarà disabilitato.
+ Un ruolo AWS Identity and Access Management (IAM) con le autorizzazioni per configurare il backend Amazon S3 per Terraform. [Per le istruzioni di configurazione, consulta la documentazione di Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration)

**Limitazioni**

Questo codice riutilizzabile è stato testato solo con GitHub Actions.

## Architecture
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Stack tecnologico Target**
+ Repository Amazon ECR
+ GitHub Azioni
+ Terraform

**Architettura di destinazione**

![\[Flusso di lavoro per creare GitHub flussi di lavoro riutilizzabili per creare Dockerfile e inviare immagini ad Amazon ECR.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Il diagramma illustra quanto segue:

1. Un utente aggiunge un modello Dockerfile e Terraform al repository. GitHub 

2. Queste aggiunte avviano un flusso di lavoro Actions. GitHub 

3. Il flusso di lavoro verifica se esiste un repository Amazon ECR. In caso contrario, crea il repository in base all' GitHub organizzazione e al nome del repository.

4. Il flusso di lavoro crea il Dockerfile e invia l'immagine al repository Amazon ECR.

## Tools (Strumenti)
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Servizi Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro dei container gestito sicuro, scalabile e affidabile.

**Altri strumenti**
+ [GitHub Actions](https://docs.github.com/en/actions) è integrato nella GitHub piattaforma per aiutarti a creare, condividere ed eseguire flussi di lavoro all'interno dei tuoi GitHub repository. Puoi utilizzare GitHub Actions per automatizzare attività come la creazione, il test e la distribuzione del codice.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) è uno strumento Infrastructure as Code (IaC) HashiCorp che ti aiuta a creare e gestire infrastrutture cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [Docker ECR Actions](https://github.com/aws-samples/docker-ecr-actions-workflow) Workflow.
+ Quando crei GitHub Actions, i file del flusso di lavoro Docker vengono salvati nella `/.github/workflows/` cartella di questo repository. Il flusso di lavoro per questa soluzione si trova nel file [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ La `e2e-test` cartella fornisce un Dockerfile di esempio per riferimento e test.

## Best practice
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ [Per le migliori pratiche per la scrittura di Dockerfile, consulta la documentazione Docker.](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
+ Usa un [endpoint VPC per Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Gli endpoint VPC sono basati su AWS PrivateLink, una tecnologia che consente di accedere in modo privato ad Amazon APIs ECR tramite indirizzi IP privati. Per le attività di Amazon ECS che utilizzano il tipo di avvio Fargate, l'endpoint VPC consente all'attività di estrarre immagini private da Amazon ECR senza assegnare un indirizzo IP pubblico all'attività.

## Epiche
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configura il provider e l'archivio OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura OpenID Connect. | Crea un provider OpenID Connect (OIDC). Utilizzerai il provider nella policy di fiducia per il ruolo IAM utilizzato in questa azione. Per istruzioni, consulta [Configurazione di OpenID Connect in Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub nella documentazione. | Amministratore AWS, AWS DevOps, AWS generale | 
| Clona il GitHub repository. | Clona il repository GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) nella tua cartella locale:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps ingegnere | 

### Personalizza il flusso di lavoro GitHub riutilizzabile e distribuisci l'immagine Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Personalizza l'evento che avvia il flusso di lavoro Docker. | [Il flusso di lavoro per questa soluzione è in workflow.yaml.](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) Questo script è attualmente configurato per distribuire risorse quando riceve l'evento. `workflow_dispatch` È possibile personalizzare questa configurazione modificando l'evento in un altro flusso di lavoro principale `workflow_call` e richiamando il flusso di lavoro da un altro flusso di lavoro principale. | DevOps ingegnere | 
| Personalizza il flusso di lavoro. | Il file [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) è configurato per creare un flusso di lavoro dinamico e riutilizzabile. GitHub Puoi modificare questo file per personalizzare la configurazione predefinita oppure puoi passare i valori di input dalla console GitHub Actions se utilizzi l'evento per avviare la `workflow_dispatch` distribuzione manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps ingegnere | 
| Implementa i modelli Terraform. | Il flusso di lavoro distribuisce automaticamente i modelli Terraform che creano il repository Amazon ECR, in base all' GitHub evento configurato. Questi modelli sono disponibili come `.tf` file nella [radice del repository Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps ingegnere | 

## risoluzione dei problemi
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Problemi o errori durante la configurazione di Amazon S3 e DynamoDB come backend remoto Terraform. | Segui le istruzioni nella [documentazione di Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) per configurare le autorizzazioni richieste sulle risorse Amazon S3 e DynamoDB per la configurazione del backend remoto. | 
| Impossibile eseguire o avviare il flusso di lavoro con l'evento. `workflow_dispatch` | Il flusso di lavoro configurato per l'implementazione dall'`workflow_dispatch`evento funzionerà solo se è configurato anche nel ramo principale. | 

## Risorse correlate
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Riutilizzo dei flussi di lavoro](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (documentazione) GitHub 
+ [Attivazione di un flusso](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) di lavoro (documentazione) GitHub 

# Crea e testa app iOS con AWS CodeCommit, AWS e CodePipeline AWS Device Farm
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Riepilogo
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-summary"></a>

Questo modello delinea i passaggi per creare una pipeline di integrazione e distribuzione continua (CI/CD) che utilizzi AWS per creare e CodePipeline testare applicazioni iOS su dispositivi reali su AWS. Il modello utilizza AWS CodeCommit per archiviare il codice dell'applicazione, lo strumento open source Jenkins per creare l'applicazione iOS e AWS Device Farm per testare l'applicazione costruita su dispositivi reali. Queste tre fasi sono orchestrate insieme in una pipeline utilizzando AWS. CodePipeline

Questo modello si basa sul post [Creazione e test di app iOS e iPadOS con AWS DevOps e servizi mobili](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) sul DevOps blog AWS. Per istruzioni dettagliate, consulta il post del blog.

## Prerequisiti e limitazioni
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un account per sviluppatori Apple
+ Crea server (macOS)
+ [Xcode](https://developer.apple.com/xcode/) versione 11.3 (installata e configurata sul server di build)
+ AWS Command Line Interface (AWS CLI[)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) installata [e](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) configurata sulla workstation
+ Conoscenza di base di [Git](https://git-scm.com/docs)

**Limitazioni**
+ Il server di creazione dell'applicazione deve eseguire macOS. 
+ Il server di compilazione deve avere un indirizzo IP pubblico, in modo da CodePipeline potervi connettere in remoto per avviare le build.

## Architecture
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-architecture"></a>

**Stack tecnologico di origine**
+ Un processo di creazione di applicazioni iOS in locale che prevede l'utilizzo di un simulatore o di un test manuale su dispositivi fisici

**Stack tecnologico Target**
+ Un CodeCommit repository AWS per l'archiviazione del codice sorgente dell'applicazione
+ Un server Jenkins per la creazione di applicazioni utilizzando Xcode
+ Un pool di dispositivi AWS Device Farm per testare applicazioni su dispositivi reali

**Architettura Target**

Quando un utente esegue il commit delle modifiche al repository di origine, la pipeline (AWS CodePipeline) recupera il codice dal repository di origine, avvia una build Jenkins e passa il codice dell'applicazione a Jenkins. Dopo la compilazione, la pipeline recupera l'elemento della build e avvia un job di AWS Device Farm per testare l'applicazione su un pool di dispositivi.

 

![\[La pipeline CI/CD utilizza AWS CodePipeline per creare e testare applicazioni iOS su dispositivi reali.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/06fbd82f-4aed-441c-818c-5f89f56af78e/images/0ae3d7b6-b40c-44ef-9580-8c8266c3d841.png)


## Tools (Strumenti)
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-tools"></a>
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) è un servizio di distribuzione continua completamente gestito che ti aiuta ad automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture. CodePipeline automatizza le fasi di compilazione, test e distribuzione del processo di rilascio ogni volta che viene apportata una modifica al codice, in base al modello di rilascio definito.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo del codice sorgente completamente gestito che ospita repository sicuri basati su Git. Permette ai team di collaborare facilmente sul codice in un ecosistema sicuro e altamente scalabile. CodeCommit elimina la necessità di gestire il proprio sistema di controllo del codice sorgente o di preoccuparsi di scalarne l'infrastruttura.
+ [AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) è un servizio di test delle applicazioni che ti consente di migliorare la qualità delle tue app web e mobili testandole su un'ampia gamma di browser desktop e dispositivi mobili reali, senza dover fornire e gestire alcuna infrastruttura di test.
+ [Jenkins](https://www.jenkins.io/) è un server di automazione open source che consente agli sviluppatori di creare, testare e distribuire il proprio software.

## Epiche
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-epics"></a>

### Configura l'ambiente di compilazione
<a name="set-up-the-build-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa Jenkins sul server di build che esegue macOS. | Jenkins verrà utilizzato per creare l'applicazione, quindi devi prima installarlo sul server di compilazione. Per ottenere istruzioni dettagliate per questa e le attività successive, consulta il post sul blog di AWS [Creazione e test di app iOS e iPadOS con AWS DevOps e servizi mobili](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) e altre risorse nella sezione [Risorse correlate](#build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources) alla fine di questo schema. | DevOps | 
| Configura Jenkins. | Segui le istruzioni sullo schermo per configurare Jenkins. | DevOps | 
| Installa il CodePipeline plugin AWS per Jenkins. | Questo plugin deve essere installato sul server Jenkins per consentire a Jenkins di interagire con il servizio CodePipeline AWS. | DevOps | 
| Crea un progetto Jenkins freestyle. | In Jenkins, crea un progetto freestyle. Configura il progetto per specificare i trigger e altre opzioni di configurazione della build. | DevOps | 

### Configurazione di AWS Device Farm
<a name="configure-aws-device-farm"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un progetto Device Farm. | Apri la console AWS Device Farm. Crea un progetto e un pool di dispositivi per i test. Per istruzioni, consulta il post del blog. | Developer | 

### Configura il repository dei sorgenti
<a name="configure-the-source-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un CodeCommit repository. | Crea un repository in cui verrà archiviato il codice sorgente. | DevOps | 
| Salva il codice dell'applicazione nel repository. | Connect al CodeCommit repository che hai creato. Invia il codice dal tuo computer locale al repository. | DevOps | 

### Configura la pipeline
<a name="configure-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una pipeline in AWS CodePipeline. | Apri la CodePipeline console AWS e crea una pipeline. La pipeline orchestra tutte le fasi del processo. CI/CD Per istruzioni, consulta il post sul blog AWS [Creazione e test di app iOS e iPadOS con AWS DevOps e servizi mobili](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/). | DevOps | 
| Aggiungi una fase di test alla pipeline. | Per aggiungere una fase di test e integrarla con AWS Device Farm, modifica la pipeline. | DevOps | 
| Avvia la pipeline. | **Per avviare la pipeline e il CI/CD processo, scegliete Release change.** | DevOps | 

### Visualizza i risultati dei test applicativi
<a name="view-application-test-results"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rivedi i risultati dei test. | Nella console AWS Device Farm, seleziona il progetto che hai creato ed esamina i risultati dei test. La console mostrerà i dettagli di ogni test. | Developer | 

## Risorse correlate
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources"></a>

**Step-by-step istruzioni per questo modello**
+ [Creazione e test di app iOS e iPadOS con AWS DevOps e servizi mobili](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) (post DevOps sul blog AWS)

**Configurazione di AWS Device Farm**
+ [Console AWS Device Farm](https://console.aws.amazon.com/devicefarm)

**Configura il repository di origine**
+ [Crea un CodeCommit repository AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)
+ [Connect a un CodeCommit repository AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)

**Configura la pipeline**
+ [ CodePipeline Console AWS](https://console.aws.amazon.com/codesuite/codepipeline/home)

**Altre risorse**
+ [ CodePipeline Documentazione AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [ CodeCommit Documentazione AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)
+ [Documentazione di AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html)
+ [Documentazione Jenkins](https://www.jenkins.io/doc/)
+ [Installazione di Jenkins su macOS](https://www.jenkins.io/download/weekly/macos/)
+ [ CodePipeline Plugin AWS per Jenkins](https://plugins.jenkins.io/aws-codepipeline/)
+ [Installazione di Xcode](https://developer.apple.com/xcode/)
+ [Installazione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) [e configurazione dell'interfaccia a riga di comando di AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Documentazione Git](https://git-scm.com/docs)

# Configura l'autenticazione TLS reciproca per le applicazioni in esecuzione su Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Riepilogo
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

Il Mutual Transport Layer Security (TLS) basato su certificati è un componente TLS opzionale che fornisce l'autenticazione peer bidirezionale tra server e client. Con Mutual TLS, i client devono fornire un certificato X.509 durante il processo di negoziazione della sessione. Il server utilizza questo certificato per identificare e autenticare il client.

Il Mutual TLS è un requisito comune per le applicazioni Internet of Things (IoT) e può essere utilizzato per business-to-business applicazioni o standard come l'[Open Banking](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html).

Questo modello descrive come configurare il TLS reciproco per le applicazioni in esecuzione su un cluster Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando un controller di ingresso NGINX. Puoi abilitare le funzionalità TLS reciproche integrate per il controller di ingresso NGINX annotando la risorsa di ingresso. [Per ulteriori informazioni sulle annotazioni TLS reciproche sui controller NGINX, consulta Autenticazione dei certificati client nella documentazione di Kubernetes.](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication)

**Importante**  
Questo modello utilizza certificati autofirmati. Si consiglia di utilizzare questo modello solo con i cluster di test e non negli ambienti di produzione. Se desideri utilizzare questo modello in un ambiente di produzione, puoi utilizzare [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) o lo standard esistente di infrastruttura a chiave pubblica (PKI) per emettere certificati privati.

## Prerequisiti e limitazioni
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo.
+ Un cluster Amazon EKS esistente.
+ AWS Command Line Interface (AWS CLI) versione 1.7 o successiva, installata e configurata su macOS, Linux o Windows.
+ L'utilità da riga di comando kubectl, installata e configurata per accedere al cluster Amazon EKS. Per ulteriori informazioni su questo argomento, consulta [Installazione di kubectl nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) di Amazon EKS.
+ Un nome DNS (Domain Name System) esistente per testare l'applicazione.

**Limitazioni**
+ Questo modello utilizza certificati autofirmati. Si consiglia di utilizzare questo modello solo con i cluster di test e non negli ambienti di produzione.

## Architecture
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![\[Configurazione dell'autenticazione TLS reciproca per le applicazioni in esecuzione su Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Stack tecnologico**
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Tools (Strumenti)
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire Kubernetes su AWS senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) è un'utilità da riga di comando che usi per interagire con un cluster Amazon EKS.

## Epiche
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Genera i certificati autofirmati
<a name="generate-the-self-signed-certificates"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Genera la chiave CA e il certificato. | Genera la chiave e il certificato dell'autorità di certificazione (CA) eseguendo il comando seguente.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps ingegnere | 
| Genera la chiave e il certificato del server e firma con il certificato CA. | Genera la chiave e il certificato del server e firma con il certificato CA eseguendo il comando seguente.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Assicurati di sostituirlo `<your_domain_name>` con il nome di dominio esistente. | DevOps ingegnere | 
|  Genera la chiave client e il certificato e firma con il certificato CA. | Genera la chiave client e il certificato e firma con il certificato CA eseguendo il comando seguente.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps ingegnere | 

### Implementa il controller di ingresso NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa il controller di ingresso NGINX nel tuo cluster Amazon EKS. | Implementa il controller di ingresso NGINX utilizzando il seguente comando.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps ingegnere | 
|  Verifica che il servizio di controllo di ingresso NGINX sia in esecuzione. | Verifica che il servizio di controllo di ingresso NGINX sia in esecuzione utilizzando il seguente comando.<pre>kubectl get svc -n ingress-nginx</pre>Assicurati che l'indirizzo del campo di servizio contenga il nome di dominio del Network Load Balancer. | DevOps ingegnere | 

### Crea uno spazio dei nomi nel cluster Amazon EKS per testare il TLS reciproco
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea uno spazio dei nomi nel cluster Amazon EKS.  | Crea uno spazio dei nomi chiamato `mtls` nel tuo cluster Amazon EKS eseguendo il comando seguente. <pre>kubectl create ns mtls</pre>Questo implementa l'applicazione di esempio per testare il TLS reciproco. | DevOps ingegnere | 

### Crea la distribuzione e il servizio per l'applicazione di esempio
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la distribuzione e il servizio Kubernetes nello spazio dei nomi mtls. | Crea un file denominato `mtls.yaml`. Incolla il codice seguente nel file. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre> Crea la distribuzione e il servizio Kubernetes nello spazio dei nomi eseguendo il comando seguente. `mtls`<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps ingegnere | 
| Verifica che la distribuzione Kubernetes sia stata creata. | Esegui il comando seguente per verificare che la distribuzione sia stata creata e che un pod sia disponibile.<pre>kubectl get deploy -n mtls</pre> | DevOps ingegnere | 
| Verifica che il servizio Kubernetes sia stato creato. | Verifica che il servizio Kubernetes sia stato creato eseguendo il comando seguente.<pre>kubectl get service -n mtls</pre> | DevOps ingegnere | 

### Crea un segreto nel namespace mtls
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un segreto per la risorsa in ingresso. | Esegui il seguente comando per creare un segreto per il controller di ingresso NGINX utilizzando i certificati che hai creato in precedenza.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre>Il tuo segreto ha un certificato server che consente al client di identificare il server e un certificato CA per il server per verificare i certificati client. | DevOps ingegnere | 

### Crea la risorsa di ingresso nello spazio dei nomi mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la risorsa di ingresso nello spazio dei nomi mtls. | Crea un file denominato `ingress.yaml`. Incolla il seguente codice nel file (sostituiscilo `<your_domain_name>` con il tuo nome di dominio esistente).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre>Crea la risorsa di ingresso nel `mtls` namespace eseguendo il comando seguente.<pre>kubectl create -f ingress.yaml -n mtls</pre>Ciò significa che il controller di ingresso NGINX può indirizzare il traffico verso l'applicazione di esempio. | DevOps ingegnere | 
| Verifica che la risorsa in ingresso sia stata creata. | Verificate che la risorsa di ingresso sia stata creata eseguendo il comando seguente.<pre>kubectl get ing -n mtls</pre>Assicurati che l'indirizzo della risorsa in ingresso mostri il load balancer creato per il controller di ingresso NGINX. | DevOps ingegnere | 

### Configura il DNS per indirizzare il nome host verso il sistema di bilanciamento del carico
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un record CNAME che punti al load balancer per il controller di ingresso NGINX. | Accedi alla Console di gestione AWS, apri la console Amazon Route 53 e crea un record Canonical Name (CNAME) che punti `mtls.<your_domain_name>` al load balancer per il controller di ingresso NGINX.Per ulteriori informazioni, vedere [Creazione di record utilizzando la console Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) nella documentazione di Route 53. | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova la configurazione TLS reciproca senza certificati. | Eseguire il seguente comando seguente.<pre>curl -k https://mtls.<your_domain_name> </pre>Dovresti ricevere la risposta di errore «400 Nessun certificato SSL richiesto è stato inviato». | DevOps ingegnere | 
| Testa la configurazione TLS reciproca con i certificati. | Eseguire il seguente comando seguente.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre>Dovresti ricevere la risposta «mTLS funziona». | DevOps ingegnere | 

## Risorse correlate
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Creazione di record utilizzando la console Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Utilizzo di un Network Load Balancer con il controller di ingresso NGINX su Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Autenticazione tramite certificato client](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)

# Automatizza la creazione di risorse Amazon WorkSpaces Applications utilizzando AWS CloudFormation
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation"></a>

*Ram Kandaswamy, Amazon Web Services*

## Riepilogo
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-summary"></a>

Questo modello fornisce esempi di codice e passaggi per automatizzare la creazione di risorse [Amazon WorkSpaces Applications](https://aws.amazon.com/workspaces/applications/) Cloud AWS utilizzando un [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)modello. Il modello mostra come utilizzare uno CloudFormation stack per automatizzare la creazione delle risorse delle WorkSpaces applicazioni Applications, tra cui un generatore di immagini, un'immagine, un'istanza di flotta e uno stack. È possibile trasmettere in streaming l'applicazione WorkSpaces Applications agli utenti finali su un browser HTML5 conforme utilizzando la modalità di distribuzione desktop o dell'applicazione.

## Prerequisiti e limitazioni
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un'accettazione dei termini e WorkSpaces delle condizioni delle Applicazioni
+ [Conoscenza di base delle risorse delle WorkSpaces Applicazioni, come [flotte e stack e generatori](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html) di immagini](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-image-builders.html)

**Limitazioni**
+ Non è possibile modificare il ruolo [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) associato a un'istanza WorkSpaces Applications dopo la creazione di tale istanza.
+ Non è possibile modificare le proprietà (come la [sottorete](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics) o il [gruppo di sicurezza](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)) sull'istanza WorkSpaces Applications image builder dopo la creazione del generatore di immagini.

## Architecture
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-architecture"></a>

Il diagramma seguente mostra come automatizzare la creazione di risorse delle WorkSpaces applicazioni utilizzando un modello. CloudFormation 

![\[Flusso di lavoro per la creazione automatica di risorse per WorkSpaces le applicazioni.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4f0205f5-5b91-4832-9f0f-2135ae866226/images/cb578939-d9af-4f60-93c9-286881df4c3a.png)


Il diagramma mostra il flusso di lavoro seguente:

1. È possibile creare un CloudFormation modello basato sul codice YAML nella sezione [Informazioni aggiuntive](#automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional) di questo modello.

1. Il CloudFormation modello crea uno stack di CloudFormation test.

   1. (Facoltativo) È possibile creare un'istanza di image builder utilizzando WorkSpaces Applicazioni.

   1. (Facoltativo) È possibile creare un'immagine Windows utilizzando un software personalizzato.

1. Lo CloudFormation stack crea un'istanza e uno stack del parco WorkSpaces applicazioni.

1.  WorkSpaces Le risorse delle applicazioni vengono distribuite agli utenti finali su un HTML5 browser conforme.

## Tools (Strumenti)
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-tools"></a>
+ [Amazon WorkSpaces Applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/what-is-appstream.html) è un servizio di streaming di applicazioni completamente gestito che ti fornisce accesso immediato alle tue applicazioni desktop da qualsiasi luogo. WorkSpaces Applications gestisce le AWS risorse necessarie per ospitare ed eseguire le applicazioni, si ridimensiona automaticamente e fornisce l'accesso agli utenti su richiesta.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a modellare e configurare le AWS risorse, a fornirle in modo rapido e coerente e a gestirle per tutto il loro ciclo di vita. È possibile utilizzare un modello per descrivere le risorse e le relative dipendenze e lanciarle e configurarle insieme come uno stack, anziché gestire le risorse singolarmente. Puoi gestire ed eseguire il provisioning degli stack su più sistemi. Account AWS Regioni AWS

## Best practice
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-best-practices"></a>
+ **Configura correttamente l'accesso alla rete per i generatori di immagini**: avvia i generatori di immagini nelle sottoreti del cloud privato virtuale (VPC) con un accesso Internet adeguato utilizzando un gateway NAT per l'accesso a Internet solo in uscita.

  Verifica la connettività di rete con le risorse richieste (come server delle applicazioni, database e server di licenza) prima di creare immagini. Verifica che le tabelle di routing VPC consentano le connessioni a tutte le risorse di rete necessarie. Per ulteriori informazioni, consulta [l'accesso a Internet](https://docs.aws.amazon.com/appstream2/latest/developerguide/internet-access.html) nella documentazione delle WorkSpaces applicazioni.
+ **Monitora la capacità della flotta rispetto alle quote di servizio in modo proattivo**: WorkSpaces le quote per tipo e dimensione delle istanze delle applicazioni si intendono per, per. Account AWS Regione AWS Se disponi di più parchi istanze nella stessa regione che utilizzano lo stesso tipo e dimensione di istanze, il numero totale di istanze in tutti i parchi istanze di quella regione deve essere inferiore o uguale alla quota applicabile. Per ulteriori informazioni, consulta [Risoluzione dei problemi relativi alle flotte nella documentazione delle applicazioni](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-fleets.html). WorkSpaces 
+ **Testa le applicazioni in modalità Image Builder Test prima dell'implementazione in flotta**: convalida sempre le applicazioni in modalità Image Builder Test prima di creare immagini e distribuirle alle flotte. La modalità Test simula le autorizzazioni limitate di cui dispongono gli utenti finali sulle istanze del parco istanze. Per ulteriori informazioni, consulta [Troubleshooting Image Builders nella documentazione](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-image-builder.html#troubleshooting-07) delle applicazioni. WorkSpaces 

## Epiche
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-epics"></a>

### (Facoltativo) Crea un'immagine WorkSpaces delle applicazioni
<a name="optional-create-a-aas2-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa software personalizzato e crea un'immagine. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html)Prendi in considerazione l'utilizzo della AppLocker funzionalità Windows per bloccare ulteriormente l'immagine. | AWS DevOps, architetto cloud | 

### Implementa il modello CloudFormation
<a name="deploy-the-cfn-template"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna il CloudFormation modello. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Amministratore di sistema AWS, amministratore cloud, architetto cloud, General AWS, amministratore AWS | 
| Crea uno CloudFormation stack utilizzando il modello. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Proprietario dell'app, amministratore di sistema AWS, Windows Engineer | 

## Risoluzione dei problemi
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Vari problemi | Per ulteriori informazioni, consulta [Risoluzione dei problemi](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting.html) nella documentazione WorkSpaces delle applicazioni. | 

## Risorse correlate
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-resources"></a>

**Riferimenti**
+ [Inizia a usare Amazon WorkSpaces Applications: configura con applicazioni di esempio](https://docs.aws.amazon.com/appstream2/latest/developerguide/getting-started.html)
+ [Crea una flotta e uno stack di WorkSpaces applicazioni Amazon](https://docs.aws.amazon.com/appstream2/latest/developerguide/set-up-stacks-fleets.html)

**Tutorial e video**
+ [Flusso di lavoro degli utenti di Amazon WorkSpaces Applications](https://www.youtube.com/watch?v=hVGQ87-Uhrc)
+ [Come migrare un'app Windows Forms legacy su Amazon Applications WorkSpaces ](https://www.youtube.com/watch?v=CIImtS2iVbg)
+ [AWS re:Invent 2018: Distribuisci applicazioni desktop in modo sicuro con Amazon WorkSpaces Applications (01) BAP2](https://www.youtube.com/watch?v=xNIyc_inOhM)

## Informazioni aggiuntive
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional"></a>

Il codice seguente è un esempio di CloudFormation modello che puoi utilizzare per creare automaticamente le risorse delle applicazioni. WorkSpaces 

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubnetIds:
    Type: 'List<AWS::EC2::Subnet::Id>'
  testSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup::Id'
  ImageName:
    Type: String
Resources:
  
  AppStreamFleet:
    Type: 'AWS::AppStream::Fleet'
    Properties:
      ComputeCapacity:
        DesiredInstances: 5
      InstanceType: stream.standard.medium
      Name: appstream-test-fleet
      DisconnectTimeoutInSeconds: 1200
      FleetType: ON_DEMAND
      IdleDisconnectTimeoutInSeconds: 1200
      ImageName: !Ref ImageName
      MaxUserDurationInSeconds: 345600
      VpcConfig:
        SecurityGroupIds:
          - !Ref testSecurityGroup
        SubnetIds: !Ref SubnetIds
  AppStreamStack:
    Type: 'AWS::AppStream::Stack'
    Properties:
      Description: AppStream stack for test
      DisplayName: AppStream test Stack
      Name: appstream-test-stack
      StorageConnectors:
        - ConnectorType: HOMEFOLDERS
      UserSettings:
        - Action: CLIPBOARD_COPY_FROM_LOCAL_DEVICE
          Permission: ENABLED
        - Action: CLIPBOARD_COPY_TO_LOCAL_DEVICE
          Permission: ENABLED
        - Action: FILE_DOWNLOAD
          Permission: ENABLED
        - Action: PRINTING_TO_LOCAL_DEVICE
          Permission: ENABLED
  AppStreamFleetAssociation:
    Type: 'AWS::AppStream::StackFleetAssociation'
    Properties:
      FleetName: appstream-test-fleet
      StackName: appstream-test-stack
    DependsOn:
      - AppStreamFleet
      - AppStreamStack
```

# Crea un parser di log personalizzato per Amazon ECS utilizzando un router di log Firelens
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router"></a>

*Varun Sharma, Amazon Web Services*

## Riepilogo
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-summary"></a>

Firelens è un router di log per Amazon Elastic Container Service (Amazon ECS) e AWS Fargate. [Puoi utilizzare Firelens per instradare i log dei container da Amazon ECS ad CloudWatch Amazon e ad altre destinazioni (ad esempio[,](https://www.splunk.com/) Splunk o Sumo Logic).](https://www.sumologic.com/) Firelens funziona con [Fluentd o Fluent](https://www.fluentd.org/) [Bit](https://fluentbit.io/) come agente di registrazione, il che significa che puoi utilizzare i parametri di definizione delle attività di [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) per instradare i log.

Scegliendo di analizzare i log a livello di origine, puoi analizzare i dati di registrazione ed eseguire query per rispondere in modo più efficiente ed efficace ai problemi operativi. Poiché applicazioni diverse hanno modelli di registrazione diversi, è necessario utilizzare un parser personalizzato che struttura i log e faciliti la ricerca nella destinazione finale.

Questo modello utilizza un router di log Firelens con un parser personalizzato a cui inviare i log CloudWatch da un'applicazione Spring Boot di esempio in esecuzione su Amazon ECS. Puoi quindi utilizzare Amazon CloudWatch Logs Insights per filtrare i log in base a campi personalizzati generati dal parser personalizzato. 

## Prerequisiti e limitazioni
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo.
+ AWS Command Line Interface (AWS CLI), installata e configurata sul computer locale.
+ Docker, installato e configurato sul tuo computer locale.
+ Un'applicazione containerizzata esistente basata su Spring Boot su Amazon Elastic Container Registry (Amazon ECR). 

## Architecture
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-architecture"></a>

![\[Utilizzo di un router di log Firelens per inviare i log CloudWatch da un'applicazione in esecuzione su Amazon ECS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/images/ef60e087-965a-40e9-9f80-35edbda2befe.png)


**Stack tecnologico**
+ CloudWatch
+ Amazon ECR
+ Amazon ECS
+ Fargate
+ Docker
+ Fluent Bit

## Tools (Strumenti)
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-tools"></a>
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito da AWS sicuro, scalabile e affidabile.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) è un servizio di gestione dei container veloce e altamente scalabile che semplifica l'esecuzione, l'arresto e la gestione dei container su un cluster.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): IAM è un servizio Web per controllare in modo sicuro l'accesso ai servizi AWS.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) è uno strumento open source che consente di interagire con i servizi AWS utilizzando i comandi nella shell della riga di comando.
+ [Docker: Docker](https://www.docker.com/) è una piattaforma aperta per lo sviluppo, la spedizione e l'esecuzione di applicazioni.

**Codice**

I seguenti file sono allegati a questo modello:
+ `customFluentBit.zip`— Contiene i file per aggiungere l'analisi e le configurazioni personalizzate.
+ `firelens_policy.json`— Contiene il documento di policy per creare una policy IAM.
+ `Task.json`— Contiene una definizione di attività di esempio per Amazon ECS.

## Epiche
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-epics"></a>

### Crea un'immagine Fluent Bit personalizzata
<a name="create-a-custom-fluent-bit-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Accedi alla Console di gestione AWS, apri la console Amazon ECR e crea un repository chiamato. `fluentbit_custom`Per ulteriori informazioni su questo argomento, consulta [Creazione di un repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) nella documentazione di Amazon ECR. | Amministratore di sistema, sviluppatore | 
| Decomprimi il customFluentBit pacchetto.zip. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) |  | 
| Crea l'immagine Docker personalizzata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Per ulteriori informazioni su questo argomento, consulta [Pushing a Docker image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) nella documentazione di Amazon ECR.  | Amministratore di sistema, sviluppatore | 

### Configura il cluster Amazon ECS
<a name="set-up-the-amazon-ecs-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster Amazon ECS. | Crea un cluster Amazon ECS seguendo le istruzioni dalla sezione *Modello solo per reti di rete* di [Creazione di un cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) nella documentazione di Amazon ECS.Assicurati di scegliere **Create VPC per creare** un nuovo cloud privato virtuale (VPC) per il tuo cluster Amazon ECS. | Amministratore di sistema, sviluppatore | 

### Configurare l'attività Amazon ECS
<a name="set-up-the-amazon-ecs-task"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Configura il ruolo IAM di esecuzione delle attività di Amazon ECS. | Crea un ruolo IAM per l'esecuzione delle attività di Amazon ECS utilizzando la policy `AmazonECSTaskExecutionRolePolicy` gestita. Per ulteriori informazioni su questo argomento, consulta il [ruolo IAM di esecuzione delle attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) nella documentazione di Amazon ECS.Assicurati di registrare l'Amazon Resource Name (ARN) del ruolo IAM. | Amministratore di sistema, sviluppatore | 
|  Collega la policy IAM al ruolo IAM di esecuzione delle attività di Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Amministratore di sistema, sviluppatore | 
| Imposta la definizione del task di Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Per ulteriori informazioni su questo argomento, consulta [Creazione di una definizione di attività](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) nella documentazione di Amazon ECS. | Amministratore di sistema, sviluppatore | 

### Esegui l'attività Amazon ECS
<a name="run-the-amazon-ecs-task"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui l'attività Amazon ECS.  | Sulla console Amazon ECS, scegli **Clusters**, scegli il cluster che hai creato in precedenza, quindi esegui l'attività autonoma.Per ulteriori informazioni su questo argomento, consulta [Esegui un'attività autonoma](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html) nella documentazione di Amazon ECS. | Amministratore di sistema, sviluppatore | 

### Verifica i CloudWatch registri
<a name="verify-the-cloudwatch-logs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica i registri.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Amministratore di sistema, sviluppatore | 

## Risorse correlate
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-resources"></a>
+ [Nozioni di base su Docker per Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) 
+ [Amazon ECS su AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 
+ [Configurazione dei parametri di base del servizio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) 

## Allegati
<a name="attachments-e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9"></a>

[Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/attachments/attachment.zip)

# Crea un framework di orchestrazione delle risorse basato su API utilizzando Actions e Terragrunt GitHub
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande e Akash Kumar, Amazon Web Services*

## Riepilogo
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Questo modello sfrutta i flussi di lavoro di GitHub Actions per automatizzare l'approvvigionamento delle risorse tramite payload JSON standardizzati, eliminando la necessità di una configurazione manuale. Questa pipeline automatizzata gestisce l'intero ciclo di vita dell'implementazione e può integrarsi perfettamente con vari sistemi di frontend, dai componenti dell'interfaccia utente personalizzati a. ServiceNow La flessibilità della soluzione consente agli utenti di interagire con il sistema tramite le loro interfacce preferite, mantenendo processi standardizzati.

L'architettura configurabile della pipeline può essere adattata per soddisfare diversi requisiti organizzativi. L'implementazione di esempio si concentra sul provisioning di Amazon Virtual Private Cloud (Amazon VPC) e Amazon Simple Storage Service (Amazon S3). Il modello affronta efficacemente le sfide comuni di gestione delle risorse cloud standardizzando le richieste all'interno dell'organizzazione e fornendo punti di integrazione coerenti. Questo approccio semplifica la richiesta e la gestione delle risorse da parte dei team, garantendo al contempo la standardizzazione.

## Prerequisiti e limitazioni
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un GitHub account attivo con accesso al repository configurato

**Limitazioni**
+ Le nuove risorse richiedono l'aggiunta manuale di `terragrunt.hcl` file alla configurazione del repository.
+ Alcune Servizi AWS non sono disponibili in tutte Regioni AWS. Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

Il diagramma seguente mostra i componenti e il flusso di lavoro di questo modello.

![\[Flusso di lavoro per automatizzare l'approvvigionamento delle risorse con GitHub Actions e Terraform.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Il diagramma dell'architettura mostra le seguenti azioni:

1. L'utente invia un payload JSON a GitHub Actions, attivando la pipeline di automazione.

1. La pipeline GitHub Actions recupera il codice delle risorse richiesto dai repository Terragrunt e Terraform, in base alle specifiche del payload.

1. La pipeline assume il ruolo (IAM) appropriato utilizzando l'ID specificato. AWS Identity and Access Management Account AWS Quindi, la pipeline distribuisce le risorse sulla destinazione Account AWS e gestisce lo stato di Terraform utilizzando il bucket Amazon S3 specifico dell'account e la tabella Amazon DynamoDB.

Ciascuno Account AWS contiene ruoli IAM per un accesso sicuro, un bucket Amazon S3 per lo storage dello stato Terraform e una tabella DynamoDB per il blocco dello stato. Questo design consente la distribuzione controllata e automatizzata delle risorse su tutto il territorio. Account AWS Il processo di distribuzione mantiene la corretta gestione dello stato e il controllo degli accessi tramite bucket Amazon S3 dedicati e ruoli IAM in ogni account.

## Tools (Strumenti)
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Servizi AWS**
+ [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 Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ [GitHub Actions](https://docs.github.com/en/actions) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.
+ [Terragrunt è uno strumento di orchestrazione che estende](https://terragrunt.gruntwork.io/docs/getting-started/overview/) sia le funzionalità di Terraform che quelle di Terraform. OpenTofu Gestisce il modo in cui vengono applicati i modelli di infrastruttura generici, semplificando la scalabilità e la manutenzione di grandi infrastrutture.

**Archivio di codice**

Il codice per questo modello è disponibile nel repository GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Best practice
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Archivia AWS le credenziali e i dati sensibili utilizzando i segreti del GitHub repository per un accesso sicuro.
+ Configura il provider OpenID Connect (OIDC) for GitHub Actions per assumere il ruolo IAM, evitando credenziali statiche.
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.

## Epiche
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Crea e configura il repository
<a name="create-and-configure-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Inizializza il GitHub repository. | Per inizializzare il GitHub repository, utilizzare i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Configura i ruoli e le autorizzazioni IAM. | Per configurare i ruoli e le autorizzazioni IAM, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Imposta GitHub segreti e variabili. | Per istruzioni su come impostare i segreti e le variabili del repository nel GitHub repository, consulta [Creazione di variabili di configurazione per un repository nella documentazione](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository). GitHub Configura le seguenti variabili:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Crea la struttura del repository. | Per creare la struttura del repository, attenersi alla seguente procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 

### Attiva la pipeline e convalida i risultati
<a name="trigger-the-pipeline-and-validate-results"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui la pipeline usando curl.  | Per eseguire la pipeline utilizzando [curl](https://curl.se/), utilizzate i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Per ulteriori informazioni sul processo di esecuzione della pipeline, vedere Informazioni [aggiuntive](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingegnere | 
| Convalida i risultati dell'esecuzione della pipeline | Per convalidare i risultati, utilizzate i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Puoi anche verificare in modo incrociato le risorse create utilizzando il `output.json` file creato nel repository che si trova all'interno della stessa risorsa del file. `terragrunt.hcl` | DevOps ingegnere | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia una richiesta di pulizia. | Per eliminare le risorse che non sono più necessarie, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 

## Risorse correlate
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blog**
+ [Usa i ruoli IAM per connettere GitHub le azioni alle azioni in AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Servizio AWS documentazione**
+ [creazione di ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Monitoraggio dei file di CloudTrail registro con Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Best practice di sicurezza per Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Crea un evento di invio del repository](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Creazione di webhook](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implementa forti controlli di accesso sul repository GitHub ](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Verifica regolarmente l'accesso al repository](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Controlli di sicurezza in corso CI/CD ](https://github.com/marketplace/actions/checkov-github-action)
+ [Utilizza l'autenticazione a più fattori per gli account GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informazioni aggiuntive
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Processo di esecuzione della pipeline**

Di seguito sono riportati i passaggi dell'esecuzione della pipeline:

1. **Convalida il formato del payload JSON**: assicura che la configurazione JSON in entrata sia strutturata correttamente e contenga tutti i parametri richiesti

1. **Presuppone il ruolo IAM specificato: autentica e assume il ruolo IAM** richiesto per le operazioni AWS 

1. **Scarica il codice Terraform e Terragrunt richiesto: recupera la versione specificata del codice risorsa** e delle dipendenze

1. **Esegue la distribuzione delle risorse**: applica la configurazione per distribuire o aggiornare le risorse nell'ambiente di destinazione AWS 

**Payload di esempio utilizzato per la creazione di VPC**

Di seguito è riportato un esempio di codice per la creazione di bucket di stato del backend Terraform:

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Di seguito è riportato un esempio di payload per la creazione di un VPC con Amazon VPC, `vpc_cidr` in cui definisce le specifiche del [blocco CIDR per il](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Il bucket di stato Terraform è mappato su una variabile definita nei file. `terraform` Il `ref` parametro contiene il nome del ramo del codice da eseguire.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

`RequestParameters`vengono utilizzati per tenere traccia dello stato della richiesta nella sezione pipeline e `tfstate` vengono creati sulla base di queste informazioni. I seguenti parametri contengono metadati e informazioni di controllo:
+ `RequestId`— Identificatore univoco per la richiesta
+ `RequestType`— Tipo di operazione (creazione, aggiornamento o eliminazione)
+ `ResourceType`— Tipo di risorsa da fornire
+ `AccountId`— Obiettivo Account AWS di implementazione
+ `AccountAlias`— Nome descrittivo per Account AWS
+ `RegionId`— Regione AWS per la distribuzione delle risorse
+ `ApplicationName`— Nome dell'applicazione
+ `DivisionName`— Divisione organizzativa
+ `EnvironmentId`— Ambiente (ad esempio, dev e prod)
+ `Suffix`— Identificatore aggiuntivo per le risorse

`ResourceParameters`contengono una configurazione specifica della risorsa che si associa alle variabili definite nei file Terraform. Tutte le variabili personalizzate che devono essere passate ai moduli Terraform devono essere incluse in. `ResourceParameters` Il parametro `vpc_cidr` è obbligatorio per Amazon VPC.

# Crea richieste pull automatizzate per l' AWS infrastruttura gestita da Terraform utilizzando Actions GitHub
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

*Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay e Prafful Gupta, Amazon Web Services*

## Riepilogo
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

Questo modello presenta un'utilità di automazione progettata per eliminare il lavoro manuale e ripetitivo necessario nella gestione delle modifiche su più repository Terraform. Molte organizzazioni utilizzano i repository Terraform per gestire la propria infrastruttura come codice (IaC), spesso con centinaia di repository separati che rappresentano ambienti, servizi o team diversi. La gestione di questi repository su larga scala rappresenta una sfida operativa significativa. Le attività di routine come l'aggiornamento di un parametro, l'aggiornamento delle versioni dei moduli o l'applicazione di modifiche alla configurazione spesso richiedono la creazione e la gestione delle richieste pull (PRs) su molti repository più volte al giorno.

Anche per modifiche semplici, questo processo ripetitivo e manuale richiede molto tempo ed è soggetto a errori. Gli ingegneri devono applicare costantemente la stessa modifica a tutti gli archivi mirati e creare titoli e descrizioni PR significativi. Inoltre, spesso devono interagire con strumenti esterni come Jira per recuperare o includere riferimenti per il monitoraggio dei problemi. Queste attività, sebbene necessarie, sono un sollevamento indifferenziato di carichi pesanti che richiedono tempo prezioso di progettazione e riducono l'efficienza complessiva. La mancanza di automazione in questo flusso di lavoro crea attriti, rallenta l'erogazione e aumenta il carico cognitivo sui team incaricati di mantenere infrastrutture Terraform su larga scala.

**Panoramica della soluzione**

Per affrontare questa sfida, questo modello offre un'utilità interamente basata sulla configurazione, che consente agli utenti di definire le modifiche desiderate in un file di configurazione strutturato. Questo file specifica i repository, i moduli, i parametri e i valori di destinazione utilizzando uno schema chiaramente definito.

Una volta configurata, l'utilità esegue i seguenti passaggi automatici:

1. **Legge la configurazione definita dall'utente** per determinare l'ambito e la natura delle modifiche

1. **Crea un nuovo ramo** in ogni repository di destinazione con gli aggiornamenti richiesti applicati

1. **Genera un PR** per ogni modifica, garantendo la coerenza tra tutti gli archivi

1. **Invia notifiche Slack** (opzionale) per avvisare le parti interessate con link diretti al file creato PRs

Automatizzando queste attività ripetitive, l'utilità riduce in modo significativo il tempo, l'impegno e i rischi associati alla gestione degli aggiornamenti dell'infrastruttura su larga scala. Consente ai team di concentrarsi su attività ingegneristiche di maggior valore, garantendo al contempo che le modifiche vengano applicate in modo coerente e possano essere tracciate in tutti gli archivi.

## Prerequisiti e limitazioni
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Python versione 3.8 o successiva.
+ Un token di accesso GitHub personale (PAT). Per ulteriori informazioni, consulta [Creazione di un token di accesso personale (classico)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) nella GitHub documentazione.
+ Il GitHub PAT può accedere ai repository di destinazione in modo che l'utilità possa eseguire operazioni come la creazione di rami e richieste pull. Per ulteriori informazioni, consultate l'archivio del GitHub [codice](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) di questo pattern.

**Limitazioni**
+ **La complessità della configurazione** rappresenta la sfida principale. L'efficacia dell'automazione è limitata dalle funzionalità del relativo file di configurazione. Sebbene il sistema gestisca le modifiche standard in modo efficiente, le modifiche complesse dell'infrastruttura potrebbero richiedere un intervento manuale e alcuni casi limite non rientrano nell'ambito della gestione automatizzata.
+ **La sicurezza e l'accesso** presentano considerazioni importanti, in particolare nella gestione dei token di GitHub accesso e dei limiti di velocità delle API. Le organizzazioni devono bilanciare attentamente la necessità di automazione con l'archiviazione e la gestione sicure delle credenziali, garantendo controlli di accesso adeguati e mantenendo l'efficienza operativa.
+ I **vincoli di convalida** rappresentano un'altra limitazione importante perché il sistema automatizzato ha una capacità limitata di convalidare la logica aziendale e i requisiti specifici dell'ambiente. Le dipendenze complesse e le interazioni tra servizi spesso richiedono la supervisione umana, poiché la convalida automatizzata non è in grado di cogliere appieno tutte le sfumature contestuali e le regole aziendali.
+ Quando si affrontano **modifiche all'infrastruttura su larga scala emergono problemi di scalabilità e prestazioni**. Il sistema deve funzionare entro i limiti delle GitHub API e gestire contemporaneamente numerosi repository. Le operazioni che richiedono un uso intensivo di risorse su un'infrastruttura estesa possono creare colli di bottiglia prestazionali che richiedono una gestione attenta.
+ **I limiti di integrazione** limitano la flessibilità del sistema perché è progettato principalmente per funzionare con strumenti specifici come e Slack. GitHub Le organizzazioni che utilizzano strumenti diversi potrebbero aver bisogno di soluzioni personalizzate e le opzioni di personalizzazione del flusso di lavoro di questo modello sono limitate ai punti di integrazione supportati.

## Architecture
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

Il diagramma seguente mostra il flusso di lavoro e i componenti di questa soluzione.

![\[Flusso di lavoro per creare richieste pull automatizzate utilizzando GitHub Actions.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


Il flusso di lavoro consiste nei seguenti passaggi:

1. Lo sviluppatore attiva GitHub Actions specificando il repository Terraform.

1. L'utilità di automazione legge le configurazioni definite.

1. L'utilità di automazione richiama anche il repository Terraform fornito.

1. L'utilità di automazione crea un nuovo ramo e aggiorna i modelli Terraform localmente.

1. L'utilità di automazione invia il nuovo ramo al repository e crea un nuovo PR. 

1. L'utilità di automazione utilizza le notifiche Slack che includono link PR per avvisare gli sviluppatori e abilita i modelli Terraform per la distribuzione. Cloud AWS 

## Tools (Strumenti)
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)è una piattaforma per sviluppatori che gli sviluppatori possono utilizzare per creare, archiviare, gestire e condividere il proprio codice.
+ [GitHub Actions](https://docs.github.com/en/actions) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [HashiCorp Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) che ti aiuta a creare e gestire risorse cloud e locali.
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), un'offerta di Salesforce, è una piattaforma conversazionale basata sull'intelligenza artificiale che fornisce collaborazione tramite chat e video, automatizza i processi senza codice e supporta la condivisione delle informazioni.

**Archivio di codice**

Il codice per questo modello è disponibile nell'archivio GitHub [Automated Terraform Infrastructure Update Workflow using GitHub Actions](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file).

## Best practice
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ Una **gestione efficace delle modifiche** è fondamentale per un'implementazione di successo. Le organizzazioni dovrebbero adottare una strategia di implementazione graduale per cambiamenti su larga scala. Mantieni convenzioni di denominazione delle filiali e descrizioni delle pubbliche relazioni coerenti e assicurati una documentazione completa di tutte le modifiche.
+ **I controlli di sicurezza** devono essere implementati in modo rigoroso, concentrandosi sui principi di accesso con privilegi minimi e sulla gestione sicura delle credenziali. Abilita le regole di protezione delle filiali per prevenire modifiche non autorizzate. Effettua controlli di sicurezza regolari per mantenere l'integrità del sistema.
+ Un **protocollo di test** robusto dovrebbe includere `terraform plan` l'esecuzione automatizzata in pipeline di integrazione continua e distribuzione continua (CI/CD). Il protocollo dovrebbe includere anche controlli di convalida prima del commit e ambienti di revisione dedicati per le modifiche critiche. Questo approccio di test a più livelli aiuta a catturare tempestivamente i problemi e garantisce la stabilità dell'infrastruttura.
+ **La strategia di monitoraggio** deve comprendere meccanismi di allarme completi, tracciamento dettagliato delle success/failure metriche e meccanismi di riprova automatizzati in caso di operazioni non riuscite. Questa strategia aiuta a garantire la visibilità operativa e consente una risposta rapida a qualsiasi problema che si presenti.
+ **Gli standard di configurazione** dovrebbero enfatizzare il controllo delle versioni per tutte le configurazioni, mantenendo la modularità per la riusabilità e la scalabilità. Una documentazione chiara dello schema e degli esempi aiuta i team a comprendere e utilizzare il sistema di automazione in modo efficace.

## Epiche
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Installazione e configurazione
<a name="installation-and-setup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il repository. | Per configurare il repository, esegui i seguenti comandi:<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | AWS DevOps | 
| Installare le dipendenze. | Per installare e verificare le dipendenze di Python, esegui i seguenti comandi:<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | AWS DevOps | 
| Configura il GitHub token. | Per configurare il GitHub token e quindi verificarne il funzionamento, esegui i seguenti comandi:<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Imposta il file di configurazione per le modifiche a Terraform
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il `config.yaml` file. | Per definire i repository di destinazione e le modifiche desiderate, modificate il file `config.yam` l come segue:<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Testa e convalida
<a name="test-and-validate"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Effettua i test prima del volo. | Verifica sempre la tua configurazione prima di eseguirla nei repository di produzione. Utilizza il seguente comando:<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | AWS DevOps | 
| Verifica l'accesso al repository. | Per verificare che il GitHub token possa accedere al repository, esegui il seguente comando:<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Esegui l'utilità di automazione
<a name="run-the-automation-utility"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui l'utilità di automazione utilizzando l'interfaccia utente GitHub Actions. | Per eseguire l'utilità di automazione utilizzando l'interfaccia utente GitHub Actions, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 
| (Alternativa) Esegui l'utilità di automazione dalla riga di comando. | Se preferisci, puoi eseguire l'utilità di automazione dalla riga di comando anziché utilizzando l'interfaccia utente GitHub Actions. Utilizza il seguente comando:<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Convalida PRs e modifiche
<a name="validate-prs-and-changes"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rivedi le creazioni PRs e le modifiche. | Per monitorare i risultati dell'esecuzione del GitHub flusso di lavoro, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| (Facoltativo) Pulisci PRs. | Chiusura abbandonata o non necessaria PRs. | AWS DevOps | 

## Risorse correlate
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Guida prescrittiva**
+ [Utilizzo di Terraform come strumento IaC per Cloud AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub documentazione**
+ [Informazioni sulle pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Gestione dei token di accesso personali](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [Comprensione delle GitHub azioni](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Guida rapida alle azioni GitHub ](https://docs.github.com/en/actions/get-started/quickstart)

# Crea automaticamente pipeline CI dinamiche per progetti Java e Python
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically"></a>

*Aromal Raj Jayarajan, Vijesh Vijayakumaran Nair, MAHESH RAGHUNANDANAN e Amarnath Reddy, Amazon Web Services*

## Riepilogo
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-summary"></a>

Questo modello mostra come creare automaticamente pipeline dinamiche di integrazione continua (CI) per progetti Java e Python utilizzando gli strumenti di sviluppo AWS.

Con la diversificazione degli stack tecnologici e l'aumento delle attività di sviluppo, può diventare difficile creare e mantenere pipeline CI coerenti all'interno di un'organizzazione. Automatizzando il processo in AWS Step Functions, puoi assicurarti che le tue pipeline CI siano coerenti nel loro utilizzo e approccio.

Per automatizzare la creazione di pipeline CI dinamiche, questo modello utilizza i seguenti input variabili:
+ Linguaggio di programmazione (solo Java o Python)
+ Nome della pipeline
+ Fasi della pipeline richieste

**Nota**  
Step Functions orchestra la creazione di pipeline utilizzando più servizi AWS. Per ulteriori informazioni sui servizi AWS utilizzati in questa soluzione, consulta la sezione **Strumenti** di questo modello.

## Prerequisiti e limitazioni
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un bucket Amazon S3 nella stessa regione AWS in cui viene distribuita questa soluzione
+ Un [principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) AWS Identity and Access Management (IAM) con CloudFormation le autorizzazioni AWS necessarie per creare le risorse necessarie per questa soluzione

**Limitazioni**
+ Questo modello supporta solo progetti Java e Python.
+ I ruoli IAM forniti in questo modello seguono il principio del privilegio minimo. Le autorizzazioni dei ruoli IAM devono essere aggiornate in base alle risorse specifiche che la pipeline CI deve creare.

## Architecture
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-architecture"></a>

**Stack tecnologico Target**
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Systems Manager
+ AWS Step Functions
+ AWS Lambda
+ Amazon DynamoDB

**Architettura Target**

Il diagramma seguente mostra un esempio di flusso di lavoro per la creazione automatica di pipeline CI dinamiche per progetti Java e Python utilizzando gli strumenti di sviluppo AWS.

![\[Flusso di lavoro per creare automaticamente pipeline CI dinamiche per progetti Java e Python utilizzando gli strumenti AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/bef2ccb8-68b3-4c0f-9ee7-4b93e9422d9c/images/b5ed003f-cf16-4130-8bfb-2bc2cb9a0d33.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un utente AWS fornisce i parametri di input per la creazione di pipeline CI in formato JSON. Questo input avvia un flusso di lavoro Step Functions (*macchina a stati*) che crea una pipeline CI utilizzando gli strumenti di sviluppo AWS.

1. **Una funzione Lambda legge una cartella denominata **input-reference**, archiviata in un bucket Amazon S3, e quindi genera un file buildspec.yml.** Questo file generato definisce le fasi della pipeline CI e viene archiviato nello stesso bucket Amazon S3 che memorizza i riferimenti ai parametri.

1. Step Functions controlla le dipendenze del flusso di lavoro di creazione della pipeline CI per eventuali modifiche e aggiorna lo stack di dipendenze secondo necessità.

1. Step Functions crea le risorse della pipeline CI in uno CloudFormation stack, tra cui un CodeCommit repository, un CodeBuild progetto e una pipeline. CodePipeline 

1. Lo CloudFormation stack copia il codice sorgente di esempio per lo stack tecnologico selezionato (Java o Python) e il file **buildspec.yml nel repository**. CodeCommit 

1. I dettagli del runtime della pipeline CI sono archiviati in una tabella DynamoDB.

**Automazione e scalabilità**
+ Questo modello è destinato all'uso in un solo ambiente di sviluppo. Le modifiche alla configurazione sono necessarie per l'uso in più ambienti di sviluppo.
+ Per aggiungere il supporto per più di uno CloudFormation stack, puoi creare CloudFormation modelli aggiuntivi. Per ulteriori informazioni, consulta [Getting started with AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html) nella CloudFormation documentazione.

## Tools (Strumenti)
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-tools"></a>

**Strumenti**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) è un servizio di orchestrazione serverless che ti aiuta a combinare le funzioni di AWS Lambda e altri servizi AWS per creare applicazioni aziendali critiche.
+ [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 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ti CodePipeline aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [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.
+ [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 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 Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fornisce uno storage sicuro e gerarchico per la gestione dei dati di configurazione e la gestione dei segreti.

**Codice**

Il codice per questo pattern è disponibile nel repository. GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation) Il repository contiene i CloudFormation modelli necessari per creare l'architettura di destinazione delineata in questo modello.

## Best practice
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-best-practices"></a>
+ Non inserire credenziali (*segrete*) come token o password direttamente nei CloudFormation modelli o nelle configurazioni di azione Step Functions. In tal caso, le informazioni verranno visualizzate nei log di DynamoDB. Utilizza invece AWS Secrets Manager per configurare e archiviare segreti. Quindi, fai riferimento ai segreti archiviati in Secrets Manager all'interno dei CloudFormation modelli e delle configurazioni di azione di Step Functions, se necessario. Per ulteriori informazioni, consulta [Cos'è AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) nella documentazione di Secrets Manager.
+ Configura la crittografia lato server per gli CodePipeline artefatti archiviati in Amazon S3. Per ulteriori informazioni, consulta [Configurare la crittografia lato server per gli artefatti archiviati in Amazon S3 nella documentazione](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html). CodePipeline CodePipeline 
+ Applica le autorizzazioni con privilegi minimi durante la configurazione dei ruoli IAM. Per ulteriori informazioni, consulta [Applicazione delle autorizzazioni del privilegio minimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) nella documentazione di IAM.
+ Assicurati che il tuo bucket Amazon S3 non sia accessibile al pubblico. Per ulteriori informazioni, consulta [Configurazione dell'impostazione di accesso pubblico a blocchi per i bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) nella documentazione di Amazon S3.
+ Assicurati di attivare il controllo delle versioni per il tuo bucket Amazon S3. Per ulteriori informazioni, consulta [Usare il controllo delle versioni nei bucket S3 nella documentazione](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) di Amazon S3.
+ Usa IAM Access Analyzer per configurare le policy IAM. Lo strumento fornisce consigli pratici per aiutarti a creare policy IAM sicure e funzionali. Per ulteriori informazioni, consulta [Using AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) nella documentazione IAM.
+ Quando possibile, definisci condizioni di accesso specifiche durante la configurazione delle policy IAM.
+ Attiva la CloudWatch registrazione di Amazon per scopi di monitoraggio e controllo. Per ulteriori informazioni, consulta [What is Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)? nella CloudWatch documentazione.

## Epiche
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-epics"></a>

### Configura i prerequisiti
<a name="configure-the-prerequisites"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare un bucket Amazon S3. | Crea un bucket Amazon S3 (o usa un bucket esistente) per archiviare i CloudFormation modelli, il codice sorgente e i file di input richiesti per la soluzione.Per ulteriori informazioni, consulta [Fase 1: Crea il tuo primo bucket S3 nella documentazione](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) di Amazon S3.Il bucket Amazon S3 deve trovarsi nella stessa regione AWS in cui stai distribuendo la soluzione. | AWS DevOps | 
| Clona il GitHub repository. | Clona il GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repository eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git</pre>Per ulteriori informazioni, consulta [Clonazione di un repository nella documentazione.](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) GitHub  | AWS DevOps | 
| Carica la cartella Solution Templates dal GitHub repository clonato nel tuo bucket Amazon S3.  | Copia i contenuti dalla cartella **Solution-Templates** clonata e caricali nel bucket Amazon S3 che hai creato.Per ulteriori informazioni, consulta [Caricamento di oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) nella documentazione di Amazon S3.Assicurati di caricare solo il contenuto della cartella **Solution-Templates**. Puoi caricare i file solo a livello root del bucket Amazon S3. | AWS DevOps | 

### Implementazione della soluzione
<a name="deploy-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea uno CloudFormation stack per distribuire la soluzione utilizzando il file template.yml nel repository clonato. GitHub  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Durante la creazione, lo stack viene elencato nella pagina **Stacks** con lo stato CREATE\$1IN\$1PROGRESS.** Assicurati di attendere che lo stato dello stack passi a **CREATE\$1COMPLETE prima di completare i passaggi rimanenti di questo schema**. | Amministratore AWS, AWS DevOps | 

### Eseguire il test della configurazione
<a name="test-the-setup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui la funzione step che hai creato.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Formattazione JSON**<pre>{<br />  "details": {<br />    "tech_stack": "Name of the Tech Stack (python/java)",<br />    "project_name": "Name of the Project that you want to create with",<br />    "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />  }<br />}</pre>**Esempio di input Java JSON**<pre>{<br />  "details": {<br />    "tech_stack": "java",<br />    "project_name": "pipeline-java-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre>**Esempio di input JSON in Python**<pre>{<br />  "details": {<br />    "tech_stack": "python",<br />    "project_name": "pipeline-python-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre> | Amministratore AWS, AWS DevOps | 
| Conferma che il CodeCommit repository per la pipeline CI è stato creato. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Controlla le risorse CodeBuild del progetto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Convalida le CodePipeline fasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Verifica che la pipeline CI sia stata eseguita correttamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 

### Pulizia delle risorse
<a name="clean-up-your-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina la pila di risorse inclusa. CloudFormation | Elimina lo stack di risorse della pipeline CI. CloudFormationPer ulteriori informazioni, consulta [Eliminazione di uno stack sulla CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) nella CloudFormation documentazione.**Assicurati di eliminare lo stack denominato -stack.** <project\$1name> | AWS DevOps | 
| Elimina le dipendenze della pipeline CI in Amazon S3 e. CloudFormation | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Assicurati di eliminare lo stack denominato. **pipeline-creation-dependencies-stack** | AWS DevOps | 
| Elimina il bucket di modelli Amazon S3. | Elimina il bucket Amazon s3 che hai creato nella sezione **Configura i prerequisiti** di questo modello, che memorizza i modelli per questa soluzione.Per ulteriori informazioni, consulta [Eliminazione di un bucket nella documentazione](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) di Amazon S3. | AWS DevOps | 

## Risorse correlate
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-resources"></a>
+ [Creazione di una macchina a stati Step Functions che utilizza Lambda (documentazione](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) AWS Step Functions)
+ [AWS Step Functions WorkFlow Studio](https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html) (documentazione di AWS Step Functions)
+ [DevOps e AWS](https://aws.amazon.com/devops/)
+ [Come CloudFormation funziona AWS?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html) ( CloudFormation documentazione AWS)
+ [Completo CI/CD di AWS CodeCommit, AWS CodeBuild CodeDeploy, AWS e AWS CodePipeline](https://aws.amazon.com/blogs/devops/complete-ci-cd-with-aws-codecommit-aws-codebuild-aws-codedeploy-and-aws-codepipeline/) (post sul blog AWS)
+ [Quote, requisiti di nome e limiti di caratteri IAM e AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) (documentazione IAM)

# Implementa i canarini CloudWatch Synthetics utilizzando Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjee e Jean-François Landreau, Amazon Web Services*

## Riepilogo
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

È importante convalidare lo stato di un sistema dal punto di vista del cliente e confermare che i clienti siano in grado di connettersi. Ciò è più difficile quando i clienti non chiamano costantemente l'endpoint. [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) supporta la creazione di canaries, in grado di testare endpoint pubblici e privati. Utilizzando canaries, puoi conoscere lo stato di un sistema anche se non è in uso. Questi canarini sono script Node.js Puppeteer o script Python Selenium.

Questo modello descrive come utilizzare HashiCorp Terraform per distribuire canary che testano endpoint privati. Incorpora uno script Puppeteer che verifica se viene restituito un URL. `200-OK` Lo script Terraform può quindi essere integrato con lo script che distribuisce l'endpoint privato. Puoi anche modificare la soluzione per monitorare gli endpoint pubblici.

## Prerequisiti e limitazioni
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo con un cloud privato virtuale (VPC) e sottoreti private
+ L'URL dell'endpoint raggiungibile dalle sottoreti private
+ Terraform installato nell'ambiente di distribuzione

**Limitazioni**

La soluzione attuale funziona per le seguenti versioni di runtime di CloudWatch Synthetics:
+ syn-nodejs-puppeteer-3.4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

Man mano che vengono rilasciate nuove versioni di runtime, potrebbe essere necessario aggiornare la soluzione corrente. Sarà inoltre necessario modificare la soluzione per stare al passo con gli aggiornamenti di sicurezza.

**Versioni del prodotto**
+ Terraform 1.3.0

## Architecture
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

Amazon CloudWatch Synthetics è basato su CloudWatch, Lambda e Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch offre una procedura guidata per creare i canarini e una dashboard che mostra lo stato delle corse dei canarini. La funzione Lambda esegue lo script. Amazon S3 archivia i log e gli screenshot delle corse Canary.

Questo modello simula un endpoint privato tramite un'istanza Amazon Elastic Compute Cloud (Amazon EC2) distribuita nelle sottoreti mirate. La funzione Lambda richiede interfacce di rete elastiche nel VPC in cui viene distribuito l'endpoint privato.

![\[La descrizione segue il diagramma.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


Il diagramma mostra:

1. Il canarino Synthetics avvia la funzione Lambda canary.

1. La funzione Lambda canary si connette all'interfaccia elastic network.

1. La funzione Lambda canary monitora lo stato dell'endpoint.

1. Il Synthetics Canary invia i dati di esecuzione al bucket e alle metriche S3. CloudWatch 

1. Viene avviato un CloudWatch allarme in base alle metriche.

1. L' CloudWatch allarme avvia l'argomento Amazon Simple Notification Service (Amazon SNS).

## Tools (Strumenti)
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Servizi AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ti CloudWatch aiuta a monitorare i parametri delle tue risorse AWS e delle applicazioni che esegui su AWS in tempo reale.
+ [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.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS. Questo modello utilizza endpoint VPC e interfacce di rete elastiche.

**Altri servizi**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento open source di infrastruttura come codice (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. Questo modello utilizza Terraform per implementare l'infrastruttura.
+ [Puppeteer è una libreria](https://pptr.dev/) Node.js. Il runtime CloudWatch Synthetics utilizza il framework Puppeteer.

**Codice**

[La soluzione è disponibile nel repository cloud. GitHub watch-synthetics-canary-terraform](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform) Per ulteriori informazioni, consulta la sezione *Informazioni aggiuntive*.

## Epiche
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Implementa la soluzione per il monitoraggio di un URL privato
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Raccogli i requisiti per il monitoraggio dell'URL privato. | Raccogli la definizione completa dell'URL: dominio, parametri e intestazioni. Per comunicare in privato con Amazon S3 e CloudWatch Amazon, utilizza gli endpoint VPC. Nota come il VPC e le sottoreti sono accessibili all'endpoint. Considerate la frequenza delle corse dei canarini. | Architetto del cloud, amministratore di rete | 
| Modifica la soluzione esistente per monitorare l'URL privato. | Modifica il `terraform.tfvars` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Architetto del cloud | 
| Implementa e gestisci la soluzione. | Per distribuire la soluzione, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Architetto del cloud, DevOps ingegnere | 

## risoluzione dei problemi
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| L'eliminazione delle risorse assegnate si blocca. | Elimina manualmente la funzione Canary Lambda, l'elastic network interface corrispondente e il gruppo di sicurezza, in quest'ordine. | 

## Risorse correlate
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Utilizzo del monitoraggio sintetico](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Monitora gli endpoint API Gateway con Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (post sul blog)

## Informazioni aggiuntive
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefatti del repository**

Gli artefatti del repository hanno la seguente struttura.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

Il `main.tf` file contiene il modulo principale e distribuisce due sottomoduli:
+ `canary-infra`implementa l'infrastruttura necessaria per le isole canarie.
+ `canary`dispiega i canarini.

I parametri di input per la soluzione si trovano nel `terraform.tfvars` file. È possibile utilizzare il seguente esempio di codice per creare un canarino.

```
module "canary" {
    source = "./modules/canary"
    name   = var.name
    runtime_version = var.runtime_version
    take_screenshot = var.take_screenshot
    api_hostname = var.api_hostname
    api_path = var.api_path
    reports-bucket = module.canary_infra.reports-bucket
    role = module.canary_infra.role
    security_group_id = module.canary_infra.security_group_id
    subnet_ids = var.subnet_ids
    frequency = var.frequency
    alert_sns_topic = var.alert_sns_topic
}
```

Segue il file.var corrispondente.

```
name   = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
```

**Pulizia della soluzione**

Se si esegue il test in un ambiente di sviluppo, è possibile ripulire la soluzione per evitare costi aggiuntivi.

1. Nella Console di gestione AWS, accedi alla console Amazon S3. Svuota il bucket Amazon S3 creato dalla soluzione. Assicurati di eseguire un backup dei dati, se necessario.

1. Nell'ambiente di sviluppo, dalla `cloudwatch-synthetics-canary-terraform` directory, esegui il `destroy` comando.

   ```
   terraform destroy
   ```

# Implementa una ChatOps soluzione per gestire i risultati della scansione SAST utilizzando Amazon Q Developer nelle applicazioni di chat, azioni personalizzate e CloudFormation
<a name="deploy-chatops-solution-to-manage-sast-scan-results"></a>

*Anand Bukkapatnam Tirumala, Amazon Web Services*

## Riepilogo
<a name="deploy-chatops-solution-to-manage-sast-scan-results-summary"></a>

Questo modello presenta una soluzione completa che utilizza Amazon Q Developer nelle applicazioni di chat per semplificare la gestione degli errori di scansione statici dei test di sicurezza delle applicazioni (SAST) segnalati. SonarQube Questo approccio innovativo integra azioni e notifiche personalizzate in un'interfaccia conversazionale, abilitando processi decisionali e di collaborazione efficienti all'interno dei team di sviluppo.

Nell'odierno ambiente di sviluppo software frenetico, la gestione efficiente dei risultati di scansione SAST è fondamentale per mantenere la qualità e la sicurezza del codice. Tuttavia, molte organizzazioni devono affrontare le seguenti sfide significative:
+ Ritardo nella consapevolezza delle vulnerabilità critiche a causa dell'inefficienza dei sistemi di notifica
+ Processi decisionali lenti causati da flussi di lavoro di approvazione scollegati
+ Mancanza di risposte immediate e attuabili agli errori di scansione SAST
+ Comunicazione e collaborazione frammentate in merito ai problemi di sicurezza
+ Configurazione manuale dell'infrastruttura per gli strumenti di sicurezza, dispendiosa in termini di tempo e soggetta a errori

Questi problemi spesso comportano un aumento dei rischi per la sicurezza, ritardi nei rilasci e una riduzione della produttività del team. Per affrontare efficacemente queste sfide è necessaria una soluzione in grado di semplificare la gestione dei risultati SAST, migliorare la collaborazione tra i team e automatizzare il provisioning dell'infrastruttura.

Le caratteristiche principali della soluzione includono:
+ **Notifiche personalizzate**: gli avvisi e le notifiche in tempo reale vengono inviati direttamente ai canali di chat del team, garantendo una pronta consapevolezza e azioni in caso di vulnerabilità o errori della scansione SAST.
+ **Approvazioni conversazionali**: le parti interessate possono avviare e completare i flussi di lavoro di approvazione dei risultati della scansione SAST senza problemi all'interno dell'interfaccia di chat, accelerando i processi decisionali.
+ **Azioni personalizzate: i team possono definire ed eseguire azioni** personalizzate in base ai risultati della scansione SAST, come l'attivazione automatica di messaggi e-mail in caso di guasti ai gate di qualità, il miglioramento della reattività ai problemi di sicurezza.
+ **Collaborazione centralizzata**: tutte le discussioni, le decisioni e le azioni relative alla scansione SAST vengono conservate all'interno di un ambiente di chat unificato, che favorisce una migliore collaborazione e condivisione delle conoscenze tra i membri del team.
+ **Infrastructure as code (IaC)**: l'intera soluzione è dotata di AWS CloudFormation modelli che consentono un provisioning dell'infrastruttura più rapido e affidabile riducendo al contempo gli errori di configurazione manuale.

## Prerequisiti e limitazioni
<a name="deploy-chatops-solution-to-manage-sast-scan-results-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Un ruolo AWS Identity and Access Management (IAM) con autorizzazioni per creare e gestire risorse associate a Servizi AWS quelle elencate in [Strumenti](#deploy-chatops-solution-to-manage-sast-scan-results-tools).
+ Uno spazio di lavoro Slack.
+ Amazon Q Developer in applicazioni di chat aggiunte all'area di lavoro Slack richiesta come plug-in. Per ulteriori informazioni, consulta [Aggiungere app al tuo spazio di lavoro Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) nella documentazione di Slack. Tieni nota dell'ID dell'area di lavoro Slack come mostrato dopo la registrazione avvenuta con successo. Console di gestione AWS 
+ Un client di applicazioni Amazon Q Developer in chat configurato, con l'ID dello spazio di lavoro immediatamente disponibile per l'immissione nella CloudFormation console. Per istruzioni, consulta [Configurare un client Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup) nella *Guida per amministratori delle applicazioni Amazon Q Developer in chat*.
+ Un account e-mail di origine creato e verificato in Amazon Simple Email Service (Amazon SES) per inviare messaggi e-mail di approvazione. Per istruzioni di configurazione, consulta [Creazione e verifica delle identità e-mail](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) nella *Amazon Simple Email Service Developer Guide*.
+ Un indirizzo e-mail di destinazione per ricevere le notifiche di approvazione. Questo indirizzo può essere una casella di posta condivisa o una lista di distribuzione specifica del team.
+ Un' SonarQube istanza operativa accessibile dal tuo Account AWS. Per ulteriori informazioni, consulta le [istruzioni SonarQube di installazione](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/).
+ Un [token SonarQube utente](https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) con le autorizzazioni per attivare e creare progetti attraverso la pipeline.

**Limitazioni**
+ La creazione di pulsanti di azione personalizzati è un processo manuale in questa soluzione. 
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="deploy-chatops-solution-to-manage-sast-scan-results-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Flusso di lavoro per implementare il controllo automatico della qualità del codice per la gestione delle release utilizzando Amazon Q Developer.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/a977924c-957e-4f91-99d6-ed790e343ea6.png)


Il diagramma mostra il flusso di lavoro automatizzato per il controllo automatico della qualità del codice:

1. Preparazione e caricamento del codice:
   + Lo sviluppatore comprime la codebase in un file.zip.
   + Lo sviluppatore carica manualmente il file.zip in un bucket Amazon Simple Storage Service (Amazon S3) designato.

1. Attivazione e orchestrazione di eventi Amazon S3: AWS Step Functions 
   + L'evento di caricamento di Amazon S3 attiva un flusso di lavoro Step Functions.
   + Step Functions orchestra una scansione SAST utilizzando. SonarQube
   + Il flusso di lavoro monitora lo stato del AWS CodeBuild lavoro per determinare le azioni successive. In caso di CodeBuild esito positivo (quality gate pass), il flusso di lavoro viene interrotto. In caso di CodeBuild errore, viene richiamata una AWS Lambda funzione per la diagnostica. Per ulteriori dettagli, vedere la **AWS Step Functions logica** più avanti in questa sezione.

1. AWS CodeBuild esecuzione:
   + Il CodeBuild job esegue una SonarQube scansione sulla codebase caricata.
   + Gli artefatti di scansione vengono archiviati in un bucket Amazon S3 separato per il controllo e l'analisi.

1. Analisi dei guasti (funzione Lambda):
   + In CodeBuild caso di errore, viene attivata la funzione `CheckBuildStatus` Lambda.
   + In caso di CodeBuild successo, il processo viene interrotto e non sono necessarie ulteriori azioni.

1. La funzione Lambda analizza la causa del guasto (guasto del Quality Gate o altri problemi)
   + La `CheckBuildStatus` funzione crea un payload personalizzato con informazioni dettagliate sugli errori.
   + La `CheckBuildStatus` funzione pubblica il payload personalizzato su un argomento di Amazon Simple Notification Service (Amazon SNS).

1. Sistema di notifica:
   + Amazon SNS inoltra il payload ad Amazon Q Developer nelle applicazioni di chat per l'integrazione con Slack.

1. Integrazione con Slack:
   + Amazon Q Developer nelle applicazioni di chat pubblica una notifica nel canale Slack designato.

1. Procedura di approvazione:
   + Gli approvatori esaminano i dettagli dell'errore nella notifica di Slack.
   + **Gli approvatori possono avviare l'approvazione utilizzando il pulsante Approva in Slack.**

1. Gestore dell'approvazione:
   + Una funzione Approval Lambda elabora l'azione di approvazione di Slack.
   + La funzione Approval pubblica il messaggio personalizzato su Amazon SES.

1. Messaggio generato:
   + La funzione di approvazione genera un messaggio personalizzato per la notifica agli sviluppatori.

1. Notifica per gli sviluppatori:
   + Amazon SES invia un messaggio e-mail allo sviluppatore con i passaggi successivi o le azioni richieste.

Questo flusso di lavoro combina il caricamento manuale del codice con controlli di qualità automatici, fornisce un feedback immediato tramite Slack e consente l'intervento umano quando necessario, garantendo un processo di revisione del codice solido e flessibile.

**AWS Step Functions logica**

Come mostrato nel diagramma di architettura precedente, se il quality gate pass on SonarQube fallisce, il flusso di lavoro passa alla funzione `CheckBuildStatus` Lambda. La `CheckBuildStatus` funzione attiva una notifica sul canale Slack. Ogni notifica include informazioni con i passaggi successivi suggeriti. Di seguito sono riportati i tipi di notifiche:
+ **L'applicazione non è riuscita nella scansione di sicurezza del codice**: l'utente riceve questa notifica quando il codice caricato non ha superato la scansione SonarQube di sicurezza. L'utente può scegliere **APPROVE** per accettare la build. Tuttavia, la notifica consiglia all'utente di fare attenzione ai potenziali rischi di scarsa qualità del codice e alla sicurezza. La notifica include i seguenti dettagli:
  + Passaggi successivi: Errore: Quality gate status: FAILED — Visualizza i dettagli all'URL fornito.
  + Valuta le vulnerabilità come indicato nel documento all'URL fornito.
  + CodeBuild i dettagli sono disponibili nella posizione all'URL fornito.
+ La **pipeline di scansione dell'applicazione non è riuscita per qualche altro motivo**: l'utente riceve questa notifica quando la pipeline non riesce per qualche motivo diverso dal fallimento della scansione di sicurezza del codice. La notifica include i seguenti dettagli:
  + Per i passaggi successivi, vai al link fornito per ulteriori informazioni sulla risoluzione dei problemi.

Per vedere gli screenshot delle notifiche così come appaiono in un canale Slack, vai alla [cartella assets](https://github.com/aws-samples/chatops-slack/tree/main/assets) nell'archivio GitHub chatops-slack.

Il diagramma seguente mostra un esempio dello stato della fase di Step Functions dopo il fallimento del Quality Gate Pass.

![\[Lo stato della fase del flusso di lavoro di AWS Step Functions dopo un errore del gate pass di qualità.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/40b7ebf0-2518-4413-9717-0bfb7559adde.png)


## Tools (Strumenti)
<a name="deploy-chatops-solution-to-manage-sast-scan-results-tools"></a>

**Servizi AWS**
+ [Le applicazioni di chat di Amazon Q Developer](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) ti consentono di utilizzare i canali di chat Amazon Chime, Microsoft Teams e Slack per monitorare e rispondere agli eventi operativi nelle tue applicazioni. AWS *Avviso di fine del supporto:* il 20 febbraio 2026, AWS terminerà il supporto per il servizio Amazon Chime. Dopo il 20 febbraio 2026, non potrai più accedere alla console Amazon Chime o alle risorse dell'applicazione Amazon Chime. [Per ulteriori informazioni, consulta il post del blog.](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/) Ciò non influisce sulla disponibilità del servizio [Amazon Chime SDK](https://aws.amazon.com/chime/chime-sdk/).
+ [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 tra e. Account AWS Regioni AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per l'implementazione.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ Con [Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) puoi sostituire le credenziali nel codice,incluse le password, con una chiamata API a Secrets Manager in modo da recuperare il segreto a livello di codice.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) Simple Email Service (Amazon SES) ti aiuta a inviare e ricevere messaggi e-mail utilizzando i tuoi indirizzi e-mail e domini.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.
+ [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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione senza server che ti aiuta a combinare AWS Lambda funzioni e altro per creare applicazioni aziendali critiche. Servizi AWS 

**Altri strumenti**
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), un'offerta di Salesforce, è una piattaforma conversazionale basata sull'intelligenza artificiale che offre collaborazione tramite chat e video, automatizza i processi senza codice e supporta la condivisione delle informazioni.
+ [SonarQube](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/)è uno strumento di analisi locale progettato per rilevare problemi di codifica in oltre 30 lingue, framework e piattaforme IaC.

**Archivio di codice**

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

## Best practice
<a name="deploy-chatops-solution-to-manage-sast-scan-results-best-practices"></a>
+ **CloudFormation gestione dello stack**: se riscontri errori durante l'esecuzione CloudFormation dello stack, ti consigliamo di eliminare lo stack fallito. Quindi, ricrealo con i valori dei parametri corretti. Questo approccio supporta una distribuzione pulita e aiuta a evitare potenziali conflitti o implementazioni parziali.
+ **Configurazione condivisa della posta** in arrivo: quando configuri il `SharedInboxEmail` parametro, utilizza una lista di distribuzione comune accessibile a tutti gli sviluppatori interessati. Questo approccio promuove la trasparenza e aiuta le notifiche importanti a raggiungere i membri del team interessati.
+ **Flusso di lavoro di approvazione** della produzione: per gli ambienti di produzione, limita l'accesso al canale Slack utilizzato per le approvazioni delle build. Solo gli approvatori designati devono essere membri di questo canale. Questa pratica mantiene una chiara catena di responsabilità e migliora la sicurezza limitando chi può approvare modifiche critiche.
+ **Autorizzazioni IAM**: segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) nella documentazione IAM.

## Epiche
<a name="deploy-chatops-solution-to-manage-sast-scan-results-epics"></a>

### Esegui la configurazione iniziale
<a name="perform-initial-setup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository [chatops-slack](https://github.com/aws-samples/chatops-slack) per questo pattern, usa il seguente comando.`git clone "git@github.com:aws-samples/chatops-slack.git"` | AWS DevOps, responsabile di sviluppo, DevOps ingegnere, amministratore cloud | 
| Crea i file.zip che contengono il codice Lambda. | Crea i file.zip per il codice della AWS Lambda funzione and. `CheckBuildStatus` `ApprovalEmail` Per creare `notification.zip` e`approval.zip`, utilizzate i seguenti comandi.<pre>cd chatops-slack/src</pre><pre>chmod -R 775 *</pre><pre>zip -r approval.zip approval</pre><pre>zip -r notification.zip notification</pre> | AWS DevOps, responsabile di sviluppo, DevOps ingegnere, amministratore cloud | 

### Distribuisci il file stack pre-requisite.yml
<a name="deploy-the-pre-requisite-yml-stack-file"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il file `pre-requisite.yml` stack. | Il file `pre-requisite.yml` CloudFormation stack distribuisce le risorse iniziali necessarie prima di eseguire il `app-security.yml` file stack. Per eseguire il `pre-requisite.yml` file, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Amministratore AWS, AWS DevOps, responsabile di Build, DevOps ingegnere | 
| Carica i file.zip nel bucket Amazon S3. | Carica i `approval.zip` file `notification.zip` and che hai creato in precedenza nel bucket Amazon S3 denominato. `S3LambdaBucket` Il file `app-security.yml` CloudFormation stack viene utilizzato `S3LambdaBucket` per fornire la funzione Lambda. | AWS DevOps, responsabile di sviluppo, DevOps ingegnere, amministratore di sistema AWS | 

### Esegui il file stack app-security.yml
<a name="execute-the-app-security-yml-stack-file"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il file `app-security.yml` stack. | I file `app-security.yml` stack implementano l'infrastruttura rimanente per il sistema di notifica e approvazione. Per eseguire il `app-security.yml` file, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | AWS DevOps, amministratore di sistema AWS, DevOps ingegnere, responsabile Build | 
| Verifica la configurazione delle notifiche. | Per testare la configurazione delle notifiche, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html)Dopo che il messaggio di prova è stato recapitato correttamente, dovresti vedere una notifica sul canale Slack. Per ulteriori informazioni, consulta [Notifiche di test da Servizi AWS a Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#test-notifications-slack) nella *Guida per amministratori delle applicazioni Amazon Q Developer in chat*. | AWS DevOps, amministratore di sistema AWS, DevOps ingegnere, responsabile Build | 

### Imposta il flusso di approvazione
<a name="set-up-approval-flow"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un'azione Lambda personalizzata. | Per configurare l' AWS Lambda azione personalizzata, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Amministratore AWS, AWS DevOps, responsabile di Build, DevOps ingegnere, amministratore Slack | 
| Convalida il flusso di approvazione. | Per verificare che il flusso di approvazione funzioni come previsto, scegli il pulsante **Approva in Slack**.**Slackbot dovrebbe inviare una notifica sul thread dei messaggi con la stringa di conferma Email di approvazione inviata con successo.** | Amministratore AWS, AWS DevOps, DevOps ingegnere, amministratore Slack | 

## risoluzione dei problemi
<a name="deploy-chatops-solution-to-manage-sast-scan-results-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Configurazioni errate di Slack | Per informazioni sulla risoluzione dei problemi relativi alle configurazioni errate di Slack, consulta Troubleshooting Amazon Q Developer nella Guida per l'amministratore delle *applicazioni Amazon Q Developer in chat*. | 
| La scansione non è riuscita per qualche altro motivo | Questo errore indica che l'attività di compilazione del codice non è riuscita. Per risolvere il problema, vai al link contenuto nel messaggio. L'errore dell'attività di compilazione del codice potrebbe avere le seguenti possibili cause:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | 

## Risorse correlate
<a name="deploy-chatops-solution-to-manage-sast-scan-results-resources"></a>

**AWS documentazione**
+ [Configurare un client Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup)
+ [Creazione di un'azione personalizzata](https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-actions.html#creating-custom-actions)
+ [Creazione di una [procedura](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) per l'identità di un indirizzo e-mail](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure)
+ [Tutorial: Inizia a usare Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html)

**Altre risorse**
+ [Aggiungi app al tuo spazio di lavoro Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) (documentazione Slack)
+ [Generazione e utilizzo di token](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/) (documentazione) SonarQube 
+ [Introduzione all'installazione del server](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/) (SonarQube documentazione)

## Informazioni aggiuntive
<a name="deploy-chatops-solution-to-manage-sast-scan-results-additional"></a>

Questa soluzione enfatizza le azioni personalizzate di Amazon Q Developer nelle applicazioni di chat per scopi di gestione dei rilasci. Tuttavia, puoi riutilizzare la soluzione modificando il codice Lambda per il tuo caso d'uso specifico e basandoti su di esso.

**Parametri dei file stack CloudFormation **

La tabella seguente mostra i parametri e le relative descrizioni per il file CloudFormation stack. `pre-requisite.yml`


| 
| 
| **Chiave** | **Descrizione** | 
| --- |--- |
| `StackName` | Il nome dello CloudFormation stack. | 
| `S3LambdaBucket` | Il nome del bucket Amazon S3 in cui carichi il codice Lambda. Il nome deve essere univoco a livello globale. | 
| `SonarToken` | [Il token SonarQube utente come descritto in Prerequisiti.](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs) | 

La tabella seguente mostra i parametri e le relative descrizioni per il file CloudFormation stack. `app-security.yml`


| 
| 
| **Chiave** | **Descrizione** | 
| --- |--- |
| `CKMSKeyArn` | L' AWS KMS key Amazon Resource Name (ARN) utilizzato nei ruoli IAM e nelle funzioni Lambda create in questo stack. | 
| `CKMSKeyId` | L' AWS KMS key ID utilizzato nell'argomento Amazon SNS creato in questo stack. | 
| `EnvironmentType` | Il nome dell'ambiente client per la distribuzione della pipeline di scansione delle applicazioni. Seleziona il nome dell'ambiente dall'elenco a discesa dei valori consentiti. | 
| `S3LambdaBucket` | Il nome del bucket Amazon S3 che contiene i `approval.zip` file and. `notification.zip` | 
| `SESEmail` | Il nome dell'identità e-mail registrata in Amazon SES come descritto in [Prerequisiti](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). Questa identità è l'indirizzo e-mail di origine. | 
| `SharedInboxMail` | L'indirizzo e-mail di destinazione a cui vengono inviate le notifiche di scansione. | 
| `SlackChannelId` | L'ID del canale Slack a cui desideri inviare le notifiche. Per trovare l'ID del canale, fai clic con il pulsante destro del mouse sul nome del **canale in Dettagli** del canale nell'app Slack. L'ID del canale si trova in basso. | 
| `SlackWorkspaceId` | [L'ID dell'area di lavoro di Slack come descritto in Prerequisiti.](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs) **Per trovare l'ID dello spazio di lavoro Slack, accedi a Console di gestione AWS, apri la console delle applicazioni di chat Amazon Q Developer e scegli **Clienti configurati**, **Slack**, WorkspaceID.** | 
| `StackName` | Il nome dello stack. CloudFormation  | 
| `SonarFileDirectory` | La directory che contiene il `sonar.project.<env>.properties` file. | 
| `SonarFileName` | Il nome del `sonar.project.<env>properties` file. | 
| `SourceCodeZip` | Il nome del file.zip che contiene il `sonar.project.<env>properties` file e il codice sorgente. | 

# Implementa sistemi agentici su Amazon Bedrock con il framework CrewAI utilizzando Terraform
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework"></a>

*Vanitha Dontireddy, Amazon Web Services*

## Riepilogo
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-summary"></a>

[https://aws.amazon.com/bedrock/?nc1=h_ls](https://aws.amazon.com/bedrock/?nc1=h_ls) La soluzione consente alle organizzazioni di creare, implementare e gestire sofisticati flussi di lavoro di agenti AI tramite l'infrastruttura come codice (IaC). In questo modello, le funzionalità di orchestrazione multiagente di CrewAI si combinano con i modelli di base di Amazon Bedrock e l'automazione dell'infrastruttura Terraform. Di conseguenza, i team possono creare sistemi di intelligenza artificiale pronti per la produzione che affrontano attività complesse con una supervisione umana minima. Il modello implementa sicurezza, scalabilità e best practice operative di livello aziendale. 

## Prerequisiti e limitazioni
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-prereqs"></a>

**Prerequisiti**
+ Un dispositivo attivo Account AWS con le autorizzazioni appropriate per [accedere ai modelli Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [È installata la versione 1.5 o successiva di Terraform](https://developer.hashicorp.com/terraform/install)
+ [Python versione 3.9 o successiva installata](https://www.python.org/downloads/)
+ [Framework CrewAI installato](https://docs.crewai.com/installation)

**Limitazioni**
+ Le interazioni con gli agenti sono limitate dalle finestre di contesto del modello.
+ A questo modello si applicano le considerazioni sulla gestione dello stato di Terraform per le implementazioni su larga scala.
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per informazioni sulla disponibilità per regione, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture"></a>

In questo schema, si verificano le seguenti interazioni:
+ Amazon Bedrock fornisce le basi per l'intelligence degli agenti attraverso la sua suite di modelli di base (FMs). Abilita l'elaborazione del linguaggio naturale (NLP), il ragionamento e le capacità decisionali per gli agenti di intelligenza artificiale, mantenendo al contempo disponibilità e scalabilità elevate.
+ Il framework CrewAI funge da livello di orchestrazione principale per la creazione e la gestione di agenti AI. Gestisce i protocolli di comunicazione degli agenti, la delega delle attività e la gestione del flusso di lavoro integrandosi con Amazon Bedrock.
+ Terraform gestisce l'intero stack di infrastruttura tramite codice, incluse risorse di calcolo, reti, gruppi di sicurezza e AWS Identity and Access Management ruoli (IAM). Garantisce implementazioni coerenti e controllate dalla versione in tutti gli ambienti. L'implementazione di Terraform crea quanto segue:
  + AWS Lambda funzione per eseguire l'applicazione CrewAI
  + Bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) per codice e report
  + Ruoli IAM con autorizzazioni appropriate
  +  CloudWatch Registrazione su Amazon
  + Esecuzione programmata da Amazon EventBridge

Il diagramma seguente illustra l'architettura per la distribuzione di sistemi multiagente CrewAI utilizzando Amazon Bedrock e Terraform.

![\[Flusso di lavoro per implementare sistemi multiagente CrewAI utilizzando Terraform e Amazon Bedrock.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b46069e9-4c38-405f-b0f0-310eabb06b06/images/b3296b17-e388-46ba-8d71-2ec7ce3ed3e0.png)


Il diagramma mostra il flusso di lavoro seguente:

1. L'utente clona il repository.

1. L'utente esegue il comando `terraform apply` per distribuire le risorse. AWS 

1. La configurazione del modello Amazon Bedrock include la specifica del modello di base (FM) da utilizzare per configurare gli agenti CrewAI.

1. Viene stabilita una EventBridge regola per attivare la funzione Lambda in base alla pianificazione definita.

1. Quando viene attivata (tramite pianificazione o manualmente), la funzione Lambda inizializza e assume il ruolo IAM con autorizzazioni di accesso e Amazon Bedrock. Servizi AWS 

1. *Il framework CrewAI carica le configurazioni degli agenti dai file YAML e crea agenti AI specializzati (il team di controllo della sicurezza dell'infrastruttura).AWS * La funzione Lambda esegue in sequenza questi agenti per scansionare AWS le risorse, analizzare le vulnerabilità di sicurezza e generare report di controllo completi.

1. CloudWatch Logs acquisisce informazioni dettagliate sull'esecuzione dalla funzione Lambda con un periodo di conservazione di 365 giorni e crittografia AWS Key Management Service ()AWS KMS per i requisiti di conformità. I log forniscono visibilità sulle attività degli agenti, sul monitoraggio degli errori e sulle metriche delle prestazioni, consentendo un monitoraggio e una risoluzione dei problemi efficaci del processo di controllo di sicurezza.

1. Il rapporto di controllo di sicurezza viene generato automaticamente e archiviato nel bucket Amazon S3 designato. La configurazione automatizzata aiuta a mantenere un monitoraggio costante della sicurezza con un sovraccarico operativo minimo.

Dopo l'implementazione iniziale, il flusso di lavoro fornisce controlli e report di sicurezza continui per l' AWS infrastruttura senza intervento manuale.

**Panoramica degli agenti AI**

Questo modello crea più agenti di intelligenza artificiale, ciascuno con ruoli, obiettivi e strumenti unici:
+ L'**agente analista della sicurezza** raccoglie e analizza AWS le informazioni sulle risorse.
+ L'**agente penetration tester** identifica le vulnerabilità nelle risorse. AWS 
+ L'**agente esperto di conformità** verifica le configurazioni rispetto agli standard di conformità.
+ L'**agente che redige i report** compila i risultati in report completi.

Questi agenti collaborano su una serie di attività, sfruttando le proprie competenze collettive per eseguire controlli di sicurezza e generare report completi. (Il `config/agents.yaml` file descrive le capacità e le configurazioni di ciascun agente di questo team.)

L'elaborazione dell'analisi della sicurezza consiste nelle seguenti azioni:

1. L'agente di analisi della sicurezza esamina i dati raccolti su AWS risorse come le seguenti:
   + Istanze e gruppi di sicurezza Amazon Elastic Compute Cloud (Amazon EC2)
   + Bucket e configurazioni Amazon S3
   + Ruoli, politiche e autorizzazioni IAM
   + Configurazioni e impostazioni di rete del cloud privato virtuale (VPC)
   + Database e impostazioni di sicurezza di Amazon RDS
   + Funzioni e configurazioni Lambda
   + Altro Servizi AWS nell'ambito dell'audit

1. L'agente del penetration tester identifica potenziali vulnerabilità.

1. Gli agenti collaborano tramite il framework CrewAI per condividere i risultati.

La generazione di report consiste nelle seguenti azioni:

1. L'agente autore del report raccoglie i risultati di tutti gli altri agenti.

1. I problemi di sicurezza sono organizzati in base al servizio, alla gravità e all'impatto sulla conformità.

1. Per ogni problema identificato vengono generati consigli per la correzione.

1. Un report completo di audit di sicurezza viene creato in formato markdown e caricato nel bucket Amazon S3 designato. I report storici vengono conservati per il monitoraggio della conformità e il miglioramento del livello di sicurezza.

Le attività di registrazione e monitoraggio includono:
+ CloudWatch i registri registrano i dettagli di esecuzione e gli eventuali errori.
+ Le metriche di esecuzione Lambda vengono registrate per il monitoraggio.

**Nota**  
Il codice per `aws-security-auditor-crew` proviene dal repository GitHub [3P-Agentic\$1Frameworks](https://github.com/aws-samples/3P-Agentic-Frameworks/blob/main/crewai/aws-security-auditor-crew/README.md), disponibile nella raccolta Samples. AWS 

**Disponibilità e scalabilità**

È possibile espandere gli agenti disponibili a più di quattro agenti principali. Per ampliare la gamma con agenti specializzati aggiuntivi, prendete in considerazione i seguenti nuovi tipi di agenti:
+ Un agente *specializzato in intelligence sulle minacce* può fare quanto segue:
  + Monitora i feed di minacce esterne e li correla con i risultati interni
  + Fornisce un contesto sulle minacce emergenti rilevanti per l'infrastruttura
  + Assegna priorità alle vulnerabilità in base allo sfruttamento attivo in ambiente naturale
+ Gli agenti *del framework di conformità* possono concentrarsi su aree normative specifiche come le seguenti:
  + Agente di conformità allo standard PCI DSS (Payment Card Industry Data Security Standard)
  + Responsabile della conformità all'Health Insurance Portability and Accountability Act del 1996 (HIPAA)
  + Agente di conformità di System and Organization Controls 2 (SOC 2)
  + Responsabile della conformità al Regolamento generale sulla protezione dei dati (GDPR)

Ampliando attentamente gli agenti disponibili, questa soluzione può fornire informazioni sulla sicurezza più approfondite e specializzate, mantenendo al contempo la scalabilità in ambienti di grandi dimensioni. AWS [Per ulteriori informazioni sull'approccio di implementazione, sullo sviluppo degli strumenti e sulle considerazioni sulla scalabilità, consulta Informazioni aggiuntive.](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional)

## Tools (Strumenti)
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-tools"></a>

**Servizi AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) è un servizio di intelligenza artificiale completamente gestito che rende disponibili modelli di base ad alte prestazioni (FMs) per l'uso tramite un'API unificata.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ti aiuta a centralizzare i log di tutti i tuoi sistemi e applicazioni, Servizi AWS così puoi monitorarli e archiviarli in modo sicuro.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS In questo modello, viene utilizzato per pianificare e orchestrare i flussi di lavoro degli agenti.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [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
+ [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. In questo modello, fornisce l'archiviazione degli oggetti per gli artefatti degli agenti e la gestione dello stato.

**Altri strumenti**
+ [CrewAI](https://www.crewai.com/open-source) è un framework open source basato su Python per la creazione di sistemi di intelligenza artificiale multiagente.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Deposito di codici**

Il codice per questo pattern è disponibile nel GitHub [deploy-crewai-agents-terraform](https://github.com/aws-samples/deploy-crewai-agents-terraform.git)repository.

## Best practice
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-best-practices"></a>
+ Implementa una corretta gestione dello stato per Terraform utilizzando un backend Amazon S3 con blocco Amazon DynamoDB. Per ulteriori informazioni, consulta le migliori pratiche di [backend in Le migliori pratiche per](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/backend.html) l'utilizzo del provider *Terraform*. AWS 
+ Usa gli spazi di lavoro per separare gli ambienti di sviluppo, allestimento e produzione.
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.
+ Abilita la registrazione e il monitoraggio dettagliati tramite CloudWatch Logs.
+ Implementa meccanismi di ripetizione dei tentativi e gestione degli errori per le operazioni degli agenti.

## Epiche
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-epics"></a>

### Implementa il framework CrewAI
<a name="deploy-crewai-framework"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare l'archivio di questo pattern sul computer locale, esegui il seguente comando:<pre>git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git"<br />cd deploy-crewai-agents-terraform</pre> | DevOps ingegnere | 
| Modifica le variabili di ambiente. | Per modificare le variabili di ambiente, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingegnere | 
| Crea l'infrastruttura. | Per creare l'infrastruttura, esegui i seguenti comandi:<pre>cd terraform</pre><pre>terraform init</pre><pre>terraform plan</pre>Esamina attentamente il piano di esecuzione. Se le modifiche pianificate sono accettabili, esegui il seguente comando:<pre>terraform apply --auto-approve</pre> | DevOps ingegnere | 

### Accedi agli agenti CrewAI
<a name="access-crewai-agents"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Accedi agli agenti. | Gli agenti del team di AWS Infrastructure Security Audit and Reporting vengono implementati come funzione Lambda. Per accedere agli agenti, procedi nel seguente modo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingegnere | 
| (Facoltativo) Configurare l'esecuzione manuale degli agenti. | Gli agenti sono configurati per essere eseguiti automaticamente in base a una pianificazione giornaliera (mezzanotte UTC). Tuttavia, è possibile attivarli manualmente utilizzando i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Per maggiori dettagli, consulta [Testare le funzioni Lambda nella console nella documentazione](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) di Lambda. | DevOps ingegnere | 
| Accedi ai log degli agenti per il debug. | Gli agenti CrewAI funzionano in un ambiente Lambda con le autorizzazioni necessarie per eseguire controlli di sicurezza e archiviare report in Amazon S3. L'output è un rapporto di markdown che fornisce un'analisi completa della sicurezza dell'infrastruttura. AWS Per facilitare il debug dettagliato del comportamento degli agenti, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingegnere | 
| Visualizza i risultati dell'esecuzione dell'agente. | Per visualizzare i risultati dell'esecuzione di un agente, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)I report vengono archiviati con nomi di file basati su timestamp come segue: `security-audit-report-YYYY-MM-DD-HH-MM-SS.md)` | DevOps ingegnere | 
| Monitora l'esecuzione degli agenti. | Per monitorare l'esecuzione degli agenti tramite i CloudWatch log, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps ingegnere | 
|  Personalizza il comportamento degli agenti. | Per modificare gli agenti o le loro attività, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)<pre>cd terraform </pre><pre>terraform apply</pre> | DevOps ingegnere | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse create. | Per eliminare tutta l'infrastruttura creata da questo modello, esegui il seguente comando:<pre>terraform plan -destroy </pre>Il comando seguente eliminerà definitivamente tutte le risorse create da questo pattern. Il comando richiederà una conferma prima di rimuovere qualsiasi risorsa.Esamina attentamente il piano di distruzione. Se le eliminazioni pianificate sono accettabili, esegui il seguente comando:<pre>terraform destroy</pre> | DevOps ingegnere | 

## Risoluzione dei problemi
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Comportamento dell'agente | Per informazioni su questo problema, consulta [Test e risoluzione dei problemi del comportamento degli agenti nella documentazione](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) di Amazon Bedrock. | 
| Problemi relativi alla rete Lambda | Per informazioni su questi problemi, consulta [Risoluzione dei problemi di rete in Lambda nella documentazione di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html). | 
| autorizzazioni IAM | Per informazioni su questi problemi, consulta [Risoluzione](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) dei problemi di IAM nella documentazione IAM. | 

## Risorse correlate
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-resources"></a>

**AWS Blog**
+ [Crea sistemi agentici con CrewAI e Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/build-agentic-systems-with-crewai-and-amazon-bedrock/)

**AWS documentazione**
+ [Documentazione Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+ [Come funziona Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [AWS Well-Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)

**Altre risorse**
+ [Documentazione CrewAI](https://docs.crewai.com/introduction)
+ [Documentazione Terraform Provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informazioni aggiuntive
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional"></a>

Questa sezione contiene informazioni su un approccio di implementazione, sullo sviluppo di strumenti e su considerazioni sulla scalabilità relative alla discussione precedente in [Automazione](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture) e scalabilità.

**Approccio all'implementazione**

Considerate il seguente approccio all'aggiunta di agenti:

1. Configurazione dell'agente:
   + Aggiungere nuove definizioni degli agenti al `config/agents.yaml` file.
   + Definisci retroscena, obiettivi e strumenti specializzati per ogni agente.
   + Configura le funzionalità di memoria e analisi in base alla specializzazione dell'agente.

1. Orchestrazione delle attività:
   + Aggiorna il `config/tasks.yaml` file per includere nuove attività specifiche per l'agente.
   + Crea dipendenze tra le attività per garantire un flusso di informazioni adeguato.
   + Implementare l'esecuzione parallela delle attività laddove appropriato.

**Implementazione tecnica**

Di seguito è riportata un'aggiunta al `agents.yaml` file relativo a un agente Threat Intelligence Specialist proposto:

```
Example new agent configuration in agents.yaml
threat_intelligence_agent:
 name: "Threat Intelligence Specialist"
 role: "Cybersecurity Threat Intelligence Analyst"
 goal: "Correlate AWS security findings with external threat intelligence"
 backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." 
verbose: true 
allow_delegation: true 
tools: 
- "ThreatIntelligenceTool" 
- "AWSResourceAnalyzer"
```

**Sviluppo di strumenti**

Con il framework CrewAI, puoi intraprendere le seguenti azioni per migliorare l'efficacia del personale addetto ai controlli di sicurezza:
+ Crea strumenti personalizzati per i nuovi agenti.
+ Integrazione con sistemi esterni APIs per l'intelligence sulle minacce.
+ Sviluppa analizzatori specializzati per diversi tipi di applicazioni. Servizi AWS

**Considerazioni sulla scalabilità**

Quando espandi il tuo sistema di audit e reporting sulla sicurezza AWS dell'infrastruttura per gestire ambienti più grandi o audit più completi, tieni conto dei seguenti fattori di scalabilità:
+ **Risorse computazionali**
  + Aumenta l'allocazione della memoria Lambda per gestire agenti aggiuntivi.
  + Prendi in considerazione la possibilità di suddividere i carichi di lavoro degli agenti tra più funzioni Lambda.
+ **Gestione dei costi**
  + Monitora l'utilizzo dell'API Amazon Bedrock man mano che aumenta il numero di agenti.
  + Implementa l'attivazione selettiva degli agenti in base all'ambito dell'audit.
+ **Efficienza della collaborazione**
  + Ottimizza la condivisione delle informazioni tra gli agenti.
  + Implementa strutture gerarchiche di agenti per ambienti complessi.
+ **Miglioramento della base di conoscenze**
  + Fornisci agli agenti basi di conoscenza specializzate per i loro domini.
  + Aggiorna regolarmente le conoscenze degli agenti con nuove best practice di sicurezza.

# Implementa un job AWS Glue con una pipeline CodePipeline CI/CD AWS
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein e Luis Henrique Massao Yamada, Amazon Web Services*

## Riepilogo
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

Questo modello dimostra come integrare AWS CodeCommit e AWS CodePipeline con AWS Glue e utilizzare AWS Lambda per avviare lavori non appena uno sviluppatore invia le modifiche a un repository AWS remoto. CodeCommit  

Quando uno sviluppatore invia una modifica a un repository di estrazione, trasformazione e caricamento (ETL) e invia le modifiche ad AWS CodeCommit, viene richiamata una nuova pipeline. La pipeline avvia una funzione Lambda che avvia un job AWS Glue con queste modifiche. Il job AWS Glue esegue il task ETL.

Questa soluzione è utile nel caso in cui aziende, sviluppatori e ingegneri dei dati vogliano avviare attività non appena le modifiche vengono apportate e trasferite negli archivi di destinazione. Aiuta a raggiungere un livello più elevato di automazione e riproducibilità, evitando quindi errori durante l'avvio e il ciclo di vita del lavoro.

## Prerequisiti e limitazioni
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [Git](https://git-scm.com/) installato sul computer locale
+ [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) installato sul computer locale
+ [Python](https://www.python.org/) installato sulla macchina locale
+ Il codice nella sezione *Allegati*

**Limitazioni**
+ La pipeline è completata non appena il job AWS Glue viene avviato con successo. Non aspetta la conclusione del lavoro.
+ Il codice fornito nell'allegato è destinato esclusivamente a scopi dimostrativi.

## Architecture
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**Stack tecnologico Target**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**Architettura Target**

![\[Utilizzo di Lambda per avviare un job Glue non appena uno sviluppatore inserisce le modifiche a un repository. CodeCommit\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

Il processo consiste nei seguenti passaggi:

1. Lo sviluppatore o l'ingegnere dei dati apporta una modifica al codice ETL, esegue il commit e invia la modifica ad AWS. CodeCommit

1. Il push avvia la pipeline.

1. La pipeline avvia una funzione Lambda, che richiama il repository e carica il file `codecommit:GetFile` su Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3).

1. La funzione Lambda avvia un nuovo job AWS Glue con il codice ETL.

1. La funzione Lambda completa la pipeline.

**Automazione e scalabilità**

L'allegato di esempio dimostra come integrare AWS Glue con AWS CodePipeline. Fornisce un esempio di base che puoi personalizzare o estendere per uso personale. Per i dettagli, consulta la sezione *Epics*.

## Tools (Strumenti)
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/): AWS CodePipeline è un servizio di [distribuzione continua](https://aws.amazon.com/devops/continuous-delivery/) completamente gestito che ti aiuta ad automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture.
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/): AWS CodeCommit è un servizio di [controllo del codice sorgente](https://aws.amazon.com/devops/source-control/) completamente gestito che ospita repository sicuri basati su Git.
+ [AWS Lambda](https://aws.amazon.com/lambda/) — AWS Lambda è un servizio di elaborazione serverless che consente di eseguire codice senza effettuare il provisioning o la gestione di server.
+ [AWS Glue](https://aws.amazon.com/glue) — AWS Glue è un servizio di integrazione dei dati senza server che semplifica la scoperta, la preparazione e la combinazione di dati per l'analisi, l'apprendimento automatico e lo sviluppo di applicazioni.
+ [Client](https://git-scm.com/downloads) Git: Git fornisce strumenti GUI oppure puoi usare la riga di comando o uno strumento desktop per controllare gli artefatti richiesti. GitHub 
+ [AWS CDK](https://aws.amazon.com/cdk/): AWS CDK è un framework di sviluppo software open source che ti aiuta a definire le risorse delle tue applicazioni cloud utilizzando linguaggi di programmazione familiari.

## Epiche
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### Distribuisci il codice di esempio
<a name="deploy-the-sample-code"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare . | Configura l'AWS Command Line Interface (AWS CLI) per effettuare il targeting e l'autenticazione con il tuo account AWS corrente. Per istruzioni, consulta la documentazione dell'[interfaccia a riga di comando di AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). | Sviluppatore, DevOps ingegnere | 
| Estrai i file di progetto di esempio. | Estrai i file dall'allegato per creare una cartella contenente i file di progetto di esempio. | Sviluppatore, DevOps ingegnere | 
| Implementa il codice di esempio. | Dopo aver estratto i file, esegui i seguenti comandi dalla posizione di estrazione per creare un esempio di base:<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>Dopo l'ultimo comando, puoi monitorare lo stato della pipeline e del job AWS Glue. | Sviluppatore, DevOps ingegnere | 
| Personalizza il codice. | Personalizzate il codice per il file etl.py in base ai vostri requisiti aziendali. È possibile rivedere il codice ETL, modificare le fasi della pipeline o estendere la soluzione. | Ingegnere dei dati | 

## Risorse correlate
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [Guida introduttiva alla CDK AWS](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [Aggiungere lavori in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [Integrazioni Source Action in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [Richiama una funzione AWS Lambda in una pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [Programmazione AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [ CodeCommit GetFile API AWS](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## Allegati
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)

# Distribuisci codice in più regioni AWS utilizzando AWS CodePipeline CodeCommit, AWS e AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Riepilogo
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Questo modello dimostra come creare un'infrastruttura o un'architettura in più regioni di Amazon Web Services (AWS) utilizzando AWS CloudFormation. Include integrazione continua (CI) /distribuzione continua (CD) in più regioni AWS per implementazioni più rapide. ****I passaggi di questo modello sono stati testati per la creazione di un CodePipeline lavoro AWS da distribuire in tre regioni AWS, ad esempio. Puoi modificare il numero di regioni in base al tuo caso d'uso.

## Prerequisiti e limitazioni
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ 
  + Un CodeBuild ruolo con *AmazonS3 FullAccess* e le politiche. *CloudWatchFullAccess* Queste policy consentono di CodeBuild guardare gli eventi di AWS CodeCommit tramite Amazon CloudWatch e di utilizzare Amazon Simple Storage Service (Amazon S3) come archivio di artefatti.
  + Un CloudFormation ruolo AWS con le seguenti policy, che offrono ad AWS CloudFormation, nella fase finale di build, la possibilità di creare o aggiornare funzioni AWS Lambda, inviare o guardare CloudWatch i log di Amazon e creare e aggiornare set di modifiche. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**Nota**  
Due ruoli AWS Identity and Access Management (IAM) per AWS CodeBuild e AWS CloudFormation con policy adeguate CodeBuild per eseguire le attività CI di test, raggruppamento, imballaggio degli artefatti e distribuzione in più regioni AWS in parallelo.  Verifica incrociando le policy create da CodePipeline per verificare che CodeBuild AWS CloudFormation disponga delle autorizzazioni appropriate nelle fasi CI e CD.

## Architecture
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![\[Un CodePipeline job AWS che viene distribuito in tre regioni AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


L'architettura e il flusso di lavoro multiregione di questo modello comprendono i seguenti passaggi.

1. Il codice viene inviato a un repository. CodeCommit 

1. Dopo aver ricevuto un aggiornamento o un commit del codice, CodeCommit richiama un CloudWatch evento, che a sua volta avvia un processo. CodePipeline 

1. CodePipeline coinvolge il CI gestito da. CodeBuild Vengono eseguite le seguenti attività.
   + Test dei CloudFormation modelli AWS (opzionale)
   + Pacchetto dei CloudFormation modelli AWS per ogni regione inclusa nella distribuzione. Ad esempio, questo modello viene distribuito in parallelo su tre regioni AWS, quindi raggruppa CodeBuild i CloudFormation modelli AWS in tre bucket S3, uno in ciascuna regione specificata. I bucket S3 vengono utilizzati solo come repository di artefatti CodeBuild .

1. CodeBuild impacchetta gli artefatti come input per la fase successiva di distribuzione, che viene eseguita in parallelo nelle tre regioni AWS. Se specifichi un numero diverso di regioni, CodePipeline verrà distribuito in tali regioni.

## Tools (Strumenti)
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Strumenti**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html): CodePipeline è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html): CodeBuild è un servizio di build completamente gestito che compila il codice sorgente, esegue test unitari e produce artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html): CodeCommit è un servizio di controllo delle versioni ospitato da Amazon Web Services che puoi utilizzare per archiviare e gestire in modo privato risorse (come codice sorgente e file binari) nel cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation è un servizio che ti aiuta a modellare e configurare le tue risorse Amazon Web Services in modo da poter dedicare meno tempo alla gestione di tali risorse e più tempo a concentrarti sulle applicazioni eseguite in AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — AWS Identity and Access Management (IAM) è un servizio Web che ti aiuta a controllare in modo sicuro l'accesso alle risorse AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) — Amazon Simple Storage Service (Amazon S3) è uno storage per Internet. È concepito per rendere più accessibili agli sviluppatori risorse informatiche su grande scala per il Web.

**Codice**

Il seguente codice di esempio è per il `BuildSpec.yaml` file (fase di compilazione).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Epiche
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Prepara il codice e il repository CodeCommit
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Seleziona la regione AWS principale per la distribuzione. | Accedi al tuo account AWS e scegli la regione principale per la distribuzione. Il CodeCommit repository si troverà nella regione principale. | DevOps | 
| Crea il CodeCommit repository. | Crea il CodeCommit repository e inserisci il codice richiesto. Il codice include generalmente i modelli AWS CloudFormation o AWS SAM, l'eventuale codice Lambda e i CodeBuild `buildspec.yaml` file come input per AWS. CodePipeline | DevOps | 
| Inserisci il codice nel CodeCommit repository. | Nella sezione *Allegati*, scarica il codice per questo esempio, quindi inserisci il codice richiesto. In genere, il codice può includere modelli AWS CloudFormation o AWS SAM, codice Lambda e CodeBuild `buildspec.yaml` file come input per la pipeline. | DevOps | 

### Fase di origine: creazione della pipeline
<a name="source-phase-create-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il CodePipeline lavoro. | Sulla CodePipeline console, scegli **Crea pipeline.** | DevOps | 
| Assegna un nome al CodePipeline lavoro e scegli l'impostazione del ruolo di servizio. | Inserisci un nome per il lavoro e mantieni l'impostazione predefinita del ruolo di servizio in modo da CodePipeline creare il ruolo con le politiche necessarie allegate. | DevOps | 
| Specificate la posizione del deposito degli artefatti. | In **Impostazioni avanzate**, mantieni l'opzione predefinita in modo da CodePipeline creare un bucket S3 da utilizzare per l'archiviazione degli artefatti del codice. Se invece utilizzi un bucket S3 esistente, il bucket deve trovarsi nella regione principale che hai specificato nella prima epic. | DevOps | 
| Specificate la chiave di crittografia. | Mantieni l'opzione **predefinita, Default AWS Managed Key**, o scegli di utilizzare la tua chiave gestita dal cliente AWS Key Management Service (AWS KMS). | DevOps | 
| Specificare il provider di origine. | In **Source provider**, scegli **AWS CodeCommit**. | DevOps | 
| Specificate il repository. | Scegli il CodeCommit repository che hai creato nella prima epopea. Se hai inserito il codice in un ramo, scegli il ramo. | DevOps | 
| Specificate come vengono rilevate le modifiche al codice. | Mantieni l'impostazione predefinita, **Amazon CloudWatch Events**, come trigger di modifica CodeCommit per avviare il CodePipeline processo. | DevOps | 

### Fase di costruzione: configura la pipeline
<a name="build-phase-configure-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Specificare il fornitore della build. | Per il fornitore di build, scegli **AWS CodeBuild**. | DevOps | 
| Specificare la regione AWS. | Scegli la regione principale, che hai specificato nella prima epopea. | DevOps | 

### Fase di costruzione: crea e configura il progetto
<a name="build-phase-create-and-configure-the-project"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione del progetto | Scegli **Crea progetto** e inserisci un nome per il progetto. | DevOps | 
| Specificate l'immagine dell'ambiente. | Per questa dimostrazione del pattern, utilizzate l'immagine CodeBuild gestita predefinita. Hai anche la possibilità di utilizzare un'immagine Docker personalizzata, se ne hai una. | DevOps | 
| Specificate il sistema operativo. | Scegli Amazon Linux 2 o Ubuntu.Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Specificare il ruolo del servizio. | Scegli il ruolo per cui hai creato CodeBuild prima di iniziare a creare il CodePipeline lavoro. (Vedi la sezione *Prerequisiti*). | DevOps | 
| Imposta opzioni aggiuntive. | Per **Timeout** e **Queued timeout**, mantieni i valori predefiniti. Per il certificato, mantieni l'impostazione predefinita a meno che tu non abbia un certificato personalizzato da utilizzare. | DevOps | 
| Crea le variabili di ambiente. | Per ogni regione AWS in cui desideri effettuare la distribuzione, crea variabili di ambiente fornendo il nome del bucket S3 e il nome della regione (ad esempio, us-east-1). | DevOps | 
| Fornisci il nome del file buildspec, se non è buildspec.yml. | Mantieni vuoto questo campo se il nome del file è quello predefinito,. `buildspec.yaml` Se hai rinominato il file buildspec, inserisci il nome qui. Assicurati che corrisponda al nome del file che si trova nel repository. CodeCommit  | DevOps | 
| Specificare la registrazione. | Per visualizzare i log di Amazon CloudWatch Events, mantieni l'impostazione predefinita. Oppure puoi definire nomi di gruppi o logger specifici. | DevOps | 

### Salta la fase di distribuzione
<a name="skip-the-deploy-phase"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Salta la fase di implementazione e completa la creazione della pipeline. | Quando si configura la pipeline, CodePipeline consente di creare solo una fase nella fase di distribuzione. Per eseguire la distribuzione in più regioni AWS, salta questa fase. Dopo aver creato la pipeline, puoi aggiungere più fasi della fase di distribuzione. | DevOps | 

### Fase di distribuzione: configura la pipeline per la distribuzione nella prima regione
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi una fase alla fase di implementazione. | Modifica la pipeline e scegli **Aggiungi fase nella fase** di distribuzione. Questa prima fase è per la regione principale. | DevOps | 
| Fornisci un nome di azione per la fase. | Inserisci un nome univoco che rifletta la prima fase (principale) e la regione. <region>Ad esempio, inserisci **primary\$1 \$1deploy**. | DevOps | 
| Specificare il fornitore dell'azione. | Per il **provider Action**, scegli AWS CloudFormation. | DevOps | 
| Configura la regione per la prima fase. | Scegli la prima regione (principale), la stessa regione in cui CodePipeline CodeBuild sono configurate. Questa è la regione principale in cui desideri distribuire lo stack. | DevOps | 
| Specificate l'artefatto di input. | Scegli **BuildArtifact**. Questo è l'output della fase di costruzione. | DevOps | 
| Specificate l'azione da intraprendere. | Per la **modalità Azione**, scegli **Crea o aggiorna uno stack**. | DevOps | 
| Inserisci un nome per lo CloudFormation stack. |  | DevOps | 
| Specificate il modello per la prima regione. | Seleziona il nome del pacchetto specifico della regione che è stato impacchettato da CodeBuild e scaricato nel bucket S3 per la prima regione (primaria). | DevOps | 
| Specificate le funzionalità. | Le funzionalità sono necessarie se il modello di stack include risorse IAM o se si crea uno stack direttamente da un modello che contiene macro. Per questo modello, usa CAPABILITY\$1IAM, CAPABILITY\$1NAMED\$1IAM, CAPABILITY\$1AUTO\$1EXPAND. | DevOps | 

### Fase di distribuzione: configura la pipeline per la distribuzione nella seconda regione
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi la seconda fase alla fase di distribuzione. | Per aggiungere una fase per la seconda regione, modifica la pipeline e scegli **Aggiungi fase nella fase** di distribuzione. Importante: il processo di creazione della seconda regione è lo stesso di quello della prima regione, ad eccezione dei seguenti valori. | DevOps | 
| Fornisci un nome di azione per la seconda fase. | Inserisci un nome univoco che rifletta la seconda fase e la seconda regione. | DevOps | 
| Configura la regione per la seconda fase. | Scegli la seconda regione in cui desideri distribuire lo stack. | DevOps | 
| Specificate il modello per la seconda regione. | Seleziona il nome del pacchetto specifico della regione che è stato impacchettato da CodeBuild e scaricato nel bucket S3 per la seconda regione. | DevOps | 

### Fase di distribuzione: configura la pipeline per la distribuzione nella terza regione
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi la terza fase alla fase di distribuzione. | Per aggiungere una fase per la terza regione, modifica la pipeline e scegli **Aggiungi fase nella fase** di distribuzione. Importante: il processo di creazione della seconda regione è lo stesso delle due regioni precedenti, ad eccezione dei seguenti valori. | DevOps | 
| Fornisci un nome di azione per la terza fase. | Inserisci un nome univoco che rifletta la terza fase e la terza regione. | DevOps | 
| Configura la regione per la terza fase. | Scegli la terza regione in cui desideri distribuire lo stack. | DevOps | 
| Specificate il modello per la terza regione. | Seleziona il nome del pacchetto specifico della regione che è stato impacchettato da CodeBuild e scaricato nel bucket S3 per la terza regione. | DevOps | 

### Pulisci la distribuzione
<a name="clean-up-the-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina le risorse AWS. | Per ripulire la distribuzione, elimina gli CloudFormation stack in ogni regione. Quindi elimina CodeCommit CodeBuild le CodePipeline risorse e dalla regione principale. | DevOps | 

## Risorse correlate
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [Che cos'è AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Modello di applicazione serverless AWS](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Riferimento alla struttura CloudFormation dell'architettura AWS per AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Allegati
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)

# Distribuisci carichi di lavoro dalle DevOps pipeline di Azure ai cluster Amazon EKS privati
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Riepilogo
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Questo modello dimostra come implementare l'integrazione continua e la distribuzione continua (CI/CD) dalle DevOps pipeline di Azure ai cluster privati di Amazon Elastic Kubernetes Service (Amazon EKS). Risolve una sfida critica affrontata dalle organizzazioni che stanno migliorando il proprio livello di sicurezza passando a endpoint server API privati per i propri cluster Amazon EKS.

Un endpoint pubblico espone il server dell'API Kubernetes direttamente a Internet, creando una superficie di attacco più ampia che i malintenzionati potrebbero potenzialmente prendere di mira. Passando a un endpoint privato, l'accesso al piano di controllo del cluster è limitato all'interno del cloud privato virtuale (VPC) del cliente.

Sebbene la transizione di un cluster Amazon EKS a un endpoint API privato migliori in modo significativo la sicurezza, introduce sfide di connettività per piattaforme esterne CI/CD come Azure. DevOps L'endpoint privato è accessibile solo dall'interno del VPC o dalle reti peer del cluster. Pertanto, DevOps gli agenti Azure standard ospitati da Microsoft, che operano all'esterno della rete AWS privata, non possono raggiungere direttamente il server dell'API Kubernetes. Ciò interrompe i flussi di lavoro di distribuzione tipici che si basano su strumenti come kubectl o Helm in esecuzione su questi agenti perché non riescono a stabilire una connessione al cluster.

Per ovviare a questo problema, questo modello mostra un approccio efficiente utilizzando DevOps agenti di Azure ospitati autonomamente all'interno di cluster Amazon EKS privati. Questa soluzione offre un'ottimizzazione dei costi, un'efficienza operativa e una scalabilità superiori, preservando al contempo i requisiti di sicurezza. Questo approccio è particolarmente vantaggioso per le aziende che cercano di semplificare i DevOps processi multi-cloud senza compromettere le prestazioni o la sicurezza.

## Prerequisiti e limitazioni
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ AWS Command Line Interface [(AWS CLI) installata la versione 2.13.17 o successiva.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [kubectl versione 1.25.1 o successiva, installata.](https://kubernetes.io/docs/tasks/tools/)
+ [Creazione](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) [di un cluster Amazon EKS privato versione 1.24 o successiva, con autorizzazioni per creare namespace, segreti e distribuzioni.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Nodi di lavoro in un cluster Amazon EKS con connettività in uscita a Internet in modo che l' DevOps agente di Azure in esecuzione su di essi possa connettersi al pool di agenti di Azure DevOps .
+ GitHub [account creato.](https://github.com/signup)
+ [È stato creato un DevOps progetto Azure con accesso alla configurazione delle connessioni di servizio, che sono connessioni autenticate tra Azure Pipelines e servizi esterni o remoti.](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)
+ La AWS Toolkit per Azure DevOps versione 1.15 o successiva installata per il DevOps progetto Azure descritto nel punto precedente. Per istruzioni di installazione, consulta [AWS Toolkit per Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools)Visual Studio Marketplace.

**Limitazioni**
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Questo modello crea quanto segue:
+ Repository **Amazon ECR - Il repository** Amazon Elastic Container Registry (Amazon ECR) archivia l'immagine Docker con l'agente DevOps Azure e l'app di esempio distribuita.
+ Pool di ** DevOps agenti di Azure: un pool** di agenti con DevOps hosting autonomo di Azure registra l'agente in esecuzione sul cluster privato Amazon EKS.
+ **Ruolo IAM**: un ruolo AWS Identity and Access Management (IAM) per la connessione al servizio Azure per fornire l'accesso richiesto all'agente in esecuzione su un cluster Amazon EKS privato.
+ **Connessione DevOps al servizio Azure**: una connessione di servizio in un DevOps account Azure per usare il ruolo IAM che fornisce l'accesso richiesto per l'accesso ai job della pipeline. Servizi AWS

Il diagramma seguente mostra l'architettura di distribuzione di un DevOps agente di Azure con hosting autonomo su un cluster Amazon EKS privato e la distribuzione di un'applicazione di esempio sullo stesso cluster.

![\[Distribuzione di un DevOps agente Azure con hosting autonomo e di un'applicazione di esempio su cluster Amazon EKS privato.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Implementa un DevOps agente di Azure ospitato autonomamente come distribuzione all'interno di un cluster Amazon EKS.

1. Un DevOps agente di Azure si connette al pool di agenti su un DevOps account Azure usando un token di accesso personale (PAT) per l'autenticazione.

1. Azure Pipelines configura una pipeline da distribuire usando il codice di un repository. GitHub 

1. La pipeline viene eseguita sull'agente dal pool di agenti configurato nella configurazione della pipeline. L' DevOps agente di Azure ottiene le informazioni sul lavoro della pipeline effettuando costantemente il polling sull'account Azure. DevOps 

1. L' DevOps agente di Azure crea un'immagine Docker come parte del processo della pipeline e la invia al repository Amazon ECR.

1. L' DevOps agente di Azure distribuisce l'applicazione di esempio su un cluster Amazon EKS privato in uno spazio dei nomi chiamato. `webapp` 

## Tools (Strumenti)
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Strumenti**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

**Altri strumenti**
+ [Docker](https://www.docker.com/) è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) è un'interfaccia a riga di comando che consente di eseguire comandi sui cluster Kubernetes.

**Archivio di codice**
+ Il codice per questo pattern è disponibile nel repository GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Best practice
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Per Amazon EKS, consulta la [Amazon EKS Best Practice Guide](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.

## Epiche
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Crea una connessione di servizio
<a name="create-a-service-connection"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Trova il GUID dell' DevOps organizzazione di Azure. | Accedi al tuo DevOps account Azure, quindi usa il seguente URL per trovare il GUID dell'organizzazione: `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` Nell'URL, sostituiscilo `{DevOps_org_ID}` con il tuo ID dell'organizzazione Azure. DevOps  | AWS DevOps | 
| Configura un IdP in. Account AWS | Per configurare un provider di identità (IdP) Account AWS per una connessione al servizio Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Per altri dettagli, vedi [Come eseguire la federazione AWS da Azure usando DevOps OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Crea una policy IAM in Account AWS. | Per creare una policy IAM che fornisca le autorizzazioni richieste al ruolo IAM usato dalla DevOps pipeline di Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crea un ruolo IAM in Account AWS. | Per configurare un ruolo IAM nella Account AWS connessione al servizio Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>Nella politica, fornisci le tue informazioni per i seguenti segnaposto:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crea una connessione di servizio nell' DevOps account Azure. | Per configurare una connessione al servizio Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Per ulteriori dettagli, consulta [Creare una connessione di servizio](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) nella documentazione Microsoft. | AWS DevOps | 
| Aggiungi il ruolo IAM al file di configurazione di Amazon EKS. | Il ruolo IAM deve disporre delle autorizzazioni necessarie per eseguire le operazioni richieste sul cluster Amazon EKS. Poiché si tratta di un ruolo di pipeline, il ruolo IAM deve essere in grado di gestire quasi tutti i tipi di risorse sul cluster. Pertanto, l'autorizzazione `system:masters` di gruppo è appropriata per questo ruolo.Per aggiungere la configurazione richiesta all'`aws-auth ConfigMap`interno di Kubernetes, usa il codice seguente:<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>Sostituiscilo `{account_id}` con il tuo ID. Account AWS Per ulteriori informazioni, consulta [Come funziona Amazon EKS con IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) nella documentazione di Amazon EKS. | AWS DevOps | 

### Crea un pool di agenti
<a name="create-an-agent-pool"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un pool di agenti ospitati autonomamente. | Per configurare un pool di agenti ospitati autonomamente nell' DevOps account Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Per ulteriori dettagli, consulta [Creare e gestire pool di agenti](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) nella documentazione Microsoft. |  | 

### Crea l'immagine DevOps dell'agente di Azure e inviala ad Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Le immagini Docker utilizzate per distribuire l' DevOps agente Azure e l'applicazione di esempio (`webapp`) sul cluster Amazon EKS privato devono essere archiviate in un repository Amazon ECR. Per creare un repository Amazon ECR, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Per ulteriori dettagli, consulta [Creazione di un repository privato Amazon ECR per archiviare immagini nella documentazione](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) di Amazon ECR. | AWS DevOps | 
| Crea un Dockerfile per creare l'agente Azure DevOps . | Crea un Dockerfile per creare l'immagine Docker su cui è installato l'agente Azure. DevOps Archivia il seguente contenuto in un file denominato: `Dockerfile`<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Crea script per l' DevOps agente di Azure. | Per creare lo `start.sh` script, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crea un'immagine Docker con l'agente Azure. DevOps  | Per creare un'immagine Docker per installare l' DevOps agente di Azure, usa il Dockerfile che hai creato in precedenza per creare l'immagine. Nella stessa directory in cui è archiviato il Dockerfile, esegui i seguenti comandi:<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>Sostituisci `aws_account_id` e `region` con il tuo Account AWS ID e. Regione AWS | AWS DevOps | 

### Distribuisci l' DevOps agente di Azure in un cluster Amazon EKS privato
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Genera un token di accesso personale di Azure. | L'agente in esecuzione sul cluster privato Amazon EKS richiede un token di accesso personale (PAT) per potersi autenticare con l'account Azure DevOps . Per generare un PAT, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>Per ulteriori dettagli, consulta [Registrare un agente utilizzando un token di accesso personale (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) nella documentazione Microsoft. | AWS DevOps | 
| Utilizza il file manifest di Kubernetes per la distribuzione degli agenti. | Per distribuire l' DevOps agente di Azure sul cluster privato Amazon EKS, copia il seguente file manifest e archivia il file come: `agent-deployment.yaml` <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>Sostituisci `aws_account_id` e `<Azure account URL>` con il tuo Account AWS ID e l'URL dell'account Azure. DevOps  | AWS DevOps | 
| Implementa l'agente sul cluster privato Amazon EKS. | Per distribuire l'agente Azure Devops sul cluster privato Amazon EKS, usa il seguente comando:<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Verifica che l'agente sia in esecuzione. | Per verificare che l' DevOps agente di Azure sia in esecuzione, usa il seguente comando:<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>L'output previsto dovrebbe essere simile al seguente:<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>Assicurati che la `READY ` colonna sia visualizzata`1/1`. | AWS DevOps | 
| Verifica che l'agente sia registrato nel pool di DevOps agenti di Azure. | Per verificare che l'agente sia distribuito nel cluster privato Amazon EKS e sia registrato nel pool di agenti`eks-agent`, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)**Dovresti vedere un agente elencato con **lo stato** **Online** e il nome dell'agente dovrebbe iniziare con azure-pipelines-agent-eks -\$1.** | AWS DevOps | 

### Distribuisci un'applicazione di esempio
<a name="deploy-sample-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Inserisci il repository di applicazioni di esempio nel tuo GitHub account.  | Effettua il fork del seguente repository AWS di esempi sul tuo account: GitHub [https://github.com/aws-samples/deploy-kubernetes-resources-to- -devops amazon-eks-using-azure](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Creare una pipeline. | Per creare una pipeline nel tuo DevOps account Azure, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Verifica che l'applicazione di esempio sia stata distribuita. | Una volta completata la pipeline, verifica la corretta implementazione dell'applicazione di esempio controllando sia il repository Amazon ECR che il cluster Amazon EKS.Per verificare gli artefatti nel repository Amazon ECR, utilizza i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Ad esempio `20250501.1-image` e `20250501.1-helm`.Per verificare la distribuzione sul cluster Amazon EKS privato nello spazio dei nomi`webapp`, usa il seguente comando:<pre>kubectl get deploy -n webapp </pre>L'output previsto è il seguente:<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>Nota: se questa è la prima esecuzione della pipeline, potrebbe essere necessario autorizzare la connessione al servizio e il pool di agenti. Cerca le richieste di autorizzazione nell'interfaccia della DevOps pipeline di Azure e approvale per procedere. | AWS DevOps | 

## Risoluzione dei problemi
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La pipeline fallisce quando il nome del repository Amazon ECR non corrisponde `webapp` | L'applicazione di esempio si aspetta che il nome del repository Amazon ECR corrisponda al `projectName: webapp` parametro in. `azure_pipeline.yml`Per risolvere questo problema, rinomina il tuo repository Amazon ECR o aggiorna `webapp` quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| Errore: cluster Kubernetes irraggiungibile: il server ha richiesto al client di fornire le credenziali | Se riscontri questo errore nella fase «Pull and Deploy Helm Chart» nella pipeline di Azure, la causa principale in genere deriva da una configurazione errata del ruolo IAM nel tuo cluster Amazon EKS. `aws-auth ConfigMap`Per risolvere questo problema, controlla quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## Risorse correlate
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blog**
+ [Come eseguire la federazione AWS da Azure usando DevOps OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Servizi AWS documentazione**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Documentazione Microsoft**
+ [Che cos'è Azure DevOps?](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [Che cos'è Azure Pipelines?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

# Esegui le query SQL di Amazon Redshift utilizzando Terraform
<a name="execute-redshift-sql-queries-using-terraform"></a>

*Sylvia Qi e Aditya Ambati, Amazon Web Services*

## Riepilogo
<a name="execute-redshift-sql-queries-using-terraform-summary"></a>

L'uso dell'infrastruttura come codice (IaC) per la distribuzione e la gestione di Amazon Redshift è una pratica prevalente all'interno. DevOps IaC facilita l'implementazione e la configurazione di varie risorse Amazon Redshift, come cluster, snapshot e gruppi di parametri. Tuttavia, IaC non si estende alla gestione di risorse di database come tabelle, schemi, viste e stored procedure. Questi elementi del database sono gestiti tramite query SQL e non sono supportati direttamente dagli strumenti IaC. Sebbene esistano soluzioni e strumenti per la gestione di queste risorse, potresti preferire non introdurre strumenti aggiuntivi nel tuo stack tecnologico.

Questo modello delinea una metodologia che utilizza Terraform per distribuire le risorse del database Amazon Redshift, tra cui tabelle, schemi, viste e stored procedure. Il modello distingue tra due tipi di query SQL:
+ Query **non ripetibili: queste query** vengono eseguite una sola volta durante la distribuzione iniziale di Amazon Redshift per stabilire i componenti essenziali del database. 
+ Query **ripetibili: queste query** sono immutabili e possono essere rieseguite senza influire sul database. La soluzione utilizza Terraform per monitorare le modifiche nelle query ripetibili e applicarle di conseguenza.

[Per maggiori dettagli, consulta la *procedura dettagliata della soluzione* in Informazioni aggiuntive.](#execute-redshift-sql-queries-using-terraform-additional)

## Prerequisiti e limitazioni
<a name="execute-redshift-sql-queries-using-terraform-prereqs"></a>

**Prerequisiti**

È necessario disporre di un dispositivo attivo Account AWS e installare quanto segue sul computer di distribuzione:
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS CLI)
+ Un [AWS CLI profilo](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) configurato con le autorizzazioni di Amazon Redshift read/write 
+ [Terraform versione 1.6.2](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) o successiva
+ [Python 3](https://www.python.org/downloads/)
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)

**Limitazioni**
+ Questa soluzione supporta un singolo database Amazon Redshift perché Terraform consente la creazione di un solo database durante la creazione del cluster.
+ Questo modello non include test per convalidare le modifiche alle query ripetibili prima di applicarle. Si consiglia di incorporare tali test per una maggiore affidabilità.
+ Per illustrare la soluzione, questo modello fornisce un file di esempio che utilizza un `redshift.tf` file di stato Terraform locale. Tuttavia, per gli ambienti di produzione, si consiglia vivamente di utilizzare un file di stato remoto con un meccanismo di blocco per una maggiore stabilità e collaborazione.
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**

Questa soluzione è stata sviluppata e testata sulla [patch 179 di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-179).

**Repository di codice**

Il codice per questo modello è disponibile nel repository GitHub [amazon-redshift-sql-deploy-terraform](https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform).

## Architecture
<a name="execute-redshift-sql-queries-using-terraform-architecture"></a>

Il diagramma seguente illustra come Terraform gestisce le risorse del database Amazon Redshift gestendo query SQL sia non ripetibili che ripetibili.

![\[Processo per Terraform per gestire le risorse del database Amazon Redshift utilizzando query SQL.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/0f4467ac-761b-4b6b-a32f-e18a2ca2245d/images/3b6ff9e8-e3d1-48ed-9fa1-4b14f7d3d65b.png)


Il diagramma mostra i seguenti passaggi:

1. Terraform applica query SQL non ripetibili durante la distribuzione iniziale del cluster Amazon Redshift.

1. Lo sviluppatore apporta modifiche alle query SQL ripetibili.

1. Terraform monitora le modifiche nelle query SQL ripetibili.

1. Terraform applica query SQL ripetibili al database Amazon Redshift.

La soluzione fornita da questo modello è costruita sulla base del [modulo Terraform per Amazon Redshift](https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/latest). Il modulo Terraform fornisce un cluster e un database Amazon Redshift. Per migliorare il modulo, abbiamo utilizzato `terraform_data` risorse, che richiamano uno script Python personalizzato per eseguire query SQL utilizzando l'operazione API Amazon Redshift. [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html) Di conseguenza, il modulo può eseguire le seguenti operazioni:
+ Distribuisci un numero qualsiasi di risorse del database utilizzando le query SQL dopo il provisioning del database.
+ Monitora continuamente le modifiche nelle query SQL ripetibili e applica tali modifiche utilizzando Terraform.

[Per maggiori dettagli, consulta la *procedura dettagliata della soluzione* in Informazioni aggiuntive.](#execute-redshift-sql-queries-using-terraform-additional)

## Tools (Strumenti)
<a name="execute-redshift-sql-queries-using-terraform-tools"></a>

**Servizi AWS**
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) è un servizio di data warehouse su scala petabyte completamente gestito in. Cloud AWS

**Altri strumenti**
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.
+ [Python](https://www.python.org/) è un linguaggio di programmazione generico utilizzato in questo modello per eseguire query SQL. 

## Best practice
<a name="execute-redshift-sql-queries-using-terraform-best-practices"></a>
+ [Best practice di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)
+ [Utilizzo dell'API Amazon Redshift Data per interagire con i cluster Amazon Redshift](https://aws.amazon.com/blogs/big-data/using-the-amazon-redshift-data-api-to-interact-with-amazon-redshift-clusters/)

## Epiche
<a name="execute-redshift-sql-queries-using-terraform-epics"></a>

### Implementa la soluzione utilizzando Terraform
<a name="deploy-the-solution-using-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| **Clona il repository.** | Per clonare il repository Git contenente il codice Terraform per il provisioning di un cluster Amazon Redshift, usa il seguente comando.<pre>git clone https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform.git</pre> | DevOps ingegnere | 
| **Aggiorna le variabili Terraform.** | Per personalizzare la distribuzione del cluster Amazon Redshift in base ai tuoi requisiti specifici, aggiorna i seguenti parametri nel `terraform.tfvars` file.<pre>region                    = "<AWS_REGION>"<br />cluster_identifier        = "<REDSHIFT_CLUSTER_IDENTIFIER>"<br />node_type                 = "<REDSHIFT_NODE_TYPE>"<br />number_of_nodes           = "<REDSHIFT_NODE_COUNT>"<br />database_name             = "<REDSHIFT_DB_NAME>"<br />subnet_ids                = "<REDSHIFT_SUBNET_IDS>"<br />vpc_security_group_ids    = "<REDSHIFT_SECURITY_GROUP_IDS>"<br />run_nonrepeatable_queries = true<br />run_repeatable_queries    = true<br />sql_path_bootstrap        = "<BOOTSTRAP_SQLS_PATH>"<br />sql_path_nonrepeatable    = "<NON-REPEATABLE_SQLS_PATH>"<br />sql_path_repeatable       = "<REPEATABLE_SQLS_PATH>"<br />sql_path_finalize         = "<FINALIZE_SQLS_PATH>"<br />create_random_password    = false<br />master_username           = "<REDSHIFT_MASTER_USERNAME>"</pre> | DevOps ingegnere | 
| Distribuisci le risorse utilizzando Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DevOps ingegnere | 
| (Facoltativo) Esegui query SQL aggiuntive. | Il repository di esempio fornisce diverse query SQL a scopo dimostrativo. Per eseguire le tue query SQL, aggiungile alle seguenti cartelle:`/bootstrap` `/nonrepeatable` `/repeatable` `/finalize` |  | 

### Monitora l'esecuzione delle istruzioni SQL
<a name="monitor-the-execution-of-sql-statements"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Monitora la distribuzione delle istruzioni SQL. | Puoi monitorare i risultati delle esecuzioni SQL su un cluster Amazon Redshift. Per esempi di output che mostrano un'esecuzione SQL non riuscita e riuscita, consulta *Esempi di istruzioni SQL in Informazioni* [aggiuntive](#execute-redshift-sql-queries-using-terraform-additional).  | DBA, ingegnere DevOps  | 
| Eliminare le risorse. | Per eliminare tutte le risorse distribuite da Terraform, esegui il seguente comando.<pre>terraform destroy</pre> | DevOps ingegnere | 

### Convalida i risultati
<a name="validate-the-results"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida i dati nel cluster Amazon Redshift. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DBA, AWS DevOps | 

## Risorse correlate
<a name="execute-redshift-sql-queries-using-terraform-resources"></a>

**AWS documentazione**
+ [Cluster forniti da Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)
+ [Risoluzione dei problemi per Amazon Redshift Data API](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-troubleshooting.html)

**Altre risorse**
+ [Comando: apply](https://developer.hashicorp.com/terraform/cli/commands/apply) (documentazione Terraform)

## Informazioni aggiuntive
<a name="execute-redshift-sql-queries-using-terraform-additional"></a>

**Procedura dettagliata della soluzione**

Per utilizzare la soluzione, è necessario organizzare le query SQL di Amazon Redshift in un modo specifico. Tutte le query SQL devono essere archiviate in file con estensione. `.sql`

Nell'esempio di codice fornito con questo modello, le query SQL sono organizzate nella seguente struttura di cartelle. È possibile modificare il codice (`sql-queries.tf`e`sql-queries.py`) per utilizzarlo con qualsiasi struttura adatta al proprio caso d'uso specifico.

```
/bootstrap
     |- Any # of files
     |- Any # of sub-folders
/nonrepeatable
     |- Any # of files
     |- Any # of sub-folders
/repeatable
     /udf
          |- Any # of files
          |- Any # of sub-folders
     /table
          |- Any # of files
          |- Any # of sub-folders
     /view
          |- Any # of files
          |- Any # of sub-folders
     /stored-procedure
          |- Any # of files
          |- Any # of sub-folders
/finalize
     |- Any # of files
     |- Any # of sub-folders
```

Data la struttura delle cartelle precedente, durante la distribuzione del cluster Amazon Redshift, Terraform esegue le query nel seguente ordine:

1. `/bootstrap`

1. `/nonrepeatable`

1. `/repeatable`

1. `/finalize`

La `/repeatable` cartella contiene quattro sottocartelle:,, e. `/udf` `/table` `/view` `/stored-procedure` Queste sottocartelle indicano l'ordine in cui Terraform esegue le query SQL.

Lo script Python che esegue le query SQL è. `sql-queries.py` Innanzitutto, lo script legge tutti i file e le sottocartelle di una specifica directory di origine, ad esempio il parametro. `sql_path_bootstrap` Quindi lo script esegue le query richiamando l'operazione dell'API Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. Potresti avere una o più query SQL in un file. Il seguente frammento di codice mostra la funzione Python che esegue istruzioni SQL archiviate in un file su un cluster Amazon Redshift.

```
def execute_sql_statement(filename, cluster_id, db_name, secret_arn, aws_region):
    """Execute SQL statements in a file"""
    redshift_client = boto3.client(
        'redshift-data', region_name=aws_region)
    contents = get_contents_from_file(filename),
    response = redshift_client.execute_statement(
        Sql=contents[0],
        ClusterIdentifier=cluster_id,
        Database=db_name,
        WithEvent=True,
        StatementName=filename,
        SecretArn=secret_arn
    )
    ...
```

[Lo script Terraform `sql-queries.tf` crea le risorse terraform\$1data che richiamano lo script.](https://developer.hashicorp.com/terraform/language/resources/terraform-data) `sql-queries.py` Esiste una `terraform_data` risorsa per ciascuna delle quattro cartelle:`/bootstrap`,, e. `/nonrepeatable` `/repeatable` `/finalize` Il seguente frammento di codice mostra la `terraform_data` risorsa che esegue le query SQL nella cartella. `/bootstrap`

```
locals {
  program               = "${path.module}/sql-queries.py"
  redshift_cluster_name = try(aws_redshift_cluster.this[0].id, null)
}

resource "terraform_data" "run_bootstrap_queries" {
  count      = var.create && var.run_nonrepeatable_queries && (var.sql_path_bootstrap != "") && (var.snapshot_identifier == null) ? 1 : 0
  depends_on = [aws_redshift_cluster.this[0]]

  provisioner "local-exec" {
    command = "python3 ${local.program} ${var.sql_path_bootstrap} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn} ${local.aws_region}"
  }
}
```

È possibile controllare se eseguire queste query utilizzando le seguenti variabili. Se non desideri eseguire query in`sql_path_bootstrap`,, o `sql_path_nonrepeatable` `sql_path_repeatable``sql_path_finalize`, imposta i relativi valori su. `""`

```
  run_nonrepeatable_queries = true
  run_repeatable_queries    = true
  sql_path_bootstrap        = "src/redshift/bootstrap"
  sql_path_nonrepeatable    = "src/redshift/nonrepeatable"
  sql_path_repeatable       = "src/redshift/repeatable"
  sql_path_finalize         = "src/redshift/finalize"
```

Durante l'esecuzione`terraform apply`, Terraform considera la `terraform_data` risorsa aggiunta dopo il completamento dello script, indipendentemente dai risultati dello script. Se alcune query SQL hanno avuto esito negativo e desideri eseguirle nuovamente, puoi rimuovere manualmente la risorsa dallo stato Terraform ed eseguirle di nuovo. `terraform apply` Ad esempio, il comando seguente rimuove la `run_bootstrap_queries` risorsa dallo stato Terraform.

`terraform state rm module.redshift.terraform_data.run_bootstrap_queries[0]`

Il seguente esempio di codice mostra come la `run_repeatable_queries` risorsa monitora le modifiche nella `repeatable` cartella utilizzando l'[hash sha256](https://developer.hashicorp.com/terraform/language/functions/sha256). Se un file all'interno della cartella viene aggiornato, Terraform contrassegna l'intera directory per un aggiornamento. Quindi, Terraform esegue nuovamente le query nella directory successiva. `terraform apply`

```
resource "terraform_data" "run_repeatable_queries" {
  count      = var.create_redshift && var.run_repeatable_queries && (var.sql_path_repeatable != "") ? 1 : 0
  depends_on = [terraform_data.run_nonrepeatable_queries]

  # Continuously monitor and apply changes in the repeatable folder
  triggers_replace = {
    dir_sha256 = sha256(join("", [for f in fileset("${var.sql_path_repeatable}", "**") : filesha256("${var.sql_path_repeatable}/${f}")]))
  }

  provisioner "local-exec" {
    command = "python3 ${local.sql_queries} ${var.sql_path_repeatable} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn}"
  }
}
```

Per perfezionare il codice, puoi implementare un meccanismo per rilevare e applicare le modifiche solo ai file che sono stati aggiornati all'interno della `repeatable` cartella, anziché applicare le modifiche a tutti i file indiscriminatamente.

**Esempi di istruzioni SQL**

L'output seguente mostra un'esecuzione SQL non riuscita, insieme a un messaggio di errore.

```
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/nonrepeatable testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): src/redshift/nonrepeatable/table/admin/admin.application_family.sql
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Status: FAILED
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): SQL execution failed.
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Error message: ERROR: syntax error at or near ")"
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec):   Position: 244
module.redshift.terraform_data.run_nonrepeatable_queries[0]: Creation complete after 3s [id=ee50ba6c-11ae-5b64-7e2f-86fd8caa8b76]
```

L'output seguente mostra un'esecuzione SQL riuscita.

```
module.redshift.terraform_data.run_bootstrap_queries[0]: Provisioning with 'local-exec'...
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/bootstrap testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): src/redshift/bootstrap/db.sql
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Status: FINISHED
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): SQL execution successful.
module.redshift.terraform_data.run_bootstrap_queries[0]: Creation complete after 2s [id=d565ef6d-be86-8afd-8e90-111e5ea4a1be]
```

# Esporta i report di AWS Backup da tutta l'organizzazione in AWS Organizations come file CSV
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file"></a>

*Aromal Raj Jayarajan e Purushotham GK, Amazon Web Services*

## Riepilogo
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-summary"></a>

Questo modello mostra come esportare i report sui job di AWS Backup da un'intera organizzazione in AWS Organizations come file CSV. La soluzione utilizza AWS Lambda e Amazon EventBridge per classificare i report sui job di AWS Backup in base al loro stato, il che può aiutare nella configurazione di automazioni basate sullo stato.

AWS Backup aiuta le organizzazioni a gestire e automatizzare centralmente la protezione dei dati tra i servizi AWS, nel cloud e in locale. Tuttavia, per i job di AWS Backup configurati all'interno di AWS Organizations, il reporting consolidato è disponibile solo nella Console di gestione AWS dell'account di gestione di ogni organizzazione. L'inclusione di questi report all'esterno dell'account di gestione può ridurre lo sforzo richiesto per il controllo e aumentare l'ambito delle automazioni, delle notifiche e degli avvisi.

## Prerequisiti e limitazioni
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un'[organizzazione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html) attiva in AWS Organizations che include almeno un account di gestione e un account membro
+ AWS Backup configurato a livello di organizzazione in AWS Organizations (per ulteriori informazioni, consulta [Automatizzare il backup centralizzato su larga scala tra i servizi AWS utilizzando AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) sul blog AWS)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installato e configurato sul tuo computer locale

**Limitazioni**

La soluzione fornita in questo modello identifica le risorse AWS configurate solo per i job di AWS Backup. Il report non è in grado di identificare le risorse AWS che non sono configurate per il backup tramite AWS Backup.

## Architecture
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-architecture"></a>

**Stack tecnologico Target**
+ AWS Backup
+ AWS CloudFormation
+ Amazon EventBridge
+ AWS Lambda
+ AWS Security Token Service (AWS STS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Identity and Access Management (IAM)

**Architettura Target**

Il diagramma seguente mostra un esempio di flusso di lavoro per esportare i report di lavoro di AWS Backup da un'organizzazione in AWS Organizations come file CSV.

![\[Utilizzo EventBridge di Lambda, AWS STS e IAM per esportare report sui lavori di AWS Backup da tutta l'organizzazione in formato CSV.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/74955aad-cc6d-488b-aa34-ae43f50fec60/images/5c39c79f-e731-4ad0-b404-51ebe0976420.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Una regola relativa agli EventBridge eventi pianificati richiama una funzione Lambda nell'account AWS membro (reporting).

1. La funzione Lambda utilizza quindi AWS STS per assumere un ruolo IAM con le autorizzazioni necessarie per connettersi all'account di gestione.

1. La funzione Lambda esegue quindi le seguenti operazioni:
   + Richiede il report consolidato sui lavori di AWS Backup dal servizio AWS Backup
   + Categorizza i risultati in base allo stato del job di AWS Backup
   + Converte la risposta in un file CSV
   + Carica i risultati in un bucket Amazon S3 nell'account di reporting all'interno di cartelle etichettate in base alla data di creazione

## Tools (Strumenti)
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-tools"></a>

**Strumenti**
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) è un servizio completamente gestito che ti aiuta a centralizzare e automatizzare la protezione dei dati tra i servizi AWS, nel cloud e in locale.
+ [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 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni AWS Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri account AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [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.
+ [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 pattern è disponibile nel GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repository.

## Best practice
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-best-practices"></a>
+ [Best practice di sicurezza per Amazon S3 (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) *User Guide*)
+ [Le migliori pratiche per lavorare con le funzioni di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) (AWS *Lambda Developer Guide*)
+ [Le migliori pratiche per l'account di gestione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) (*AWS Organizations User Guide*)

## Epiche
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-epics"></a>

### Implementa i componenti della soluzione
<a name="deploy-the-solution-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il GitHub repository. | Clona il GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repository eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/aws-backup-report-generator.git</pre>Per ulteriori informazioni, consulta [Clonazione di un repository nei documenti.](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) GitHub  | AWS DevOps, DevOps ingegnere | 
| Implementa i componenti della soluzione nell'account AWS membro (reporting). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | DevOps ingegnere, AWS DevOps | 

### Test della soluzione
<a name="test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Assicurati che la EventBridge regola venga eseguita prima del test. | Assicurati che la EventBridge regola venga eseguita aspettando almeno 24 ore o aumentando la frequenza dei report nel file CloudFormation **template-reporting.yml** del modello.**Per aumentare la frequenza dei report**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingegnere | 
| Controlla il bucket Amazon S3 per il report generato. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingegnere | 

### Pulizia delle risorse
<a name="clean-up-your-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare i componenti della soluzione dall'account membro (di segnalazione). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingegnere | 
| Elimina i componenti della soluzione dall'account di gestione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps ingegnere | 

## Risorse correlate
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-resources"></a>
+ [Tutorial: utilizzo di AWS Lambda con eventi pianificati](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html) (documentazione AWS Lambda)
+ [Creazione di eventi pianificati per eseguire funzioni AWS Lambda](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/scheduled-events-invoking-lambda-example.html) (SDK AWS per la documentazione) JavaScript 
+ [Tutorial IAM: delega l'accesso tra account AWS utilizzando i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentazione IAM)
+ [Terminologia e concetti di AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) (documentazione di AWS Organizations)
+ [Creazione di piani di report utilizzando la console AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-report-plan-console.html) (documentazione AWS Backup)
+ [Crea un rapporto di audit](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-audit-report.html) (documentazione di AWS Backup)
+ [Creazione di report su richiesta](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-on-demand-reports.html) (documentazione di AWS Backup)
+ [Cos'è AWS Backup?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) (documentazione di AWS Backup)
+ [Automatizza il backup centralizzato su larga scala tra i servizi AWS utilizzando AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) (post sul blog AWS)

# Esporta i tag per un elenco di EC2 istanze Amazon in un file CSV
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file"></a>

*Sida Ju e Pac Joonhyun, Amazon Web Services*

## Riepilogo
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-summary"></a>

Questo modello mostra come esportare in modo programmatico i tag per un elenco di istanze Amazon Elastic Compute Cloud (Amazon EC2) in un file CSV.

Utilizzando lo script Python di esempio fornito, puoi ridurre il tempo necessario per esaminare e classificare le tue EC2 istanze Amazon in base a tag specifici. Ad esempio, puoi utilizzare lo script per identificare e classificare rapidamente un elenco di istanze che il tuo team di sicurezza ha segnalato per gli aggiornamenti software.

## Prerequisiti e limitazioni
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-prereqs"></a>

**Prerequisiti**
+ Python 3 installato e configurato
+ AWS Command Line Interface (AWS CLI) installata e configurata

**Limitazioni**

Lo script Python di esempio fornito in questo modello può cercare EC2 istanze Amazon solo in base ai seguenti attributi:
+ Istanza IDs
+  IPv4 Indirizzi privati
+  IPv4 Indirizzi pubblici

## Tools (Strumenti)
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-tools"></a>
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.
+ [virtualenv](https://virtualenv.pypa.io/en/latest/) ti aiuta a creare ambienti Python isolati.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

**Repository di codice**

Lo script Python di esempio per questo pattern è disponibile nel repository GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags

## Epiche
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-epics"></a>

### Installa e configura i prerequisiti
<a name="install-and-configure-the-prerequisites"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il GitHub repository. | Se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS, [assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html).Clona il instances-export-tags repository GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags) eseguendo il seguente comando Git in una finestra di terminale:<pre>git clone https://github.com/aws-samples/search-ec2-instances-export-tags.git</pre> | DevOps ingegnere | 
| Installa e attiva virtualenv. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html)Per ulteriori informazioni, consulta la Guida per l'utente di [virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html). | DevOps ingegnere | 
| Installare le dipendenze. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html) | DevOps ingegnere | 
| Configura un profilo denominato AWS.  | Se non l'hai già fatto, configura un profilo denominato AWS che includa le credenziali richieste per eseguire lo script. Per creare un profilo denominato, esegui il comando [aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods).Per ulteriori informazioni, consulta [Using named profiles](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) nella documentazione AWS CLI. | DevOps ingegnere | 

### Configura ed esegui lo script Python
<a name="configure-and-run-the-python-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il file di input. | Crea un file di input che contenga un elenco delle EC2 istanze Amazon per le quali desideri che lo script cerchi ed esporti i tag. Puoi elencare istanze IDs, IPv4 indirizzi privati o IPv4 indirizzi pubblici.Assicurati che ogni EC2 istanza Amazon sia elencata su una riga distinta nel file di input.**Esempio di file di input**<pre>1    i-0547c351bdfe85b9f<br />2    54.157.194.156<br />3    172.31.85.33<br />4    54.165.198.144<br />5    i-0b6223b5914111a4b<br />6    172.31.85.44<br />7    54.165.198.145<br />8    172.31.80.219<br />9    172.31.94.199</pre> | DevOps ingegnere | 
| Eseguire lo script Python. | Esegui lo script eseguendo il seguente comando nel terminale:<pre>python search_instances.py -i INPUTFILE -o OUTPUTFILE -r REGION [-p PROFILE]</pre>Sostituisci `INPUTFILE` con il nome del file di input. Sostituisci `OUTPUTFILE` con il nome che vuoi assegnare al file di output CSV. Sostituisci `REGION` con la regione AWS in cui si trovano EC2 le tue risorse Amazon. Se utilizzi un profilo denominato AWS, `PROFILE` sostituiscilo con il profilo denominato che stai utilizzando.Per ottenere un elenco dei parametri supportati e la loro descrizione, esegui il seguente comando:<pre>python search_instances.py -h</pre>Per ulteriori informazioni e per vedere un esempio di file di output, consultate il `README.md` file nel repository GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags | DevOps ingegnere | 

## Risorse correlate
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-resources"></a>
+ [Configurazione dell'interfaccia a riga di comando di AWS (*AWS CLI*](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) User Guide)

# Genera un CloudFormation modello AWS contenente le regole gestite di AWS Config utilizzando Troposphere
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere"></a>

*Lucas Nation e Freddie Wilson, Amazon Web Services*

## Riepilogo
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-summary"></a>

Molte organizzazioni utilizzano le regole [gestite di AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) per valutare la conformità delle proprie risorse Amazon Web Services (AWS) rispetto alle best practice comuni. Tuttavia, la manutenzione di queste regole può richiedere molto tempo e questo modello ti aiuta a sfruttare [Troposphere](https://troposphere.readthedocs.io/en/latest/quick_start.html), una libreria Python, per generare e gestire regole gestite da AWS Config.

Il modello ti aiuta a gestire le regole gestite di AWS Config utilizzando uno script Python per convertire un foglio di calcolo di Microsoft Excel contenente le regole gestite da AWS in un modello AWS. CloudFormation Troposphere funge da infrastruttura come codice (IaC) e ciò significa che puoi aggiornare il foglio di calcolo Excel con regole gestite, invece di utilizzare un file in formato JSON o YAML. Utilizza quindi il modello per avviare uno CloudFormation stack AWS che crea e aggiorna le regole gestite nel tuo account AWS.

Il CloudFormation modello AWS definisce ogni regola gestita di AWS Config utilizzando il foglio di calcolo di Excel e ti aiuta a evitare di creare manualmente singole regole nella Console di gestione AWS. *Lo script imposta per impostazione predefinita i parametri di ogni regola gestita su un dizionario vuoto e i valori predefiniti dell'ambito da. `ComplianceResourceTypes` `THE_RULE_IDENTIFIER.template file`* Per ulteriori informazioni sull'identificatore della regola, consulta [Creazione di regole gestite AWS Config con modelli AWS nella CloudFormation documentazione di AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) Config.

## Prerequisiti e limitazioni
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Familiarità con l'uso di CloudFormation modelli AWS per creare regole gestite AWS Config. Per ulteriori informazioni su questo argomento, consulta [Creazione di regole gestite AWS Config con CloudFormation modelli AWS nella documentazione di AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) Config.  
+ Python 3, installato e configurato. Per ulteriori informazioni su questo argomento, consulta la documentazione di [Python](https://www.python.org/).
+ Un ambiente di sviluppo integrato (IDE) esistente.  
+ Identifica le tue unità organizzative (OUs) in una colonna del foglio di calcolo `excel_config_rules.xlsx` Excel di esempio (allegato).

## Epiche
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-epics"></a>

### Personalizza e configura le regole gestite di AWS Config
<a name="customize-and-configure-the-aws-config-managed-rules"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna il foglio di calcolo Excel di esempio. | Scarica il foglio di calcolo `excel_config_rules.xlsx` Excel di esempio (allegato) ed etichetta come `Implemented` le regole gestite di AWS Config che desideri utilizzare. Le regole contrassegnate come `Implemented` verranno aggiunte al CloudFormation modello AWS. | Developer | 
| (Facoltativo) Aggiorna il file config\$1rules\$1params.json con i parametri delle regole AWS Config. | Alcune regole gestite di AWS Config richiedono parametri e devono essere passate allo script Python come file JSON utilizzando l'opzione. `--param-file` Ad esempio, la regola `access-keys-rotated` gestita utilizza il seguente parametro: `maxAccessKeyAge`<pre>{<br />         "access-keys-rotated": {<br />             "InputParameters": {<br />                 "maxAccessKeyAge": 90<br />             }<br />         }<br />     }</pre>In questo parametro di esempio, `maxAccessKeyAge` è impostato su 90 giorni. Lo script legge il file dei parametri e aggiunge `InputParameters` quello che trova. | Developer | 
| (Facoltativo) Aggiorna il file config\$1rules\$1params.json con AWS Config. ComplianceResourceTypes | Per impostazione predefinita, lo script Python recupera i modelli definiti da `ComplianceResourceTypes` AWS. Se desideri sovrascrivere l'ambito di una specifica regola gestita di AWS Config, devi passarla allo script Python come file JSON utilizzando l'opzione. `--param-file`Ad esempio, il seguente codice di esempio mostra come il `ComplianceResourceTypes` for `ec2-volume-inuse-check` è impostato sulla lista: `["AWS::EC2::Volume"]`<pre>{<br />         "ec2-volume-inuse-check": {<br />             "Scope": {<br />                 "ComplianceResourceTypes": [<br />                     "AWS::EC2::Volume"<br />                 ]<br />             }<br />         }<br />     }</pre> | Developer | 

### Esegui lo script Python
<a name="run-the-python-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa i pacchetti pip dal file requirements.txt.  | Scarica il `requirements.txt` file (allegato) ed esegui il seguente comando nel tuo IDE per installare i pacchetti Python:`pip3 install -r requirements.txt` | Developer | 
| Eseguire lo script Python.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html)È inoltre possibile aggiungere i seguenti parametri opzionali:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

### Implementa le regole gestite di AWS Config
<a name="deploy-the-aws-config-managed-rules"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

## Allegati
<a name="attachments-07c1cfff-fc9e-4a1f-bd36-48f025808bd8"></a>

[Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/07c1cfff-fc9e-4a1f-bd36-48f025808bd8/attachments/attachment.zip)

# Offri alle istanze di SageMaker notebook l'accesso temporaneo a un CodeCommit repository in un altro account AWS
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide, Amazon Web Services*

## Riepilogo
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

Questo modello mostra come concedere alle istanze e agli utenti di SageMaker notebook Amazon l'accesso temporaneo a un CodeCommit repository AWS che si trova in un altro account AWS. Questo modello mostra anche come è possibile concedere autorizzazioni granulari per azioni specifiche che ciascuna entità può eseguire su ciascun repository.

Organizations spesso archivia i CodeCommit repository in un account AWS diverso da quello che ospita il loro ambiente di sviluppo. Questa configurazione multi-account aiuta a controllare l'accesso ai repository e riduce il rischio che vengano eliminati accidentalmente. Per concedere queste autorizzazioni su più account, è consigliabile utilizzare i ruoli AWS Identity and Access Management (IAM). Quindi, le identità IAM predefinite in ogni account AWS possono assumere temporaneamente i ruoli per creare una catena di fiducia controllata tra gli account.

**Nota**  
Puoi applicare una procedura simile per concedere ad altre identità IAM l'accesso a un repository da più account. CodeCommit Per ulteriori informazioni, consulta [Configurare l'accesso tra account a un CodeCommit repository AWS utilizzando i ruoli](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) nella *AWS CodeCommit User Guide*.

## Prerequisiti e limitazioni
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo con un CodeCommit repository (*account A*)
+ Un secondo account AWS attivo con un'istanza SageMaker notebook (*account B*)
+ Un utente AWS con autorizzazioni sufficienti per creare e modificare ruoli IAM nell'account A
+ Un secondo utente AWS con autorizzazioni sufficienti per creare e modificare i ruoli IAM nell'account B

## Architecture
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

Il diagramma seguente mostra un esempio di flusso di lavoro per concedere a un'istanza di SageMaker notebook e agli utenti di un account AWS l'accesso multiaccount a un repository: CodeCommit 

![\[Flusso di lavoro per l'accesso tra più account a CodeCommit\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Il ruolo utente AWS e il ruolo dell'istanza SageMaker notebook nell'account B presuppongono un [profilo denominato](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles).

1. La politica di autorizzazione del profilo denominato specifica un ruolo di CodeCommit accesso nell'account A che il profilo assume successivamente.

1. La politica di fiducia del ruolo di CodeCommit accesso nell'account A consente al profilo denominato nell'account B di assumere il CodeCommit ruolo di accesso.

1. La politica di autorizzazione IAM del CodeCommit repository nell'account A consente al ruolo di CodeCommit accesso di accedere al CodeCommit repository.

**Stack tecnologico**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## Tools (Strumenti)
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [Git](https://git-scm.com/) è un sistema distribuito di controllo delle versioni per tenere traccia delle modifiche nel codice sorgente durante lo sviluppo del software.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)è un'utilità che consente di inviare ed estrarre codice dai CodeCommit repository estendendo Git.
+ [pip](https://pypi.org/project/pip/) è l'installatore di pacchetti per Python. Puoi usare pip per installare pacchetti dal Python Package Index e da altri indici.

## Best practice
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

Quando imposti le autorizzazioni con le policy IAM, assicurati di concedere solo le autorizzazioni necessarie per eseguire un'attività. Per ulteriori informazioni, consulta [Applicazione delle autorizzazioni del privilegio minimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) nella documentazione di IAM.

Quando implementi questo modello, assicurati di fare quanto segue:
+ Verifica che i principi IAM dispongano solo delle autorizzazioni necessarie per eseguire azioni specifiche e necessarie all'interno di ciascun repository. Ad esempio, si consiglia di consentire ai principi IAM approvati di inviare e unire le modifiche a rami specifici del repository, ma di richiedere le unioni solo ai rami protetti. 
+ Verifica che ai principi IAM siano assegnati ruoli IAM diversi in base ai rispettivi ruoli e responsabilità per ciascun progetto. Ad esempio, uno sviluppatore avrà autorizzazioni di accesso diverse da quelle di un release manager o di un amministratore AWS. 

## Epiche
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### Configura i ruoli IAM
<a name="configure-the-iam-roles"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il ruolo di CodeCommit accesso e la politica delle autorizzazioni. | [Per automatizzare il processo di configurazione manuale documentato in questa epopea,**** puoi utilizzare un modello AWS. CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)Nell'account che contiene il CodeCommit repository (*account A), procedi come* segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Prima di spostare questa configurazione nell'ambiente di produzione, è consigliabile scrivere una policy IAM personalizzata che applichi le autorizzazioni con privilegi [minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). Per ulteriori informazioni, consulta la sezione **Informazioni aggiuntive** di questo modello. | Informazioni generali su AWS, AWS DevOps | 
| Concedi al ruolo dell'istanza SageMaker notebook nell'account B le autorizzazioni per assumere il ruolo di CodeCommit accesso nell'account A. | Nell'account che contiene il ruolo IAM dell'istanza SageMaker notebook (*account B), procedi* come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Per visualizzare l'Amazon Resource Name (ARN) del tuo repository, [consulta CodeCommit Visualizza i dettagli del repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html) nella *AWS CodeCommit * User Guide. | Informazioni generali su AWS, AWS DevOps | 

### Configura l'istanza del tuo SageMaker notebook nell'account B
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un profilo utente sull'istanza del SageMaker notebook AWS per assumere il ruolo nell'account A.  | [Assicurati di avere installata la versione più recente di AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)).Nell'account che contiene l'istanza del SageMaker notebook (*account B), procedi* come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | Informazioni generali su AWS, AWS DevOps | 
| Installa l’utilità git-remote-codecommit. | Segui le istruzioni nella [Fase 2: Installazione git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) nella *AWS CodeCommit User Guide*. | Data Scientist | 

### Accedi al repository
<a name="access-the-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Accedi al CodeCommit repository utilizzando i comandi Git o SageMaker. | **Per usare Git**I principali IAM che assumono il ruolo dell'istanza SageMaker notebook nell'account B possono ora eseguire comandi Git per accedere al CodeCommit repository nell'account A. Ad esempio, gli utenti possono eseguire comandi come `git clone``git pull`, e. `git push`Per istruzioni, consulta [Connect to an AWS CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) nella *AWS CodeCommit User Guide*.Per informazioni su come usare Git con CodeCommit, consulta [Getting started with AWS CodeCommit nella AWS CodeCommit ](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html) *User Guide*.**Da usare SageMaker**Per usare Git dalla SageMaker console, devi consentire a Git di recuperare le credenziali dal tuo CodeCommit repository. Per istruzioni, consulta [Associare un CodeCommit repository in un altro account AWS a un'istanza notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html) nella SageMaker documentazione. | Git, console bash | 

## Risorse correlate
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [Configurare l'accesso tra account a un CodeCommit repository AWS utilizzando i ruoli (documentazione](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) CodeCommit AWS)
+ [Tutorial IAM: delega l'accesso tra account AWS utilizzando i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentazione IAM)

## Informazioni aggiuntive
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**Limitazione delle CodeCommit autorizzazioni a azioni specifiche**

Per limitare le azioni che un responsabile IAM può intraprendere nel CodeCommit repository, modifica le azioni consentite nella CodeCommit policy di accesso.

Per ulteriori informazioni sulle operazioni CodeCommit API, consulta il [riferimento CodeCommit alle autorizzazioni](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html) nella *AWS CodeCommit User Guide*.

**Nota**  
Puoi anche modificare la policy gestita di [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser)AWS per adattarla al tuo caso d'uso.

**Limitazione delle CodeCommit autorizzazioni a repository specifici**

Per creare un ambiente multitenant in cui più di un repository di codice siano accessibili solo a utenti specifici, procedi come segue:

1. Crea più ruoli di CodeCommit accesso nell'account A. Quindi, configura la politica di fiducia di ciascun ruolo di accesso per consentire a utenti specifici dell'account B di assumere il ruolo.

1. Limita gli archivi di codice che ogni ruolo può assumere aggiungendo una condizione **«Risorsa»** alla politica di ciascun ruolo di CodeCommit accesso.

**Esempio di condizione «Resource» che limita l'accesso di un principale IAM a un repository specifico CodeCommit **

```
"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]
```

**Nota**  
Per aiutare a identificare e differenziare più repository di codice nello stesso account AWS, puoi assegnare prefissi diversi ai nomi dei repository. ****Ad esempio, puoi denominare repository di codice con prefissi che si allineano a diversi gruppi di sviluppatori, come myproject-subproject1-repo1 e myproject-subproject2-repo1.**** Quindi, puoi creare un ruolo IAM per ogni gruppo di sviluppatori in base ai prefissi assegnati. **Ad esempio, puoi creare un ruolo denominato **myproject-subproject1-repoaccess e concedergli l'accesso** a tutti gli archivi di codice che includono il prefisso myproject-subproject1.**

**Esempio di condizione «Resource» che si riferisce a un ARN di un repository di codice che include un prefisso specifico**

```
"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*
```

# Implementa una strategia di ramificazione GitHub Flow per ambienti con più account DevOps
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens e Abhilash Vinod, Amazon Web Services*

## Riepilogo
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Quando si gestisce un repository di codice sorgente, diverse strategie di ramificazione influiscono sui processi di sviluppo e rilascio del software utilizzati dai team di sviluppo. Esempi di strategie di ramificazione comuni includono Trunk, GitHub Flow e Gitflow. Queste strategie utilizzano rami diversi e le attività svolte in ciascun ambiente sono diverse. Organizations che stanno implementando DevOps processi trarrebbero vantaggio da una guida visiva per aiutarle a comprendere le differenze tra queste strategie di ramificazione. L'utilizzo di questa immagine nell'organizzazione aiuta i team di sviluppo ad allineare il proprio lavoro e a seguire gli standard organizzativi. Questo modello fornisce questa immagine e descrive il processo di implementazione di una strategia di ramificazione GitHub Flow nell'organizzazione.

Questo modello fa parte di una serie di documentazione sulla scelta e l'implementazione di strategie di DevOps ramificazione per organizzazioni con più membri. Account AWS Questa serie è progettata per aiutarti ad applicare la strategia e le migliori pratiche corrette sin dall'inizio, per semplificare la tua esperienza nel cloud. GitHub Flow è solo una delle possibili strategie di ramificazione che l'organizzazione può utilizzare. Questa serie di documentazione copre anche i modelli di [ramificazione Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) e [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Se non l'hai già fatto, ti consigliamo di leggere [Scelta di una strategia di ramificazione Git per DevOps ambienti multi-account](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) prima di implementare le linee guida di questo modello. Utilizza la due diligence per scegliere la strategia di ramificazione giusta per la tua organizzazione.

Questa guida fornisce un diagramma che mostra come un'organizzazione potrebbe implementare la GitHub strategia Flow. Si consiglia di consultare la [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance per esaminare le best practice. Questo modello include attività, passaggi e restrizioni consigliati per ogni fase del DevOps processo.

## Prerequisiti e limitazioni
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prerequisiti**
+ Git, [installato](https://git-scm.com/downloads). Viene utilizzato come strumento di archiviazione del codice sorgente.
+ [Draw.io, installato.](https://github.com/jgraph/drawio-desktop/releases) Questa applicazione viene utilizzata per visualizzare e modificare il diagramma.

## Architecture
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architettura Target**

Il diagramma seguente può essere usato come un [quadrato di Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Allineate i rami sull'asse verticale con gli AWS ambienti sull'asse orizzontale per determinare quali azioni eseguire in ogni scenario. I numeri indicano la sequenza delle azioni nel flusso di lavoro. In questo esempio si passa da una `feature` filiale all'implementazione in produzione.

![\[Riepilogo delle attività di GitHub Flow in ogni filiale e ambiente.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/780a5bce-3cd2-4092-8537-b7a77c3d6b8d/images/8a2a774a-cd85-466e-838e-a9a1f3b58a63.png)


Per ulteriori informazioni sugli ambienti e sui Account AWS rami di un approccio GitHub Flow, vedi [Scelta di una strategia di ramificazione Git per ambienti con più account DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automazione e scalabilità**

L'integrazione continua e la distribuzione continua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipeline) forniscono inoltre governance e barriere ai team di sviluppo, applicando coerenza, standard, best practice e livelli minimi di accettazione per l'accettazione e l'implementazione delle funzionalità. Per ulteriori informazioni, consulta [Practicing Continuous Integration and Continuous Delivery](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) su. AWS

AWS offre una suite di servizi per sviluppatori progettati per aiutarti a creare CI/CD pipeline. Ad esempio, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)è un servizio di distribuzione continua completamente gestito che consente di automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila il codice sorgente, esegue test e produce ready-to-deploy pacchetti software. Per ulteriori informazioni, consulta [Developer Tools on AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Strumenti)
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servizi e strumenti**

AWS fornisce una suite di servizi per sviluppatori che è possibile utilizzare per implementare questo modello:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)è un servizio di repository di artefatti gestito e altamente scalabile che consente di archiviare e condividere pacchetti software per lo sviluppo di applicazioni.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o istanze AWS Lambda , funzioni o servizi Amazon Elastic Container Service (Amazon ECS) in locale.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

**Altri strumenti**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) è un'applicazione per creare diagrammi di flusso e diagrammi. Il repository di codice contiene modelli in formato.drawio per Draw.io.
+ [Figma](https://www.figma.com/design-overview/) è uno strumento di progettazione online progettato per la collaborazione. Il repository di codice contiene modelli in formato.fig per Figma.

**Deposito di codice**

Questo file sorgente per il diagramma in questo modello è disponibile nel GitHub [repository Git Branching Strategy for GitHub Flow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/github-flow). Include file nei formati PNG, draw.io e Figma. È possibile modificare questi diagrammi per supportare i processi dell'organizzazione.

## Best practice
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Segui le best practice e i consigli contenuti in [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing [a Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy per ambienti multi-account. DevOps Questi consentono di implementare efficacemente lo sviluppo GitHub basato su Flow, promuovere la collaborazione, migliorare la qualità del codice e semplificare il processo di sviluppo.

## Epiche
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisione dei GitHub flussi di lavoro Flow
<a name="reviewing-the-github-flow-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esamina la procedura standard di GitHub Flow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 
| Esamina il processo bugfix GitHub Flow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 
| Esamina il processo di hotfix GitHub Flow. | GitHub Flow è progettato per consentire la distribuzione continua, in cui le modifiche al codice vengono implementate frequentemente e in modo affidabile in ambienti superiori. La chiave è che ogni `feature` filiale è implementabile in qualsiasi momento.`Hotfix`le filiali, che sono simili alle nostre `feature` `bugfix` filiali, possono seguire lo stesso processo di entrambe le altre filiali. Tuttavia, data la loro urgenza, gli hotfix hanno in genere una priorità più elevata. A seconda delle politiche del team e dell'immediatezza della situazione, alcune fasi del processo potrebbero essere accelerate. Ad esempio, le revisioni del codice per gli hotfix potrebbero essere rapide. Pertanto, sebbene il processo di hotfix sia parallelo al processo relativo a funzionalità o bugfix, l'urgenza relativa agli hotfix può giustificare modifiche nell'aderenza procedurale. È fondamentale stabilire linee guida sulla gestione degli hotfix per garantire che vengano gestiti in modo efficiente e sicuro. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| conflitti tra filiali | Un problema comune che può verificarsi con il modello GitHub Flow è rappresentato dalla necessità di applicare un hotfix in produzione `feature``bugfix`, mentre una modifica corrispondente deve avvenire in un `hotfix` ramo in cui vengono modificate le stesse risorse. Si consiglia di unire frequentemente le modifiche provenienti dai `main` rami inferiori per evitare conflitti significativi durante l'unione a. `main` | 
| Maturità del team | GitHub Flow incoraggia le implementazioni quotidiane in ambienti superiori, adottando una vera integrazione continua e una distribuzione continua (CI/CD). È fondamentale che il team abbia la maturità ingegneristica necessaria per creare funzionalità e creare test di automazione per esse. Il team deve eseguire una revisione esaustiva della richiesta di unione prima dell'approvazione delle modifiche. Ciò favorisce una solida cultura ingegneristica che promuove la qualità, la responsabilità e l'efficienza nel processo di sviluppo. | 

## Risorse correlate
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Questa guida non include la formazione per Git; tuttavia, ci sono molte risorse di alta qualità disponibili su Internet se hai bisogno di questa formazione. Ti consigliamo di iniziare dal sito di [documentazione di Git](https://git-scm.com/doc).

Le seguenti risorse possono aiutarti nel tuo percorso di ramificazione di GitHub Flow in. Cloud AWS

**AWS DevOps guida**
+ [AWS DevOps Linee guida](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Architettura di riferimento della pipeline di distribuzione](https://pipelines.devops.aws.dev/)
+ [Che cos'è DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**GitHub Guida al flusso**
+ [GitHub Tutorial di avvio rapido di Flow](https://docs.github.com/en/get-started/using-github/github-flow) () GitHub
+ [Perché GitHub Flow?](https://githubflow.github.io/)

**Altre risorse**
+ [Metodologia delle app a dodici fattori (](https://12factor.net/)12factor.net)

# Implementa una strategia di ramificazione Gitflow per ambienti con più account DevOps
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens, Stephen DiCato, Abhilash Vinod e Tim Wondergem, Amazon Web Services*

## Riepilogo
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Quando si gestisce un repository di codice sorgente, diverse strategie di ramificazione influiscono sui processi di sviluppo e rilascio del software utilizzati dai team di sviluppo. Esempi di strategie di ramificazione comuni includono Trunk, Gitflow e Flow. GitHub Queste strategie utilizzano rami diversi e le attività svolte in ciascun ambiente sono diverse. Organizations che stanno implementando DevOps processi trarrebbero vantaggio da una guida visiva per aiutarle a comprendere le differenze tra queste strategie di ramificazione. L'utilizzo di questa immagine nell'organizzazione aiuta i team di sviluppo ad allineare il proprio lavoro e a seguire gli standard organizzativi. Questo modello fornisce questa immagine e descrive il processo di implementazione di una strategia di ramificazione Gitflow nella vostra organizzazione.

Questo modello fa parte di una serie di documentazione sulla scelta e l'implementazione di strategie di DevOps ramificazione per organizzazioni con più membri. Account AWS Questa serie è progettata per aiutarti ad applicare la strategia e le migliori pratiche corrette sin dall'inizio, per semplificare la tua esperienza nel cloud. Gitflow è solo una possibile strategia di ramificazione che la tua organizzazione può utilizzare. Questa serie di documentazione copre anche i modelli di ramificazione [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) e [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html). Se non l'hai già fatto, ti consigliamo di leggere [Scelta di una strategia di ramificazione Git per DevOps ambienti multi-account](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) prima di implementare le linee guida di questo modello. Utilizza la due diligence per scegliere la strategia di ramificazione giusta per la tua organizzazione.

Questa guida fornisce un diagramma che mostra come un'organizzazione potrebbe implementare la strategia Gitflow. Si consiglia di consultare la [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance per esaminare le best practice. Questo modello include attività, passaggi e restrizioni consigliati per ogni fase del DevOps processo.

## Prerequisiti e limitazioni
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prerequisiti**
+ Git, [installato](https://git-scm.com/downloads). Viene utilizzato come strumento di archiviazione del codice sorgente.
+ [Draw.io, installato.](https://github.com/jgraph/drawio-desktop/releases) Questa applicazione viene utilizzata per visualizzare e modificare il diagramma.
+ [(Facoltativo) Plugin Gitflow, installato.](https://github.com/nvie/gitflow)

## Architecture
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architettura Target**

Il diagramma seguente può essere usato come un [quadrato di Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Allineate i rami sull'asse verticale con gli AWS ambienti sull'asse orizzontale per determinare quali azioni eseguire in ogni scenario. I numeri indicano la sequenza delle azioni nel flusso di lavoro. In questo esempio si passa da un feature branch all'implementazione in produzione.

![\[Riepilogo delle attività di Gitflow in ogni filiale e ambiente.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/1dee2a06-cc54-4797-b9a9-78b6685edd33/images/d8be49bf-dca1-4892-ac4c-11996a7258c2.png)


Per ulteriori informazioni sugli ambienti e sui Account AWS rami in un approccio Gitflow, consulta [Scelta di una strategia di ramificazione Git per](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) ambienti con più account. DevOps 

**Automazione e scalabilità**

L'integrazione continua e la distribuzione continua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipeline) forniscono inoltre governance e barriere ai team di sviluppo, applicando coerenza, standard, best practice e livelli minimi di accettazione per l'accettazione e l'implementazione delle funzionalità. Per ulteriori informazioni, consulta [Practicing Continuous Integration and Continuous Delivery](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) su. AWS

AWS offre una suite di servizi per sviluppatori progettati per aiutarti a creare CI/CD pipeline. Ad esempio, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)è un servizio di distribuzione continua completamente gestito che consente di automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila il codice sorgente, esegue test e produce ready-to-deploy pacchetti software. Per ulteriori informazioni, consulta [Developer Tools on AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Strumenti)
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servizi e strumenti**

AWS fornisce una suite di servizi per sviluppatori che è possibile utilizzare per implementare questo modello:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)è un servizio di repository di artefatti gestito e altamente scalabile che consente di archiviare e condividere pacchetti software per lo sviluppo di applicazioni.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o su istanze AWS Lambda , funzioni o servizi Amazon Elastic Container Service (Amazon ECS) in locale.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

**Altri strumenti**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) è un'applicazione per creare diagrammi di flusso e diagrammi. Il repository di codice contiene modelli in formato.drawio per Draw.io.
+ [Figma](https://www.figma.com/design-overview/) è uno strumento di progettazione online progettato per la collaborazione. Il repository di codice contiene modelli in formato.fig per Figma.
+ (Facoltativo) Il [plugin Gitflow](https://github.com/nvie/gitflow) è una raccolta di estensioni Git che forniscono operazioni di repository di alto livello per il modello di ramificazione Gitflow.

**Archivio di codice**

Questo file sorgente per il diagramma in questo modello è disponibile nel GitHub [repository Git Branching Strategy for GitFlow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/gitflow). Include file nei formati PNG, draw.io e Figma. È possibile modificare questi diagrammi per supportare i processi dell'organizzazione.

## Best practice
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Segui le migliori pratiche e i consigli contenuti in [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing [a Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy per ambienti multi-account. DevOps Questi ti aiutano a implementare efficacemente lo sviluppo basato su GitFlow, promuovere la collaborazione, migliorare la qualità del codice e semplificare il processo di sviluppo.

## Epiche
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisione dei flussi di lavoro di Gitflow
<a name="reviewing-the-gitflow-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rivedi la procedura standard di Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 
| Esamina la procedura dell'hotfix Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 
| Rivedi il processo di correzione dei bug di Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| conflitti tra filiali | Un problema comune che può verificarsi con il modello Gitflow è quando è necessario un hotfix in produzione, mentre una modifica corrispondente deve avvenire in un ambiente inferiore, dove un'altra filiale sta modificando le stesse risorse. Ti consigliamo di avere un solo ramo di release attivo alla volta. Se ne avete più di uno attivo alla volta, i cambiamenti negli ambienti potrebbero interferire e potreste non essere in grado di portare un ramo alla produzione. | 
| Fusione | I rilasci dovrebbero essere ricongiunti a quelli principali e distribuiti il prima possibile, in modo da concentrare nuovamente il lavoro nelle filiali principali. | 
| Fusione di Squash | Usa uno squash merge solo quando ti unisci da un ramo a un `feature` ramo. `develop` L'uso di unioni a forma di squash nei rami più alti causa difficoltà quando si ricongiungono le modifiche ai rami inferiori. | 

## Risorse correlate
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Questa guida non include la formazione per Git; tuttavia, ci sono molte risorse di alta qualità disponibili su Internet se hai bisogno di questa formazione. Ti consigliamo di iniziare dal sito di [documentazione di Git](https://git-scm.com/doc).

Le seguenti risorse possono aiutarti nel tuo percorso di ramificazione con Gitflow nel. Cloud AWS

**AWS DevOps guida**
+ [AWS DevOps Linee guida](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Architettura di riferimento della pipeline di distribuzione](https://pipelines.devops.aws.dev/)
+ [Che cos'è DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Guida Gitflow**
+ [Il blog originale di Gitflow (post sul blog](https://nvie.com/posts/a-successful-git-branching-model/) di Vincent Driessen)
+ [Flusso di lavoro Gitflow (Atlassian)](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
+ [Gitflow su GitHub: Come usare i flussi di lavoro Git Flow con repository GitHub basati](https://youtu.be/WQuxeEvaCxs) (video) YouTube 
+ [Esempio di avvio di Git Flow](https://www.youtube.com/watch?v=d4cDLBFbekw) (YouTube video)
+ [Il ramo di rilascio di Gitflow dall'inizio alla fine](https://www.youtube.com/watch?v=rX80eKPdA28) (video) YouTube 

**Altre risorse**

Metodologia dell'[app a dodici fattori (12factor.net](https://12factor.net/))

# Implementa una strategia di ramificazione Trunk per ambienti con più account DevOps
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens e Rayjan Wilson, Amazon Web Services*

## Riepilogo
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-summary"></a>

Quando si gestisce un repository di codice sorgente, diverse strategie di ramificazione influiscono sui processi di sviluppo e rilascio del software utilizzati dai team di sviluppo. Esempi di strategie di ramificazione comuni includono Trunk, GitHub Flow e Gitflow. Queste strategie utilizzano rami diversi e le attività svolte in ciascun ambiente sono diverse. Organizations che stanno implementando DevOps processi trarrebbero vantaggio da una guida visiva per aiutarle a comprendere le differenze tra queste strategie di ramificazione. L'utilizzo di questa immagine nell'organizzazione aiuta i team di sviluppo ad allineare il proprio lavoro e a seguire gli standard organizzativi. Questo modello fornisce questa immagine e descrive il processo di implementazione di una strategia di ramificazione Trunk nell'organizzazione.

Questo modello fa parte di una serie di documentazione sulla scelta e l'implementazione di strategie di DevOps ramificazione per organizzazioni con più membri. Account AWS Questa serie è progettata per aiutarti ad applicare la strategia e le migliori pratiche corrette sin dall'inizio, per semplificare la tua esperienza nel cloud. Trunk è solo una possibile strategia di ramificazione che l'organizzazione può utilizzare. Questa serie di documentazione copre anche i modelli di [GitHub ramificazione Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) e [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Se non l'hai già fatto, ti consigliamo di leggere [Scelta di una strategia di ramificazione Git per DevOps ambienti multi-account](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) prima di implementare le linee guida di questo modello. Utilizza la due diligence per scegliere la strategia di ramificazione giusta per la tua organizzazione.

Questa guida fornisce un diagramma che mostra come un'organizzazione potrebbe implementare la strategia Trunk. Si consiglia di consultare la [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance ufficiale per esaminare le migliori pratiche. Questo modello include attività, passaggi e restrizioni consigliati per ogni fase del DevOps processo.

## Prerequisiti e limitazioni
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prerequisiti**
+ Git, [installato](https://git-scm.com/downloads). Viene utilizzato come strumento di archiviazione del codice sorgente.
+ [Draw.io, installato.](https://github.com/jgraph/drawio-desktop/releases) Questa applicazione viene utilizzata per visualizzare e modificare il diagramma.

## Architecture
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Architettura Target**

Il diagramma seguente può essere usato come un [quadrato di Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Allineate i rami sull'asse verticale con gli AWS ambienti sull'asse orizzontale per determinare quali azioni eseguire in ogni scenario. I numeri indicano la sequenza delle azioni nel flusso di lavoro. In questo esempio si passa da una `feature` filiale all'implementazione in produzione.

![\[Punnett square of the Trunk: attività in ogni filiale e ambiente\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/5df23e4d-84fe-4ab3-a54f-96b6406abc57/images/ad549ef4-90ad-47c1-bd01-f21d6ce5511a.png)


Per ulteriori informazioni sugli ambienti e sui Account AWS rami in un approccio Trunk, vedi [Scelta di una strategia di ramificazione Git per ambienti con più account DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Automazione e scalabilità**

L'integrazione continua e la distribuzione continua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipeline) forniscono inoltre governance e barriere ai team di sviluppo, applicando coerenza, standard, best practice e livelli minimi di accettazione per l'accettazione e l'implementazione delle funzionalità. Per ulteriori informazioni, consulta [Practicing Continuous Integration and Continuous Delivery](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) su. AWS

AWS offre una suite di servizi per sviluppatori progettati per aiutarti a creare CI/CD pipeline. Ad esempio, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)è un servizio di distribuzione continua completamente gestito che consente di automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila il codice sorgente, esegue test e produce ready-to-deploy pacchetti software. Per ulteriori informazioni, consulta [Developer Tools on AWS](https://aws.amazon.com/products/developer-tools/).

## Tools (Strumenti)
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS servizi e strumenti**

AWS fornisce una suite di servizi per sviluppatori che è possibile utilizzare per implementare questo modello:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)è un servizio di repository di artefatti gestito e altamente scalabile che consente di archiviare e condividere pacchetti software per lo sviluppo di applicazioni.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o istanze AWS Lambda , funzioni o servizi Amazon Elastic Container Service (Amazon ECS) in locale.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

**Altri strumenti**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) — Un'applicazione per creare diagrammi di flusso e diagrammi.
+ [Figma](https://www.figma.com/design-overview/) è uno strumento di progettazione online progettato per la collaborazione. Il repository di codice contiene modelli in formato.fig per Figma.

**Archivio di codice**

Questo file sorgente per il diagramma in questo modello è disponibile nel GitHub [repository Git Branching Strategy for Trunk](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/trunk). Include file nei formati PNG, draw.io e Figma. È possibile modificare questi diagrammi per supportare i processi dell'organizzazione.

## Best practice
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Segui le best practice e i consigli contenuti in [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing [a Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy per ambienti multi-account. DevOps Questi ti aiutano a implementare efficacemente lo sviluppo basato su Trunk, promuovere la collaborazione, migliorare la qualità del codice e semplificare il processo di sviluppo.

## Epiche
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Revisione del flusso di lavoro Trunk
<a name="reviewing-the-trunk-workflow"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rivedi il processo Trunk standard. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| conflitti tra filiali | Un problema comune che può verificarsi con il modello Trunk è rappresentato dalla necessità di applicare un hotfix in produzione, mentre una modifica corrispondente deve avvenire in una `feature` filiale, dove vengono modificate le stesse risorse. Si consiglia di unire frequentemente le modifiche provenienti dai `main` rami inferiori per evitare conflitti significativi durante l'unione a. `main` | 

## Risorse correlate
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-resources"></a>

Questa guida non include la formazione per Git; tuttavia, ci sono molte risorse di alta qualità disponibili su Internet se hai bisogno di questa formazione. Ti consigliamo di iniziare dal sito di [documentazione di Git](https://git-scm.com/doc).

Le seguenti risorse possono aiutarti nel tuo percorso di ramificazione di Trunk in. Cloud AWS

**AWS DevOps guida**
+ [AWS DevOps Linee guida](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Deployment Pipeline Reference Architecture](https://pipelines.devops.aws.dev/)
+ [Che cos'è DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps resources](https://aws.amazon.com/devops/resources/)

**Guida al bagagliaio**
+ [Sviluppo basato sul tronco](https://trunkbaseddevelopment.com/)

**Altre risorse**
+ [Metodologia delle app a dodici fattori (](https://12factor.net/)12factor.net)

# Implementa la scansione Checkov centralizzata e personalizzata per applicare le policy prima di implementare l'infrastruttura AWS
<a name="centralized-custom-checkov-scanning"></a>

*Benjamin Morris, Amazon Web Services*

## Riepilogo
<a name="centralized-custom-checkov-scanning-summary"></a>

Questo modello fornisce un framework GitHub Actions per scrivere politiche Checkov personalizzate in un unico repository che può essere riutilizzato in un'organizzazione. GitHub Seguendo questo schema, un team di sicurezza delle informazioni può scrivere, aggiungere e mantenere politiche personalizzate in base ai requisiti aziendali. Le politiche personalizzate possono essere inserite automaticamente in tutte le pipeline dell' GitHub organizzazione. Questo approccio può essere utilizzato per applicare gli standard aziendali relativi alle risorse prima che le risorse vengano impiegate.

## Prerequisiti e limitazioni
<a name="centralized-custom-checkov-scanning-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un' GitHub organizzazione che utilizza GitHub Actions
+ AWS infrastruttura implementata con HashiCorp Terraform o AWS CloudFormation

**Limitazioni**
+ Questo modello è stato scritto per GitHub Actions. Tuttavia, può essere adattato a framework simili di integrazione continua e distribuzione continua (CI/CD) come. GitLab Non è richiesta alcuna versione specifica a pagamento di. GitHub 
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per informazioni sulla disponibilità regionale, consulta [Endpoint e quote del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) nella AWS documentazione e scegli il link relativo al servizio.

## Architecture
<a name="centralized-custom-checkov-scanning-architecture"></a>

Questo modello è progettato per essere distribuito come GitHub archivio contenente un flusso di lavoro GitHub riutilizzabile e politiche Checkov personalizzate. Il flusso di lavoro riutilizzabile può scansionare sia i repository Terraform che quelli CloudFormation Infrastructure as Code (IaC).

**Il diagramma seguente mostra il repository dei ** GitHub flussi di lavoro riutilizzabili e l'archivio** delle politiche di Checkov personalizzate come icone separate.** Tuttavia, è possibile implementare questi repository come repository separati o come repository singolo. Il codice di esempio utilizza un unico repository, con file per i flussi di lavoro (`.github/workflows`) e file per le politiche personalizzate (`custom_policies`cartella e file di `.checkov.yml` configurazione) nello stesso repository.

![\[GitHub Actions utilizza un GitHub flusso di lavoro riutilizzabile e politiche Checkov personalizzate per valutare IaC.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/6c0c941f-14f9-4569-92da-9f81ab3e525c/images/a1539ce5-0ee6-4af1-bd01-cafad0f71708.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un utente crea una pull request in un repository. GitHub 

1. I flussi di lavoro della pipeline iniziano in GitHub Actions, incluso un riferimento a un flusso di lavoro riutilizzabile di Checkov.

1. Il flusso di lavoro della pipeline scarica il flusso di lavoro riutilizzabile Checkov di riferimento da un archivio esterno ed esegue tale flusso di lavoro Checkov utilizzando Actions. GitHub 

1. Il flusso di lavoro riutilizzabile di Checkov scarica le politiche personalizzate da un archivio esterno.

1. Il flusso di lavoro riutilizzabile di Checkov valuta l'IaC nel GitHub repository rispetto alle politiche Checkov integrate e personalizzate. Il flusso di lavoro riutilizzabile di Checkov ha esito positivo o negativo a seconda che vengano rilevati problemi di sicurezza.

**Automazione e scalabilità**

Questo modello consente la gestione centrale della configurazione di Checkov, in modo che gli aggiornamenti delle policy possano essere applicati in un'unica posizione. Tuttavia, questo modello richiede che ogni repository utilizzi un flusso di lavoro che contenga un riferimento al flusso di lavoro riutilizzabile centrale. È possibile aggiungere questo riferimento manualmente o utilizzare script per inviare il file alla `.github/workflows` cartella di ciascun repository.

## Tools (Strumenti)
<a name="centralized-custom-checkov-scanning-tools"></a>

**Servizi 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 tutte le regioni. Account AWS Checkov può eseguire la scansione. CloudFormation

**Altri strumenti**
+ [Checkov](https://www.checkov.io/) è uno strumento di analisi statica del codice che verifica la presenza di configurazioni errate di sicurezza e conformità in IaC.
+ [GitHub Actions](https://github.com/features/actions) è integrato nella GitHub piattaforma per aiutarti a creare, condividere ed eseguire flussi di lavoro all'interno dei tuoi repository. GitHub Puoi utilizzare GitHub Actions per automatizzare attività come la creazione, il test e la distribuzione del codice.
+ [Terraform](https://www.terraform.io/) è uno strumento IaC HashiCorp che ti aiuta a creare e gestire risorse cloud e locali. Checkov può scansionare Terraform.

**Archivio di codici**

Il codice per questo pattern è disponibile nel GitHub [centralized-custom-checkov-sast](https://github.com/aws-samples/centralized-custom-checkov-sast)repository.

## Best practice
<a name="centralized-custom-checkov-scanning-best-practices"></a>
+ Per mantenere un livello di sicurezza coerente, allinea le politiche di sicurezza della tua azienda alle politiche di Checkov.
+ Nelle prime fasi di implementazione delle politiche personalizzate di Checkov, è possibile utilizzare l'opzione soft-fail nella scansione di Checkov per consentire l'unione delle IAC con problemi di sicurezza. Man mano che il processo matura, passa dall'opzione soft-fail all'opzione hard-fail.

## Epiche
<a name="centralized-custom-checkov-scanning-epics"></a>

### Crea un repository Checkov centrale per le politiche personalizzate
<a name="create-a-central-checkov-repository-for-custom-policies"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository centrale di Checkov. | Crea un repository per archiviare le politiche di Checkov personalizzate che verranno utilizzate all'interno dell'organizzazione.Per iniziare rapidamente, puoi copiare il contenuto dell'archivio di questo pattern nel tuo GitHub [centralized-custom-checkov-sast ](https://github.com/aws-samples/centralized-custom-checkov-sast)repository centrale di Checkov. | DevOps ingegnere | 
| Crea un archivio per flussi di lavoro riutilizzabili. | Se esiste già un archivio per flussi di lavoro riutilizzabili o prevedi di includere file di workflow riutilizzabili nello stesso repository delle politiche personalizzate di Checkov, puoi saltare questo passaggio.Crea un repository per contenere flussi di lavoro riutilizzabili. GitHub Le pipeline di altri repository faranno riferimento a questo repository. | DevOps ingegnere | 

### Crea flussi di lavoro Checkov riutilizzabili ed esempi
<a name="create-reusable-and-example-checkov-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi un flusso di lavoro Checkov riutilizzabile. | Crea un flusso di lavoro Checkov GitHub Actions riutilizzabile (file YAML) nel repository dei flussi di lavoro riutilizzabili. È possibile adattare questo flusso di lavoro riutilizzabile dal file di flusso di lavoro fornito in questo modello.Un esempio di modifica che potreste voler apportare è modificare il flusso di lavoro riutilizzabile utilizzando l'opzione soft-fail. L'impostazione `soft-fail` su `true` consente il completamento corretto del processo anche in caso di scansione Checkov non riuscita. Per istruzioni, consulta [Hard and soft fail nella documentazione](https://www.checkov.io/2.Basics/Hard%20and%20soft%20fail.html) di Checkov. | DevOps ingegnere | 
| Aggiungi un esempio di workflow. | Aggiungi un esempio di flusso di lavoro Checkov che fa riferimento al `reusable` flusso di lavoro. Ciò fornirà un modello su come riutilizzare il `reusable` flusso di lavoro. Nel repository di esempio, `checkov-source.yaml` è il flusso di lavoro riutilizzabile ed `checkov-scan.yaml` è l'esempio che consuma. `checkov-source`[Per maggiori dettagli sulla scrittura di un esempio di workflow Checkov, consulta Informazioni aggiuntive.](#centralized-custom-checkov-scanning-additional) | DevOps ingegnere | 

### Associa le politiche aziendali alle politiche personalizzate di Checkov
<a name="associate-company-policies-to-checkov-custom-policies"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Determina le politiche che possono essere applicate con Checkov. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/centralized-custom-checkov-scanning.html)Per maggiori dettagli sulla creazione di politiche personalizzate di Checkov, vedere [Panoramica delle politiche personalizzate](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html) nella documentazione di Checkov. | Sicurezza e conformità | 
| Aggiungi le politiche personalizzate di Checkov. | Converti le politiche aziendali identificate in politiche Checkov personalizzate nell'archivio centrale. Puoi scrivere semplici politiche di Checkov in Python o YAML. | Sicurezza | 

### Implementa politiche personalizzate centralizzate di Checkov
<a name="implement-centralized-checkov-custom-policies"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi il flusso di lavoro riutilizzabile di Checkov a tutti i repository. | A questo punto, dovresti avere un esempio di flusso di lavoro Checkov che faccia riferimento al flusso di lavoro riutilizzabile. Copia il flusso di lavoro Checkov di esempio che fa riferimento al flusso di lavoro riutilizzabile in ogni repository che lo richiede. | DevOps ingegnere | 
| Crea un meccanismo per garantire che Checkov venga eseguito prima delle fusioni. | Per garantire che il flusso di lavoro Checkov venga eseguito per ogni richiesta pull, crea un [controllo dello stato](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) che richieda un flusso di lavoro Checkov corretto prima di poter unire le richieste pull. GitHub consente di richiedere l'esecuzione di flussi di lavoro specifici prima di poter unire le pull request. | DevOps ingegnere | 
| Crea un PAT a livello di organizzazione e condividilo come segreto. | Se la tua GitHub organizzazione è visibile pubblicamente, puoi saltare questo passaggio.Questo modello richiede che il flusso di lavoro di Checkov sia in grado di scaricare le politiche personalizzate dall'archivio delle politiche personalizzate dell'organizzazione. GitHub È necessario fornire le autorizzazioni necessarie per consentire al flusso di lavoro di Checkov di accedere a tali archivi.A tale scopo, [create un token di accesso personale](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) (PAT) con le autorizzazioni per leggere gli archivi dell'organizzazione. Condividi questo PAT con gli archivi, come segreto a livello di organizzazione (se hai un piano a pagamento) o come segreto in ogni repository (versione gratuita). Nel codice di esempio, il nome predefinito per il segreto è. `ORG_PAT` | DevOps ingegnere | 
| (Facoltativo) Proteggi i file del flusso di lavoro Checkov dalle modifiche. | Per proteggere i file del flusso di lavoro Checkov da modifiche indesiderate, è possibile utilizzare un `CODEOWNERS` file. Il `CODEOWNERS` file viene in genere distribuito nella radice della directory.Ad esempio, per richiedere l'approvazione del `secEng` gruppo GitHub dell'organizzazione quando il `checkov-scan.yaml` file viene modificato, aggiungi quanto segue al file di un repository: `CODEOWNERS`<pre>[Checkov]<br />.github/workflows/checkov-scan.yaml @myOrg/secEng</pre>Un `CODEOWNERS` file è specifico del repository in cui risiede. Per proteggere il flusso di lavoro Checkov utilizzato dal repository, è necessario aggiungere (o aggiornare) un `CODEOWNERS` file in ogni repository.[Per ulteriori informazioni sulla protezione dei file del flusso di lavoro di Checkov, consulta Informazioni aggiuntive.](#centralized-custom-checkov-scanning-additional) Per ulteriori informazioni sui `CODEOWNERS` file, consultate la documentazione ufficiale del CI/CD provider (ad esempio [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)). | DevOps ingegnere | 

## Risorse correlate
<a name="centralized-custom-checkov-scanning-resources"></a>
+ [Panoramica delle politiche personalizzate di Checkov](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html)
+ [CloudFormation Scansione della configurazione](https://www.checkov.io/7.Scan%20Examples/Cloudformation.html)
+ [GitHub Azioni Flussi di lavoro riutilizzabili](https://docs.github.com/en/actions/using-workflows/reusing-workflows)

## Informazioni aggiuntive
<a name="centralized-custom-checkov-scanning-additional"></a>

**Scrittura di file di workflow Checkov**

Quando scrivi`checkov-scan.yaml`, considera quando vuoi che venga eseguito. La `on` chiave di primo livello determina quando viene eseguito il flusso di lavoro. Nel repository di esempio, il flusso di lavoro verrà eseguito quando è presente una richiesta pull destinata al `main` ramo (e ogni volta che il ramo sorgente della pull request viene modificato). Il flusso di lavoro può anche essere eseguito come richiesto grazie alla `workflow_dispatch` chiave.

È possibile modificare le condizioni di attivazione del flusso di lavoro in base alla frequenza con cui si desidera che venga eseguito il flusso di lavoro. Ad esempio, è possibile modificare il flusso di lavoro in modo che venga eseguito ogni volta che il codice viene inviato a qualsiasi ramo `pull_request` sostituendo `push` e rimuovendo la `branches` chiave.

È possibile modificare il file di workflow di esempio creato all'interno di un singolo repository. Ad esempio, è possibile modificare il nome del ramo di destinazione da `main` a `production` se un repository è strutturato attorno a un `production` ramo.

**Protezione dei file del flusso di lavoro Checkov**

La scansione Checkov fornisce informazioni utili su potenziali errori di configurazione della sicurezza. Tuttavia, alcuni sviluppatori potrebbero percepirla come un ostacolo alla loro produttività e tentare di rimuovere o disabilitare il flusso di lavoro di scansione.

Esistono diversi modi per risolvere questo problema, tra cui una migliore messaggistica sul valore a lungo termine della scansione di sicurezza e una documentazione più chiara su come implementare un'infrastruttura sicura. Si tratta di importanti approcci «morbidi» alla DevSecOps collaborazione che possono essere visti come la soluzione alla causa principale di questo problema. Tuttavia, puoi anche utilizzare controlli tecnici come un `CODEOWNERS` file come guardrail per aiutare gli sviluppatori a seguire la strada giusta.

**Modello di test in una sandbox**

Per testare questo pattern in un ambiente sandbox, segui questi passaggi:

1. Crea una nuova GitHub organizzazione. Crea un token con accesso in sola lettura a tutti gli archivi dell'organizzazione. Poiché questo token è destinato a un ambiente sandbox, non a un ambiente a pagamento, non sarà possibile archiviarlo in un segreto a livello di organizzazione.

1. Crea un `checkov` repository per contenere la configurazione di Checkov e un `github-workflows` repository per contenere la configurazione del flusso di lavoro riutilizzabile. Compila i repository con il contenuto del repository di esempio.

1. Create un repository di applicazioni e copiate e incollate il `checkov-scan.yaml` flusso di lavoro nella relativa cartella. `.github/workflows` Aggiungi un segreto al repository che contiene il PAT che hai creato per l'accesso in sola lettura all'organizzazione. Il segreto predefinito è. `ORG_PAT`

1. Crea una pull request che aggiunga Terraform o CloudFormation codice al repository dell'applicazione. Checkov dovrebbe scansionare e restituire un risultato.

# Implementa la diagnostica e la risoluzione dei problemi di Kubernetes basate sull'intelligenza artificiale con K8SGPT e l'integrazione con Amazon Bedrock
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale, Muskan., e Prafful Gupta, Amazon Web Services*

## Riepilogo
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

Questo modello dimostra come implementare la diagnostica e la risoluzione dei problemi di Kubernetes basate sull'intelligenza artificiale integrando K8SGPT con il modello Anthropic Claude v2 disponibile su Amazon Bedrock. La soluzione fornisce analisi in linguaggio naturale e procedure di correzione per i problemi del cluster Kubernetes attraverso un'architettura host bastion sicura. Combinando l'esperienza di K8SGPT Kubernetes con le funzionalità linguistiche avanzate di Amazon Bedrock DevOps , i team possono identificare e risolvere rapidamente i problemi dei cluster. Con queste funzionalità, è possibile ridurre il tempo medio di risoluzione (MTTR) fino al 50%. 

Questo modello nativo del cloud sfrutta Amazon Elastic Kubernetes Service (Amazon EKS) per la gestione di Kubernetes. Il modello implementa le migliori pratiche di sicurezza attraverso ruoli (IAM) appropriati e isolamento della rete. AWS Identity and Access Management Questa soluzione è particolarmente utile per le organizzazioni che desiderano semplificare le operazioni Kubernetes e migliorare le capacità di risoluzione dei problemi con l'assistenza dell'IA.

## Prerequisiti e limitazioni
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**Prerequisiti**
+ Un attivo con le autorizzazioni appropriate Account AWS 
+ 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)
+ Cluster Amazon EKS
+ [Accesso al modello Anthropic Claude 2 su Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Un host bastion con le impostazioni richieste per i gruppi di sicurezza
+ [K8sgpt installato](https://docs.k8sgpt.ai/getting-started/installation/)

**Limitazioni**
+ L'analisi K8sgpt è limitata dalla dimensione della finestra di contesto del modello Claude v2.
+ I limiti di tariffa dell'API Amazon Bedrock si applicano in base alle quote del tuo account.
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ Amazon EKS [versione 1.31 o successiva](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Modello Claude 2](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) su Amazon Bedrock
+ [K8SGpt v0.4.2 o versione successiva](https://github.com/k8sgpt-ai/k8sgpt/releases)

## Architecture
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

Il diagramma seguente mostra l'architettura per la diagnostica Kubernetes basata sull'intelligenza artificiale che utilizza K8sgPT integrato con Amazon Bedrock in. Cloud AWS

![\[Flusso di lavoro per la diagnostica Kubernetes utilizzando K8SGpt integrato con Amazon Bedrock.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


L'architettura mostra il seguente flusso di lavoro:

1. Gli sviluppatori accedono all'ambiente tramite una connessione sicura all'host bastion. Questa EC2 istanza Amazon funge da punto di ingresso sicuro e contiene l'installazione dell'interfaccia a riga di comando (CLI) K8SGpt e le configurazioni richieste.

1. L'host bastion, configurato con ruoli IAM specifici, stabilisce connessioni sicure sia al cluster Amazon EKS che agli endpoint Amazon Bedrock. K8sgpt è installato e configurato sull'host bastion per eseguire l'analisi del cluster Kubernetes.

1. Amazon EKS gestisce il piano di controllo Kubernetes e i nodi di lavoro, fornendo l'ambiente di destinazione per l'analisi K8sgPT. Il servizio funziona su più zone di disponibilità all'interno di un cloud privato virtuale (VPC), il che aiuta a fornire disponibilità e resilienza elevate. Amazon EKS fornisce dati operativi tramite l'API Kubernetes, che consente un'analisi completa dei cluster.

1. K8sgPT invia i dati di analisi ad Amazon Bedrock, che fornisce il Claude v2 Foundation Model (FM) per l'elaborazione del linguaggio naturale. Il servizio elabora l'analisi K8sgpt per generare spiegazioni leggibili dall'uomo e offre suggerimenti di correzione dettagliati in base ai problemi identificati. Amazon Bedrock funziona come un servizio di intelligenza artificiale senza server con disponibilità e scalabilità elevate.

**Nota**  
In tutto questo flusso di lavoro, IAM controlla l'accesso tra i componenti tramite ruoli e policy, gestendo l'autenticazione per le interazioni tra bastion host, Amazon EKS e Amazon Bedrock. IAM implementa il principio del privilegio minimo e consente una comunicazione sicura tra servizi in tutta l'architettura.

**Automazione e scalabilità**

Le operazioni K8sgPT possono essere automatizzate e scalate su più cluster Amazon EKS tramite vari strumenti. Servizi AWS [Questa soluzione supporta l'integrazione continua e l'integrazione della distribuzione continua (CI/CD) utilizzando [Jenkins](https://www.jenkins.io/), Actions o per l'analisi pianificata. GitHub [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)](https://docs.github.com/en/actions/get-started/understand-github-actions) L'operatore K8SGPT consente il monitoraggio continuo all'interno del cluster con funzionalità automatiche di rilevamento e segnalazione dei problemi. Per le implementazioni su scala aziendale, puoi utilizzare [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) per pianificare scansioni e attivare risposte automatiche con script personalizzati. AWS L'integrazione SDK consente il controllo programmatico su un'ampia flotta di cluster.

## Tools (Strumenti)
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**Servizi AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

**Altri strumenti**
+ [K8SGPT](https://k8sgpt.ai/) è uno strumento open source basato sull'intelligenza artificiale che trasforma la gestione di Kubernetes. Agisce come esperto di Virtual Site Reliability Engineering (SRE), scansionando, diagnosticando e risolvendo automaticamente i problemi del cluster Kubernetes. Gli amministratori possono interagire con K8SGPT utilizzando il linguaggio naturale e ottenere informazioni chiare e fruibili sullo stato del cluster, sugli arresti anomali dei pod e sugli errori del servizio. Gli analizzatori integrati dello strumento rilevano un'ampia gamma di problemi, dai componenti mal configurati ai vincoli di risorse, e forniscono spiegazioni e soluzioni. easy-to-understand

## Best practice
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ [Implementa controlli di accesso sicuri utilizzando for bastion host access. AWS Systems Manager Session Manager](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)
+ Assicurati che l'autenticazione K8sgpt utilizzi ruoli IAM dedicati con autorizzazioni con privilegi minimi per le interazioni tra Amazon Bedrock e Amazon EKS. Per ulteriori informazioni, consulta le best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla [sicurezza](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella documentazione IAM.
+ Configura il [tagging delle risorse](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html), abilita la CloudWatch [registrazione di Amazon per gli audit trail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html) e implementa l'[anonimizzazione dei dati](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/) per le informazioni sensibili. 
+ Mantieni backup regolari delle configurazioni K8SGPT mentre imposta pianificazioni di scansione automatizzate durante le ore non di punta per ridurre al minimo l'impatto operativo.

## Epiche
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### Aggiungi Amazon Bedrock all'elenco dei provider di backend AI.
<a name="add-br-to-ai-backend-provider-list"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Imposta Amazon Bedrock come provider di backend AI per K8sgPT. | Per impostare Amazon Bedrock come fornitore di [backend AI](https://docs.k8sgpt.ai/reference/providers/backend/) r per K8sgpt, usa il seguente comando: AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>Il comando di esempio utilizza per. `us-west-2` Regione AWS Tuttavia, puoi selezionare un'altra regione, a condizione che sia il cluster Amazon EKS che il modello Amazon Bedrock corrispondente siano disponibili e abilitati nella regione selezionata.Per verificare che `amazonbedrock` sia stato aggiunto all'elenco dei provider di backend AI e sia nello `Active` stato, esegui il comando seguente:<pre>k8sgpt auth list</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### Scansiona le risorse utilizzando un filtro
<a name="scan-resources-using-a-filter"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Visualizza un elenco di filtri disponibili. | Per visualizzare l'elenco di tutti i filtri disponibili, usa il seguente AWS CLI comando:<pre>k8sgpt filters list</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| Scansiona un pod in uno spazio dei nomi specifico utilizzando un filtro. | Questo comando è utile per il debug mirato di problemi specifici dei pod all'interno di un cluster Kubernetes, utilizzando le funzionalità AI di Amazon Bedrock per analizzare e spiegare i problemi rilevati.Per scansionare un pod in uno spazio dei nomi specifico utilizzando un filtro, usa il seguente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| Scansiona una distribuzione in uno spazio dei nomi specifico utilizzando un filtro. | Questo comando è utile per identificare e risolvere problemi specifici della distribuzione, in particolare quando lo stato effettivo non corrisponde allo stato desiderato.Per eseguire la scansione di una distribuzione in uno spazio dei nomi specifico utilizzando un filtro, utilizzare il comando seguente: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.</pre> | AWS DevOps | 
| Scansiona un nodo in uno spazio dei nomi specifico utilizzando un filtro. | Per eseguire la scansione di un nodo in uno spazio dei nomi specifico utilizzando un filtro, utilizzate il seguente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### Analizza gli output dettagliati
<a name="analyze-detailed-outputs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Ottieni risultati dettagliati. |  Per ottenere risultati dettagliati, usa il seguente comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| Controlla i pod problematici. | Per verificare la presenza di pod problematici specifici, utilizzate il seguente comando: AWS CLI <pre>kubectl get pods --all-namespaces | grep -v Running</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| Ottieni approfondimenti specifici per le applicazioni. | Questo comando è particolarmente utile quando:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)Per ottenere informazioni specifiche sull'applicazione, utilizzate il seguente comando:<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>Di seguito è riportato un esempio dell'output previsto di questo comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## Risorse correlate
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**Blog AWS**
+ [Automatizza la risoluzione dei problemi di Amazon EKS utilizzando un flusso di lavoro agentico Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [Usa K8sgPT e Amazon Bedrock per la manutenzione semplificata del cluster Kubernetes](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS documentazione**
+ AWS CLI [comandi: [create-cluster e describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Inizia a usare Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) (documentazione Amazon EKS)
+ [Best practice di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentazione IAM)

**Altre risorse**
+ [K8sGpt](https://k8sgpt.ai/)

# Rileva automaticamente le modifiche e avvia diverse CodePipeline pipeline per un monorepo in CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha e Ricardo Morais, Amazon Web Services*

## Riepilogo
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Avviso**: AWS Cloud9 non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Questo modello consente di rilevare automaticamente le modifiche al codice sorgente di un'applicazione basata su monorepo AWS CodeCommit e quindi di avviare una pipeline AWS CodePipeline che esegua l'integrazione continua e la distribuzione continua (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), che garantisce una migliore visibilità, una condivisione più semplice del codice e una migliore collaborazione, standardizzazione e reperibilità.

La soluzione descritta in questo modello non esegue alcuna analisi delle dipendenze tra i microservizi all'interno del monorepo. Rileva solo le modifiche nel codice sorgente e avvia la pipeline corrispondente. CI/CD 

Il modello viene utilizzato AWS Cloud9 come ambiente di sviluppo integrato (IDE) e AWS Cloud Development Kit (AWS CDK) per definire un'infrastruttura utilizzando due CloudFormation stack: e. `MonoRepoStack` `PipelinesStack` Lo `MonoRepoStack` stack crea il monorepo in AWS CodeCommit e la AWS Lambda funzione che avvia le pipeline. CI/CD Lo `PipelinesStack` stack definisce l'infrastruttura della pipeline.

**Importante**  
Il flusso di lavoro di questo pattern è un proof of concept (PoC). Si consiglia di utilizzarlo solo in un ambiente di test. Se desideri utilizzare l'approccio di questo modello in un ambiente di produzione, consulta [le migliori pratiche di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella documentazione AWS Identity and Access Management (IAM) e apporta le modifiche necessarie ai tuoi ruoli IAM e Servizi AWS. 

## Prerequisiti e limitazioni
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Prerequisiti**
+ Un AWS account attivo.
+ AWS Command Line Interface (AWS CLI), installato e configurato. Per ulteriori informazioni, vedere [Installazione, aggiornamento e disinstallazione di AWS CLI nella](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) AWS CLI documentazione.  
+ Python 3 e`pip`, installato sul computer locale. Per ulteriori informazioni, consulta la documentazione di [Python](https://www.python.org/). 
+ AWS CDK, installato e configurato. Per ulteriori informazioni, vedere [Guida introduttiva AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) a nella AWS CDK documentazione. 
+ Un AWS Cloud9 IDE, installato e configurato. Per ulteriori informazioni, consulta [Configurazione AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) nella AWS Cloud9 documentazione. 
+ Il repository GitHub [AWS CodeCommit monorepo multi-pipeline Triggers](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), clonato sul computer locale. 
+ Una directory esistente contenente il codice dell'applicazione che si desidera creare e utilizzare. CodePipeline
+ Familiarità ed esperienza con le DevOps migliori pratiche su. Cloud AWS Per aumentare la tua familiarità con DevOps, puoi utilizzare il modello [Costruisci un'architettura ad accoppiamento libero con microservizi utilizzando DevOps pratiche e AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) sul sito Web Prescriptive Guidance. AWS  

## Architecture
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

Il diagramma seguente mostra come utilizzare per definire un'infrastruttura con due AWS CDK stack: e. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

![\[Flusso di lavoro per utilizzare il CDK AWS per definire un'infrastruttura con due CloudFormation stack.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Il processo di bootstrap utilizza AWS CDK per creare gli stack e. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

1. Lo `MonoRepoStack` stack crea il CodeCommit repository per l'applicazione e la funzione `monorepo-event-handler` Lambda che viene avviata dopo ogni commit.

1. Lo `PipelinesStack` stack crea le pipeline CodePipeline avviate dalla funzione Lambda. Ogni microservizio deve avere una pipeline di infrastruttura definita.

1. La pipeline for `microservice-n` viene avviata dalla funzione Lambda e inizia le sue CI/CD fasi isolate basate sul codice sorgente in. CodeCommit

1. La pipeline for `microservice-1` viene avviata dalla funzione Lambda e inizia le sue CI/CD fasi isolate basate sul codice sorgente in. CodeCommit

Il diagramma seguente mostra la distribuzione degli AWS CloudFormation stack `MonoRepoStack` e in un account. `PipelinesStack`

![\[Distribuzione degli CloudFormation stack MonoRepoStack e PipelinesStack in un account AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un utente modifica il codice in uno dei microservizi dell'applicazione.

1. L'utente invia le modifiche da un repository locale a un repository. CodeCommit 

1. L'attività push avvia la funzione Lambda che riceve tutti i push al repository. CodeCommit 

1. La funzione Lambda legge un parametro in Parameter Store, una funzionalità di AWS Systems Manager, per recuperare l'ID di commit più recente. Il parametro ha il formato di denominazione:. `/MonoRepoTrigger/{repository}/{branch_name}/LastCommit` Se il parametro non viene trovato, la funzione Lambda legge l'ultimo ID di commit dal CodeCommit repository e salva il valore restituito in Parameter Store.

1. Dopo aver identificato l'ID di commit e i file modificati, la funzione Lambda identifica le pipeline per ogni directory di microservizi e avvia la pipeline richiesta. CodePipeline 

## Tools (Strumenti)
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software per definire l'infrastruttura cloud in codice e fornirla tramite. CloudFormation
+ [Python](https://www.python.org/) è un linguaggio di programmazione che consente di lavorare rapidamente e integrare i sistemi in modo più efficace.

**Codice**

Il codice sorgente e i modelli per questo pattern sono disponibili nel repository GitHub [AWS CodeCommit monorepo multi-pipeline](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) triggers.

## Best practice
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Questa architettura di esempio non include una soluzione di monitoraggio per l'infrastruttura implementata. Se desideri implementare questa soluzione in un ambiente di produzione, ti consigliamo di abilitare il monitoraggio. Per ulteriori informazioni, consulta [Monitoraggio delle applicazioni serverless con CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) nella documentazione AWS Serverless Application Model (AWS SAM).
+ Quando modifichi il codice di esempio fornito da questo modello, segui le [migliori pratiche per lo sviluppo e la distribuzione dell'infrastruttura cloud riportate](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) nella AWS CDK documentazione.
+ Quando definisci le tue pipeline di microservizi, consulta le [migliori pratiche di sicurezza nella documentazione](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html). AWS CodePipeline 
+ Puoi anche verificare le migliori pratiche nel AWS CDK codice utilizzando l'utilità [cdk-nag](https://github.com/cdklabs/cdk-nag). Questo strumento utilizza una serie di regole, raggruppate per pacchetti, per valutare il codice. I pacchetti disponibili sono:
  + [AWS Libreria di soluzioni](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Sicurezza dell'Health Insurance Portability and Accountability Act (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Istituto nazionale di standard e tecnologia (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Standard di sicurezza dei dati del settore delle carte di pagamento (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Epiche
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configura l'ambiente
<a name="set-up-the-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ambiente Python virtuale. | Nel tuo AWS Cloud9 IDE, crea un ambiente Python virtuale e installa le dipendenze richieste eseguendo il seguente comando:`make install` | Developer | 
| Avvia il comando Account AWS e per. Regione AWS AWS CDK | Esegui il bootstrap di required Account AWS e Region eseguendo il seguente comando:`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Aggiungi una nuova pipeline per un microservizio
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Aggiungete il codice di esempio alla directory dell'applicazione. | Aggiungi la directory che contiene il codice dell'applicazione di esempio alla `monorepo-sample` directory del repository GitHub [AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) multi-pipeline triggers clonato. | Developer | 
| Modificare il file `monorepo-main.json`. | Aggiungi il nome della directory del codice dell'applicazione e il nome della pipeline al file nel repository clonato. `monorepo-main.json` | Developer | 
| Crea la pipeline. | Nella `Pipelines` directory del repository, aggiungi la pipeline `class` per la tua applicazione. La directory contiene due file di esempio e. `pipeline_hotsite.py` `pipeline_demo.py` Ogni file ha tre fasi: origine, compilazione e distribuzione.È possibile copiare uno dei file e modificarlo in base ai requisiti dell'applicazione.  | Developer | 
| Modificare il file `monorepo_config.py`. | In`service_map`, aggiungi il nome della directory per la tua applicazione e la classe che hai creato per la pipeline.Ad esempio, il codice seguente mostra una definizione di pipeline nella `Pipelines` directory che utilizza un file denominato `pipeline_mysample.py` con una `MySamplePipeline` classe:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Developer | 

### Distribuisci lo stack MonoRepoStack
<a name="deploy-the-monorepostack-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci lo AWS CloudFormation stack. | Distribuisci lo AWS CloudFormation `MonoRepoStack` stack con i valori dei parametri predefiniti nella directory principale del repository clonato eseguendo il comando. `make deploy-core`È possibile modificare il nome del repository eseguendo il comando. `make deploy-core monorepo-name=<repo_name>`È possibile distribuire contemporaneamente entrambe le pipeline utilizzando il comando. `make deploy monorepo-name=<repo_name>` | Developer | 
| Convalida il repository. CodeCommit  | Verifica che le tue risorse siano state create eseguendo il comando. `aws codecommit get-repository --repository-name <repo_name>` Poiché lo CloudFormation stack crea il CodeCommit repository in cui è archiviato il monorepo, non eseguire il `cdk destroy MonoRepoStack ` comando se hai iniziato a inserire modifiche al monorepo. | Developer | 
| Convalida i risultati dello stack. CloudFormation  | Verifica che lo CloudFormation `MonoRepoStack` stack sia stato creato e configurato correttamente eseguendo il comando seguente:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Implementa lo stack PipelinesStack
<a name="deploy-the-pipelinesstack-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci lo CloudFormation stack. | Lo AWS CloudFormation `PipelinesStack` stack deve essere distribuito dopo aver distribuito lo stack. `MonoRepoStack` Lo stack aumenta di dimensioni quando vengono aggiunti nuovi microservizi alla base di codice di monorepo e viene ridistribuito quando viene integrato un nuovo microservizio.Distribuisci lo stack PipelinesStack eseguendo il comando. `make deploy-pipelines`È inoltre possibile distribuire contemporaneamente entrambe le pipeline eseguendo il comando. `make deploy monorepo-name=<repo_name>`Il seguente output di esempio mostra come la `PipelinesStacks` distribuzione stampa i dati URLs per i microservizi alla fine dell'implementazione:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Convalida i risultati dello AWS CloudFormation stack. | Verifica che lo AWS CloudFormation `PipelinesStacks` stack sia stato creato e configurato correttamente eseguendo il comando seguente:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina i tuoi AWS CloudFormation stack. | Esegui il comando `make destroy`. | Developer | 
| Elimina i bucket S3 per le tue pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## risoluzione dei problemi
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Ho riscontrato dei problemi. AWS CDK  | Consulta [Risoluzione dei AWS CDK problemi più comuni](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) nella documentazione di AWS CDK. | 
| Ho inviato il mio codice di microservizio, ma la pipeline dei microservizi non ha funzionato. | **Convalida della configurazione***Verifica la configurazione della filiale:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Convalida i file di configurazione:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Risoluzione dei problemi sulla console***AWS CodePipeline controlli:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda risoluzione dei problemi:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Devo ridistribuire tutti i miei microservizi.  | Esistono due approcci per forzare la ridistribuzione di tutti i microservizi. Scegliete l'opzione più adatta alle vostre esigenze.**Approccio 1: Eliminare un parametro in Parameter Store**Questo metodo prevede l'eliminazione di un parametro specifico in Systems Manager Parameter Store che tiene traccia dell'ultimo ID di commit utilizzato per la distribuzione. Quando si rimuove questo parametro, il sistema è costretto a ridistribuire tutti i microservizi al successivo trigger, perché lo percepisce come uno stato nuovo.Fasi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Pro:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contro:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Approccio 2: invia un commit in ogni sottocartella monorepo**Questo metodo prevede di apportare una modifica minore e di inserirla in ciascuna sottocartella di microservizi all'interno del monorepo per avviare le relative pipeline individuali.Fasi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Pro:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contro:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Risorse correlate
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integrazione e distribuzione continue (CI/CD) con CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentazione)AWS CDK 
+ [modulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (riferimento API)AWS CDK 

# Integra un repository Bitbucket con AWS Amplify utilizzando AWS CloudFormation
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation"></a>

*Alwin Abraham, Amazon Web Services*

## Riepilogo
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-summary"></a>

AWS Amplify ti aiuta a distribuire e testare rapidamente siti Web statici senza dover configurare l'infrastruttura normalmente richiesta. Puoi implementare l'approccio di questo modello se la tua organizzazione desidera utilizzare Bitbucket per il controllo del codice sorgente, sia per migrare il codice applicativo esistente che per creare una nuova applicazione. Utilizzando AWS CloudFormation per configurare automaticamente Amplify, offri visibilità sulle configurazioni che utilizzi.

Questo modello descrive come creare una pipeline e un ambiente di distribuzione front-end di integrazione continua e distribuzione continua (CI/CD) utilizzando AWS CloudFormation per integrare un repository Bitbucket con AWS Amplify. L'approccio del pattern significa che puoi creare una pipeline front-end Amplify per implementazioni ripetibili.

## Prerequisiti e limitazioni
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-prereqs"></a>

**Prerequisiti******
+ Un account Amazon Web Services (AWS) attivo
+ Un account Bitbucket attivo con accesso da amministratore
+ [Accesso a un terminale che utilizza [cURL](https://curl.se/) o l'applicazione Postman](https://www.postman.com/)
+ Familiarità con Amplify
+ Familiarità con AWS CloudFormation
+ Familiarità con i file in formato YAML

## Architecture
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-architecture"></a>

![\[Diagram showing user interaction with Bitbucket repository connected to AWS Amplify in Cloud AWS region.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/images/25d73a9d-d2ae-40bc-9ebc-57f9bd13884a.png)


**Stack tecnologico**
+ Amplify
+ AWS CloudFormation
+ Bitbucket

## Tools (Strumenti)
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-tools"></a>
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/) — Amplify aiuta gli sviluppatori a sviluppare e distribuire app mobili e Web basate sul cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation è un servizio che ti aiuta a modellare e configurare le tue risorse AWS in modo da poter dedicare meno tempo alla gestione di tali risorse e più tempo a concentrarti sulle applicazioni eseguite in AWS.
+ [Bitbucket](https://bitbucket.org/) — Bitbucket è una soluzione di gestione di repository Git progettata per team di professionisti. Ti offre un posto centrale per gestire gli archivi Git, collaborare sul codice sorgente e guidarti attraverso il flusso di sviluppo.

 

**Codice**

Il `bitbucket-amplify.yml` file (allegato) contiene il CloudFormation modello AWS per questo modello.

## Epiche
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-epics"></a>

### Configura il repository Bitbucket
<a name="configure-the-bitbucket-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| (Facoltativo) Crea un repository Bitbucket.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Puoi anche utilizzare un repository Bitbucket esistente. | DevOps ingegnere | 
| Apri le impostazioni dell'area di lavoro. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingegnere | 
| Crea un OAuth consumatore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps ingegnere | 
| Ottieni il token di OAuth accesso.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)`curl -X POST -u "KEY:SECRET" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials `Sostituisci `KEY` e `SECRET` con la chiave e il segreto che hai registrato in precedenza. 2. Registra il token di accesso senza usare le virgolette. Il token è valido solo per un periodo di tempo limitato e il tempo predefinito è di due ore. È necessario eseguire il CloudFormation modello AWS in questo lasso di tempo. | DevOps ingegnere | 

### Crea e distribuisci lo stack AWS CloudFormation
<a name="create-and-deploy-the-aws-cloudformation-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Scarica il CloudFormation modello AWS. | Scarica il CloudFormation modello `bitbucket-amplify.yml` AWS (allegato). Questo modello crea la CI/CD pipeline in Amplify, oltre al progetto e al ramo Amplify. |  | 
| Crea e distribuisci lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)5. Scegli **Avanti**, quindi scegli **Crea** pila. | DevOps ingegnere | 

### Prova la CI/CD pipeline
<a name="test-the-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci il codice nella filiale del tuo repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Per ulteriori informazioni su questo argomento, consulta [i comandi Git di base](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html) nella documentazione di Bitbucket.  | Sviluppatore di app | 

## Risorse correlate
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-resources"></a>

[Metodi di autenticazione (documentazione](https://developer.atlassian.com/bitbucket/api/2/reference/meta/authentication) Atlassian)

## Allegati
<a name="attachments-24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/attachments/attachment.zip)

# Avvia un CodeBuild progetto su più account AWS utilizzando Step Functions e una funzione proxy Lambda
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function"></a>

*Richard Milner-Watts e Amit Anjarlekar, Amazon Web Services*

## Riepilogo
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-summary"></a>

Questo modello dimostra come avviare in modo asincrono un progetto AWS CodeBuild su più account AWS utilizzando AWS Step Functions e una funzione proxy AWS Lambda. Puoi utilizzare la macchina a stati Step Functions di esempio del pattern per testare il successo del tuo CodeBuild progetto.

CodeBuild ti aiuta ad avviare attività operative utilizzando l'AWS Command Line Interface (AWS Command Line Interface) da un ambiente di runtime completamente gestito. Puoi modificare il comportamento del CodeBuild progetto in fase di esecuzione sovrascrivendo le variabili di ambiente. Inoltre, puoi utilizzarlo CodeBuild per gestire i flussi di lavoro. Per ulteriori informazioni, consulta [Service Catalog Tools](https://service-catalog-tools-workshop.com/tools.html) sul sito Web di AWS Workshop e [Schedule jobs in Amazon RDS for PostgreSQL CodeBuild using AWS EventBridge and Amazon sul blog di AWS Database](https://aws.amazon.com/blogs/database/schedule-jobs-in-amazon-rds-for-postgresql-using-aws-codebuild-and-amazon-eventbridge/).

## Prerequisiti e limitazioni
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-prereqs"></a>

**Prerequisiti**
+ Due account AWS attivi: un account di origine per richiamare una funzione proxy Lambda con Step Functions e un account di destinazione per la creazione di un progetto di esempio remoto CodeBuild 

**Limitazioni**
+ Questo modello non può essere utilizzato per copiare [artefatti](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html) tra account.

## Architecture
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-architecture"></a>

Il diagramma seguente mostra l'architettura creata da questo modello.

![\[Diagramma dell'architettura del lancio di un CodeBuild progetto su più account AWS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/857ba3ae-eb9a-4d6b-b73e-e596f41c8cb8.png)


Il diagramma mostra il flusso di lavoro seguente:

1. La macchina a stati Step Functions analizza la mappa di input fornita e richiama la funzione proxy Lambda (`codebuild-proxy-lambda`) per ogni account, regione e progetto definito.

1. La funzione proxy Lambda utilizza AWS Security Token Service (AWS STS) per assumere un ruolo proxy IAM (`codebuild-proxy-role`), associato a una policy IAM (`codebuild-proxy-policy`) nell'account di destinazione.

1. Utilizzando il ruolo assunto, la funzione Lambda avvia il CodeBuild progetto e restituisce l'ID del CodeBuild lavoro. La macchina a stati Step Functions esegue un loop ed esegue il polling del CodeBuild lavoro fino a quando non riceve uno stato di successo o di fallimento.

La logica della macchina a stati è mostrata nell'immagine seguente.

![\[Workflow della macchina a stati Step Functions\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/4729bbfc-79ad-455d-a85a-b96cce00f432.png)


**Stack tecnologico**
+ AWS CloudFormation
+ CodeBuild
+ IAM
+ Lambda
+ Step Functions
+ X-Ray

## Tools (Strumenti)
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-tools"></a>
+ [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.
+ [AWS CloudFormation Designer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html) fornisce un editor JSON e YAML integrato che ti aiuta a visualizzare e modificare i modelli. CloudFormation 
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) è un servizio di orchestrazione serverless che ti aiuta a combinare le funzioni di AWS Lambda e altri servizi AWS per creare applicazioni aziendali critiche.
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) ti aiuta a raccogliere dati sulle richieste servite dalla tua applicazione e fornisce strumenti che puoi utilizzare per visualizzare, filtrare e ottenere informazioni su tali dati per identificare problemi e opportunità di ottimizzazione.

**Codice**

Il codice di esempio per questo modello è disponibile nel repository GitHub [Cross Account CodeBuild Proxy](https://github.com/aws-samples/cross-account-codebuild-proxy). Questo modello utilizza la libreria AWS Lambda Powertools for Python per fornire funzionalità di registrazione e tracciamento. Per ulteriori informazioni su questa libreria e le sue utilità, consulta [Powertools for AWS Lambda (](https://docs.powertools.aws.dev/lambda/python/latest/)Python).

## Best practice
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-best-practices"></a>

1. Modifica i valori del tempo di attesa nella macchina a stati Step Function per ridurre al minimo le richieste di polling sullo stato del lavoro. Utilizza il tempo di esecuzione previsto per il CodeBuild progetto.

1. Modifica la `MaxConcurrency` proprietà della mappa in Step Functions per controllare quanti CodeBuild progetti possono essere eseguiti in parallelo.

1. Se necessario, esaminate il codice di esempio per verificarne la disponibilità alla produzione. Valuta quali dati potrebbero essere registrati dalla soluzione e se la CloudWatch crittografia Amazon predefinita è sufficiente.

## Epiche
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-epics"></a>

### Crea la funzione proxy Lambda e il ruolo IAM associato nell'account di origine
<a name="create-the-lambda-proxy-function-and-associated-iam-role-in-the-source-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Registra l'account AWS IDs. |  IDs Gli account AWS sono necessari per configurare l'accesso tra account.Registra l'ID dell'account AWS per i tuoi account di origine e di destinazione. Per ulteriori informazioni, consulta [Finding your AWS account ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) nella documentazione IAM. | AWS DevOps | 
| Scarica i CloudFormation modelli AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Nei CloudFormation modelli AWS, `<SourceAccountId>` è l'ID dell'account AWS per l'account di origine e `<TargetAccountId>` l'ID dell'account AWS per l'account di destinazione. | AWS DevOps | 
| Crea e distribuisci lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)È necessario creare lo CloudFormation stack AWS per la funzione proxy Lambda prima di creare risorse negli account di destinazione. Quando crei una policy di fiducia in un account di destinazione, il ruolo IAM viene tradotto dal nome del ruolo a un identificatore interno. Questo è il motivo per cui il ruolo IAM deve già esistere. | AWS DevOps | 
| Conferma la creazione della funzione proxy e della macchina a stati. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Crea un ruolo IAM nell'account di destinazione e avvia un CodeBuild progetto di esempio
<a name="create-an-iam-role-in-the-target-account-and-launch-a-sample-codebuild-project"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea e distribuisci lo CloudFormation stack AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Verifica la creazione del CodeBuild progetto di esempio.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Prova la funzione proxy Lambda per più account
<a name="test-the-cross-account-lambda-proxy-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia la macchina statale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Convalida le variabili di ambiente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

## risoluzione dei problemi
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| L'esecuzione di Step Functions sta impiegando più tempo del previsto. | Regola la `MaxConcurrency` proprietà della mappa nella macchina a stati Step Function per controllare quanti CodeBuild progetti possono essere eseguiti in parallelo. | 
| L'esecuzione dei CodeBuild lavori richiede più tempo del previsto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | 

# Gestione del failover Multi-AZ per i cluster EMR utilizzando Application Recovery Controller
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra e Nidhi Sharma, Amazon Web Services*

## Riepilogo
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Questo modello offre una strategia di disaster recovery efficiente per i carichi di lavoro di Amazon EMR per contribuire a garantire un'elevata disponibilità e coerenza dei dati su più zone di disponibilità all'interno di un'unica. Regione AWS Il design utilizza [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) e un [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) per gestire le operazioni di failover e la distribuzione del traffico per un cluster EMR basato su Apache Spark. 

In condizioni standard, la zona di disponibilità principale ospita un cluster EMR attivo e un'applicazione con funzionalità complete read/write . Se una zona di disponibilità si guasta inaspettatamente, il traffico viene reindirizzato automaticamente alla zona di disponibilità secondaria, dove viene avviato un nuovo cluster EMR. Entrambe le zone di disponibilità accedono a un bucket Amazon Simple Storage Service (Amazon S3) condiviso tramite endpoint [gateway dedicati](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html), che garantiscono una gestione coerente dei dati. Questo approccio riduce al minimo i tempi di inattività e consente il ripristino rapido dei carichi di lavoro critici relativi ai Big Data durante i guasti delle zone di disponibilità. La soluzione è utile in settori come la finanza o la vendita al dettaglio, dove l'analisi in tempo reale è fondamentale.

## Prerequisiti e limitazioni
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Prerequisiti**
+ Un attivo [Account AWS](https://aws.amazon.com/resources/create-account/)
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) su Amazon Elastic Compute Cloud (Amazon) EC2
+ Accesso dal nodo master del cluster EMR ad Amazon S3.
+ AWS Infrastruttura Multi-AZ

**Limitazioni**
+ Alcune Servizi AWS non sono disponibili in tutte Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta la pagina [Endpoint e quote del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ [Amazon EMR 6.x e versioni successive](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Architecture
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Stack tecnologico Target**
+ Cluster Amazon EMR
+ Amazon Application Recovery Controller
+ Application Load Balancer
+ Bucket Amazon S3
+ Endpoint gateway per Amazon S3

**Architettura di destinazione**

![\[Architettura per un meccanismo di ripristino automatizzato con Application Recovery Controller.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Questa architettura fornisce la resilienza delle applicazioni utilizzando più zone di disponibilità e implementando un meccanismo di ripristino automatico tramite Application Recovery Controller.

1. L'Application Load Balancer indirizza il traffico verso l'ambiente Amazon EMR attivo, che in genere è il cluster EMR primario nella zona di disponibilità principale.

1. Il cluster EMR attivo elabora le richieste delle applicazioni e si connette ad Amazon S3 tramite l'endpoint gateway Amazon S3 dedicato per le operazioni di lettura e scrittura.

1. Amazon S3 funge da archivio centrale di dati ed è potenzialmente utilizzato come checkpoint o come storage condiviso tra cluster EMR. I cluster EMR mantengono la coerenza dei dati quando scrivono direttamente su Amazon S3 tramite il protocollo `s3://` e l'EMR File System ([EMRFS](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html)). 

1. Application Recovery Controller monitora continuamente lo stato della zona di disponibilità principale e gestisce automaticamente le operazioni di failover quando necessario.

1. Se l'Application Recovery Controller rileva un errore nel cluster EMR primario, esegue le seguenti azioni:
   + Avvia il processo di failover sul cluster EMR secondario nella zona di disponibilità 2.
   + Aggiorna le configurazioni di routing per indirizzare il traffico verso il cluster secondario.

## Tools (Strumenti)
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Servizi AWS**
+ [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) ti**** aiuta a gestire e coordinare il ripristino delle tue applicazioni su tutte Regioni AWS le zone di disponibilità. Questo servizio semplifica il processo e migliora l'affidabilità del ripristino delle applicazioni riducendo i passaggi manuali richiesti dagli strumenti e dai processi tradizionali.
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) opera a livello di applicazione, che è il settimo livello del modello Open Systems Interconnection (OSI). Distribuisce il traffico delle applicazioni in entrata su più destinazioni, ad esempio EC2 istanze, in più zone di disponibilità. Ciò aumenta la disponibilità dell'applicazione.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) è una piattaforma di big data che fornisce elaborazione dati, analisi interattiva e apprendimento automatico per framework open source come Apache Spark, Apache Hive e Presto.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) offre una semplice interfaccia di servizio Web che puoi utilizzare per archiviare e recuperare qualsiasi quantità di dati, in qualsiasi momento e da qualsiasi luogo. Utilizzando questo servizio, puoi creare facilmente applicazioni che utilizzano lo storage nativo del cloud.
+ Gli [endpoint gateway per Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) S3 sono gateway specificati nella tabella di routing per accedere ad Amazon S3 dal tuo cloud privato virtuale (VPC) sulla rete. AWS 

## Best practice
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Segui le [AWS best practice per la sicurezza, l'identità e la conformità](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all) per garantire un'architettura solida e sicura.
+ Allinea l'architettura con il [AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/) Framework.
+ Usa Amazon S3 Access Grants per gestire l'accesso dal tuo cluster EMR basato su Spark ad Amazon S3. Per maggiori dettagli, consulta il post del blog [Usa Amazon EMR con S3 Access Grants per scalare l'accesso Spark ad Amazon S3](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/).
+ [Migliora le prestazioni di Spark con Amazon](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html) S3.

## Epiche
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Accedi alla Console di gestione AWS. | Accedere alla [Console di gestione AWS](https://console.aws.amazon.com/) come utente IAM. Per istruzioni, consulta la [AWS documentazione](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Configura il AWS CLI. **** | Installa AWS CLI o aggiornalo alla versione più recente in modo da poter interagire con Servizi AWS in Console di gestione AWS. Per istruzioni, consulta la [AWS CLI documentazione](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Implementa un'applicazione Spark sul tuo cluster EMR
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un bucket S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Crea un cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Configurare le impostazioni di sicurezza per il cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Connect al cluster EMR. | Connect al nodo master del cluster EMR tramite SSH utilizzando la key pair fornita.Assicurati che il file key pair sia presente nella stessa directory dell'applicazione.Esegui i seguenti comandi per impostare le autorizzazioni corrette per la key pair e stabilire la connessione SSH:<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Distribuisci l'applicazione Spark. | Dopo aver stabilito la connessione SSH, ti troverai nella console Hadoop.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Monitora l'applicazione Spark. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### Sposta il traffico verso un'altra zona di disponibilità
<a name="shift-traffic-to-another-availability-zone"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un Application Load Balancer. | Configura il gruppo target che indirizza il traffico tra i nodi master di Amazon EMR distribuiti su due zone di disponibilità all'interno di una. Regione AWSPer istruzioni, consulta [Creare un gruppo target per il tuo Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) nella documentazione di Elastic Load Balancing. | AWS DevOps | 
| Configura lo spostamento zonale in Application Recovery Controller. | In questo passaggio, utilizzerai la [funzionalità di spostamento zonale](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) in Application Recovery Controller per spostare il traffico verso un'altra zona di disponibilità.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)Per utilizzare il AWS CLI, consulta [Esempi di utilizzo di AWS CLI with zonal shift](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) nella documentazione di Application Recovery Controller. | AWS DevOps | 
| Verifica la configurazione e l'avanzamento dei turni zonali. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## Risorse correlate
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI comandi:
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Configurazione dei tipi di istanze del cluster Amazon EMR e delle best practice per le istanze Spot](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) (documentazione Amazon EMR)
+ [Le migliori pratiche di sicurezza in IAM (documentazione IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html))
+ [Usa i profili di istanza](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (documentazione IAM)
+ [Usa zonal shift e zonal autoshift per ripristinare le applicazioni in ARC (documentazione dell'Application Recovery](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) Controller)

# Gestisci le blue/green distribuzioni di microservizi su più account e regioni utilizzando i servizi di codice AWS e le chiavi multiregionali AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu e Anand Krishna Varanasi, Amazon Web Services*

## Riepilogo
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Questo modello descrive come distribuire un'applicazione globale di microservizi da un account AWS centrale a più account di carico di lavoro e regioni in base a una blue/green strategia di distribuzione. Il pattern supporta quanto segue:
+ Il software è sviluppato in un account centrale, mentre i carichi di lavoro e le applicazioni sono distribuiti su più account e regioni AWS.
+ Una singola chiave multiregionale AWS Key Management System (AWS KMS) viene utilizzata per la crittografia e la decrittografia per coprire il disaster recovery.
+ La chiave KMS è specifica della regione e deve essere gestita o creata in tre diverse regioni per gli artefatti della pipeline. Una chiave multiregionale KMS aiuta a mantenere lo stesso ID chiave in tutte le regioni.
+ Il modello di ramificazione del flusso di lavoro Git è implementato con due rami (development e main) e il codice viene unito utilizzando pull request (PRs). La funzione AWS Lambda distribuita da questo stack crea un PR dal ramo di sviluppo al ramo principale. L'unione delle pubbliche relazioni con la filiale principale avvia una CodePipeline pipeline AWS, che orchestra il flusso di integrazione continua e distribuzione continua (CI/CD) e distribuisce gli stack tra gli account.

Questo modello fornisce un esempio di configurazione dell'infrastruttura come codice (IaC) tramite gli CloudFormation stack AWS per dimostrare questo caso d'uso. La blue/green distribuzione dei microservizi viene implementata utilizzando AWS CodeDeploy.

## Prerequisiti e limitazioni
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Prerequisiti**
+ Quattro account AWS attivi:
  + Un account di strumenti per gestire la pipeline di codice e mantenere il CodeCommit repository AWS.
  + Tre account di carico di lavoro (test) per la distribuzione del carico di lavoro dei microservizi.
+ Questo modello utilizza le seguenti regioni. Se desideri utilizzare altre regioni, devi apportare le modifiche appropriate agli stack multiregione AWS CodeDeploy e AWS KMS.
  + Account Tools (AWS CodeCommit): `ap-south-1`
  + Account Workload (test) 1: `ap-south-1`
  + Account per il carico di lavoro (test) 2: `eu-central-1`
  + Account per il carico di lavoro (test) 3: `us-east-1`
+ Tre bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) per le regioni di distribuzione in ogni account di carico di lavoro. (Queste vengono chiamate `S3BUCKETNAMETESTACCOUNT1` `S3BUCKETNAMETESTACCOUNT2 ` e `S3BUCKETNAMETESTACCOUNT3 ` più avanti in questo schema).

  Ad esempio, puoi creare questi bucket in account e regioni specifici con nomi di bucket univoci come segue (sostituisci *xxxx* con un numero casuale):

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Limitazioni**

Il modello utilizza AWS CodeBuild e altri file di configurazione per distribuire un microservizio di esempio. Se hai un tipo di carico di lavoro diverso (ad esempio, serverless), devi aggiornare tutte le configurazioni pertinenti.

## Architecture
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Stack tecnologico Target**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Architettura Target**

![\[Architettura target per la distribuzione di microservizi su più account e regioni\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automazione e scalabilità**

La configurazione è automatizzata utilizzando i modelli di CloudFormation stack AWS (IaC). Può essere facilmente scalato per più ambienti e account.

## Tools (Strumenti)
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Servizi AWS**
+ [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.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o istanze locali, funzioni AWS Lambda o servizi Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ti CodePipeline aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [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.

**Strumenti aggiuntivi**
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source che funziona con il CodeCommit repository AWS.
+ [Docker](https://www.docker.com/) è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container. Questo modello utilizza Docker per creare e testare le immagini dei container localmente.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) e [cfn-nag](https://github.com/stelligent/cfn_nag) sono strumenti open source che ti aiutano a esaminare CloudFormation gli stack per eventuali errori e problemi di sicurezza.

**Archivio di codici**

Il codice per questo modello è disponibile nell'archivio GitHub [Global Blue/Green deployments in multiple region and accounts](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Epiche
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Impostazione delle variabili di ambiente
<a name="set-up-environment-variables"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esporta le variabili di ambiente per la distribuzione CloudFormation in stack. | Definisci le variabili di ambiente che verranno utilizzate come input per gli CloudFormation stack più avanti in questo schema.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package e distribuzione degli CloudFormation stack per l'infrastruttura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Clona il [repository di esempio](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) in un nuovo repository nella tua sede di lavoro:<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Package delle risorse di Cloudformation. | In questo passaggio, impacchetterai gli artefatti locali a cui i CloudFormation modelli fanno riferimento per creare le risorse di infrastruttura necessarie per servizi come Amazon Virtual Private Cloud (Amazon VPC) e Application Load Balancer.I modelli sono disponibili nella `Infra` cartella del repository del codice.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Convalida i modelli di pacchetto. | Convalida i modelli di pacchetto:<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Distribuisci i file del pacchetto negli account dei carichi di lavoro, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Invia un'immagine di esempio e ridimensiona Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia un'immagine di esempio al repository Amazon ECR. | Invia un'immagine di esempio (NGINX) al repository Amazon Elastic Container Registry (Amazon ECR) `web` denominato (come impostato nei parametri). Puoi personalizzare l'immagine come richiesto.Per accedere e impostare le credenziali per inviare un'immagine ad Amazon ECR, segui le istruzioni nella documentazione di [Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) ECR.I comandi sono:<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Ridimensiona Amazon ECS e verifica l'accesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configura servizi e risorse di codice
<a name="set-up-code-services-and-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un CodeCommit repository nell'account degli strumenti. | Crea un CodeCommit repository nell'account degli strumenti utilizzando il `codecommit.yaml` modello, che si trova nella `code` cartella del GitHub repository. È necessario creare questo repository solo nella singola regione in cui si prevede di sviluppare il codice.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Crea un bucket S3 per gestire gli artefatti generati da. CodePipeline | Crea un bucket S3 per gestire gli artefatti generati CodePipeline utilizzando il `pre-reqs-bucket.yaml` modello, che si trova nella cartella del repository. `code` GitHub Gli stack devono essere distribuiti in tutti e tre gli account e le regioni per carichi di lavoro (test) e strumenti.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configura una chiave KMS multiregionale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configura il CodeBuild progetto nell'account degli strumenti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configurazione CodeDeploy negli account di carico di lavoro. | Utilizza il `codedeploy.yaml` modello nella `code` cartella del GitHub repository per eseguire la configurazione CodeDeploy in tutti e tre gli account di carico di lavoro. L'output di `mainInfraStack` include Amazon Resource Names (ARNs) del cluster Amazon ECS e il listener Application Load Balancer.I valori degli stack di infrastruttura vengono già esportati, quindi vengono importati dai modelli di stack. CodeDeploy <pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configura CodePipeline nell'account degli strumenti
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una pipeline di codice nell'account degli strumenti. | Nell'account degli strumenti, esegui il comando:<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Fornisci accesso CodePipeline e CodeBuild ruoli nella policy chiave di AWS KMS e nella policy del bucket S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Chiama e testa la pipeline
<a name="call-and-test-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia le modifiche al CodeCommit repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci tutte le risorse distribuite. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Risoluzione dei problemi
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Le modifiche che hai eseguito nel repository non vengono distribuite. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Risorse correlate
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Inviare un'immagine Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentazione Amazon ECR)
+ [Connect a un CodeCommit repository AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentazione AWS)
+ [Risoluzione dei problemi AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentazione AWS)

# Monitora i repository Amazon ECR per le autorizzazioni wildcard utilizzando AWS e AWS Config CloudFormation
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar, Wassim Benhallam e Sajid Momin, Amazon Web Services*

## Riepilogo
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

Sul cloud Amazon Web Services (AWS), Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito che supporta repository privati con autorizzazioni basate su risorse utilizzando AWS Identity and Access Management (IAM).

IAM supporta il carattere jolly `*` "" sia negli attributi resource che action, il che semplifica la scelta automatica di più elementi corrispondenti. [Nel tuo ambiente di test, puoi consentire a tutti gli utenti AWS autenticati di accedere a un repository Amazon ECR utilizzando l'[autorizzazione `ecr:*` wildcard](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html) in un elemento principale della dichiarazione sulla politica del repository.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) L'autorizzazione `ecr:*` wildcard può essere utile per lo sviluppo e il test in account di sviluppo che non possono accedere ai dati di produzione.

Tuttavia, è necessario assicurarsi che l'autorizzazione `ecr:*` con i caratteri jolly non venga utilizzata negli ambienti di produzione perché può causare gravi vulnerabilità di sicurezza. L'approccio di questo modello ti aiuta a identificare i repository Amazon ECR che contengono l'autorizzazione `ecr:*` wildcard nelle dichiarazioni sulle politiche relative ai repository.   Il modello fornisce i passaggi e un CloudFormation modello AWS per creare una regola personalizzata in AWS Config. Una funzione AWS Lambda monitora quindi le dichiarazioni sulla policy del repository Amazon ECR per le autorizzazioni wildcard. `ecr:*` Se rileva dichiarazioni di policy relative ai repository non conformi, Lambda notifica ad AWS Config l'invio di un evento ad Amazon EventBridge e EventBridge quindi avvia un argomento su Amazon Simple Notification Service (Amazon SNS). L'argomento SNS ti notifica via e-mail le dichiarazioni sulle politiche relative ai repository non conformi.

## Prerequisiti e limitazioni
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ AWS Command Line Interface (AWS CLI), installata e configurata. Per ulteriori informazioni su questo argomento, consulta [Installazione, aggiornamento e disinstallazione dell'interfaccia a riga di comando di AWS nella documentazione dell'interfaccia](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) a riga di comando di AWS.
+ Un repository Amazon ECR esistente con una dichiarazione di policy allegata, installato e configurato nel tuo ambiente di test. Per ulteriori informazioni su questo argomento, consulta [Creazione di un repository privato](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) e [Impostazione di una dichiarazione sulla politica del repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) nella documentazione di Amazon ECR.
+ AWS Config, configurato nella tua regione AWS preferita. Per ulteriori informazioni su questo argomento, consulta [Getting started with AWS Config nella documentazione](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) di AWS Config.
+ Il `aws-config-cloudformation.template` file (allegato), scaricato sul computer locale.

 

**Limitazioni**
+ La soluzione di questo modello è regionale e le risorse devono essere create nella stessa regione. 

## Architecture
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

Il diagramma seguente mostra come AWS Config valuta le dichiarazioni sulle policy dei repository Amazon ECR. 

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


Il diagramma mostra il flusso di lavoro seguente:

1. AWS Config avvia una regola personalizzata. 

1. La regola personalizzata richiama una funzione Lambda per valutare la conformità delle dichiarazioni politiche del repository Amazon ECR. La funzione Lambda identifica quindi le dichiarazioni di policy del repository non conformi.

1. La funzione Lambda invia lo stato di non conformità ad AWS Config.

1. AWS Config invia un evento a. EventBridge

1. EventBridge pubblica le notifiche di non conformità su un argomento SNS.

1. Amazon SNS invia un avviso e-mail a te o a un utente autorizzato.

**Automazione e scalabilità**

La soluzione di questo modello è in grado di monitorare un numero qualsiasi di dichiarazioni sulla politica dei repository Amazon ECR, ma tutte le risorse che desideri valutare devono essere create nella stessa regione.

## Tools (Strumenti)
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS ti CloudFormation aiuta a modellare e configurare le tue risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle per tutto il loro ciclo di vita. Puoi utilizzare un modello per descrivere le tue risorse e le loro dipendenze e lanciarle e configurarle insieme come uno stack, invece di gestire le risorse singolarmente. Puoi gestire e fornire stack su più account AWS e regioni AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html): AWS Config fornisce una visualizzazione dettagliata della configurazione delle risorse AWS nel tuo account AWS. Questo include le relazioni tra le risorse e la maniera in cui sono state configurate in passato, in modo che tu possa vedere come le configurazioni e le relazioni cambiano nel corso del tempo.
+ [Amazon ECR****](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) —**** Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito da AWS sicuro, scalabile e affidabile. Amazon ECR supporta i repository privati con autorizzazioni basate sulle risorse utilizzando IAM.                                 
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html): Amazon EventBridge è un servizio di bus eventi senza server che puoi utilizzare per connettere le tue applicazioni con dati provenienti da una varietà di fonti. EventBridge fornisce un flusso di dati in tempo reale dalle tue applicazioni, dalle applicazioni SaaS (SaaS) e dai servizi AWS a target come funzioni AWS Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri account.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): AWS Lambda è 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 SNS — Amazon Simple](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Notification Service (Amazon SNS) coordina e gestisce la consegna o l'invio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail. I sottoscrittori ricevono tutti gli stessi messaggi pubblicati sugli argomenti ai quali sono hanno effettuato la sottoscrizione. 

**Codice**

Il codice per questo pattern è disponibile nel `aws-config-cloudformation.template` file (allegato).

## Epiche
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### Crea lo CloudFormation stack AWS
<a name="create-the-aws-cloudformation-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea lo CloudFormation stack AWS. | Crea uno CloudFormation stack AWS eseguendo il seguente comando nell'interfaccia a riga di comando di AWS:<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Prova la regola personalizzata di AWS Config
<a name="test-the-aws-config-custom-rule"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova la regola personalizzata di AWS Config. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## Allegati
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)

# Ottimizza le implementazioni serverless multi-account utilizzando i flussi di lavoro e Actions AWS CDK GitHub
<a name="optimize-multi-account-serverless-deployments"></a>

*Sarat Chandra Pothula e VAMSI KRISHNA SUNKAVALLI, Amazon Web Services*

## Riepilogo
<a name="optimize-multi-account-serverless-deployments-summary"></a>

Organizations che implementano un'infrastruttura serverless su più Account AWS ambienti spesso incontrano sfide come la duplicazione del codice, i processi manuali e le pratiche non coerenti. La soluzione di questo modello mostra come utilizzare i flussi di lavoro riutilizzabili di Go and GitHub Actions per semplificare la AWS Cloud Development Kit (AWS CDK) gestione dell'infrastruttura serverless con più account. Questa soluzione dimostra come definire le risorse cloud come codice, implementare processi di integration/continuous distribuzione continua standardizzati (CI/CD) e creare componenti modulari e riutilizzabili. 

Utilizzando questi strumenti, le organizzazioni possono gestire in modo efficiente le risorse tra account, implementare pipeline di distribuzione coerenti e semplificare architetture serverless complesse. L'approccio migliora anche la sicurezza e la conformità applicando pratiche standardizzate di utilizzo Account AWS, migliorando in ultima analisi la produttività e riducendo gli errori nello sviluppo e nella distribuzione di applicazioni serverless.

## Prerequisiti e limitazioni
<a name="optimize-multi-account-serverless-deployments-prereqs"></a>

**Prerequisiti**
+ Un Account AWS attivo.
+ AWS Identity and Access Management [I ruoli e le autorizzazioni](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html) (IAM) sono disponibili per il processo di distribuzione. Ciò include le autorizzazioni per accedere ai repository Amazon Elastic Container Registry (Amazon ECR), creare AWS Lambda funzioni e qualsiasi altra risorsa richiesta nell'ambito della destinazione. Account AWS
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
+ AWS Cloud Development Kit (AWS CDK) [https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)
+ [Go 1.22 o versione successiva, installata.](https://go.dev/doc/install)
+ [Docker 24.0.6 o versione successiva, installato.](https://docs.docker.com/engine/install/)

**Limitazioni**
+ **Compatibilità linguistica**: Go è un linguaggio popolare per le applicazioni serverless. Tuttavia, oltre a Go, AWS CDK supporta altri linguaggi di programmazione, tra cui C\$1, Java, Python e. TypeScript Se la tua organizzazione dispone di basi di codice esistenti o ha esperienza in altri linguaggi, potrebbe essere necessario adattare o imparare a usare Go per utilizzare appieno la soluzione descritta nel modello.
+ **Curva di apprendimento**: l'adozione di flussi di lavoro AWS CDK, Go (se è una novità per l'organizzazione) e GitHub riutilizzabili potrebbe comportare una curva di apprendimento per sviluppatori e team. DevOps Potrebbero essere necessarie formazione e documentazione per garantire un'adozione agevole e un uso efficace di queste tecnologie.

## Architecture
<a name="optimize-multi-account-serverless-deployments-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura di questo modello.

![\[Architettura dei flussi di lavoro AWS CDK e GitHub Actions per la gestione dell'infrastruttura serverless multi-account.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/8d61917b-bd27-44fa-ae95-55358aaf8812/images/a4b36793-95c7-42f7-a92f-99b4722c9c64.png)


Questa soluzione esegue i seguenti passaggi:

1. Lo sviluppatore clona il repository, crea un nuovo ramo e apporta modifiche al codice dell'applicazione nel proprio ambiente locale.

1. Lo sviluppatore esegue queste modifiche e inserisce il nuovo ramo nel repository. GitHub 

1. Lo sviluppatore crea una pull request nel GitHub repository, proponendo di unire la propria funzionalità o il nuovo ramo di funzionalità nel ramo principale.

1. Questa pull request attiva il flusso di lavoro Continuous Integration (CI) Actions. GitHub I flussi di lavoro CI e di distribuzione continua (CD) in questo modello utilizzano flussi di lavoro riutilizzabili, ovvero modelli modulari predefiniti che possono essere condivisi ed eseguiti su diversi progetti o repository. I flussi di lavoro riutilizzabili promuovono la standardizzazione e l'efficienza dei processi. CI/CD 

1. Il flusso di lavoro CI configura l'ambiente necessario, genera un tag Docker per l'immagine e crea l'immagine Docker utilizzando il codice dell'applicazione. 

1. Il flusso di lavoro CI si autentica AWS utilizzando il ruolo centrale OIDC. Account AWS GitHub Per i flussi di lavoro CI, il ruolo Account AWS GitHub OIDC centrale utilizza AWS Security Token Service () per ottenere credenziali temporanee.AWS STS Queste credenziali consentono al ruolo di creare e inviare immagini Docker all'archivio Amazon ECR della centrale. Account AWS

1. Il flusso di lavoro CI trasferisce l'immagine Docker integrata in Amazon ECR.

1. Il flusso di lavoro CI memorizza il tag dell'immagine nel Systems Manager Parameter Store.

1. Una volta completato correttamente il flusso di lavoro CI, viene emesso il tag di immagine Docker. 

1. Quando attiva il flusso di lavoro del CD, lo sviluppatore inserisce manualmente il tag di immagine dell'immagine Docker che desidera distribuire. Questo tag immagine corrisponde al tag generato e inviato ad Amazon ECR durante il flusso di lavoro CI.

1. Lo sviluppatore attiva manualmente il flusso di lavoro del CD, che utilizza il flusso di lavoro riutilizzabile del CD. 

1. Il flusso di lavoro del CD si autentica AWS utilizzando il ruolo centrale OIDC. Account AWS GitHub Per il flusso di lavoro del CD, AWS STS viene utilizzato innanzitutto per assumere il ruolo centrale dell'OIDC. Account AWS GitHub Quindi, questo ruolo assume i ruoli di bootstrap CDK per le distribuzioni degli account di destinazione. 

1. Il flusso di lavoro del CD utilizza i modelli per sintetizzare. AWS CDK AWS CloudFormation 

1. Il flusso di lavoro CD distribuisce l'applicazione sulla destinazione Account AWS utilizzando CDK deploy, utilizzando il tag immagine specificato manualmente per la funzione Lambda.

## Tools (Strumenti)
<a name="optimize-multi-account-serverless-deployments-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software che consente di definire e fornire Cloud AWS l'infrastruttura nel codice.
+ [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 tra Account AWS e. Regioni AWS CloudFormation è parte integrante del processo di AWS CDK implementazione. Il CDK sintetizza i CloudFormation modelli e li utilizza CloudFormation per creare o aggiornare le risorse nell'ambiente. AWS 
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fornisce uno storage sicuro e gerarchico per la gestione dei dati di configurazione e la gestione dei segreti.

**Altri strumenti**
+ [Docker](https://www.docker.com/) è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container.
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [Go](https://go.dev/doc/install) è un linguaggio di programmazione open source supportato da Google.

**Archivio di codici**

Il codice per questo pattern è disponibile nel cicd-github-actions repository GitHub [aws-cdk-golang-serverless-](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions).

## Best practice
<a name="optimize-multi-account-serverless-deployments-best-practices"></a>
+ **Design modulare**: organizza il AWS CDK codice in costrutti o pile modulari e riutilizzabili, promuovendo il riutilizzo e la manutenibilità del codice su più account e progetti.
+ **Separazione delle preoccupazioni**: separa il codice dell'infrastruttura dal codice dell'applicazione, consentendo l'implementazione e la gestione indipendenti di ogni componente.
+ **Controllo delle versioni e immutabilità: considera la** tua infrastruttura come codice (IaC) e usa Git per il controllo delle versioni. Abbraccia i principi dell'infrastruttura immutabile creando nuove risorse invece di modificare quelle esistenti.
+ **Test e convalida**: implementa strategie di test complete, tra cui test unitari, test di integrazione e end-to-end test, per supportare la correttezza e l'affidabilità del codice e delle implementazioni. AWS CDK 
+ **Sicurezza e conformità**: segui le migliori pratiche AWS di sicurezza, come l'accesso con privilegi minimi, la comunicazione sicura e la crittografia dei dati. Implementa controlli di conformità e meccanismi di verifica per garantire il rispetto delle politiche organizzative e dei requisiti normativi. Implementa le migliori pratiche di sicurezza per le immagini dei container, come la scansione delle vulnerabilità, l'applicazione della firma delle immagini e il rispetto dei requisiti di conformità per la tua organizzazione.
+ **Monitoraggio e registrazione: configura** meccanismi di monitoraggio e registrazione per monitorare lo stato e le prestazioni delle applicazioni e dell'infrastruttura serverless. Servizi AWS Utilizzalo come Amazon CloudWatch AWS CloudTrail e AWS X-Ray per scopi di monitoraggio e controllo.
+ **Automazione e CI/CD**: utilizza flussi di lavoro GitHub riutilizzabili e altri CI/CD strumenti per automatizzare i processi di creazione, test e distribuzione, il che può aiutare a supportare implementazioni coerenti e ripetibili su più account.
+ **Gestione dell'ambiente: gestione** di ambienti separati (ad esempio, sviluppo, gestione temporanea e produzione). Implementa strategie per promuovere i cambiamenti tra gli ambienti, garantendo test e convalida adeguati prima delle implementazioni di produzione.
+ **Documentazione e collaborazione**: documenta il codice dell'infrastruttura, i processi di implementazione e le migliori pratiche per facilitare la condivisione delle conoscenze e la collaborazione all'interno del team.
+ **Ottimizzazione dei costi**: implementazione di strategie di monitoraggio e ottimizzazione dei costi, come il corretto dimensionamento delle risorse, l'utilizzo dell'auto-scaling e lo sfruttamento di servizi di ottimizzazione dei AWS costi come e. Budget AWS AWS Cost Explorer
+ **Disaster recovery e backup**: pianifica gli scenari di disaster recovery implementando meccanismi di backup e ripristino per le applicazioni e le risorse dell'infrastruttura serverless.
+ **Miglioramento continuo**: rivedi e aggiorna regolarmente le procedure, gli strumenti e i processi per allinearli alle migliori pratiche, ai consigli sulla sicurezza e ai progressi tecnologici più recenti nell'ecosistema serverless.
+ **Migliora il livello di sicurezza**: [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)utilizzalo per migliorare il livello di sicurezza del tuo cloud privato virtuale (VPC) configurando gli endpoint VPC di interfaccia per Amazon ECR e Parameter Store. AWS Lambda AWS Systems Manager 

## Epiche
<a name="optimize-multi-account-serverless-deployments-epics"></a>

### Configura gli ambienti
<a name="set-up-the-environments"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR nella centrale. Account AWS | Per condividere le immagini dei container tra più account Account AWS, devi configurare l'accesso tra più account per Amazon ECR. Innanzitutto, crea un repository Amazon ECR nella centrale. Account AWSPer creare un repository Amazon ECR, esegui il seguente comando:<pre>aws ecr create-repository --repository-name sample-repo</pre>In un'attività successiva, concedi l'accesso pull agli altri Account AWS che devono utilizzare l'immagine del contenitore. | AWS DevOps | 
| Aggiungi autorizzazioni per più account al repository Amazon ECR. | Per aggiungere autorizzazioni per più account al repository Amazon ECR nella centrale Account AWS, esegui il codice seguente:<pre>{<br />  "Version": "2008-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "LambdaECRImageRetrievalPolicy",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />      "Condition": {<br />        "StringLike": {<br />          "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*"<br />        }<br />      }<br />    },<br />    {<br />      "Sid": "new statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<Target_Account_ID>:root"<br />        },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />    }<br />  ] <br />}</pre> | AWS DevOps | 
| Configura un ruolo per il ruolo GitHub OIDC nella centrale. Account AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Avvia l' AWS ambiente nel bersaglio Account AWS. | Configura un ambiente CDK in un ambiente specifico Regione AWS che consenta le distribuzioni tra account da un account centrale Account AWS e applichi i principi del privilegio minimo al ruolo di esecuzione. CloudFormation Per [avviare un ambiente, esegui il seguente comando](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html): AWS <pre>cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy></pre> | AWS DevOps | 
| Concedi l'accesso al ruolo Account AWS OIDC centrale ai ruoli Account AWS bootstrap di destinazione. | Il bootstrap CDK crea i seguenti ruoli IAM, progettati per essere assunti dalla centrale Account AWS durante le varie fasi del processo di implementazione CDK:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Ogni ruolo dispone di autorizzazioni specifiche adattate al suo scopo, secondo il principio del privilegio minimo. Il nome `Target_Account_ID` e `Target_Region` in ogni ruolo aiuta a indicare che questi ruoli sono unici nelle diverse regioni. Account AWS Questo approccio supporta l'identificazione e la gestione chiare in configurazioni con più account e più regioni.<pre>Target Account CDK Bootstrap Roles<br />arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Per aggiornare la politica di autorizzazione per il ruolo OIDC nella centrale Account AWS, utilizza il codice seguente:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "sts:AssumeRole",<br />            "Resource": [<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>"<br />            ]<br />        }<br />    ]<br /> }<br /></pre> | AWS DevOps | 

### Crea l'immagine Docker
<a name="build-the-docker-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del progetto. | Per clonare il [GitHub repository](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions) di questo pattern, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git</pre> | AWS DevOps | 
| Vai al percorso Dockerfile. | Per accedere al percorso Dockerfile, esegui il seguente comando:<pre>cd lambda</pre> | AWS DevOps | 
| Autentica Docker con Amazon ECR. | Amazon ECR richiede un accesso sicuro ai tuoi repository di container privati. Effettuando l'accesso in questo modo, consenti a Docker sul tuo computer o CI/CD ambiente locale di interagire con Amazon ECR in modo sicuro.Per autenticare Docker con Amazon ECR, esegui il seguente comando:<pre>aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com</pre>Modifica i segnaposti e inserisci le tue informazioni`AWS_REGION`. `AWS_Account_ID` | AWS DevOps | 
| Creazione dell'immagine Docker. | Per creare l'immagine Docker, esegui il seguente comando:<pre>docker build --platform linux/arm64 -t sample-app .</pre> | AWS DevOps | 
| Etichetta e invia l'immagine Docker. | Per taggare e inviare l'immagine Docker al repository Amazon ECR, esegui i seguenti comandi:<pre>docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre><pre>docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre>Modifica i segnaposti e inserisci le `AWS_Account_ID` tue `AWS_REGION` informazioni. `ECR_REPOSITORY` `DOCKER_TAG` | AWS DevOps | 

### Distribuisci l'app AWS CDK
<a name="deploy-the-cdk-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Sintetizza lo stack CDK con variabili specifiche dell'ambiente. | Per generare il CloudFormation modello per l'infrastruttura come definito nel codice CDK, esegui il comando seguente:<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth</pre>Modifica i seguenti segnaposto con le tue informazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Implementa lo stack CDK. | Per distribuire lo stack CDK sul tuo Account AWS, esegui il comando seguente. *Il `--require-approval never` flag indica che il CDK approverà ed eseguirà automaticamente tutte le modifiche.* Ciò include le modifiche che il CDK normalmente contrassegnerebbe come richiedenti una revisione manuale (come le modifiche alle politiche IAM o la rimozione di risorse). Assicurati che il codice CDK e la CI/CD pipeline siano ben testati e sicuri prima di utilizzare il `--require-approval never` flag negli ambienti di produzione.<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never</pre> | AWS DevOps | 

### Automatizza CI/CD utilizzando i flussi di lavoro GitHub Actions
<a name="automate-ci-cd-using-github-actions-workflows"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un feature branch e aggiungi le tue modifiche. | Utilizzate il repository clonato che avete creato in precedenza, create un feature branch, quindi aggiungete le modifiche al codice dell'applicazione. Utilizza il seguente comando:<pre>git checkout -b <feature_branch><br />git add .<br />git commit -m "add your changes"<br />git push origin <feature_branch></pre>Di seguito sono riportati alcuni esempi di modifiche:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)GitHub Le azioni utilizzeranno i flussi di lavoro riutilizzabili e attiveranno le pipeline. CI/CD  | AWS DevOps | 
| Unisci le modifiche. | Crea una pull request e unisci le modifiche alla pagina principale. | AWS DevOps | 

## risoluzione dei problemi
<a name="optimize-multi-account-serverless-deployments-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| `AccessDenied`errori durante la distribuzione di risorse su Account AWS, ad esempio,`AccessDenied: User not authorized to perform: "sts:AssumeRole"`. | Per risolvere questo problema, procedi come segue per verificare le autorizzazioni tra più account:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Problemi di compatibilità dovuti a mancate corrispondenze tra le versioni, ad esempio un `undefined: awscdkStack` errore con una versione CDK obsoleta. | Per risolvere questo problema, procedi come segue per verificare che stai utilizzando le versioni richieste di and Go: AWS CDK [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Guasti della pipeline CI/CD, ad esempio, a `Error: No such file or directory` causa di una configurazione YAML errata o di filiali protette. `Permission denied` | Per risolvere i problemi relativi alla configurazione GitHub Actions, verificate che i flussi di lavoro riutilizzabili siano referenziati e configurati correttamente. | 

## Risorse correlate
<a name="optimize-multi-account-serverless-deployments-resources"></a>

**Risorse AWS**
+ [AWS Best practice per sicurezza, identità e conformità.](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [AWS CDK Workshop](https://cdkworkshop.com/60-go.html)
+ [AWS Libreria del Cloud Development Kit](https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2)
+ [Creare una funzione Lambda utilizzando un'immagine del contenitore](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [Identity and Access Management per Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html)
+ [Lavorare con il CDK AWS in Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

**Altre risorse**
+ [Configurazione di OpenID Connect in Amazon](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web GitHub Services (documentazione)
+ [Documentazione Golang](https://golang.org/doc/)
+ [Quickstart for GitHub Actions (documentazione](https://docs.github.com/en/actions/writing-workflows/quickstart)) GitHub 
+ [Riutilizzo dei flussi di lavoro](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (documentazione) GitHub 

# Esegui il provisioning di AWS Service Catalog prodotti basati su AWS CloudFormation modelli utilizzando GitHub Actions
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Ashish Bhatt e Ruchika Modi, Amazon Web Services*

## Riepilogo
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

Questo modello offre alle organizzazioni un approccio semplificato che utilizza [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)prodotti e portafogli per fornire prodotti e portafogli standardizzati e conformi a tutti i team. Servizi AWS [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)aiuta a combinare componenti essenziali nei prodotti e nei portafogli di Service Catalog per il provisioning dell'infrastruttura di rete di base. Cloud AWS[Questo modello promuove anche DevOps pratiche che integrano l'infrastruttura come codice (IaC) nei flussi di lavoro di sviluppo automatizzati utilizzando Actions. GitHub ](https://github.com/features/actions)

AWS Service Catalog consente alle organizzazioni di creare e gestire servizi IT approvati su AWS, offrendo vantaggi quali standardizzazione, controllo centralizzato, fornitura self-service e gestione dei costi. Automatizzando l'implementazione dei portafogli e dei prodotti Service Catalog tramite GitHub Actions, le aziende possono fare quanto segue:
+ Ottieni implementazioni coerenti e ripetibili. 
+ Usa il controllo della versione per IAc. 
+ Integra la gestione delle risorse cloud con i flussi di lavoro di sviluppo esistenti. 

Questa combinazione semplifica le operazioni cloud, rafforza la conformità e accelera la fornitura di servizi approvati, riducendo al contempo gli errori manuali e migliorando l'efficienza complessiva.

## Prerequisiti e limitazioni
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS 
+ Accesso al [GitHub repository](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Conoscenza di base di e AWS CloudFormation AWS Service Catalog
+ Un bucket Amazon Simple Storage Service (Amazon S3) per ospitare modelli CloudFormation 
+ Un ruolo AWS Identity and Access Management (IAM) denominato utilizzato per `github-actions` la connettività tra e GitHub AWS

**Limitazioni**
+ Il codice riutilizzabile di questo pattern è stato testato solo con GitHub Actions.
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**

La soluzione di questo pattern è stata creata utilizzando le seguenti azioni del [GitHub Marketplace](https://github.com/marketplace) e le rispettive versioni:
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## Architecture
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

Il diagramma seguente mostra l'architettura di questa soluzione.

![\[Utilizzo di GitHub Actions per fornire prodotti Service Catalog basati su CloudFormation modelli.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. Gli amministratori o gli ingegneri della piattaforma inviano CloudFormation modelli standardizzati a un GitHub repository, dove vengono mantenuti. Il GitHub repository contiene anche flussi di lavoro che automatizzano il provisioning dell'utilizzo di Actions. AWS Service Catalog GitHub 

1. GitHub Actions attiva un flusso di lavoro che si connette all' Cloud AWS utilizzo di un provider OpenID Connect (OIDC) per la fornitura di Service Catalog.

1. Service Catalog contiene il portafoglio e i prodotti che gli sviluppatori possono utilizzare direttamente per fornire AWS risorse standardizzate. Questo modello raggruppa AWS risorse come cloud privati virtuali (VPCs), sottoreti, gateway NAT e Internet e tabelle di routing.

1. Dopo che lo sviluppatore ha creato un prodotto Service Catalog, Service Catalog lo converte in risorse preconfigurate e AWS standardizzate. Di conseguenza, gli sviluppatori risparmiano tempo perché non devono fornire risorse individuali e configurarle manualmente.

## Tools (Strumenti)
<a name="provision-aws-service-catalog-products-using-github-actions-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 in tutto il loro ciclo di vita. Account AWS Regioni AWSÈ un servizio Infrastructure as Code (IaC) che può essere facilmente utilizzato come uno dei tipi di prodotto con. AWS Service Catalog
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html)ti aiuta a gestire centralmente il catalogo di servizi IT approvati. AWS Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.
+ [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.

**Altri**
+ [GitHub Actions](https://docs.github.com/en/actions) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions). Il repository contiene i seguenti file di interesse:
+ `github/workflows`:
  + `e2e-test.yaml`— Questo file chiama`workflow.yaml`, che è il flusso di lavoro [riutilizzabile](https://docs.github.com/en/actions/sharing-automations/reusing-workflows). Questo flusso di lavoro viene attivato non appena viene eseguito un commit and push su una filiale.
  + `workflow.yaml`— Questo file contiene il flusso di lavoro riutilizzabile per questa soluzione ed è configurato `workflow_call` come trigger. Essendo un flusso di lavoro riutilizzabile, `workflow.yaml` può essere richiamato da qualsiasi altro flusso di lavoro.
+ `templates`:
  + `servicecatalog-portfolio.yaml`— Questo CloudFormation modello include risorse che forniscono il portafoglio Service Catalog e il prodotto Service Catalog. Il modello contiene un set di parametri che vengono utilizzati durante il provisioning del portafoglio e dei prodotti Service Catalog. Un parametro accetta l'URL di un file Amazon S3 in cui `vpc.yaml` viene caricato il modello. Sebbene questo modello includa il `vpc.yaml` file per il provisioning AWS delle risorse, puoi anche utilizzare il parametro URL del file S3 per la configurazione.
  + `vpc.yaml`— Questo CloudFormation modello contiene AWS risorse da aggiungere nel prodotto Service Catalog. AWS le risorse includono VPCs sottoreti, gateway Internet, gateway NAT e tabelle di routing. Il `vpc.yaml` modello è un esempio di come è possibile utilizzare qualsiasi CloudFormation modello con un modello di prodotto e portafoglio Service Catalog.

## Best practice
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+ Consulta [le migliori pratiche di sicurezza AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html) nella AWS Service Catalog documentazione. 
+ Vedi [Rafforzamento della sicurezza per GitHub le azioni](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions) nella GitHub documentazione.

## Epiche
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### Configura una workstation locale
<a name="set-up-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare Git sulla workstation locale. | Per installare e configurare Git sulla tua workstation locale, usa le istruzioni [Getting Started — Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) nella documentazione di Git. | Sviluppatore di app | 
| Clona il repository del GitHub progetto. | Per clonare il repository del GitHub progetto, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingegnere | 

### Configura il provider OIDC
<a name="set-up-the-oidc-provider"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare un provider OIDC. | Crea un provider OpenID Connect (OIDC) che consenta ai flussi di lavoro GitHub Actions di accedere alle risorse AWS, senza dover archiviare le credenziali come segreti di lunga durata. AWS GitHub Per istruzioni, consulta [Configurazione di OpenID Connect in Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub nella documentazione.Dopo la configurazione di un provider OIDC, la policy di fiducia del ruolo IAM`github-actions`, menzionata in precedenza nei [Prerequisiti](#provision-aws-service-catalog-products-using-github-actions-prereqs), verrà aggiornata. | Amministratore AWS, AWS DevOps, AWS generale | 

### Pipeline Trigger GitHub Actions per implementare il portafoglio e i prodotti Service Catalog
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiornare `e2e-test.yaml`. | Il `e2e-test.yaml` file attiva il flusso di lavoro riutilizzabile in. `workflow.yaml` Aggiorna e convalida i valori per i seguenti parametri di input in: `e2e-test.yaml`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps ingegnere | 

### Convalida l'implementazione
<a name="validate-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida le risorse del Service Catalog. | Per convalidare le risorse del Service Catalog, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina lo CloudFormation stack. | Per eliminare lo CloudFormation stack, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)Per ulteriori informazioni, consulta [Eliminare uno stack dalla CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) nella documentazione CloudFormation  | DevOps ingegnere, amministratore AWS | 

## Risoluzione dei problemi
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| `e2e-test``Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions``Did you forget to run actions/checkout before running your local action?` | Per assicurarti di avere abilitato le impostazioni corrette del repository, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## Risorse correlate
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS documentazione**
+ [Panoramica del Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**Altre risorse**
+ [Informazioni sugli eventi che attivano i flussi di lavoro](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub documentazione)
+ [Riutilizzo dei flussi di lavoro](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (documentazione) GitHub 

## Informazioni aggiuntive
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

Per vedere gli screenshot relativi a [Epics](#provision-aws-service-catalog-products-using-github-actions-epics), vai alla cartella **Immagini nel repository** di questo pattern. GitHub Sono disponibili le schermate seguenti:
+ [AWS Service Catalog portfolio, sezione Amministrazione](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog prodotto, sezione Amministrazione](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog prodotto, User/Provisioning sezione](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)

# Fornisci ruoli IAM con privilegi minimi implementando una soluzione di distribuzione automatica di ruoli
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution"></a>

*Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi e Ciad Moon, Amazon Web Services*

## Riepilogo
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-summary"></a>

Le autorizzazioni di ruolo sovradimensionate AWS Identity and Access Management (IAM) per le pipeline possono comportare rischi inutili per un'organizzazione. Gli sviluppatori a volte concedono ampie autorizzazioni durante lo sviluppo, ma trascurano di limitarle dopo la risoluzione dei problemi relativi al codice. Ciò causa un problema in cui sono presenti ruoli potenti senza necessità aziendali e potrebbe non essere mai stato esaminato da un tecnico della sicurezza.

Questo modello offre una soluzione a questo problema: il role vending machine (RVM). Utilizzando un modello di implementazione sicuro e centralizzato, RVM dimostra come fornire ruoli IAM con privilegi minimi per le pipeline dei singoli repository con il minimo sforzo da parte degli sviluppatori. GitHub Poiché RVM è una soluzione centrale, è possibile configurare i team di sicurezza come revisori necessari per approvare le modifiche. Questo approccio consente alla sicurezza di rifiutare le richieste di ruolo della pipeline sovraautorizzate. 

La RVM accetta il codice Terraform come input e genera ruoli IAM pronti per la pipeline come output. Gli input richiesti sono l' Account AWS ID, il nome del repository e la politica delle autorizzazioni. GitHub La RVM utilizza questi input per creare la politica di fiducia e la politica di autorizzazione del ruolo. La policy di fiducia risultante consente al GitHub repository specificato di assumere il ruolo e utilizzarlo per le operazioni di pipeline.

La RVM utilizza un ruolo IAM (configurato durante il bootstrap). Questo ruolo dispone delle autorizzazioni necessarie per assumere un account role-provisioning-role in ogni account dell'organizzazione. Il ruolo è configurato tramite AWS Control Tower Account Factory for Terraform (AFT) o AWS CloudFormation StackSets. role-provisioning-rolesSono i ruoli che effettivamente creano i ruoli della pipeline per gli sviluppatori.

## Prerequisiti e limitazioni
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS.
+ Un' GitHub organizzazione utilizzata per implementare l'infrastruttura come codice (IaC) tramite GitHub Actions. (*non GitHub Enterprise/Premium/Ultimate* sono**** obbligatori).
+ Un AWS ambiente con più account. Non è necessario che questo ambiente ne faccia parte AWS Organizations.
+ Un meccanismo per implementare un ruolo IAM in tutti Account AWS (ad esempio, AFT o CloudFormation StackSets).
+ Terraform versione 1.3 o successiva [installata e configurata](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Terraform AWS Provider versione 4 o successiva [installata e configurata](https://github.com/hashicorp/terraform-provider-aws/releases).](https://developer.hashicorp.com/terraform/language/providers/configuration)

**Limitazioni**
+ Il codice di questo pattern è specifico di GitHub Actions e Terraform. Tuttavia, i concetti generali del pattern possono essere riutilizzati in altri framework di integrazione e distribuzione continua (CI/CD).
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-architecture"></a>

Il diagramma seguente illustra il flusso di lavoro per questo modello.

![\[Flusso di lavoro per automatizzare la creazione e l'implementazione dei ruoli IAM utilizzando Actions. GitHub\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/215c590e-0c84-411d-be6e-b1739f1e19d2/images/82fcdc9f-9576-4e7c-b7fe-b45046ba79d2.png)


Il flusso di lavoro per l'utilizzo tipico del distributore automatico di ruoli prevede i seguenti passaggi:

1. Uno sviluppatore invia il codice che contiene il codice Terraform per un ruolo IAM appena richiesto al repository RVM. GitHub Questa azione attiva la pipeline RVM Actions. GitHub 

1. La pipeline utilizza una policy di trust OpenID Connect (OIDC) per assumere il ruolo di assunzione del ruolo RVM.

1. Durante l'esecuzione, la pipeline RVM assume il ruolo di workflow RVM nell'account in cui fornisce il nuovo ruolo IAM dello sviluppatore. (Il ruolo del workflow RVM è stato assegnato utilizzando AFT o.) CloudFormation StackSets

1. RVM crea il ruolo IAM dello sviluppatore con autorizzazioni e fiducia appropriate, in modo che il ruolo possa essere assunto da altre pipeline di applicazioni.

1. Gli sviluppatori di app possono configurare le proprie pipeline di app per assumere questo ruolo fornito da RVM.

Il ruolo creato include le autorizzazioni richieste dallo sviluppatore e una policy. `ReadOnlyAccess` Il ruolo è assunto solo dalle pipeline eseguite sul `main` ramo del repository specificato dallo sviluppatore. Questo approccio aiuta a garantire che per utilizzare il ruolo possano essere necessarie la protezione e le revisioni delle filiali.

**Automazione e scalabilità**

Le autorizzazioni con privilegi minimi richiedono attenzione ai dettagli per ogni ruolo assegnato. Questo modello riduce la complessità richiesta per creare questi ruoli, consentendo agli sviluppatori di creare i ruoli di cui hanno bisogno senza molto apprendimento o impegno aggiuntivi.

## Tools (Strumenti)
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-tools"></a>

**Servizi AWS**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che ti aiuta a consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.

**Altri strumenti**
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source. Include la possibilità di creare un [account aziendale](https://docs.github.com/en/get-started/learning-about-github/types-of-github-accounts#organization-accounts).
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Deposito di codici**

Il codice per questo pattern è disponibile nel GitHub [role-vending-machine](https://github.com/aws-samples/role-vending-machine)repository.

## Best practice
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-best-practices"></a>
+ **Rendi facile la strada giusta e difficile quella sbagliata**: rendi facile fare la cosa giusta. Se gli sviluppatori hanno difficoltà con il processo di provisioning di RVM, potrebbero tentare di creare ruoli con altri mezzi, il che mina la natura centrale di RVM. Assicurati che il tuo team di sicurezza fornisca indicazioni chiare su come utilizzare RVM in modo sicuro ed efficace.

  Dovresti anche impedire agli sviluppatori di fare la cosa sbagliata. Utilizza le politiche di controllo dei servizi (SCPs) o i limiti di autorizzazione per limitare i ruoli che possono creare altri ruoli. Questo approccio può aiutare a limitare la creazione di ruoli solo a RVM e ad altre fonti attendibili.
+ **Fornisci buoni esempi**: inevitabilmente, alcuni sviluppatori adatteranno i ruoli esistenti nell'archivio RVM come modelli informali per la concessione delle autorizzazioni ai loro nuovi ruoli. Se disponete di esempi con autorizzazioni minime da cui possono copiare, ciò può ridurre il rischio che gli sviluppatori richiedano autorizzazioni ampie e con un elevato numero di jolly card. Se iniziate con ruoli altamente autorizzati e con molti jolly, il problema può moltiplicarsi col passare del tempo.
+ **Usa convenzioni e condizioni di denominazione**: anche se uno sviluppatore non conosce tutti i nomi delle risorse che la sua applicazione creerà, dovrebbe comunque limitare le autorizzazioni dei ruoli utilizzando una convenzione di denominazione. Ad esempio, se stanno creando bucket Amazon S3, il valore della loro chiave di risorsa potrebbe essere `arn:aws:s3:::myorg-myapp-dev-*` tale che il loro ruolo non disponga di autorizzazioni oltre ai bucket che corrispondono a quel nome. L'applicazione della convenzione di denominazione tramite una policy IAM ha l'ulteriore vantaggio di migliorare la conformità alla convenzione di denominazione. Questo miglioramento si verifica perché non sarà consentita la creazione di risorse non corrispondenti.
+ **Richiedi revisioni delle pull request (PR)**: il valore della soluzione RVM è che crea una posizione centrale in cui è possibile esaminare i nuovi ruoli della pipeline. Tuttavia, questo design è utile solo se esistono barriere che aiutano a garantire che codice sicuro e di alta qualità venga inviato alla RVM. Proteggi le filiali utilizzate per distribuire il codice (ad esempio`main`) dai push diretti e richiedi l'approvazione di tutte le richieste di unione destinate ad esse.
+ **Configura ruoli di sola lettura**: per impostazione predefinita, RVM fornisce una versione di ogni ruolo richiesto. `readonly` Questo ruolo può essere utilizzato in CI/CD pipeline che non scrivono dati, come un flusso di lavoro di pipeline. `terraform plan` Questo approccio aiuta a prevenire modifiche indesiderate se un flusso di lavoro di sola lettura non funziona correttamente.

  Per impostazione predefinita, la `ReadOnlyAccess` policy AWS gestita è associata sia ai ruoli di sola lettura che ai ruoli di lettura-scrittura. Questa politica riduce la necessità di iterazioni per determinare le autorizzazioni richieste, ma potrebbe essere eccessivamente permissiva per alcune organizzazioni. Se lo desideri, puoi rimuovere la politica dal codice Terraform.
+ **Concedi autorizzazioni minime**: segui il principio del privilegio minimo e concedi le autorizzazioni minime richieste per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella documentazione IAM.

## Epiche
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-epics"></a>

### Prepara l'ambiente
<a name="prepare-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia il repository di esempio nella tua GitHub organizzazione. | [Clona](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) il repository di questo pattern o [trasferiscilo](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) alla tua GitHub organizzazione in modo da poterlo adattare alle tue esigenze.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingegnere | 
| Determina il Account AWS per la RVM. | Determina quale implementazione dell'infrastruttura utilizzare Account AWS per la RVM. Non utilizzare l'account di gestione o root. | Architetto del cloud | 
| (Facoltativo) Consenti la creazione PRs delle pipeline dell'organizzazione. | Questo passaggio è necessario solo se desideri consentire la creazione PRs del `generate_providers_and_account_vars` flusso di lavoro.Per consentire la creazione delle pipeline della tua organizzazione PRs, segui i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Per ulteriori informazioni, consulta [la sezione Gestione GitHub delle impostazioni delle azioni per un repository](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests) nella GitHub documentazione. | DevOps ingegnere | 
| Concedi autorizzazioni di sola lettura all'account RVM. | Crea una politica di delega nel tuo account di gestione che conceda al tuo account RVM autorizzazioni di sola lettura. Ciò consente ai GitHub flussi di lavoro RVM di generare dinamicamente un elenco degli account dell'organizzazione durante l'esecuzione dello script. AWS `generate_providers_and_account_vars.py` Utilizzate il codice seguente e sostituitelo `<YOUR RVM Account ID>` con l' Account AWS ID selezionato nel passaggio 2:<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "Statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<YOUR RVM Account ID>:root"<br />      },<br />      "Action": [<br />        "organizations:ListAccounts",<br />        "organizations:DescribeOrganization",<br />        "organizations:DescribeOrganizationalUnit",<br />        "organizations:ListRoots",<br />        "organizations:ListAWSServiceAccessForOrganization",<br />        "organizations:ListDelegatedAdministrators"<br />      ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | Amministratore cloud | 
| Aggiorna i valori predefiniti dal repository di esempio. | Per configurare la RVM in modo che funzioni nel tuo ambiente specifico Regione AWS, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingegnere | 

### Inizializza l'infrastruttura
<a name="initialize-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia il repository RVM. | Questo passaggio è necessario per creare i ruoli OIDC Trust e IAM utilizzati dalla pipeline RVM stessa, in modo che possa iniziare a operare e vendere altri ruoli.Nel contesto del tuo account RVM, esegui manualmente un comando dalla directory. `terraform apply` `scripts/bootstrap` Fornite tutti i valori richiesti in base alla documentazione delle variabili. | DevOps ingegnere | 

### Configura le operazioni
<a name="configure-operations"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci i `github-workflow-rvm-readonly` ruoli `github-workflow-rvm` and a tutti gli account. | Scegliete un metodo di distribuzione in linea con le pratiche della vostra organizzazione, come AFT o. StackSets Utilizza questo metodo per distribuire i due ruoli IAM nel `scripts/assumed_role/main.tf` file (nomi predefiniti `github-workflow-rvm` e`github-workflow-rvm-readonly`) su ciascun account in cui desideri che RVM sia in grado di creare ruoli nella pipeline.Questi ruoli IAM dispongono di politiche di fiducia che consentono al ruolo di assunzione del ruolo dell'account RVM (o equivalente) di assumerlo. `readonly` I ruoli dispongono inoltre di politiche di autorizzazione IAM che consentono loro di leggere e scrivere (a meno che non si utilizzi il `readonly` ruolo) ruoli corrispondenti. `github-workflow-role-*` | Amministratore AWS | 
| Esegui il `generate_providers_and_account_vars` flusso di lavoro. | Per configurare la RVM in modo che sia pronta per la creazione di ruoli nella pipeline, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Una volta completato il flusso di lavoro, la RVM è pronta per:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Ho creato un ruolo utilizzando RVM, ma GitHub non sono in grado di assumerlo. | Verifica che il nome del GitHub repository corrisponda al nome fornito al modulo. `github_workflow_roles` I ruoli sono definiti in modo che solo un repository possa assumerli.Analogamente, verificate che il ramo utilizzato nella GitHub pipeline corrisponda al nome del ramo fornito al modulo. `github_workflow_roles` In genere, i ruoli creati da RVM con autorizzazioni di scrittura possono essere utilizzati solo dai flussi di lavoro limitati al `main` ramo (ovvero, distribuzioni provenienti da). `main` | 
| Il mio ruolo di sola lettura non riesce a eseguire la pipeline perché non dispone delle autorizzazioni per leggere una risorsa specifica. | Sebbene la `ReadOnlyAccess` politica fornisca ampie autorizzazioni di sola lettura, la politica non include alcune azioni di lettura (ad esempio, determinate azioni). AWS Security Hub CSPM È possibile aggiungere autorizzazioni per azioni specifiche utilizzando il `inline_policy_readonly` parametro del modulo. `github-workflow-roles` | 

## Risorse correlate
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-resources"></a>
+ [Le migliori pratiche per l'utilizzo AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-bestpractices.html)
+ [Organizzazione dell' AWS ambiente utilizzando più account](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html)
+ [Panoramica di AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)
+ [Le migliori pratiche politiche](https://docs.aws.amazon.com/codepipeline/latest/userguide/security_iam_service-with-iam-policy-best-practices.html) 

## Informazioni aggiuntive
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-additional"></a>

**Utilizzo GitHub degli ambienti**

GitHub gli ambienti sono un approccio alternativo alle restrizioni basate sulle filiali per l'accesso ai ruoli. Se preferisci utilizzare un GitHub ambiente, di seguito è riportato un esempio della sintassi per una condizione aggiuntiva nella policy di fiducia IAM. Questa sintassi specifica che il ruolo può essere utilizzato solo quando l' GitHub azione è in esecuzione nell'ambiente. `Production`

```
"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
```

La sintassi di esempio utilizza i seguenti valori segnaposto:
+ `octo-org`è il nome dell'organizzazione. GitHub 
+ `octo-repo`è il nome del repository.
+ `Production`è il nome specifico GitHub dell'ambiente.

# Pubblica i CloudWatch parametri di Amazon in un file CSV
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Riepilogo
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-summary"></a>

Questo modello utilizza uno script Python per recuperare le metriche di CloudWatch Amazon e convertire le informazioni sulle metriche in un file con valori separati da virgole (CSV) per una migliore leggibilità. Lo script accetta il servizio AWS le cui metriche devono essere recuperate come argomento obbligatorio. Puoi specificare la regione AWS e il profilo di credenziali AWS come argomenti opzionali. Se non specifichi questi argomenti, lo script utilizza la regione e il profilo predefiniti configurati per la workstation in cui viene eseguito lo script. Dopo l'esecuzione, lo script genera e archivia un file CSV nella stessa directory.

Vedi la sezione *Allegati* per lo script e i file associati forniti con questo modello.

## Prerequisiti e limitazioni
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-prereqs"></a>

**Prerequisiti**
+ Python 3.x
+ Interfaccia a riga di comando di AWS (CLI AWS)

**Limitazioni**

Lo script attualmente supporta i seguenti servizi AWS:
+ AWS Lambda
+ Amazon Elastic Compute Cloud (Amazon EC2)
  + Per impostazione predefinita, lo script non raccoglie i parametri di volume di Amazon Elastic Block Store (Amazon EBS). Per raccogliere i parametri di Amazon EBS, devi modificare il file allegato`metrics.yaml`.
+ Amazon Relational Database Service (Amazon RDS)
  + Tuttavia, lo script non supporta Amazon Aurora.
+ Application Load Balancer
+ Network Load Balancer
+ Gateway Amazon API

## Tools (Strumenti)
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) è un servizio di monitoraggio creato per DevOps ingegneri, sviluppatori, ingegneri dell'affidabilità del sito (SREs) e responsabili IT. CloudWatch fornisce dati e approfondimenti utilizzabili per aiutarti a monitorare le tue applicazioni, rispondere ai cambiamenti delle prestazioni a livello di sistema, ottimizzare l'utilizzo delle risorse e ottenere una visione unificata dello stato operativo. CloudWatch raccoglie dati operativi e di monitoraggio sotto forma di log, metriche ed eventi e fornisce una visione unificata delle risorse, delle applicazioni e dei servizi AWS eseguiti su server AWS e locali.

## Epiche
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-epics"></a>

### Installa e configura i prerequisiti
<a name="install-and-configure-the-prerequisites"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa i prerequisiti. | Esegui il comando seguente:<pre>$ pip3 install -r requirements.txt</pre> | Developer | 
| Configurare . | Esegui il comando seguente: <pre>$ aws configure</pre> | Developer | 

### Configurare lo script Python
<a name="configure-the-python-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Apri lo script. | Per modificare la configurazione predefinita dello script, apri`metrics.yaml`. | Developer | 
| Imposta il periodo per lo script. | Questo è il periodo di tempo da recuperare. Il periodo predefinito è di 5 minuti (300 secondi). Puoi modificare il periodo di tempo, ma tieni presente le seguenti limitazioni: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/publish-amazon-cloudwatch-metrics-to-a-csv-file.html)In caso contrario, l'operazione API non restituirà alcun punto dati. | Developer | 
| Imposta le ore dello script. | Questo valore specifica quante ore di metriche vuoi recuperare. Il valore predefinito è 1 ora. Per recuperare più giorni di metriche, fornisci il valore in ore. Ad esempio, per 2 giorni, specifica 48. | Developer | 
| Modifica i valori delle statistiche per lo script.  | (Facoltativo) Il valore delle statistiche globali è utilizzato per recuperare metriche a cui non è assegnato un valore statistico specifico. `Average` Lo script supporta i valori statistici `Maximum``SampleCount`, e. `Sum` | Developer | 

### Esegui lo script Python
<a name="run-the-python-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eseguire lo script. | Utilizza il seguente comando: <pre>$ python3 cwreport.py <service> </pre>Per visualizzare un elenco dei valori del servizio e dei `profile ` parametri opzionali`region `, esegui il comando seguente:<pre> $ python3 cwreport.py -h</pre>Per ulteriori informazioni sui parametri opzionali, vedere la sezione *Informazioni aggiuntive*. | Developer | 

## Risorse correlate
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-resources"></a>
+ [Configurazione dell'interfaccia a riga di comando di AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Utilizzo dei CloudWatch parametri di Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)
+ [ CloudWatch Documentazione Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [EC2 CloudWatch Parametri](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)
+ [Metriche di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/logging-metrics.html)
+ [Metriche di Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html#rds-cw-metrics-instance)
+ [Metriche dell'Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)
+ [Metriche di Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html)
+ [Metriche di Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html)

## Informazioni aggiuntive
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-additional"></a>

**Utilizzo degli script**

```
$ python3 cwreport.py -h
```

**Sintassi di esempio**

```
python3 cwreport.py <service> <--region=Optional Region> <--profile=Optional credential profile>
```

**Parametri**
+ **service (richiesto)** ‒ Il servizio su cui si desidera eseguire lo script. Lo script attualmente supporta questi servizi: AWS Lambda, Amazon, EC2 Amazon RDS, Application Load Balancer, Network Load Balancer e API Gateway.
+ **region (opzionale)** ‒ La regione AWS da cui recuperare le metriche. La regione predefinita è. `ap-southeast-1`
+ **profile (opzionale)** ‒ Il profilo denominato della CLI AWS da utilizzare. Se questo parametro non è specificato, viene utilizzato il profilo di credenziali configurato di default.

**Esempi**
+ Per utilizzare la regione `ap-southeast-1` e le credenziali configurate predefinite per recuperare i parametri Amazon EC2 : `$ python3 cwreport.py ec2`
+ Per specificare una regione e recuperare le metriche dell'API Gateway: `$ python3 cwreport.py apigateway --region us-east-1`
+ Per specificare un profilo AWS e recuperare i EC2 parametri Amazon: `$ python3 cwreport.py ec2 --profile testprofile`
+ Per specificare sia la regione che il profilo per recuperare i EC2 parametri di Amazon: `$ python3 cwreport.py ec2 --region us-east-1 --profile testprofile`

## Allegati
<a name="attachments-0a915a9d-2eef-4da1-8283-3cf4a115b3b2"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/0a915a9d-2eef-4da1-8283-3cf4a115b3b2/attachments/attachment.zip)

# Rimuovi Amazon EC2 Entries Account AWS dall'altra AWS Managed Microsoft AD parte utilizzando l' AWS Lambda automazione
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad"></a>

*Dott. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Riepilogo
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) è uno strumento di scripting di Microsoft che gestisce le informazioni sul dominio e le interazioni degli utenti con i servizi di rete. È ampiamente utilizzato dai fornitori di servizi gestiti (MSPs) per gestire le credenziali dei dipendenti e le autorizzazioni di accesso. Poiché gli aggressori di AD possono utilizzare account inattivi per cercare di hackerare un'organizzazione, è importante trovare account inattivi e disattivarli secondo un programma di manutenzione ordinaria. Con AWS Directory Service for Microsoft Active Directory, puoi eseguire Microsoft Active Directory come servizio gestito. Questo modello può aiutarti a configurare AWS Lambda l'automazione per trovare e rimuovere rapidamente gli account inattivi.

Se i seguenti scenari si applicano alla vostra organizzazione, questo modello può aiutarvi:
+ **Gestione AD centralizzata**: se la tua organizzazione ne ha più di una Account AWS, ognuna con la propria implementazione AD, può essere difficile gestire gli account utente e le autorizzazioni di accesso in modo uniforme su tutti gli account. Con una soluzione di pulizia di AD per più account, puoi disabilitare o rimuovere gli account inattivi da tutte le istanze AD in modo centralizzato.
+ **Ristrutturazione o migrazione di AD**: se la tua organizzazione prevede di ristrutturare o migrare la distribuzione di AD, una soluzione di pulizia di AD per più account può aiutarti a preparare l'ambiente. La soluzione può aiutarti a rimuovere gli account non necessari o inattivi, semplificare il processo di migrazione e ridurre potenziali conflitti o problemi.

Quando si utilizza questo modello, è possibile ottenere i seguenti vantaggi:
+ Migliora le prestazioni di database e server e correggi le vulnerabilità di sicurezza dovute agli account inattivi.
+ Se il server AD è ospitato nel cloud, la rimozione degli account inattivi può anche ridurre i costi di archiviazione migliorando al contempo le prestazioni. Le bollette mensili potrebbero diminuire perché sia i costi della larghezza di banda che le risorse di elaborazione possono diminuire.
+ Tieni a bada i potenziali aggressori con un Active Directory pulito.

## Prerequisiti e limitazioni
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-prereqs"></a>

**Prerequisiti**
+ Un account genitore attivo Account AWS e uno o più account per figli. In questo modello, un *account principale* è il luogo in cui viene creato Active Directory. *Gli account secondari* ospitano server Windows e vengono uniti tramite l'account principale Active Directory.
+ Git [installato](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurato su una workstation locale.
+ Terraform [installato](https://learn.hashicorp.com/tutorials/terraform/install-cli) e configurato su una workstation locale.
+ AWS Managed Microsoft AD directory configurata nell'account principale e condivisa con tutti gli account secondari. *Per maggiori dettagli, consulta [Tutorial: Sharing your AWS Managed Microsoft AD directory for seamless EC2 domain-join](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html) nella Administration Guide.AWS Directory Service *
+ Una connessione peering di cloud privato virtuale (VPC) o una AWS Transit Gateway connessione disponibile tra il VPC di AWS Directory Service (account principale) e il VPC delle istanze Amazon Elastic Compute Cloud (Amazon EC2) (account secondari). *Per ulteriori dettagli, consulta [Configurare una connessione peering VPC tra il proprietario della directory e l'account utente della directory nella Guida](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) all'AWS Directory Service amministrazione.*
+ Una macchina Windows configurata con lo `EC2WindowsUserdata` script su tutti gli account padre e figlio. Il file di script è disponibile nella radice del [repository di codice](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup) di questo pattern.
+ Un ruolo cross-account AWS Identity and Access Management (IAM) disponibile su ogni account secondario configurato con una policy di fiducia per consentire l'uso di una AWS Lambda funzione dell'account principale. Per ulteriori informazioni, consulta [Invio e ricezione di eventi tra Amazon Account AWS EventBridge nella](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html) *Amazon EventBridge User Guide*.
+ I seguenti valori segreti sono disponibili in AWS Systems Manager Parameter Store dell'account principale:
  + `domainJoinUser`— Nome utente del servizio di directory
  + `domainJoinPassword`— Password del servizio di elenco

  Per ulteriori informazioni sui segreti, vedere [Create an Gestione dei segreti AWS secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) nella *Guida per l'Gestione dei segreti AWS utente*.

**Limitazioni**
+ La creazione di una risorsa in un account per bambini non è automatizzata con Terraform. È necessario creare manualmente le seguenti risorse utilizzando: Console di gestione AWS
  +  EventBridge Regola di Amazon per inviare gli eventi di EC2 cessazione di Amazon all'account principale
  + Creazione EC2 di ruoli su più account Amazon nell'account per bambini con politica di fiducia
  + Peering VPC o connessione Transit Gateway
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ [Terraform versione 1.1.9 o successiva](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versione 3.0 o successiva](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Architecture
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-architecture"></a>

Il diagramma seguente mostra l'architettura di alto livello della soluzione.

![\[Processo per utilizzare l'automazione Lambda per rimuovere le EC2 voci da tutti gli account AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c397d873-e10d-44b6-8352-5f1380ab94ca/images/bd6c80a7-e490-47db-bd47-165314e1ea8a.png)


Il diagramma dell'architettura illustra il seguente processo:

1. Negli account per bambini, la EventBridge regola raccoglie tutti gli eventi di EC2 cessazione di Amazon. La regola invia gli eventi a EventBridge cui è presente nell'account principale.

1. Dall'account principale, EventBridge raccoglie tutti gli eventi e contiene la regola per attivare la funzione `ADcleanup-Lambda` Lambda.

1. L'account principale riceve eventuali eventi di chiusura dall'account genitore o figlio e attiva la funzione Lambda.

1. La funzione Lambda effettua la chiamata ai gruppi di Amazon Auto EC2 Scaling utilizzando il modulo di avvio Python e ottiene l'ID casuale dell'istanza. L'ID dell'istanza viene utilizzato per eseguire i comandi di Systems Manager.

1. La funzione Lambda effettua un'altra chiamata ad Amazon EC2 utilizzando il modulo boto. La funzione Lambda ottiene gli indirizzi IP privati dei server Windows in esecuzione e li archivia in una variabile temporanea. Nei passaggi 5.1 e 5.2, le EC2 istanze di Windows in esecuzione vengono raccolte dagli account secondari.

1. La funzione Lambda effettua un'altra chiamata a Systems Manager per ottenere le informazioni sul computer a cui è connesso. AWS Directory Service

1. Un AWS Systems Manager documento aiuta a eseguire il PowerShell comando sui server Amazon EC2 Windows per ottenere gli indirizzi IP privati dei computer collegati ad AD. (Il documento Systems Manager utilizza l'ID dell'istanza ottenuto nel passaggio 4.)

1. Il nome utente e le password del dominio AD vengono archiviati nel AWS Systems Manager Parameter Store. AWS Lambda e Systems Manager effettuano una chiamata a Parameter Store e ottengono i valori di nome utente e password da utilizzare per connettersi ad AD.

1. Utilizzando il documento Systems Manager, lo PowerShell script viene eseguito sul server Amazon EC2 Windows utilizzando l'id dell'istanza ottenuto in precedenza nel passaggio 4.

1. Amazon EC2 si connette AWS Directory Service utilizzando PowerShell i comandi e rimuove i computer non in uso o inattivi.

## Tools (Strumenti)
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-tools"></a>

**AWS servizi**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)offre diversi modi per utilizzare Microsoft Active Directory (AD) con altri Servizi AWS come Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) per SQL Server e FSx Amazon per Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)consente ai carichi di lavoro e alle risorse compatibili con le directory di AWS utilizzare Microsoft Active Directory in. Cloud AWS
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornisce capacità di elaborazione scalabile in. Cloud AWS Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle. Con IAM, puoi specificare chi o cosa può accedere ai servizi e alle risorse AWS, gestire centralmente le autorizzazioni granulari e analizzare l'accesso per perfezionare le autorizzazioni in tutto il mondo. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)ti aiuta a gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala.
+ [AWS Systems Manager i documenti](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definiscono le azioni che Systems Manager esegue sulle istanze gestite. Systems Manager include più di 100 documenti preconfigurati che è possibile utilizzare specificando i parametri nel runtime (tempo di esecuzione).
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) è una funzionalità AWS Systems Manager e fornisce uno storage gerarchico sicuro per la gestione dei dati di configurazione e la gestione dei segreti.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)è un programma di gestione dell'automazione e della configurazione di Microsoft che funziona su Windows, Linux e macOS.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [aws-lambda-ad-cleanup-terraform-samples](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup).

## Best practice
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Unisci automaticamente i domini.**Quando avvii un'istanza Windows che deve far parte di un Directory Service dominio, unisciti al dominio durante il processo di creazione dell'istanza anziché aggiungere manualmente l'istanza in un secondo momento. Per aggiungere automaticamente un dominio, seleziona la directory corretta dall'elenco a discesa **Domain join directory** quando avvii una nuova istanza. Per maggiori dettagli, consulta [Unire senza problemi un'istanza Amazon EC2 Windows alla tua AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) nella *Guida all'Directory Service amministrazione*.
+ **Eliminare gli account non utilizzati.**È comune trovare account in AD che non sono mai stati utilizzati. Come gli account disabilitati o inattivi che rimangono nel sistema, gli account trascurati e inutilizzati possono rallentare il sistema AD o rendere l'organizzazione vulnerabile alle violazioni dei dati.
+ **Automatizza le pulizie di Active Directory.**Per contribuire a mitigare i rischi per la sicurezza e impedire che gli account obsoleti influiscano sulle prestazioni di AD, è necessario eseguire le pulizie di AD a intervalli regolari. Puoi eseguire la maggior parte delle attività di gestione e pulizia di AD scrivendo script. Le attività di esempio includono la rimozione di account disabilitati e inattivi, l'eliminazione di gruppi vuoti e inattivi e l'individuazione di account utente e password scaduti.

## Poemi epici
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-epics"></a>

### Configura account per bambini
<a name="set-up-child-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ruolo per più account nell'account per bambini. | Per creare un ruolo tra più account in un account figlio, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 
| Crea una regola relativa agli eventi nell'account per bambini. | Per creare una EventBridge regola per ogni account per bambini, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Per maggiori dettagli, consulta [Creazione di regole che reagiscono agli eventi in Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) nella *Amazon EventBridge User Guide*. | DevOps ingegnere | 
| Crea un' EC2 istanza e unisciti ad AD. | Per creare un' EC2 istanza per Windows, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 

### Configura la workstation locale
<a name="set-up-the-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una cartella di progetto e aggiungi i file. | Per clonare il repository e creare una cartella di progetto, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 
| Crea il `adcleanup.zip` file. | Per comprimere il `lambda_function.py` file, esegui il seguente comando:`zip -r adcleanup.zip lambda_function.py` | DevOps ingegnere | 

### Fornisci l'architettura di destinazione utilizzando la configurazione Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Fornisci valori per le variabili Terraform. | Per l'account secondario, fornisci i valori per le seguenti `arn` variabili come tipi di stringa nel `terraform.tfvars` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 
| Inizializza la configurazione Terraform. | Per inizializzare la directory di lavoro che contiene i file Terraform, esegui il seguente comando:`terraform init` | DevOps ingegnere | 
| Visualizza in anteprima le modifiche. | Puoi visualizzare in anteprima le modifiche che Terraform apporterà all'infrastruttura prima che l'infrastruttura venga implementata. Per verificare che Terraform apporti le modifiche necessarie, esegui il seguente comando:`terraform plan —-var-file=examples/terraform.tfvars` | DevOps ingegnere | 
| Esegui le azioni proposte. | Per verificare che i risultati del `terraform plan` comando siano quelli previsti, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui e testa la funzione Lambda. | Per verificare che la distribuzione sia avvenuta correttamente, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)I risultati dell'esecuzione mostrano l'output della funzione. | DevOps ingegnere | 
| Visualizza i risultati dell'esecuzione delle EventBridge regole dall'account principale. | Per visualizzare i risultati della EventBridge regola basata sugli eventi di EC2 cessazione di Amazon dall'account principale, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Nella CloudWatch console, la pagina **Log groups** mostra i risultati della funzione Lambda. | DevOps ingegnere | 
| Visualizza i risultati dell'esecuzione delle EventBridge regole dall'account secondario. | Per visualizzare i risultati della EventBridge regola basata sugli eventi di EC2 chiusura di Amazon dall'account secondario, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Nella CloudWatch console, la pagina **Log groups** mostra i risultati della funzione Lambda. | DevOps ingegnere | 

### Pulisci l'infrastruttura dopo l'uso
<a name="clean-up-infrastructure-after-use"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci l'infrastruttura. | Per pulire l'infrastruttura che hai creato, usa il seguente comando:`terraform destroy`Per confermare il `destroy` comando, digitate`yes`. | DevOps ingegnere | 
| Verifica dopo la pulizia. | Verifica che le risorse siano state rimosse correttamente. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Problema di connessione tra AWS Directory Service (account principale) e EC2 istanza Amazon (account figlio): non è possibile unire i computer dell'account secondario ad AD anche se è disponibile il peering VPC. | Aggiungi il routing in. VPCs Per istruzioni, consulta [Configurare una connessione peering VPC tra il proprietario della directory e l'account utente della directory nella documentazione](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc). AWS Directory Service  | 

## Risorse correlate
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentazione**
+ [Amazon EventBridge e AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurazione delle autorizzazioni dell'istanza richieste per Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestione delle identità e degli accessi per Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Policy IAM basate sull'identità per Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)
+ [Aggiungi manualmente un'istanza Amazon EC2 Windows alla tua AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Rimuovi EC2 le voci Amazon nello stesso Account AWS modulo AWS Managed Microsoft AD utilizzando l' AWS Lambda automazione](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)

**Altre risorse**
+ [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentazione Terraform)
+ [Configurazione del backend (documentazione](https://developer.hashicorp.com/terraform/language/backend) Terraform)
+ [Installa Terraform (documentazione Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli))
+ Modulo di [avvio Python (repository](https://pypi.org/project/boto/) Python Package Index)
+ Download del [file binario Terraform](https://www.terraform.io/downloads) (documentazione Terraform)

# Rimuovi EC2 le voci Amazon nello stesso Account AWS modulo AWS Managed Microsoft AD utilizzando l' AWS Lambda automazione
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad"></a>

*Dott. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Riepilogo
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) è uno strumento di scripting di Microsoft che gestisce le informazioni sul dominio e le interazioni degli utenti con i servizi di rete. È ampiamente utilizzato dai fornitori di servizi gestiti (MSPs) per gestire le credenziali dei dipendenti e le autorizzazioni di accesso. Poiché gli aggressori di AD possono utilizzare account inattivi per cercare di hackerare un'organizzazione, è importante trovare account inattivi e disattivarli secondo un programma di manutenzione ordinaria. Con AWS Directory Service for Microsoft Active Directory, puoi eseguire Microsoft Active Directory come servizio gestito. 

Questo modello può aiutarti a configurare AWS Lambda l'automazione per trovare e rimuovere rapidamente gli account inattivi. Quando si utilizza questo modello, è possibile ottenere i seguenti vantaggi:
+ Migliora le prestazioni di database e server e correggi le vulnerabilità di sicurezza dovute agli account inattivi.
+ Se il server AD è ospitato nel cloud, la rimozione degli account inattivi può anche ridurre i costi di archiviazione migliorando al contempo le prestazioni. Le bollette mensili potrebbero diminuire perché sia i costi della larghezza di banda che le risorse di elaborazione possono diminuire.
+ Tieni a bada i potenziali aggressori con un Active Directory pulito.

## Prerequisiti e limitazioni
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Git [installato](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurato su una workstation locale.
+ Terraform [installato](https://learn.hashicorp.com/tutorials/terraform/install-cli) e configurato su una workstation locale.
+ Computer Windows con moduli Active Directory ()`ActiveDirectory`.
+ Una directory in AWS Managed Microsoft AD e credenziali memorizzate in un [AWS Systems Manager parametro in Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html).
+ AWS Identity and Access Management [*Ruolo (IAM) con autorizzazioni per l' Servizi AWS elenco in Strumenti.*](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools) Per ulteriori informazioni su IAM, consulta [Risorse correlate](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources).

**Limitazioni**
+ Questo modello non supporta la configurazione tra account.
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

**Versioni del prodotto**
+ [Terraform versione 1.1.9 o successiva](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versione 3.0 o successiva](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Architecture
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura per questo modello.

![\[Processo per utilizzare l'automazione Lambda per rimuovere EC2 voci da Managed Microsoft AD.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/6b50dcc5-4f4b-4eea-85a7-04cebc9f7454/images/b7fc5962-bfb8-4f5a-968e-7487b1d48c4f.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Amazon EventBridge attiva la AWS Lambda funzione in base a un'espressione cron. (Per questo modello, la pianificazione delle espressioni cron è una volta al giorno.)

1. Il ruolo e la policy IAM richiesti vengono creati e collegati AWS Lambda tramite Terraform.

1. La AWS Lambda funzione viene eseguita e chiama i gruppi di Auto Scaling di Amazon Elastic Compute Cloud (Amazon EC2) utilizzando il modulo boto Python. La funzione Lambda ottiene l'id casuale dell'istanza. L'id dell'istanza viene utilizzato per eseguire AWS Systems Manager i comandi.

1. AWS Lambda effettua un'altra chiamata ad Amazon EC2 utilizzando il modulo boto e ottiene gli indirizzi IP privati dei server Windows in esecuzione e li archivia in una variabile temporanea.

1. AWS Lambda effettua un'altra chiamata a Systems Manager per ottenere le informazioni sul computer a cui è connesso Directory Service.

1. Un AWS Systems Manager documento aiuta a eseguire lo PowerShell script sui server Amazon EC2 Windows per ottenere gli indirizzi IP privati dei computer collegati ad AD.

1. Il nome utente e le password del dominio AD sono archiviati nel AWS Systems Manager Parameter Store. AWS Lambda e Systems Manager effettuano una chiamata a Parameter Store e ottengono i valori di nome utente e password da utilizzare per connettere AD.

1. Utilizzando il documento Systems Manager, lo PowerShell script viene eseguito sul server Amazon EC2 Windows utilizzando l'id dell'istanza ottenuto in precedenza nel passaggio 3.

1. Amazon EC2 si connette Directory Service utilizzando PowerShell i comandi e rimuove i computer non in uso o inattivi.

## Tools (Strumenti)
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools"></a>

**Servizi AWS**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)offre diversi modi per utilizzare Microsoft Active Directory (AD) con altri Servizi AWS come Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) per SQL Server e FSx Amazon per Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)consente ai carichi di lavoro e alle risorse compatibili con le directory di AWS utilizzare Microsoft Active Directory in. Cloud AWS
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornisce capacità di elaborazione scalabile in. Cloud AWS Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle. Con IAM, puoi specificare chi o cosa può accedere ai servizi e alle risorse AWS, gestire centralmente le autorizzazioni granulari e analizzare l'accesso per perfezionare le autorizzazioni. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)ti aiuta a gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala.
+ [AWS Systems Manager i documenti](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definiscono le azioni che Systems Manager esegue sulle istanze gestite. Systems Manager include più di 100 documenti preconfigurati che è possibile utilizzare specificando i parametri nel runtime (tempo di esecuzione).
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) è una funzionalità AWS Systems Manager e fornisce uno storage gerarchico sicuro per la gestione dei dati di configurazione e la gestione dei segreti.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento open source di infrastruttura come codice (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)è un programma di gestione dell'automazione e della configurazione di Microsoft che funziona su Windows, Linux e macOS.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

****Deposito di codice C****

Il codice per questo pattern è disponibile nell'archivio della [soluzione GitHub Custom AD Cleanup Automation](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/). 

## Best practice
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Unisci automaticamente i domini.**Quando avvii un'istanza Windows che deve far parte di un Directory Service dominio, unisciti al dominio durante il processo di creazione dell'istanza anziché aggiungere manualmente l'istanza in un secondo momento. Per aggiungere automaticamente un dominio, seleziona la directory corretta dall'elenco a discesa **Domain join directory** quando avvii una nuova istanza. Per maggiori dettagli, consulta [Unire senza problemi un'istanza Amazon EC2 Windows alla tua AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) nella *Guida all'Directory Service amministrazione*.
+ **Eliminare gli account non utilizzati.**È comune trovare account in AD che non sono mai stati utilizzati. Come gli account disabilitati o inattivi che rimangono nel sistema, gli account trascurati e inutilizzati possono rallentare il sistema AD o rendere l'organizzazione vulnerabile alle violazioni dei dati.
+ **Automatizza le pulizie di Active Directory.**Per contribuire a mitigare i rischi per la sicurezza e impedire che gli account obsoleti influiscano sulle prestazioni di AD, è necessario eseguire le pulizie di AD a intervalli regolari. Puoi eseguire la maggior parte delle attività di gestione e pulizia di AD scrivendo script. Le attività di esempio includono la rimozione di account disabilitati e inattivi, l'eliminazione di gruppi vuoti e inattivi e l'individuazione di account utente e password scaduti. 

## Poemi epici
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-epics"></a>

### Configurare l'ambiente
<a name="set-up-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una cartella di progetto e aggiungi i file. | Per clonare il repository e creare una cartella di progetto, procedi come segue: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 

### Esegui il provisioning dell'architettura di destinazione utilizzando la configurazione Terraform
<a name="provision-the-target-architecture-by-using-the-terraform-configuration"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Inizializza la configurazione Terraform. | Per inizializzare la directory di lavoro che contiene i file Terraform, esegui il seguente comando.`terraform init` | DevOps ingegnere | 
| Visualizza in anteprima le modifiche. | Puoi visualizzare in anteprima le modifiche che Terraform apporterà all'infrastruttura prima che l'infrastruttura venga implementata. Per verificare che Terraform apporti le modifiche necessarie, esegui il seguente comando.`terraform plan` | DevOps ingegnere | 
| Esegui le azioni proposte. | Per verificare che i risultati del `terraform plan` comando siano quelli previsti, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps ingegnere | 
| Pulisci l'infrastruttura. | Per pulire l'infrastruttura che hai creato, usa il seguente comando.`terraform destroy`Per confermare il comando destroy, digitate`yes`. | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui e testa la funzione Lambda. | Per verificare che la distribuzione sia avvenuta correttamente, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)I risultati dell'esecuzione mostrano l'output della funzione. | DevOps ingegnere | 
| Visualizza i risultati della funzione Lambda. | In questo modello, una EventBridge regola esegue la funzione Lambda una volta al giorno. Per visualizzare i risultati della funzione Lambda, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Nella CloudWatch console, la pagina **Log groups** mostra i risultati della funzione Lambda. | DevOps ingegnere | 

### Pulisci l'infrastruttura dopo l'uso
<a name="clean-up-infrastructure-after-use"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci l'infrastruttura. | Per ripulire l'infrastruttura che hai creato, usa il seguente comando.`terraform destroy`Per confermare il comando destroy, digitate`yes`. | DevOps ingegnere | 
| Verifica dopo la pulizia. | Verifica che le risorse siano state rimosse correttamente. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Se si tenta di rimuovere il computer AD, viene visualizzato il messaggio «Accesso negato». Il computer AD non può essere rimosso perché, per impostazione predefinita, l'azione tenta di rimuovere due indirizzi IP privati collegati come parte dei servizi AD. | Per evitare questo errore, utilizzate la seguente operazione Python per ignorare i primi due computer quando elencate le differenze tra l'output di un computer AD e l'output del computer che esegue Windows.<pre>Difference = Difference[2:]</pre> | 
| Quando Lambda esegue PowerShell uno script su un server Windows, si aspetta che i moduli Active Directory siano disponibili per impostazione predefinita. Se i moduli non sono disponibili, una funzione Lambda crea un errore che indica «Get- non AdComputer è installato sull'istanza». | Per evitare questo errore, installa i moduli richiesti utilizzando i dati utente delle EC2 istanze. Usa lo [EC2WindowsUserdata](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/EC2WindowsUserdata)script che si trova nel GitHub repository di questo pattern. | 

## Risorse correlate
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentazione**
+ [Amazon EventBridge e AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurazione delle autorizzazioni dell'istanza richieste per Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gestione delle identità e degli accessi per Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Aggiungi manualmente un'istanza Amazon EC2 Windows alla tua AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Utilizzo di politiche IAM basate sull'identità in AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)

**Altre risorse**
+ [AWS Provider (documentazione Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs))
+ [Configurazione del backend (documentazione](https://developer.hashicorp.com/terraform/language/backend) Terraform)
+ [Installa Terraform (documentazione Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli))
+ Modulo di [avvio Python (repository](https://pypi.org/project/boto/) Python Package Index)
+ Download del [file binario Terraform](https://www.terraform.io/downloads) (documentazione Terraform)

# Esegui test unitari per i lavori ETL in Python AWS Glue utilizzando il framework pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan e Vaidy Sankaran, Amazon Web Services*

## Riepilogo
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Puoi eseguire test unitari per i lavori di estrazione, trasformazione e caricamento (ETL) in Python AWS Glue in un [ambiente di sviluppo locale](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), ma replicare questi test in una DevOps pipeline può essere difficile e richiedere molto tempo. I test unitari possono essere particolarmente impegnativi quando si sta modernizzando il processo ETL del mainframe su stack tecnologici. AWS Questo modello mostra come semplificare i test delle unità, mantenendo intatte le funzionalità esistenti, evitando interruzioni delle funzionalità chiave delle applicazioni quando si rilasciano nuove funzionalità e mantenendo software di alta qualità. È possibile utilizzare i passaggi e gli esempi di codice in questo modello per eseguire test unitari per i lavori ETL in Python AWS Glue utilizzando il framework pytest in. AWS CodePipelineÈ inoltre possibile utilizzare questo modello per testare e distribuire più lavori. AWS Glue 

## Prerequisiti e limitazioni
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un URI di immagine di Amazon Elastic Container Registry (Amazon ECR) per AWS Glue la tua libreria, scaricato dalla [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR Public Gallery
+ Terminale Bash (su qualsiasi sistema operativo) con un profilo per il target e Account AWS Regione AWS
+ [Python 3.10](https://www.python.org/downloads/) o successivo
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Libreria [Moto](https://github.com/getmoto/moto) Python per i test Servizi AWS

## Architecture
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

Il diagramma seguente descrive come incorporare i test unitari per i processi AWS Glue ETL basati su Python in una tipica pipeline di scala aziendale. AWS DevOps 

![\[Test unitari per i processi ETL di AWS Glue.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Nella fase di origine, AWS CodePipeline utilizza un bucket Amazon Simple Storage Service (Amazon S3) con versioni diverse per archiviare e gestire le risorse del codice sorgente. Queste risorse includono un esempio di Python ETL job (`sample.py`), un file di unit test (`test_sample.py`) e un modello. AWS CloudFormation Quindi, CodePipeline trasferisce il codice più recente dal ramo principale al AWS CodeBuild progetto per un'ulteriore elaborazione.

1. Nella fase di compilazione e pubblicazione, il codice più recente della fase sorgente precedente viene sottoposto a test unitari con l'aiuto di un'immagine Amazon ECR AWS Glue pubblica. Quindi, il rapporto di test viene pubblicato in gruppi di CodeBuild report. L'immagine del contenitore nell'archivio pubblico di Amazon ECR per le AWS Glue librerie include tutti i file binari necessari per eseguire le attività ETL [PySparkbasate su](https://spark.apache.org/docs/latest/api/python/) unit test in locale. AWS Glue L'archivio pubblico del contenitore ha tre tag di immagine, uno per ogni versione supportata da. AWS Glue A scopo dimostrativo, questo modello utilizza il tag `glue_libs_4.0.0_image_01` image. Per utilizzare questa immagine contenitore come immagine di runtime in CodeBuild, copia l'URI dell'immagine che corrisponde al tag dell'immagine che intendi utilizzare, quindi aggiorna il `pipeline.yml` file nel GitHub repository per la `TestBuild` risorsa.

1. Nella fase di implementazione, il CodeBuild progetto viene avviato e pubblica il codice in un bucket Amazon S3 se tutti i test vengono superati.

1. L'utente distribuisce l' AWS Glue attività utilizzando il modello nella CloudFormation cartella. `deploy`

## Tools (Strumenti)
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Servizi AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che consente di compilare il codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)è un servizio ETL completamente gestito. Ti aiuta a classificare, pulire, arricchire e spostare i dati in modo affidabile tra archivi di dati e flussi di dati.
+ [Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) S3) è un servizio di storage di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni all'avanguardia nel settore.

**Altri strumenti**
+ [Python](https://www.python.org/) è un linguaggio di programmazione generico interpretato di alto livello.
+ [Moto](https://github.com/getmoto/moto) è una libreria Python per i test. Servizi AWS
+ [Pytest](https://github.com/pytest-dev/pytest) è un framework per scrivere piccoli unit test scalabili per supportare test funzionali complessi per applicazioni e librerie.
+ La [libreria Python ETL](https://github.com/awslabs/aws-glue-libs) for AWS Glue è un repository per le librerie Python utilizzate nello sviluppo locale di processi batch per. PySpark AWS Glue

**Deposito di codice**

Il codice per questo pattern è disponibile nel repository GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). Il repository include le seguenti risorse:
+ Un esempio di AWS Glue job basato su Python nella cartella `src`
+ Casi di unit test associati (creati utilizzando il framework pytest) nella cartella `tests`
+ Un CloudFormation modello (scritto in YAML) nella cartella `deploy`

## Best practice
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Sicurezza per le risorse CodePipeline **

È consigliabile utilizzare la crittografia e l'autenticazione per i repository di origine che si connettono alle pipeline. CodePipeline Per ulteriori informazioni, consulta le [migliori pratiche di sicurezza](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) nella CodePipeline documentazione.

**Monitoraggio e registrazione delle risorse CodePipeline **

È consigliabile utilizzare le funzionalità di AWS registrazione per determinare quali azioni intraprendono gli utenti nel proprio account e quali risorse utilizzano. I file di registro mostrano quanto segue:
+ Ora e data delle azioni
+ Indirizzo IP di origine delle azioni
+ Quali azioni non sono riuscite a causa di autorizzazioni inadeguate

Le funzionalità di registrazione sono disponibili in Amazon CloudWatch Events AWS CloudTrail e Amazon. Puoi utilizzarlo CloudTrail per registrare le chiamate AWS API e gli eventi correlati effettuati da o per conto di te Account AWS. Per ulteriori informazioni, consulta la sezione [Registrazione delle chiamate CodePipeline API con AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) nella CodePipeline documentazione.

È possibile utilizzare CloudWatch Events per monitorare le Cloud AWS risorse e le applicazioni in esecuzione su AWS. Puoi anche creare avvisi in CloudWatch Eventi. Per ulteriori informazioni, consulta [Monitoraggio CodePipeline degli eventi](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) nella CodePipeline documentazione.

## Epiche
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Implementa il codice sorgente
<a name="deploy-the-source-code"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prepara l'archivio del codice per la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps ingegnere | 
| Crea lo CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)Lo stack crea una CodePipeline vista utilizzando Amazon S3 come origine. **Nei passaggi precedenti, la pipeline è -pipeline. aws-glue-unit-test** | AWS DevOps, DevOps ingegnere | 

### Esegui i test unitari
<a name="run-the-unit-tests"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui i test unitari in corso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingegnere | 

### Pulisci tutte le AWS risorse
<a name="clean-up-all-aws-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci le risorse del tuo ambiente. | Per evitare costi di infrastruttura aggiuntivi, assicuratevi di eliminare lo stack dopo aver sperimentato gli esempi forniti in questo schema.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps ingegnere | 

## risoluzione dei problemi
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il ruolo CodePipeline di servizio non può accedere al bucket Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline restituisce un errore indicante che il bucket Amazon S3 non ha una versione. | CodePipeline richiede la versione del bucket Amazon S3 di origine. Abilita il controllo delle versioni sul tuo bucket Amazon S3. Per istruzioni, consulta [Abilitare il controllo delle versioni sui bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html). | 

## Risorse correlate
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Sviluppo e test AWS Glue di lavori a livello locale](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation per AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Informazioni aggiuntive
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

Inoltre, puoi distribuire i AWS CloudFormation modelli utilizzando AWS Command Line Interface (AWS CLI). Per ulteriori informazioni, consulta [Distribuzione rapida di modelli con trasformazioni nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html). CloudFormation 

# Configura una CI/CD pipeline utilizzando AWS CodePipeline e AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder e Cizer Pereira, Amazon Web Services*

## Home
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

L'automazione del processo di creazione e rilascio del software con integrazione e distribuzione continue (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDincorpora una cultura, una serie di principi operativi e una [raccolta](https://aws.amazon.com/devops/#cicd) di pratiche che aiutano i team di sviluppo delle applicazioni a fornire modifiche al codice con maggiore frequenza e affidabilità). *L'implementazione è anche nota come pipeline CI/CD.*

Questo modello definisce una pipeline riutilizzabile di integrazione continua e distribuzione continua (CI/CD) su Amazon Web Services (AWS) con un repository AWS. CodeCommit La CodePipeline pipeline AWS è scritta utilizzando [AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Utilizzando CodePipeline, puoi modellare le diverse fasi del processo di rilascio del software tramite l'interfaccia della Console di gestione AWS, l'AWS Command Line Interface (AWS CLI), AWS o CloudFormation AWS. SDKs Questo modello dimostra l'implementazione CodePipeline e i relativi componenti utilizzando AWS CDK. Oltre alle librerie di costruzione, AWS CDK include un toolkit (il comando CLI`cdk`), che è lo strumento principale per interagire con l'app AWS CDK. Tra le altre funzioni, il toolkit offre la possibilità di convertire uno o più stack in CloudFormation modelli e distribuirli su un account AWS.

La pipeline include test per convalidare la sicurezza delle librerie di terze parti e aiuta a garantire un rilascio rapido e automatico negli ambienti specificati. È possibile aumentare la sicurezza complessiva delle applicazioni sottoponendole a un processo di convalida.

Lo scopo di questo modello è accelerare l'uso delle CI/CD pipeline per distribuire il codice, garantendo al contempo che le risorse distribuite rispettino le migliori pratiche. DevOps Dopo aver implementato il [codice di esempio](https://github.com/aws-samples/aws-codepipeline-cicd), avrai un [AWS CodePipeline](https://aws.amazon.com/codepipeline/) con processi di linting, test, controllo di sicurezza, implementazione e post-distribuzione. Questo modello include anche i passaggi per Makefile. Utilizzando un Makefile, gli sviluppatori possono riprodurre CI/CD i passaggi localmente e aumentare la velocità del processo di sviluppo.

## Prerequisiti e limitazioni
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Una conoscenza di base di quanto segue:
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limitazioni**

Questo modello utilizza [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript solo per. Non copre altre lingue supportate da AWS CDK.

**Versioni del prodotto**

Utilizza le versioni più recenti dei seguenti strumenti:
+ Interfaccia a riga di comando di AWS (CLI AWS)
+ cfn\$1nag
+ git-remote-codecommit
+ Node.js

## Architecture
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Stack tecnologico Target**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Architettura Target**

La pipeline viene attivata da una modifica nel CodeCommit repository AWS (). `SampleRepository` All'inizio, CodePipeline crea artefatti, si aggiorna e avvia il processo di distribuzione. La pipeline risultante implementa una soluzione in tre ambienti indipendenti:
+ Dev: controllo del codice in tre fasi nell'ambiente di sviluppo attivo
+ Test: ambiente di test di integrazione e regressione
+ Prod — Ambiente di produzione

I tre passaggi inclusi nella fase di sviluppo sono il linting, la sicurezza e i test unitari. Questi passaggi vengono eseguiti in parallelo per accelerare il processo. Per garantire che la pipeline fornisca solo artefatti funzionanti, verrà interrotta ogni volta che una fase del processo fallisce. Dopo una fase di implementazione in fase di sviluppo, la pipeline esegue test di convalida per verificare i risultati. In caso di successo, la pipeline distribuirà quindi gli artefatti nell'ambiente di test, che contiene la convalida post-implementazione. Il passaggio finale consiste nel distribuire gli artefatti nell'ambiente Prod.

Il diagramma seguente mostra il flusso di lavoro dal CodeCommit repository ai processi di compilazione e aggiornamento eseguiti da CodePipeline, le tre fasi dell'ambiente di sviluppo e la successiva implementazione e convalida in ciascuno dei tre ambienti.

![\[L'ambiente di sviluppo include linting, sicurezza e unit testing, tutti con implementazione e convalida.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Tools (Strumenti)
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Servizi AWS**
+ [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](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. In questo modello CloudFormation i modelli possono essere utilizzati per creare un CodeCommit repository e una CodePipeline pipeline CI/CD.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) è un CI/CD servizio che ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

**Altri strumenti**
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) è uno strumento open source che cerca modelli nei CloudFormation modelli per identificare potenziali problemi di sicurezza.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)è un'utilità per inviare ed estrarre codice dai CodeCommit repository estendendo Git.
+ [Node.js](https://nodejs.org/en/docs/) è un ambiente di JavaScript runtime basato sugli eventi progettato per la creazione di applicazioni di rete scalabili.

**Codice**

Il codice per questo modello è disponibile nel repository GitHub [AWS CodePipeline with CI/CD practices](https://github.com/aws-samples/aws-codepipeline-cicd).

## Best practice
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Esamina le risorse, come le policy di AWS Identity and Access Management (IAM), per confermare che siano in linea con le best practice della tua organizzazione.

## Epiche
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa strumenti su macOS o Linux. | Se utilizzi macOS o Linux, puoi installare gli strumenti eseguendo il seguente comando nel tuo terminale preferito o usando [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) per Linux.<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps ingegnere | 
| Configura AWS CLI. | Per configurare AWS CLI, usa le istruzioni per il tuo sistema operativo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingegnere | 

### Configura la distribuzione iniziale
<a name="set-up-the-initial-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica o clona il codice. | Per ottenere il codice utilizzato da questo pattern, effettuate una delle seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre>Rimuovi la `.git` directory dal repository clonato.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre>Successivamente, utilizzerai un CodeCommit repository AWS appena creato come origine remota. | DevOps ingegnere | 
| Connect all'account AWS. | Puoi connetterti utilizzando un token di sicurezza temporaneo o l'autenticazione delle landing zone. Per confermare che stai utilizzando l'account e la regione AWS corretti, esegui i seguenti comandi.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps ingegnere | 
| Avvia l'ambiente. | Per avviare un ambiente AWS CDK, esegui i seguenti comandi.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Dopo aver avviato correttamente l'ambiente, dovrebbe essere visualizzato il seguente output.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre>Per ulteriori informazioni sul bootstrap di AWS CDK, consulta la documentazione di [AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) CDK. | DevOps ingegnere | 
| Sintetizza un modello. | Per sintetizzare un'app AWS CDK, usa il comando. `cdk synth`<pre>npm run cdk synth</pre>Vedrai il seguente output.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps ingegnere | 
| Distribuisci lo CodePipeline stack. | Ora che hai avviato e sintetizzato il CloudFormation modello, puoi distribuirlo. La distribuzione creerà la CodePipeline pipeline e un CodeCommit repository, che saranno l'origine e il trigger della pipeline.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre>Dopo aver eseguito il comando, dovresti vedere una corretta distribuzione dello CodePipeline stack e delle informazioni di output. ti `CodePipeline.RepositoryName` dà il nome del CodeCommit repository nell'account AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps ingegnere | 
| Configura l' CodeCommit archivio e la filiale remoti. | Dopo una distribuzione di successo, CodePipeline avvierà la prima esecuzione della pipeline, che puoi trovare nella console [ CodePipeline AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Poiché AWS CDK e io CodeCommit non avviamo un ramo predefinito, questa esecuzione iniziale della pipeline fallirà e restituirà il seguente messaggio di errore.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre>Per correggere questo errore, configura un'origine remota come `SampleRepository` e crea il ramo richiesto. `main`<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps ingegnere | 

### Testa la pipeline implementata CodePipeline
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Apporta una modifica per attivare la pipeline. | Dopo una corretta implementazione iniziale, dovresti disporre di una CI/CD pipeline completa con un `main` ramo `SampleRepository` come ramo di origine. Non appena confermate le modifiche al `main` ramo, la pipeline avvierà ed eseguirà la seguente sequenza di azioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingegnere | 

### Esegui il test localmente utilizzando un Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il processo di sviluppo utilizzando un Makefile. | È possibile eseguire l'intera pipeline localmente utilizzando il `make` comando oppure eseguire un singolo passaggio (ad esempio,`make linting`).Per testare l'utilizzo`make`, effettuate le seguenti azioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Sviluppatore di app, DevOps ingegnere | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina le risorse dell'app AWS CDK. | Per pulire l'app AWS CDK, esegui il comando seguente.<pre>cdk destroy --all</pre>Tieni presente che i bucket Amazon Simple Storage Service (Amazon S3) creati durante il bootstrap non vengono eliminati automaticamente. Hanno bisogno di una policy di conservazione che consenta l'eliminazione, oppure devi eliminarli manualmente nel tuo account AWS. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il modello non funziona come previsto. | Se qualcosa va storto e il modello non funziona, assicurati di avere quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Risorse correlate
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Nozioni di base delle attività comuni nel Centro identità IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentazione AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

# Configura la registrazione centralizzata su scala aziendale utilizzando Terraform
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Aarti Rajput, Yashwant Patel e Nishtha Yadav, Amazon Web Services*

## Riepilogo
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

La registrazione centralizzata è fondamentale per l'infrastruttura cloud di un'organizzazione, perché offre visibilità sulle operazioni, sulla sicurezza e sulla conformità. Man mano che l'organizzazione ridimensiona il proprio AWS ambiente su più account, una strategia strutturata di gestione dei log diventa fondamentale per eseguire operazioni di sicurezza, soddisfare i requisiti di audit e raggiungere l'eccellenza operativa.

Questo modello fornisce un framework scalabile Account AWS e sicuro per centralizzare i log di più servizi, per consentire una gestione dei log su scala aziendale in implementazioni complesse. AWS La soluzione è automatizzata utilizzando Terraform, uno strumento di infrastruttura come codice (IaC) che garantisce implementazioni coerenti e ripetibili e riduce al minimo la configurazione manuale. HashiCorp Combinando Amazon CloudWatch Logs, Amazon Data Firehose e Amazon Simple Storage Service (Amazon S3), puoi implementare una solida pipeline di aggregazione e analisi dei log che offre:
+ Gestione centralizzata dei log in tutta l'organizzazione in AWS Organizations
+ Raccolta automatizzata dei log con controlli di sicurezza integrati
+ Elaborazione scalabile dei log e archiviazione durevole
+ Report di conformità e audit trail semplificati
+ Informazioni operative e monitoraggio in tempo reale

La soluzione raccoglie i log dai contenitori, dalle funzioni e dalle istanze di database Amazon Elastic Kubernetes Service (Amazon EKS AWS Lambda ) tramite Logs. CloudWatch Inoltra automaticamente questi log a un account di registrazione dedicato utilizzando i filtri di abbonamento. CloudWatch Firehose gestisce la pipeline di streaming di log ad alta velocità verso Amazon S3 per lo storage a lungo termine. Amazon Simple Queue Service (Amazon SQS) è configurato per ricevere notifiche di eventi di Amazon S3 al momento della creazione di oggetti. Ciò consente l'integrazione con i servizi di analisi, tra cui:
+ Amazon OpenSearch Service per la ricerca, la visualizzazione e l'analisi dei log in tempo reale
+ Amazon Athena per interrogazioni basate su SQL
+ Amazon EMR per l'elaborazione su larga scala
+ Lambda per la trasformazione personalizzata
+ Amazon Quick Sight per dashboard

Tutti i dati vengono crittografati utilizzando AWS Key Management Service (AWS KMS) e l'intera infrastruttura viene distribuita utilizzando Terraform per una configurazione coerente in tutti gli ambienti.

Questo approccio di registrazione centralizzato consente alle organizzazioni di migliorare il proprio livello di sicurezza, mantenere i requisiti di conformità e ottimizzare l'efficienza operativa nell'intera infrastruttura. AWS 

## Prerequisiti e limitazioni
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**Prerequisiti**
+ Una landing zone per la tua organizzazione costruita utilizzando [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)
+ [Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html), distribuito e configurato con gli account richiesti
+ [Terraform per il provisioning](https://developer.hashicorp.com/terraform/downloads) dell'infrastruttura
+ AWS Identity and Access Management Ruoli e politiche [(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) per l'accesso tra account diversi

Per istruzioni sulla configurazione AWS Control Tower degli account AFT e Application, consulta la sezione [Epics](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics).

**Account richiesti**

La tua organizzazione AWS Organizations dovrebbe includere questi account:
+ **Account dell'applicazione**: uno o più account di origine in cui Servizi AWS (Amazon EKS, Lambda e Amazon RDS) eseguono e generano log
+ Account **Log Archive: un account** dedicato per l'archiviazione e la gestione centralizzate dei log

**Versioni del prodotto**
+ [AWS Control Tower versione 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) o successiva
+ [Terraform versione 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) o successiva

## Architecture
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

Il diagramma seguente illustra un'architettura di registrazione AWS centralizzata che fornisce una soluzione scalabile per la raccolta, l'elaborazione e l'archiviazione dei log da più account di applicazioni in un account Log Archive dedicato. Questa architettura gestisce in modo efficiente i log provenienti da Servizi AWS, tra cui Amazon RDS, Amazon EKS e Lambda, e li indirizza attraverso un processo semplificato ai bucket S3 regionali nell'account Log Archive.

![\[Architettura di registrazione centralizzata AWS per la raccolta di log da più account di applicazioni.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


Il flusso di lavoro include cinque processi:

1. **Processo di flusso di log**
   + Il processo di flusso di log inizia negli account dell'applicazione, dove vengono Servizi AWS generati vari tipi di log, ad esempio log generali, di errore, di controllo, di query lente da Amazon RDS, log del piano di controllo da Amazon EKS e log di esecuzione di funzioni ed errori da Lambda.
   + CloudWatch funge da punto di raccolta iniziale. Raccoglie questi registri a livello di gruppo di log all'interno di ciascun account dell'applicazione.
   + In CloudWatch, [i filtri di abbonamento](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) determinano quali registri devono essere inoltrati all'account centrale. Questi filtri offrono un controllo granulare sull'inoltro dei log, in modo da poter specificare modelli di log esatti o flussi di log completi per la centralizzazione.

1. **Trasferimento dei log tra account**
   + I log vengono spostati nell'account Log Archive. CloudWatch i filtri di abbonamento facilitano il trasferimento tra account e preservano il contesto regionale.
   + L'architettura stabilisce più flussi paralleli per gestire diverse fonti di log in modo efficiente, per garantire prestazioni e scalabilità ottimali.

1. **Elaborazione dei log nell'account Log Archive**
   + Nell'account Log Archive, Firehose elabora i flussi di log in entrata.
   + Ogni regione mantiene flussi di distribuzione Firehose dedicati in grado di trasformare, convertire o arricchire i log in base alle esigenze.
   + Questi stream Firehose inviano i log elaborati ai bucket S3 nell'account Log Archive, che si trova nella stessa regione degli account dell'applicazione di origine (Regione A nel diagramma) per mantenere i requisiti di sovranità dei dati.

1. **Notifiche e flussi di lavoro aggiuntivi**
   + Quando i log raggiungono i bucket S3 di destinazione, l'architettura implementa un sistema di notifica utilizzando Amazon SQS.
   + Le code SQS regionali consentono l'elaborazione asincrona e possono attivare flussi di lavoro, analisi o sistemi di avviso aggiuntivi in base ai log archiviati.

1. **AWS KMS per motivi di sicurezza**

   L'architettura incorpora funzionalità AWS KMS di sicurezza. AWS KMS fornisce chiavi di crittografia per i bucket S3. Ciò garantisce che tutti i log archiviati mantengano la crittografia inattiva, mantenendo al contempo la crittografia regionale per soddisfare i requisiti di residenza dei dati.

## Tools (Strumenti)
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**Servizi AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) è un servizio di monitoraggio e osservabilità che raccoglie dati operativi e di monitoraggio sotto forma di log, metriche ed eventi. Fornisce una visione unificata di AWS risorse, applicazioni e servizi eseguiti su AWS e server locali.
+ CloudWatch I [filtri di sottoscrizione dei log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html) sono espressioni che corrispondono a uno schema negli eventi di registro in entrata e forniscono gli eventi di log corrispondenti alla AWS risorsa specificata per ulteriori elaborazioni o analisi.
+ [AWS Control Tower Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) imposta una pipeline Terraform per aiutarti a fornire e personalizzare gli account. AWS Control Tower AFT fornisce il provisioning degli account basato su Terraform, consentendoti al contempo di gestire i tuoi account con. AWS Control Tower
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) fornisce dati di streaming in tempo reale verso destinazioni come Amazon S3, Amazon Redshift e Amazon Service. OpenSearch Si ridimensiona automaticamente in base alla velocità di trasmissione dei dati e non richiede alcuna amministrazione continua.
+ [Amazon Elastic Kubernetes Service (Amazon EKS) è un servizio di orchestrazione di container gestito che semplifica la distribuzione, la gestione e la scalabilità delle applicazioni containerizzate utilizzando Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html). Gestisce automaticamente la disponibilità e la scalabilità dei nodi del piano di controllo Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) crea e controlla le chiavi di crittografia per crittografare i dati. AWS KMS si integra con altri Servizi AWS per aiutarti a proteggere i dati archiviati con questi servizi.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)è un servizio di elaborazione serverless che consente di eseguire codice senza fornire o gestire server. Ridimensiona automaticamente le applicazioni eseguendo il codice in risposta a ciascun trigger e addebita solo in base al tempo di calcolo utilizzato.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) è un servizio di database relazionale gestito che semplifica la configurazione, il funzionamento e la scalabilità di un database relazionale nel cloud. Fornisce una capacità ridimensionabile e conveniente, automatizzando al contempo attività amministrative dispendiose in termini di tempo.
+ [Amazon Simple Queue Service (Amazon SQS) è un servizio](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) di accodamento messaggi che consente di disaccoppiare e scalare microservizi, sistemi distribuiti e applicazioni serverless. Elimina la complessità della gestione e del funzionamento del middleware orientato ai messaggi.
+ [Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) S3) è un servizio di storage di oggetti basato sul cloud che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni. Può archiviare e recuperare qualsiasi quantità di dati da qualsiasi punto del Web.

**Altri strumenti**
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Codice**

Il codice per questo modello è disponibile nel repository di registrazione GitHub [centralizzato](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform).

## Best practice
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ Utilizzane [più Account AWS in una singola organizzazione in](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html). AWS Organizations Questa pratica consente la gestione centralizzata e la registrazione standardizzata tra gli account.
+ Configura i [bucket S3 con controllo delle versioni, politiche del ciclo](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html) di vita e replica tra regioni. Implementa la crittografia e la registrazione degli accessi per la sicurezza e la conformità.
+ Implementa [standard di registrazione comuni utilizzando il formato JSON](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) con timestamp e campi standard. Utilizza una struttura e una correlazione di prefissi coerenti per semplificare il monitoraggio e l'analisi. IDs 
+ Abilita [i controlli di sicurezza con AWS KMS crittografia e accesso con](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) privilegi minimi. Mantieni AWS CloudTrail il monitoraggio e la rotazione regolare delle chiavi per una maggiore sicurezza.
+ Imposta [CloudWatch metriche e avvisi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) per il monitoraggio della consegna. Monitora costi e prestazioni con notifiche automatiche.
+ Configura [le politiche di conservazione di Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) per soddisfare i requisiti di conformità e abilita la registrazione degli accessi ai server Amazon S3 per tenere traccia di tutte le richieste effettuate ai tuoi bucket S3. Conserva la documentazione per le politiche e le regole del ciclo di vita dei bucket S3. [Esegui revisioni periodiche dei log di accesso, delle autorizzazioni dei bucket e delle configurazioni di archiviazione per garantire le migliori pratiche di conformità e sicurezza.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

## Epiche
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### Configura account AWS Control Tower, AFT e Application
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un AWS Control Tower ambiente con AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Amministratore AWS | 
| Abilita la condivisione delle risorse per l'organizzazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Amministratore AWS | 
| Verifica o fornisci gli account delle applicazioni. | Per fornire nuovi account dell'Applicazione per il tuo caso d'uso, creali tramite AFT. Per ulteriori informazioni, consulta [Fornire un nuovo account con AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) nella AWS Control Tower documentazione. | Amministratore AWS | 

### Configura i file di configurazione per gli account dell'applicazione
<a name="set-up-configuration-files-for-application-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia il contenuto della `Application_account` cartella nel `aft-account-customizations` repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Rivedi e modifica i parametri di input per la configurazione dell'account dell'applicazione. | In questo passaggio, configuri il file di configurazione per la creazione di risorse negli account dell'applicazione, inclusi gruppi di CloudWatch log, filtri di CloudWatch sottoscrizione, ruoli e policy IAM e dettagli di configurazione per le funzioni Amazon RDS, Amazon EKS e Lambda.Nel tuo `aft-account-customizations` repository, nella `Application_account` cartella, configura i parametri di input nel `terraform.tfvars` file in base ai requisiti della tua organizzazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 

### Imposta i file di configurazione per l'account Log Archive
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia il contenuto della `Log_archive_account` cartella nel `aft-account-customizations` repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Rivedi e modifica i parametri di input per la configurazione dell'account Log Archive. | In questo passaggio, configuri il file di configurazione per la creazione di risorse nell'account Log Archive, inclusi i flussi di distribuzione Firehose, i bucket S3, le code SQS e i ruoli e le policy IAM.Nella `Log_archive_account` cartella del tuo `aft-account-customizations` repository, configura i parametri di input nel `terraform.tfvars` file in base ai requisiti della tua organizzazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 

### Esegui i comandi Terraform per fornire risorse
<a name="run-terraform-commands-to-provision-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Opzione 1: distribuisci i file di configurazione Terraform da AFT. | In AFT, la pipeline AFT viene attivata dopo aver inviato il codice con le modifiche alla configurazione nel repository. GitHub `aft-account-customizations` AFT rileva automaticamente le modifiche e avvia il processo di personalizzazione dell'account.Dopo aver apportato modifiche ai file Terraform (`terraform.tfvars`), esegui il commit e invia le modifiche al tuo repository: `aft-account-customizations`<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>Se stai usando un ramo diverso (ad esempio`dev`), sostituiscilo `main` con il nome del ramo. | DevOps ingegnere | 
| Opzione 2: distribuisci manualmente il file di configurazione Terraform. | Se non utilizzi AFT o desideri distribuire la soluzione manualmente, puoi utilizzare i seguenti comandi Terraform dalle cartelle and: `Application_account` `Log_archive_account`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 

### Convalida le risorse
<a name="validate-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica i filtri di abbonamento. | Per verificare che i filtri di abbonamento inoltrino correttamente i log dai gruppi di log degli account dell'applicazione all'account Log Archive:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Verifica i flussi Firehose. | Per verificare che i flussi Firehose nell'account Log Archive elaborino correttamente i log dell'applicazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Convalida i bucket S3 centralizzati. | Per verificare che i bucket S3 centralizzati ricevano e organizzino correttamente i log:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Convalida le code SQS. | Per verificare che le code SQS ricevano notifiche per i nuovi file di registro:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Opzione 1: rimuovere il file di configurazione Terraform da AFT. | Quando rimuovi i file di configurazione Terraform e inserisci le modifiche, AFT avvia automaticamente il processo di rimozione delle risorse.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 
| Opzione 2: ripulisci manualmente le risorse Terraform. | Se non utilizzi AFT o desideri pulire le risorse manualmente, usa i seguenti comandi Terraform dalle cartelle `Application_account` and`Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La destinazione CloudWatch Logs non è stata creata o è inattiva. | Convalida quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Il filtro di sottoscrizione non è riuscito o è bloccato nello stato In sospeso. | Verifica quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Lo stream di distribuzione di Firehose non mostra alcun record in entrata. | Verificare quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## Risorse correlate
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Configurazione dell'infrastruttura Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) (documentazione Terraform)
+ [Implementare AWS Control Tower Account Factory for Terraform (AFT) (AWS Control Tower documentazione)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)
+ [Tutorial IAM: delega l'accesso Account AWS utilizzando i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) () IAMdocumentation

# Configura end-to-end la crittografia per le applicazioni su Amazon EKS utilizzando cert-manager e Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa e Vasanth Jeyaraj, Amazon Web Services*

## Riepilogo
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

L'implementazione della end-to-end crittografia può essere complessa e devi gestire i certificati per ogni risorsa nell'architettura dei microservizi. Sebbene sia possibile interrompere la connessione Transport Layer Security (TLS) ai margini della rete Amazon Web Services (AWS) con un Network Load Balancer o Amazon API Gateway, alcune organizzazioni richiedono la crittografia. end-to-end

Questo modello utilizza NGINX Ingress Controller per l'ingresso. Questo perché quando crei un ingresso Kubernetes, la risorsa di ingresso utilizza un Network Load Balancer. Il Network Load Balancer non consente il caricamento di certificati client. Pertanto, non puoi ottenere un TLS reciproco con Kubernetes Ingress.

Questo modello è destinato alle organizzazioni che richiedono l'autenticazione reciproca tra tutti i microservizi delle loro applicazioni. Mutual TLS riduce l'onere di mantenere i nomi utente o le password e può anche utilizzare il framework di sicurezza chiavi in mano. L'approccio di questo modello è compatibile se l'organizzazione ha un gran numero di dispositivi connessi o deve rispettare rigide linee guida di sicurezza.

Questo modello aiuta a migliorare il livello di sicurezza dell'organizzazione implementando la end-to-end crittografia per le applicazioni in esecuzione su Amazon Elastic Kubernetes Service (Amazon EKS). Questo modello fornisce un'applicazione e un codice di esempio nel repository di GitHub [End-to-end crittografia su Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) per mostrare come un microservizio funziona con la end-to-end crittografia su Amazon EKS. L'approccio del pattern utilizza [cert-manager](https://cert-manager.io/docs/), un componente aggiuntivo di Kubernetes, con [Let's Encrypt](https://letsencrypt.org/) come autorità di certificazione (CA). Let's Encrypt è una soluzione economica per gestire i certificati e fornisce certificati gratuiti validi per 90 giorni. Cert-manager automatizza il provisioning e la rotazione su richiesta dei certificati quando viene distribuito un nuovo microservizio su Amazon EKS. 

**Destinatari**

Questo modello è consigliato agli utenti che hanno esperienza con Kubernetes, TLS, Amazon Route 53 e Domain Name System (DNS).

## Prerequisiti e limitazioni
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un cluster Amazon EKS esistente.
+ AWS Command Line Interface (AWS CLI) versione 1.7 o successiva, installata e configurata su macOS, Linux o Windows.
+ L'utilità da riga di `kubectl` comando, installata e configurata per accedere al cluster Amazon EKS. Per ulteriori informazioni su questo argomento, consulta [Installazione di kubectl nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) di Amazon EKS.
+ Un nome DNS esistente per testare l'applicazione. Per ulteriori informazioni su questo argomento, consulta [Registrazione di nomi di dominio utilizzando Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) nella documentazione di Amazon Route 53. 
+ L'ultima versione di [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), installata sul tuo computer locale. Per ulteriori informazioni su questo argomento, consulta [Using Helm with Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) nella documentazione di Amazon EKS e nel repository GitHub [Helm](https://github.com/helm/helm). 
+ La GitHub [End-to-end crittografia nel repository Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), clonata sul tuo computer locale. 
+ Sostituisci i seguenti valori nei `trustpolicy.json` file `policy.json` and dalla GitHub [End-to-end crittografia clonata sull'archivio Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<account number>`— Sostituiscilo con l'ID dell'account AWS per l'account in cui desideri implementare la soluzione. 
  + `<zone id>`— Sostituire con l'ID di zona Route 53 del nome di dominio. 
  + `<node_group_role>`— Sostituire con il nome del ruolo AWS Identity and Access Management (IAM) associato ai nodi Amazon EKS.
  + `<namespace>`— Sostituiscilo con lo spazio dei nomi Kubernetes in cui distribuisci il controller di ingresso NGINX e l'applicazione di esempio.
  + `<application-domain-name>`— Sostituire con il nome di dominio DNS di Route 53.

**Limitazioni**
+ Questo modello non descrive come ruotare i certificati e dimostra solo come utilizzare i certificati con microservizi su Amazon EKS. 

## Architecture
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

Il diagramma seguente mostra i componenti del flusso di lavoro e dell'architettura di questo modello.

![\[Flusso di lavoro per configurare la crittografia per le applicazioni su Amazon EKS utilizzando cert-manager e Let's Encrypt.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Un client invia una richiesta di accesso all'applicazione al nome DNS.

1. Il record Route 53 è un CNAME per il Network Load Balancer.

1. Il Network Load Balancer inoltra la richiesta al controller di ingresso NGINX configurato con un listener TLS. La comunicazione tra NGINX Ingress Controller e Network Load Balancer segue il protocollo HTTPS.

1. Il NGINX Ingress Controller esegue il routing basato sul percorso in base alla richiesta del client al servizio applicativo.

1. Il servizio applicativo inoltra la richiesta al pod dell'applicazione. L'applicazione è progettata per utilizzare lo stesso certificato chiamando segreti.

1. I pod eseguono l'applicazione di esempio utilizzando i certificati cert-manager. La comunicazione tra NGINX Ingress Controller e i pod utilizza HTTPS.


| 
| 
| Nota: Cert-Manager viene eseguito nel proprio spazio dei nomi. Utilizza un ruolo del cluster Kubernetes per fornire certificati come segreti in namespace specifici. Puoi collegare questi namespace ai pod delle applicazioni e al NGINX Ingress Controller.  | 
| --- |

## Tools (Strumenti)
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Servizi AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) è un servizio gestito che puoi usare per eseguire Kubernetes su AWS senza dover installare, gestire e mantenere il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce automaticamente il traffico in entrata su più destinazioni, contenitori e indirizzi IP.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.

**Altri strumenti**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) è un componente aggiuntivo di Kubernetes che richiede certificati, li distribuisce nei contenitori Kubernetes e automatizza il rinnovo dei certificati.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) è una soluzione di gestione del traffico per app native del cloud in Kubernetes e ambienti containerizzati.

## Epiche
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Crea e configura una zona ospitata pubblica con Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una zona ospitata pubblica in Route 53. | Accedi alla Console di gestione AWS, apri la console Amazon Route 53, scegli **Zone ospitate**, quindi scegli **Crea zona ospitata**. Crea una zona ospitata pubblica e registra l'ID della zona. Per ulteriori informazioni su questo argomento, consulta [Creazione di una zona ospitata pubblica](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) nella documentazione di Amazon Route 53.ACME DNS01 utilizza il provider DNS per inviare una richiesta di rilascio del certificato al cert-manager. Questa sfida ti chiede di dimostrare di controllare il DNS del tuo nome di dominio inserendo un valore specifico in un record TXT sotto quel nome di dominio. Dopo che Let's Encrypt ha assegnato un token al tuo client ACME, quest'ultimo crea un record TXT derivato da quel token e dalla chiave del tuo account, e inserisce quel record in. `_acme-challenge.<YOURDOMAIN>` Quindi Let's Encrypt interroga il DNS per quel record. Se trova una corrispondenza, puoi procedere all'emissione di un certificato. | AWS DevOps | 

### Configura un ruolo IAM per consentire al cert-manager di accedere alla zona pubblica ospitata
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la policy IAM per cert-manager.  | È necessaria una policy IAM per fornire al cert-manager l'autorizzazione a convalidare la proprietà del dominio Route 53. La policy IAM di `policy.json` esempio è fornita nella `1-IAMRole` directory del repository di GitHub [End-to-end crittografia clonata su Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Inserisci il seguente comando nella CLI di AWS per creare la policy IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Crea il ruolo IAM per cert-manager. | Dopo aver creato la policy IAM, devi creare un ruolo IAM. Il ruolo IAM di `trustpolicy.json` esempio è fornito nella `1-IAMRole` directory.Inserisci il seguente comando nella CLI di AWS per creare il ruolo IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Collegare la policy al ruolo. | Inserisci il seguente comando nella CLI di AWS per collegare la policy IAM al ruolo IAM. Sostituiscilo `AWS_ACCOUNT_ID` con l'ID del tuo account AWS. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Configurazione del controller di ingresso NGINX in Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa il controller di ingresso NGINX. | Installa la versione più recente di utilizzo di Helm. `nginx-ingress` È possibile modificare la `nginx-ingress` configurazione in base alle proprie esigenze prima di distribuirla. Questo modello utilizza un Network Load Balancer annotato e rivolto internamente, disponibile nella directory. `5-Nginx-Ingress-Controller` Installa il controller di ingresso NGINX eseguendo il seguente comando Helm dalla directory. `5-Nginx-Ingress-Controller``helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Verifica che il controller di ingresso NGINX sia installato. | Immettere il comando `helm list`. L'output dovrebbe mostrare che il NGINX Ingress Controller è installato. | AWS DevOps | 
| Crea un record Route 53 A. | Il record A punta al Network Load Balancer creato da NGINX Ingress Controller.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Configurare NGINX VirtualServer su Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa NGINX VirtualServer. | La VirtualServer risorsa NGINX è una configurazione di bilanciamento del carico alternativa alla risorsa in ingresso. La configurazione per creare la VirtualServer risorsa NGINX è disponibile nel file nella directory. `nginx_virtualserver.yaml` `6-Nginx-Virtual-Server` Immettete il seguente comando `kubectl` per creare la risorsa VirtualServer NGINX.`kubectl apply -f  nginx_virtualserver.yaml`Assicurati di aggiornare il nome di dominio dell'applicazione, il segreto del certificato e il nome del servizio dell'applicazione nel `nginx_virtualserver.yaml` file. | AWS DevOps | 
| Verifica che NGINX VirtualServer sia stato creato. | Inserisci il seguente comando `kubectl` per verificare che la VirtualServer risorsa NGINX sia stata creata correttamente.`kubectl get virtualserver`Verifica che la `Host` colonna corrisponda al nome di dominio dell'applicazione. | AWS DevOps | 
| Implementa il server web NGINX con TLS abilitato. | Questo modello utilizza un server web NGINX con TLS abilitato come applicazione per testare la crittografia. end-to-end I file di configurazione necessari per distribuire l'applicazione di test sono disponibili nella directory. `demo-webserver` Immettete il seguente comando `kubectl` per distribuire l'applicazione di test.`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Verifica che le risorse dell'applicazione di test siano state create. | Immettete i seguenti comandi `kubectl` per verificare che vengano create le risorse richieste per l'applicazione di test:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Convalida l'applicazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Risorse correlate
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Risorse AWS**
+ [Creazione di record utilizzando la console Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (documentazione Amazon Route 53)
+ [Utilizzo di un Network Load Balancer con il controller di ingresso NGINX su Amazon EKS (post sul blog AWS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/))

**Altre risorse**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (documentazione del cert-manager)
+ [Configurazione di DNS01 Challenge](https://cert-manager.io/docs/configuration/acme/dns01/) Provider (documentazione cert-manager)
+ Sfida [Let's encrypt DNS](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (documentazione Let's Encrypt)

# Semplifica la distribuzione di applicazioni multi-tenant Amazon EKS utilizzando Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate e Shrikant Patil, Amazon Web Services*

## Riepilogo
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Molte aziende che offrono prodotti e servizi sono settori regolamentati dai dati, tenuti a mantenere le barriere relative ai dati tra le loro funzioni aziendali interne. Questo modello descrive come utilizzare la funzionalità multi-tenancy di Amazon Elastic Kubernetes Service (Amazon EKS) per creare una piattaforma dati che consenta l'isolamento logico e fisico tra tenant o utenti che condividono un singolo cluster Amazon EKS. Il modello fornisce l'isolamento attraverso i seguenti approcci:
+ Isolamento dello spazio dei nomi Kubernetes
+ Controllo degli accessi basato sui ruoli (RBAC)
+ Policy di rete
+ Quote delle risorse
+ AWS Identity and Access Management ruoli (IAM) per gli account di servizio (IRSA)

Inoltre, questa soluzione utilizza Flux per mantenere immutabile la configurazione del tenant durante la distribuzione delle applicazioni. È possibile distribuire le applicazioni tenant specificando il repository tenant che contiene il file Flux nella configurazione. `kustomization.yaml`

Questo modello implementa quanto segue:
+ Un AWS CodeCommit repository, AWS CodeBuild progetti e una AWS CodePipeline pipeline, creati distribuendo manualmente gli script Terraform.
+ Componenti di rete e di calcolo necessari per ospitare i tenant. Questi vengono creati tramite CodePipeline e CodeBuild utilizzando Terraform.
+ Namespace dei tenant, politiche di rete e quote di risorse, configurati tramite un grafico Helm.
+ Applicazioni che appartengono a tenant diversi, distribuite utilizzando Flux.

Ti consigliamo di pianificare e creare attentamente la tua architettura per la multi-tenancy in base ai tuoi requisiti unici e alle tue considerazioni di sicurezza. Questo modello fornisce un punto di partenza per l'implementazione.

## Prerequisiti e limitazioni
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ AWS Command Line Interface [(AWS CLI) versione 2.11.4 o successiva, [installata](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versione 0.12 o successiva installata sul computer locale
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versione 3.0.0 o successiva
+ [Kubernetes Provider versione 2.10 o successiva](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs)
+ [Helm Provider versione 2.8.0](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) o successiva
+ [Kubectl](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) Provider versione 1.14 o successiva

**Limitazioni**
+ **Dipendenza dalle distribuzioni manuali di Terraform:** la configurazione iniziale del flusso di lavoro, inclusa la creazione di CodeCommit repository, CodeBuild progetti e pipeline, si basa sulle implementazioni manuali di Terraform. CodePipeline Ciò introduce una potenziale limitazione in termini di automazione e scalabilità, poiché richiede un intervento manuale per le modifiche all'infrastruttura.
+ **CodeCommit dipendenza dal repository:** il flusso di lavoro si basa sui CodeCommit repository come soluzione di gestione del codice sorgente ed è strettamente associato a. Servizi AWS

## Architecture
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Architetture di destinazione**

Questo modello implementa tre moduli per creare la pipeline, la rete e l'infrastruttura di calcolo per una piattaforma dati, come illustrato nei diagrammi seguenti.

*Architettura della pipeline:*

![\[Infrastruttura di pipeline per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Architettura di rete:*

![\[Infrastruttura di rete per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Architettura di calcolo:*

![\[Infrastruttura di elaborazione per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Tools (Strumenti)
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Servizi AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)è un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon Elastic Kubernetes Service (Amazon EKS) ti aiuta a eseguire Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) su AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)è un hub centrale che collega cloud privati virtuali () e reti locali. VPCs
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ Le [politiche di rete Cilium supportano le politiche di rete](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 e L4. Possono essere estesi con policy L7 per fornire sicurezza a livello di API per HTTP, Kafka e gRPC e altri protocolli simili.
+ [Flux](https://fluxcd.io/) è uno strumento di distribuzione continua (CD) basato su Git che automatizza le implementazioni delle applicazioni su Kubernetes.
+ [Helm](https://helm.sh/docs/) è un gestore di pacchetti open source per Kubernetes che ti aiuta a installare e gestire le applicazioni sul tuo cluster Kubernetes.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [EKS Multi-Tenancy Terraform](https://github.com/aws-samples/aws-eks-multitenancy-deployment) Solution.

## Best practice
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Per le linee guida e le migliori pratiche per l'utilizzo di questa implementazione, consulta quanto segue:
+ [Best practice per la multi-tenancy di Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentazione Flux](https://fluxcd.io/flux/get-started/)

## Epiche
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Crea pipeline per le fasi di costruzione, test e distribuzione di Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del progetto. | Clona il repository GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Avvia il bucket Terraform S3 e Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Aggiorna i `locals.tf` file `run.sh` and. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implementa il modulo pipeline. | Per creare risorse di pipeline, esegui manualmente i seguenti comandi Terraform. Non esiste alcuna orchestrazione per l'esecuzione automatica di questi comandi.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Crea l'infrastruttura di rete
<a name="create-the-network-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia la pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Dopo questa prima esecuzione, la pipeline si avvia automaticamente ogni volta che esegui una modifica al ramo principale del CodeCommit repository.[La pipeline include le seguenti fasi:](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Convalida le risorse create tramite il modulo di rete. | Verifica che le seguenti AWS risorse siano state create dopo la corretta implementazione della pipeline:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Crea l'infrastruttura di elaborazione
<a name="create-the-compute-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna `locals.tf` per consentire l'accesso del CodeBuild progetto al VPC. | Per distribuire i componenti aggiuntivi per il cluster privato Amazon EKS, il CodeBuild progetto deve essere collegato al VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Aggiorna i `buildspec` file per creare il modulo di calcolo. | Nella `templates` cartella, in tutti i file `buildspec` YAML, imposta il valore della `TF_MODULE_TO_BUILD` variabile da a: `network` `compute`<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Aggiorna il `values` file per il diagramma Helm di gestione dei tenant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Convalida le risorse di calcolo. | Dopo aver aggiornato i file nei passaggi precedenti, si CodePipeline avvia automaticamente. Verifica che abbia creato le seguenti AWS risorse per l'infrastruttura di elaborazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Controlla la gestione dei tenant e altre risorse
<a name="check-tenant-management-and-other-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida le risorse di gestione dei tenant in Kubernetes. | Esegui i seguenti comandi per verificare che le risorse di gestione dei tenant siano state create correttamente con l'aiuto di Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifica le distribuzioni delle applicazioni tenant. | Esegui i seguenti comandi per verificare che le applicazioni tenant siano state distribuite.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## risoluzione dei problemi
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Viene visualizzato un messaggio di errore simile al seguente:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Segui questi passaggi per risolvere il problema:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Risorse correlate
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Progetti Amazon EKS per Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guide alle best practice di Amazon EKS, sezione Multi-tenancy](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Sito web Flux](https://fluxcd.io/)
+ [Sito web Helm](https://helm.sh/)

## Informazioni aggiuntive
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Ecco un esempio di struttura di repository per la distribuzione di applicazioni tenant:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```

# Semplifica lo sviluppo e la distribuzione di bot Amazon Lex utilizzando un flusso di lavoro automatizzato
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam, Attila Dancso, Pavan Dusanapudi, Anand Jumnani e James O'Hara, Amazon Web Services*

## Riepilogo
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

Lo sviluppo e la distribuzione di bot conversazionali Amazon Lex possono essere difficili quando si cerca di gestire più funzionalità, sviluppatori e ambienti. Un flusso di lavoro automatizzato che utilizza i principi dell'infrastruttura come codice (IaC) può aiutare a semplificare il processo. Questo modello può aiutare a migliorare la produttività degli sviluppatori di Amazon Lex e consentire una gestione efficiente del ciclo di vita dei bot nei seguenti modi:
+ **Abilita lo sviluppo simultaneo di più funzionalità** - Con un flusso di lavoro automatizzato, gli sviluppatori possono lavorare su diverse funzionalità in parallelo in rami separati. Le modifiche possono quindi essere unite e implementate senza bloccare altre attività.
+ **Usa l'interfaccia utente della console Amazon Lex**: gli sviluppatori possono utilizzare l'intuitiva console Amazon Lex per creare e testare bot. I bot vengono quindi descritti nel codice di infrastruttura per la distribuzione.
+ **Promuovi i bot in tutti gli ambienti**: il flusso di lavoro automatizza la promozione delle versioni dei bot da ambienti inferiori, come quelli di sviluppo e test, fino alla produzione. Questo approccio riduce il rischio e il sovraccarico delle promozioni manuali.
+ **Mantieni il controllo delle versioni**: la gestione delle definizioni dei bot in Git anziché esclusivamente tramite il servizio Amazon Lex ti offre il controllo della versione e un audit trail. Le modifiche vengono tracciate in base ai singoli sviluppatori, a differenza di quando si utilizzano solo Console di gestione AWS o si modificano APIs i bot memorizzati in. AWS

Automatizzando il processo di rilascio dei bot di Amazon Lex, i team possono fornire funzionalità più rapidamente con rischi e sforzi ridotti. I bot rimangono sotto il controllo della versione anziché isolati nella console Amazon Lex. 

## Prerequisiti e limitazioni
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**Prerequisiti**
+ Il flusso di lavoro Account AWS prevede diversi ambienti (sviluppo, produzione e DevOps), il che richiede la gestione degli account e configurazioni di accesso tra account.
+ Python 3.9 disponibile nell'ambiente di distribuzione o nella pipeline.
+ Git è [installato](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurato su una workstation locale per il controllo del codice sorgente.
+ AWS Command Line Interface (AWS CLI) [installato](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) e configurato per l'autenticazione utilizzando la riga di comando o Python.

**Limitazioni**
+ **Accesso al repository**: il flusso di lavoro presuppone che la pipeline di integrazione e distribuzione continua (CI/CD) disponga delle autorizzazioni necessarie per apportare modifiche all'archivio del codice sorgente. 
+ **Versione iniziale del bot**: gli strumenti richiedono che venga distribuita una versione iniziale del bot utilizzando modelli. AWS CloudFormation È necessario creare la prima iterazione del bot e salvarla nel repository prima che il flusso di lavoro automatizzato possa prendere il sopravvento.
+ **Conflitti di fusione**: sebbene il flusso di lavoro miri a consentire lo sviluppo simultaneo, esiste ancora la possibilità di unire i conflitti quando si integrano modifiche provenienti da diversi rami. La risoluzione dei conflitti nelle configurazioni dei bot potrebbe richiedere un intervento manuale.

**Versioni del prodotto**
+ [Python 3.9](https://www.python.org/downloads/) o versioni successive
+ [AWS CDK v2 2.124.0](https://docs.aws.amazon.com/cdk/api/versions.html) o superiore
+ [AWS SDK per Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/)1.28 o superiore

## Architecture
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

Il diagramma seguente mostra l'architettura di alto livello e i componenti chiave della soluzione.

![\[Flusso di lavoro per automatizzare lo sviluppo e la distribuzione dei bot Amazon Lex.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


I componenti chiave includono quanto segue:
+ **Lex bot repo**: un repository Git che memorizza le definizioni IaC per i bot Amazon Lex.
+ **DevOps**— Account AWS Dedicato all'alloggiamento delle CI/CD pipeline e delle relative risorse per il processo di sviluppo e implementazione.
+ **Pipeline**: le AWS CodePipeline istanze che automatizzano varie fasi del ciclo di vita dello sviluppo e della distribuzione dei bot, come la creazione di un nuovo bot, l'esportazione della definizione di un bot, l'importazione di una definizione di bot e l'eliminazione di un bot.
+ **Ticket bot e bot principale**: le risorse bot di Amazon Lex, in cui i ticket bot sono bot con funzionalità specifiche sviluppati da singoli team o sviluppatori e il bot principale è il bot di base che integra tutte le funzionalità.

Il diagramma dell'architettura illustra il seguente flusso di lavoro:

1. **Bot principale di base**: il punto di partenza del flusso di lavoro è quello di basare il bot principale nell'ambiente di sviluppo (Dev). Il bot principale funge da base per lo sviluppo futuro e l'aggiunta di funzionalità.

1. **Crea ticket bot**: quando è richiesta una nuova funzionalità o una modifica, viene creato un ticket bot. Il ticket bot è essenzialmente una copia o un ramo del bot principale su cui gli sviluppatori possono lavorare senza influire sulla versione principale.

1. **Export ticket bot**: una volta completato il lavoro sul ticket bot, questo viene esportato dal servizio Amazon Lex. Quindi, la filiale che contiene il ticket bot viene sostituita dalla filiale principale. Questo passaggio assicura che tutte le modifiche apportate al bot principale durante lo sviluppo del ticket bot vengano incorporate, riducendo i potenziali conflitti.

1. **Importa ticket bot ribasato e convalida**: il ticket bot ribasato viene reimportato nell'ambiente di sviluppo e convalidato per garantire che funzioni correttamente con le ultime modifiche apportate dalla filiale principale. Se la convalida ha esito positivo, viene creata una pull request (PR) per unire le modifiche apportate al ticket bot nel ramo principale.

1. **Elimina ticket bot**: dopo che le modifiche sono state integrate con successo nel ramo principale, il ticket bot non è più necessario. Il ticket bot può essere eliminato per mantenere l'ambiente pulito e gestibile.

1. **Implementa il bot principale nell'ambiente di sviluppo e verifica**: il bot principale aggiornato, che ora include le nuove funzionalità o modifiche, viene distribuito nell'ambiente di sviluppo. Qui viene sottoposto a test approfonditi per garantire che tutte le funzionalità funzionino come previsto.

1. **Implementazione del bot principale nell'ambiente di produzione**: una volta completati e completati con successo i test nell'ambiente di sviluppo, il bot principale viene distribuito nell'ambiente di produzione. Questo passaggio è la fase finale del flusso di lavoro, in cui le nuove funzionalità diventano disponibili per gli utenti finali.

**Automazione e scalabilità**

Il flusso di lavoro automatizzato consente agli sviluppatori di lavorare su diverse funzionalità in parallelo, ciascuna in rami separati. Ciò facilita lo sviluppo simultaneo, consentendo ai team di collaborare in modo efficace e fornire funzionalità più velocemente. Con le filiali isolate l'una dall'altra, le modifiche possono essere unite e implementate senza bloccare o interferire con altre attività in corso.

Il flusso di lavoro automatizza l'implementazione e la promozione delle versioni dei bot in diversi ambienti, come sviluppo, test e produzione.

L'archiviazione delle definizioni dei bot in un sistema di controllo delle versioni come Git fornisce un audit trail completo e consente una collaborazione efficiente. Le modifiche vengono tracciate per i singoli sviluppatori, garantendo trasparenza e responsabilità durante tutto il ciclo di vita dello sviluppo. Questo approccio facilita anche la revisione del codice, consentendo ai team di identificare e risolvere i problemi prima di passare alla produzione.

Utilizzando AWS CodePipeline e altro Servizi AWS, il flusso di lavoro automatizzato può essere scalato per adattarsi all'aumento dei carichi di lavoro e delle dimensioni dei team.

## Tools (Strumenti)
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software open source per la definizione Cloud AWS dell'infrastruttura in codice utilizzando linguaggi di programmazione familiari e il suo provisioning. CloudFormation L'implementazione di esempio in questo modello utilizza Python.
+ [AWS CDK Command Line Interface (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): il AWS CDK Toolkit è lo strumento principale per interagire con l'app. AWS CDK Esegue l'app, interroga il modello applicativo definito e produce e distribuisce i modelli generati dal CloudFormation CDK.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, a fornirle in modo rapido e coerente e a gestirle per tutto il loro ciclo di vita tra e. Account AWS Regioni AWS Questo modello viene utilizzato CloudFormation per distribuire le configurazioni dei bot di Amazon Lex e le relative risorse utilizzando l'infrastruttura come codice.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione. Questo modello viene utilizzato CodeBuild per creare e impacchettare gli artefatti di distribuzione.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)consente di modellare e configurare rapidamente le diverse fasi di un rilascio del software e di automatizzare i passaggi necessari per rilasciare le modifiche software in modo continuo. Questo modello viene utilizzato CodePipeline per orchestrare la pipeline di distribuzione continua.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) consente di Servizio AWS creare interfacce conversazionali (bot) per applicazioni che utilizzano voce e testo.
+ [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**
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito open source.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex). Il repository di codice contiene le seguenti cartelle e file:
+ `prerequisite`cartella: contiene le definizioni degli CloudFormation stack (utilizzando il AWS CDK) per configurare le risorse e gli ambienti richiesti.
+ `prerequisite/lexmgmtworkflow`folder — Directory principale per il progetto Lex Management Workflow, che include le definizioni dello stack e il codice Python.
+ `prerequisite/tests`— Contiene test unitari.
+ `src`folder: directory del codice sorgente, che include il wrapper e le utilità di gestione dei bot di Amazon Lex.
+ `src/dialogue_lambda`— Directory del codice sorgente della funzione Dialogue Hook Lambda che intercetta ed elabora gli input degli utenti durante una conversazione con un bot Amazon Lex.

## Best practice
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **Separazione delle preoccupazioni**
  + Mantieni una chiara separazione delle responsabilità tra DevOps gli ambienti di sviluppo e produzione.
  + Utilizzali separati Account AWS per ogni ambiente per imporre limiti di isolamento e sicurezza adeguati.
  + Utilizza ruoli tra account diversi e principi di accesso con privilegi minimi per garantire un accesso controllato tra gli ambienti.
+ **Infrastruttura come codice**
  + Rivedi e aggiorna regolarmente il codice dell'infrastruttura per allinearlo alle migliori pratiche e ai requisiti in evoluzione.
  + Stabilisci una chiara strategia di ramificazione e fusione per l'archivio del codice sorgente
+ **Test e convalida**
  + Implementa test automatizzati nelle varie fasi della pipeline per individuare eventuali problemi nelle prime fasi del ciclo di sviluppo.
  + Usa la console Amazon Lex o i framework di test automatizzati per convalidare le configurazioni e le funzionalità dei bot prima di passare ad ambienti superiori.
  + Prendi in considerazione l'implementazione di porte di approvazione manuali per le distribuzioni in ambienti di produzione o critici.
+ **Monitoraggio e registrazione**
  + Imposta meccanismi di monitoraggio e registrazione per le pipeline, le implementazioni e le interazioni con i bot.
  + Monitora gli eventi della pipeline, gli stati di implementazione e le metriche delle prestazioni dei bot per identificare e risolvere tempestivamente i problemi.
  + Utilizza servizi AWS come Amazon CloudWatch e AWS X-Ray per la registrazione e il monitoraggio centralizzati. AWS CloudTrail
  + Esamina e analizza regolarmente le prestazioni, l'efficienza e l'efficacia del flusso di lavoro automatizzato.
+ **Sicurezza e conformità**
  + Implementa pratiche di codifica sicure e segui le best practice AWS di sicurezza per lo sviluppo e la distribuzione di bot Amazon Lex.
  + Rivedi e aggiorna regolarmente i ruoli, le politiche e le autorizzazioni IAM per allinearli al principio del privilegio minimo.
  + Prendi in considerazione l'integrazione delle scansioni di sicurezza e dei controlli di conformità nelle pipeline.

## Epiche
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### Configurare IAC per la gestione dei bot di Amazon Lex
<a name="set-up-iac-for-lex2-bot-management"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l'ambiente CDK locale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| Crea un ruolo tra account diversi nell'`devops`ambiente. | L'`devops`account è responsabile dell'hosting e della gestione delle CI/CD pipeline. Per consentire alle CI/CD pipeline di interagire con gli `prod` ambienti `dev` and, esegui i seguenti comandi per creare un ruolo tra account nell'account. `devops`<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| Crea un ruolo tra account diversi nell'`dev`ambiente. | Crea un ruolo IAM nell'`dev`account con le autorizzazioni necessarie per consentire all'`devops`account di assumere questo ruolo. La CI/CD pipeline utilizza questo ruolo per eseguire azioni nell'`dev`account, come la distribuzione e la gestione delle risorse bot di Amazon Lex.Per creare il ruolo IAM, esegui i seguenti comandi:<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| Crea un ruolo tra account diversi nell'`prod`ambiente. | Crea un ruolo IAM nell'`prod`account con le autorizzazioni necessarie per consentire all'`devops`account di assumere questo ruolo. La CI/CD pipeline utilizza questo ruolo per eseguire azioni nell'`prod`account, come la distribuzione e la gestione delle risorse bot di Amazon Lex.<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| Crea pipeline nell'`devops`ambiente. | Per gestire il flusso di lavoro di sviluppo per i bot Amazon Lex, esegui il comando seguente per configurare le pipeline nell'`devops`ambiente. <pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### Stabilisci la linea di base per il bot principale
<a name="establish-the-baseline-for-the-main-bot"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Definire la versione iniziale del bot principale. | Per definire la versione iniziale del bot principale, [attiva](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers) la `BaselineBotPipeline` pipeline.La pipeline implementa la definizione di bot di base definita nel CloudFormation modello, esporta la definizione del bot principale come file.json. e archivia il codice del bot principale in un sistema di controllo della versione. | AWS DevOps | 

### Implementa il flusso di lavoro per lo sviluppo
<a name="implement-the-feature-development-workflow"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il ticket bot per sviluppare e testare una funzionalità. | `TicketBot`è una nuova istanza di bot che viene importata dalla definizione di bot principale esistente nel ramo delle funzionalità. Questo approccio garantisce che il nuovo bot disponga di tutte le funzionalità e le configurazioni correnti del bot principale.Per definire la versione iniziale del ticket bot, attiva la `CreateTicketBotPipeline` pipeline.La pipeline crea un nuovo ramo di funzionalità nel sistema di controllo delle versioni e crea una nuova istanza di ticket bot basata sul bot principale. | Sviluppatore Lex Bot | 
| Sviluppa e testa la funzionalità ticket bot.  | Per sviluppare e testare la funzionalità, accedi Console di gestione AWS e apri la console Amazon Lex all'indirizzo [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/). Per ulteriori informazioni, consulta [Testare un bot utilizzando la console](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) nella documentazione di Amazon Lex.Con l'`TicketBot`istanza, ora puoi aggiungere, modificare o estendere la funzionalità del bot per implementare la nuova funzionalità. Ad esempio, potete creare o modificare intenti, enunciati, slot e flussi di dialogo. Per ulteriori informazioni, consulta [Aggiungere intenti](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html) nella documentazione di Amazon Lex. | Sviluppatore Lex Bot | 
| Esporta la definizione del ticket bot. | La definizione del bot esportata è essenzialmente una rappresentazione della configurazione e della funzionalità del bot in formato JSON.Per esportare la definizione del ticket bot, attiva la `ExportTicketBotPipeline` pipeline.La pipeline esporta la definizione del ticket bot come file.json e memorizza il codice del ticket bot in un ramo di funzionalità del sistema di controllo della versione. | Sviluppatore Lex Bot | 
| Modifica il ramo delle funzionalità dal ramo principale più recente. | Durante lo sviluppo di una nuova funzionalità, il ramo principale potrebbe aver ricevuto altre modifiche da diversi sviluppatori o team. Per incorporare queste modifiche nel ramo delle funzionalità, esegui un'`rebase`operazione Git. Questa operazione essenzialmente riproduce i commit del feature branch sopra i commit più recenti del branch principale, assicurando che il feature branch includa tutte le ultime modifiche | Sviluppatore Lex Bot | 
| Importa e convalida il ticket bot ribasato. | Dopo aver modificato il feature branch, devi importarlo nell'istanza del ticket bot. Questa importazione aggiorna il ticket bot esistente con le ultime modifiche apportate dal ramo rebased.Per importare il ticket bot rebased, attiva la `ImportTicketBotPipeline` pipeline.La pipeline importa nell'istanza i file json di definizione del ticket bot nel ramo delle funzionalità del sistema di controllo della versione. `TicketBot` | Sviluppatore Lex Bot | 
| Convalida la definizione del bot ribasata. | Dopo aver importato la definizione del bot ribasato, è fondamentale convalidarne la funzionalità. Vuoi assicurarti che la nuova funzionalità funzioni come previsto e non sia in conflitto con le funzionalità esistenti. Questa convalida prevede in genere il test del bot con vari scenari di input, il controllo delle risposte e la verifica che il bot si comporti come previsto. È possibile eseguire la convalida in uno dei seguenti modi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Sviluppatore Lex Bot | 
| Unisci il ramo delle funzionalità nel ramo principale. | Dopo aver sviluppato e testato la nuova funzionalità nell'`TicketBot`istanza isolata, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Sviluppatore Lex Bot, amministratore del repository | 
| Elimina il feature branch e il ticket bot.  | Dopo che un feature branch è stato unito con successo al branch principale, elimina il feature branch e il ticket bot dal repository del codice sorgente. Per eliminare il feature branch e il ticket bot, attiva la `DeleteTicketBotPipeline` pipeline.La pipeline rimuove le risorse bot temporanee create durante il processo di sviluppo (ad esempio, il ticket bot). Questa azione aiuta a mantenere un repository pulito e a prevenire confusione o conflitti con le future feature branch.  | Sviluppatore Lex Bot | 

### Mantieni il bot principale
<a name="maintain-the-main-bot"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Importa l'ultima definizione di bot principale nell'`dev`ambiente. | Per importare nell'`dev`ambiente l'ultima definizione del bot principale nel ramo principale, attiva la `DeployBotDevPipeline` pipeline.La pipeline crea anche un tag git al momento dell'approvazione. | AWS DevOps | 
| Importa l'ultima definizione di bot principale nell'`prod`ambiente. | Per importare nell'`prod`ambiente l'ultima definizione del bot nel ramo principale, fornite come parametro il riferimento al tag dell'attività precedente e attivate la `DeployBotProdPipeline` pipeline.La pipeline importa l'ultima definizione di bot da un tag specifico nell'`prod`ambiente. | AWS DevOps | 

## risoluzione dei problemi
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Quando distribuisci bot Amazon Lex su diversi account Account AWS, i servizi di tooling devono disporre delle autorizzazioni necessarie per accedere alle risorse di tali account. | Per concedere l'accesso a più account, utilizza i ruoli e le policy IAM. Crea ruoli IAM negli account di destinazione e associa politiche ai ruoli che concedono le autorizzazioni richieste. Quindi, assumi questi ruoli dall'account in cui è distribuito il bot Amazon Lex.Per ulteriori informazioni, consulta le [autorizzazioni IAM necessarie per l'importazione](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions) e le [autorizzazioni IAM necessarie per esportare i bot in Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions) nella documentazione di Amazon Lex. | 

## Risorse correlate
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [Importazione di bot in Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [Avvia una pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [Utilizzo dei bot Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)

# Coordina la dipendenza dalle risorse e l'esecuzione delle attività utilizzando il costrutto AWS Fargate WaitCondition hook
<a name="use-the-aws-fargate-waitcondition-hook-construct"></a>

*Stan Fan, Amazon Web Services*

## Riepilogo
<a name="use-the-aws-fargate-waitcondition-hook-construct-summary"></a>

Questo modello descrive il pacchetto WaitCondition hook (`waitcondition-hook-for-aws-fargate-task`) npm, una soluzione nativa per il cloud progettata per orchestrare le [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)attività nei cluster Amazon Elastic Container Service (Amazon ECS) Elastic Container Service (Amazon ECS). 

L' WaitCondition hook è un AWS Cloud Development Kit (AWS CDK) costrutto specificamente progettato per l'integrazione con. AWS CloudFormation L' WaitCondition hook offre le seguenti funzionalità chiave:
+ Funziona come un meccanismo di attesa, sospendendo l'esecuzione CloudFormation dello stack fino al completamento di un'attività Fargate specificata, il che aiuta con le distribuzioni ordinate e l'approvvigionamento delle risorse.
+ Supporti TypeScript e Python, che lo rendono ideale per i AWS CDK progetti.
+ Consente a sviluppatori e architetti di orchestrare le implementazioni coordinando il completamento delle attività e la gestione delle risorse per le applicazioni containerizzate su. AWS
+ Consente l'esecuzione delle attività di Fargate con uno o più contenitori incorporati in un CloudFormation ciclo di vita e può gestire gli errori delle attività e ripristinare lo stack dopo un errore di attività. CloudFormation 
+ Fornisce la flessibilità necessaria per aggiungere dipendenze tra le risorse e i risultati dell'esecuzione delle attività di Fargate, abilitando attività personalizzate o richiamando altri endpoint. Ad esempio, è possibile mettere in pausa uno CloudFormation stack e attendere una migrazione del database (eseguita da un'attività di Fargate) e fornire altre risorse che potrebbero dipendere dal successo della migrazione del database.

## Prerequisiti e limitazioni
<a name="use-the-aws-fargate-waitcondition-hook-construct-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ AWS Cloud Development Kit (AWS CDK) Interfaccia a riga di comando (CLI) installata su una workstation locale. Per ulteriori informazioni, consulta il [riferimento alla AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) AWS CDK nella documentazione.
+ [Node package manager (npm), installato su una workstation locale e configurato per l'ingresso.AWS CDK TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Per ulteriori informazioni, vedere [Download e installazione di Node.js e npm nella documentazione di npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
+ Yarn installato su una workstation locale. Per ulteriori informazioni, vedere [Installazione nella documentazione di](https://yarnpkg.com/getting-started/install) Yarn.

**Limitazioni**
+ Questa soluzione viene distribuita su un unico dispositivo. Account AWS
+ Il codice di ritorno previsto `0` per il contenitore indica l'esito positivo. Qualsiasi altro codice restituito indica un errore e lo CloudFormation stack verrà ripristinato. 
+ Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità per regione, vedi [Servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="use-the-aws-fargate-waitcondition-hook-construct-architecture"></a>

Il diagramma seguente mostra l'architettura di costruzione.

![\[Flusso di lavoro AWS Step Functions di waitcondition-hook-for-aws -fargate-task construct.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


Il diagramma mostra il flusso di lavoro di: `waitcondition-hook-for-aws-fargate-task`

1. `WaitCondition`e `WaitConditionHandler` sono predisposti per ascoltare la risposta delle funzioni. AWS Lambda 

1. A seconda del risultato dell'attività, il `CallbackFunction` o il `ErrorHandlerFunction` viene attivato dal completamento dell'attività Fargate.

1. La funzione Lambda invia un segnale SUCCEED o FAILURE a. `WaitConditionHandler`

1. `WaitConditionHandler`continua a fornire le risorse se il risultato dell'esecuzione dell'attività Fargate ha esito positivo o ripristina lo stack se l'attività non è riuscita.

Il diagramma seguente mostra un esempio di flusso di lavoro per eseguire una migrazione del database.

![\[Flusso di lavoro di migrazione del database Amazon RDS tramite WaitCondition hook construct.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


Il flusso di lavoro di esempio utilizza il `waitcondition-hook-for-aws-fargate-task` costrutto per eseguire una migrazione del database, come segue:

1. Viene fornita un'istanza Amazon Relational Database Service (Amazon RDS).

1. Il `waitcondition-hook-for-aws-fargate-task` costrutto esegue l'attività di migrazione del database e mette in pausa lo stack come istanza Amazon Elastic Compute Cloud (Amazon EC2).

1. Se l'attività di migrazione viene completata correttamente, invia un segnale Succeed a. CloudFormation Altrimenti, invia un segnale Fail CloudFormation e ripristina lo stack.

## Tools (Strumenti)
<a name="use-the-aws-fargate-waitcondition-hook-construct-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che consente di definire l'infrastruttura cloud in codice e di eseguirne il provisioning. CloudFormation
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, a fornirle in modo rapido e coerente e a gestirle durante tutto il loro ciclo di vita tra Account AWS e. Regioni AWS
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ti CloudWatch aiuta a monitorare i parametri delle tue AWS risorse e delle applicazioni su cui esegui AWS in tempo reale.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)ti aiuta a eseguire contenitori senza dover gestire server o istanze Amazon EC2. Viene utilizzato in combinazione con Amazon ECS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di. AWS

**Altri strumenti**
+ [npm](https://docs.npmjs.com/about-npm) è un registro software che viene eseguito in un ambiente Node.js e viene utilizzato per condividere o prendere in prestito pacchetti e gestire la distribuzione di pacchetti privati.
+ [Yarn](https://yarnpkg.com/) è un gestore di pacchetti open source che puoi utilizzare per gestire le dipendenze nei progetti. JavaScript Yarn può aiutarti a installare, aggiornare, configurare e rimuovere le dipendenze dei pacchetti.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task).

## Best practice
<a name="use-the-aws-fargate-waitcondition-hook-construct-best-practices"></a>
+ Quando crei la tua AWS CDK app, segui le [migliori pratiche per lo sviluppo e la distribuzione dell'infrastruttura cloud con la](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) documentazione contenuta nella v2. AWS CDK AWS CDK 
+ Per AWS Fargate questo compito, segui le [best practice per le immagini dei container Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html) nella documentazione di Amazon ECS.

## Epiche
<a name="use-the-aws-fargate-waitcondition-hook-construct-epics"></a>

### Configura il AWS CDK
<a name="set-up-the-cdk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa il AWS CDK. | Per installarlo AWS CDK sul computer locale o in un altro ambiente, esegui il seguente comando: <pre>npm install -g aws-cdk@latest</pre> | Architetto del cloud, sviluppatore di app | 
| Bootstrap il. AWS CDK | Il [bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) è il processo di preparazione di un [ambiente](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) per la distribuzione. Per avviare il AWS CDK toolkit per il target Account AWS e Regione AWS, esegui il seguente comando:<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>Questo comando crea uno CloudFormation stack denominato. `CDKToolkit`  | Architetto del cloud | 

### Esegui l' WaitCondition hook for AWS Fargate tasks construct
<a name="run-the-waitcondition-hook-for-fargatelong-tasks-construct"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il progetto CDK. | Crea un progetto CDK usando il linguaggio che preferisci. Questo modello utilizza TypeScript. Per creare un progetto CDK utilizzando TypeScript, esegui il seguente comando: `cdk init app —language typescript` | Architetto cloud | 
| Installare il pacchetto . | Esegui `npm install` sul percorso principale del tuo progetto CDK. Dopo aver installato la libreria CDK, esegui il seguente comando per installarla: `waitcondition-hook-for-aws-fargate-task` `yarn add waitcondition-hook-for-aws-fargate-task` | Architetto del cloud | 
| Crea la tua applicazione CDK e i componenti Amazon ECS. | Crea il tuo progetto CDK. È richiesta una risorsa di definizione delle attività di Amazon ECS. Per informazioni sulla creazione di una definizione di attività, consulta [le definizioni delle attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) nella documentazione di Amazon ECS.L'esempio seguente utilizza questo costrutto:<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | Architetto del cloud | 
| Sintetizza e avvia l'applicazione CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Il `waitcondition-hook-for-aws-fargate-task` costrutto esegue il task Fargate.  | Architetto del cloud | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse. | Per ripulire le risorse fornite nel passaggio precedente, esegui il comando seguente:<pre>cdk destroy </pre> | Architetto del cloud | 

## Risoluzione dei problemi
<a name="use-the-aws-fargate-waitcondition-hook-construct-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Guasto generale CloudFormation dello stack | Per facilitare la risoluzione dei problemi generali CloudFormation dello stack, aggiungete il `--no-rollback` flag come mostrato nell'esempio seguente: <pre>cdk deploy --no-rollback</pre>Questo comando interromperà il rollback dello CloudFormation stack, il che offre risorse per la risoluzione dei problemi. Per ulteriori informazioni, consulta [Scegliere come gestire gli errori durante il provisioning](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) delle risorse nella documentazione. CloudFormation  | 
| AWS Step Functions fallimento | Una macchina a AWS Step Functions stati potrebbe non riuscire a funzionare per diversi motivi. Una volta `—disable-rollback` configurato, utilizza i seguenti passaggi per risolvere i problemi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Per ulteriori informazioni, consulta [Risoluzione dei problemi in Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html) e [Visualizzazione dei dettagli di esecuzione nella console Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details) nella AWS Step Functions documentazione. | 
| AWS Lambda errore della funzione | Questo costrutto fornisce due funzioni `CallbackFunction` Lambda: e. `ErrorhandlerFunction` Possono fallire per vari motivi, ad esempio eccezioni non gestite. Utilizza i seguenti passaggi per risolvere i problemi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Per ulteriori informazioni, consulta [Risoluzione dei problemi in Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) nella AWS Lambda documentazione. | 

## Risorse correlate
<a name="use-the-aws-fargate-waitcondition-hook-construct-resources"></a>

**AWS documentazione**
+ [AWS CDK Costruisci un riferimento all'API](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [Iniziare con AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Scopri come creare e utilizzare le risorse Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Scopri come iniziare a usare Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [Che cos'è AWS CDK?](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Altre risorse**
+ [Waitcondition Hook for AWS Fargate task (npm](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/))
+ [waitcondition-hook-for-aws-fargate-task 1.0.6 (pypi.org](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/))

# Usa repository di sorgenti Git di terze parti in AWS CodePipeline
<a name="use-third-party-git-source-repositories-in-aws-codepipeline"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Riepilogo
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-summary"></a>

Questo modello descrive come utilizzare AWS CodePipeline con repository di sorgenti Git di terze parti.

[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) è un servizio di distribuzione continua che automatizza le attività di creazione, test e distribuzione del software. Il servizio attualmente supporta repository Git gestiti da GitHub [AWS](https://aws.amazon.com/codecommit) e CodeCommit Atlassian Bitbucket. Tuttavia, alcune aziende utilizzano repository Git di terze parti integrati con il loro servizio Single Sign-On (SSO) e Microsoft Active Directory per l'autenticazione. Puoi usare questi repository Git di terze parti come fonti CodePipeline per creare azioni e webhook personalizzati.

Un webhook è una notifica HTTP che rileva gli eventi in un altro strumento, ad esempio un GitHub repository, e collega tali eventi esterni a una pipeline. Quando crei un webhook in CodePipeline, il servizio restituisce un URL che puoi usare nel webhook del tuo repository Git. **Se invii codice a un ramo specifico del repository Git, il webhook Git avvia il CodePipeline webhook tramite questo URL e imposta la fase di origine della pipeline su In corso.** Quando la pipeline è in questo stato, un job worker esegue un sondaggio CodePipeline per il lavoro personalizzato, lo esegue e invia uno stato di successo o di fallimento a. CodePipeline In questo caso, poiché la pipeline si trova nella fase di origine, il job worker ottiene il contenuto del repository Git, lo comprime e lo carica nel bucket Amazon Simple Storage Service (Amazon S3) dove sono archiviati gli elementi per la pipeline, utilizzando la chiave oggetto fornita dal job sottoposto a polling. Puoi anche associare una transizione per l'azione personalizzata a un evento in Amazon CloudWatch e avviare il job worker in base all'evento. Questa configurazione consente di utilizzare repository Git di terze parti che il servizio non supporta nativamente come sorgenti. CodePipeline

## Prerequisiti e limitazioni
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un repository Git che supporta i webhook e può connettersi a un URL di CodePipeline webhook tramite Internet 
+ AWS Command Line Interface (AWS CLI[)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) installata [e](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) configurata per funzionare con l'account AWS

## Architecture
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-architecture"></a>

Il modello prevede le seguenti fasi:

1. L'utente inserisce il codice in un repository Git.

1. Viene chiamato il webhook Git.

1. Viene chiamato il CodePipeline webhook.

1. La pipeline è impostata su **In corso** e la fase di origine è impostata **sullo stato In corso**.

1. L'azione della fase di origine avvia una regola CloudWatch Events, indicando che è stata avviata.

1. L' CloudWatch evento avvia una funzione Lambda.

1. La funzione Lambda ottiene i dettagli del job di azione personalizzato.

1. La funzione Lambda avvia CodeBuild AWS e gli trasmette tutte le informazioni relative al lavoro.

1. CodeBuild ottiene la chiave SSH pubblica o le credenziali utente per l'accesso HTTPS Git da Secrets Manager.

1. CodeBuild clona il repository Git per un ramo specifico.

1. CodeBuild comprime l'archivio e lo carica nel bucket S3 che funge da archivio degli artefatti. CodePipeline 

![\[Flusso di lavoro che utilizza repository di sorgenti Git di terze parti come sorgenti per AWS CodePipeline.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/84284bec-b39d-466a-9fd9-994be2c953df/images/85555dab-7317-40f5-86a7-ccb8987c5bf3.png)


 

## Tools (Strumenti)
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/): AWS CodePipeline è un servizio di [distribuzione continua](https://aws.amazon.com/devops/continuous-delivery/) completamente gestito che ti aiuta ad automatizzare le pipeline di rilascio per aggiornamenti rapidi e affidabili di applicazioni e infrastrutture. CodePipeline automatizza le fasi di compilazione, test e distribuzione del processo di rilascio per ogni modifica del codice, in base al modello di rilascio definito. Ciò consente di fornire funzionalità e aggiornamenti in modo rapido e affidabile. Puoi integrare AWS CodePipeline con servizi di terze parti come GitHub o con il tuo plug-in personalizzato.
+ [AWS Lambda](https://aws.amazon.com/lambda/): AWS Lambda consente di eseguire codice senza effettuare il provisioning o la gestione di server. Con Lambda, puoi eseguire codice praticamente per qualsiasi tipo di applicazione o servizio di backend senza necessità di amministrazione. Tu carichi il codice e Lambda si occupa di tutto il necessario per eseguire e scalare il codice con un'elevata disponibilità. Puoi configurare il codice in modo che venga avviato automaticamente da altri servizi AWS o chiamarlo direttamente da qualsiasi app Web o mobile.
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/): AWS CodeBuild è un servizio di [integrazione continua](https://aws.amazon.com/devops/continuous-integration/) completamente gestito che compila codice sorgente, esegue test e produce pacchetti software pronti per la distribuzione. Con CodeBuild, non è necessario fornire, gestire e scalare i propri server di build. CodeBuild esegue la scalabilità continua ed elabora più build contemporaneamente, in modo che le build non restino in attesa in coda. Puoi iniziare a utilizzare CodeBuild velocemente con ambienti di compilazione predefiniti oppure puoi creare ambienti di compilazione personalizzati che utilizzano strumenti di compilazione specifici.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) — AWS Secrets Manager ti aiuta a proteggere i segreti necessari per accedere alle tue applicazioni, servizi e risorse IT. Il servizio consente di ruotare, gestire e recuperare le credenziali del database, le chiavi API e altri segreti durante tutto il loro ciclo di vita. Gli utenti e le applicazioni recuperano i segreti chiamando Secrets Manager APIs, senza dover codificare le informazioni sensibili in testo normale. Secrets Manager offre una rotazione segreta con integrazione integrata per Amazon Relational Database Service (Amazon RDS), Amazon Redshift e Amazon DocumentDB. Il servizio può essere esteso per supportare altri tipi di segreti, tra cui chiavi e token API. OAuth Inoltre, Secrets Manager consente di controllare l'accesso ai segreti utilizzando autorizzazioni granulari e di controllare centralmente la rotazione segreta per le risorse nel cloud AWS, nei servizi di terze parti e negli ambienti locali.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/): Amazon CloudWatch è un servizio di monitoraggio e osservazione creato per DevOps ingegneri, sviluppatori, ingegneri dell'affidabilità del sito (SREs) e responsabili IT. CloudWatch ti fornisce dati e approfondimenti utilizzabili per monitorare le tue applicazioni, rispondere ai cambiamenti delle prestazioni a livello di sistema, ottimizzare l'utilizzo delle risorse e ottenere una visione unificata dello stato operativo. CloudWatch raccoglie dati operativi e di monitoraggio sotto forma di log, metriche ed eventi, fornendo una visione unificata delle risorse, delle applicazioni e dei servizi AWS eseguiti su server AWS e locali. Puoi utilizzarli CloudWatch per rilevare comportamenti anomali nei tuoi ambienti, impostare allarmi, visualizzare log e metriche fianco a fianco, intraprendere azioni automatizzate, risolvere problemi e scoprire approfondimenti per far funzionare le tue applicazioni senza intoppi.
+ [Amazon S3](https://aws.amazon.com/s3/) — Amazon Simple Storage Service (Amazon S3) è un servizio di storage di oggetti che consente di archiviare e proteggere qualsiasi quantità di dati per una vasta gamma di casi d'uso, come siti Web, applicazioni mobili, backup e ripristino, archiviazione, applicazioni aziendali, dispositivi IoT e analisi di big data. Amazon S3 offre funzionalità di easy-to-use gestione per aiutarti a organizzare i dati e configurare controlli di accesso ottimizzati per soddisfare requisiti aziendali, organizzativi e di conformità specifici.

## Epiche
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-epics"></a>

### Crea un'azione personalizzata in CodePipeline
<a name="create-a-custom-action-in-codepipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un'azione personalizzata utilizzando AWS CLI o AWS. CloudFormation | Questo passaggio prevede la creazione di un'azione sorgente personalizzata che può essere utilizzata nella fase di origine di una pipeline nel tuo account AWS in una particolare regione. È necessario utilizzare AWS CLI o AWS CloudFormation (non la console) per creare l'azione di origine personalizzata. Per ulteriori informazioni sui comandi e i passaggi descritti in questa e in altre epopee, consulta la sezione «Risorse correlate» alla fine di questo schema. Nella CLI di AWS, usa il create-custom-action-type comando. Usa --configuration-properties per fornire tutti i parametri richiesti al job worker da elaborare quando effettua un sondaggio per un lavoro. CodePipeline Assicurati di annotare i valori forniti alle opzioni --provider e --action-version, in modo da poter utilizzare gli stessi valori durante la creazione della pipeline con questa fase di origine personalizzata. Puoi anche creare l'azione sorgente personalizzata in AWS CloudFormation utilizzando il tipo di risorsa AWS::CodePipeline::CustomActionType. | Informazioni generali su AWS | 

### Configurare l’autenticazione
<a name="set-up-authentication"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare una coppia di chiavi SSH. | Crea una coppia di key pair Secure Shell (SSH). Per istruzioni, consultate la GitHub documentazione. | Sistemi/ ingegnere DevOps  | 
| Crea un segreto in AWS Secrets Manager. | Copia il contenuto della chiave privata dalla coppia di chiavi SSH e crea un segreto in AWS Secrets Manager. Questo segreto viene utilizzato per l'autenticazione quando si accede al repository Git. | Informazioni generali su AWS | 
| Aggiungi la chiave pubblica al repository Git. | Aggiungi la chiave pubblica dalla coppia di chiavi SSH alle impostazioni dell'account del repository Git, per l'autenticazione con la chiave privata. | Sistemi/ ingegnere DevOps  | 

### Crea una pipeline e un webhook
<a name="create-a-pipeline-and-webhook"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una pipeline che includa l'azione di origine personalizzata. | Crea una pipeline in. CodePipeline Quando configuri la fase di origine, scegli l'azione di origine personalizzata che hai creato in precedenza. Puoi farlo nella CodePipeline console AWS o nell'interfaccia a riga di comando di AWS. CodePipeline richiede le proprietà di configurazione impostate nell'azione personalizzata. Queste informazioni sono necessarie affinché il job worker elabori il lavoro per l'azione personalizzata. Segui la procedura guidata e crea la fase successiva per la pipeline. | Informazioni generali su AWS | 
| Crea un CodePipeline webhook. | Crea un webhook per la pipeline che hai creato con l'azione source personalizzata. È necessario utilizzare AWS CLI o AWS CloudFormation (non la console) per creare il webhook. Nella CLI di AWS, esegui il comando put-webhook e fornisci i valori appropriati per le opzioni webhook. Prendi nota dell'URL del webhook restituito dal comando. Se utilizzi AWS CloudFormation per creare il webhook, usa il tipo di AWS::CodePipeline::Webhook risorsa. Assicurati di generare l'URL del webhook dalla risorsa creata e prendine nota. | Informazioni generali su AWS | 
| Crea una funzione e CodeBuild un progetto Lambda. | In questo passaggio, si utilizza Lambda CodeBuild per creare un job worker che analizzerà le richieste di lavoro CodePipeline per l'azione personalizzata, eseguirà il lavoro e restituirà il risultato dello stato a. CodePipeline Crea una funzione Lambda che viene avviata da una regola di Amazon CloudWatch Events quando la fase di azione sorgente personalizzata della pipeline passa a «In corso». Quando viene avviata, la funzione Lambda dovrebbe ottenere i dettagli dell'azione personalizzata eseguendo il polling dei lavori. Puoi utilizzare l' PollForJobs API per restituire queste informazioni. Dopo aver ottenuto le informazioni sul lavoro oggetto del sondaggio, la funzione Lambda dovrebbe restituire un riconoscimento e quindi elaborare le informazioni con i dati ottenuti dalle proprietà di configurazione per l'azione personalizzata. Quando l'operatore è pronto a parlare con il repository Git, potresti avviare un CodeBuild progetto, perché è comodo gestire le attività Git utilizzando il client SSH. | General AWS, sviluppatore di codice | 

### Crea un evento in CloudWatch
<a name="create-an-event-in-cloudwatch"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una regola per CloudWatch gli eventi. | Crea una regola CloudWatch Events che avvia la funzione Lambda come destinazione ogni volta che la fase di azione personalizzata della pipeline passa a «In corso». | Informazioni generali su AWS | 

## Risorse correlate
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-resources"></a>

**Creazione di un'azione personalizzata in CodePipeline**
+ [Creare e aggiungere un'azione personalizzata in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [AWS::CodePipeline::CustomActionType risorsa](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html)

**Configurazione dell'autenticazione**
+ [Creazione e gestione di segreti con AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)

**Creazione di una pipeline e di un webhook**
+ [Crea una pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html)
+ [riferimento al comando put-webhook](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/put-webhook.html)
+ [AWS::CodePipeline::Webhook risorsa](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-webhook.html)
+ [PollForJobs Documentazione di riferimento dell'API](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html)
+ [Crea e aggiungi un'azione personalizzata in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [Crea un progetto di compilazione in AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)

**Creare un evento**
+ [Rileva e reagisci ai cambiamenti nello stato della pipeline con Amazon Events CloudWatch ](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

**Riferimenti aggiuntivi**
+ [Lavorare con le condutture in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines.html)
+ [Guida per sviluppatori AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

# Crea una CI/CD pipeline per convalidare le configurazioni Terraform utilizzando AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan e Vijesh Vijayakumaran Nair, Amazon Web Services*

## Riepilogo
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Questo modello mostra come testare le configurazioni HashiCorp Terraform utilizzando una pipeline di integrazione e distribuzione continua (CI/CD) distribuita da AWS. CodePipeline

Terraform è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. [La soluzione fornita in questo modello crea una CI/CD pipeline che ti aiuta a convalidare l'integrità delle tue configurazioni Terraform eseguendo cinque fasi: CodePipeline ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`estrae la configurazione Terraform che stai testando da un repository CodeCommit AWS.

1. `"validate"`[esegue strumenti di convalida dell'infrastruttura come codice (IaC), inclusi [tfsec](https://github.com/aquasecurity/tfsec) e checkov. [TFLint](https://github.com/terraform-linters/tflint)](https://www.checkov.io/) Lo stage esegue anche i seguenti comandi di convalida Terraform IAc: e. `terraform validate` `terraform fmt`

1. `"plan"`mostra quali modifiche verranno applicate all'infrastruttura se viene applicata la configurazione Terraform.

1. `"apply"`utilizza il piano generato per fornire l'infrastruttura richiesta in un ambiente di test.

1. `"destroy"`rimuove l'infrastruttura di test creata durante la `"apply"` fase.

## Prerequisiti e limitazioni
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [AWS Command Line Interface (AWS CLI)[,](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) installata e configurata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installato e configurato sul tuo computer locale
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), installato e configurato sul computer locale

**Limitazioni**
+ L'approccio di questo modello implementa AWS CodePipeline in un solo account AWS e in una sola regione AWS. Le modifiche alla configurazione sono necessarie per le distribuzioni con più account e più regioni.
+ Il ruolo AWS Identity and Access Management (IAM) fornito da questo modello (**codepipeline\$1iam\$1role**) segue il principio del privilegio minimo. Le autorizzazioni di questo ruolo IAM devono essere aggiornate in base alle risorse specifiche che la pipeline deve creare. ****

**Versioni del prodotto**
+ AWS CLI versione 2.9.15 o successiva
+ Terraform versione 1.3.7 o successiva

## Architecture
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Stack tecnologico Target**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Architettura Target**

Il diagramma seguente mostra un esempio di flusso di lavoro della CI/CD pipeline per testare le configurazioni Terraform. CodePipeline

![\[Architettura per testare le configurazioni Terraform utilizzando una pipeline CI/CD AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Nel CodePipeline, un utente AWS avvia le azioni proposte in un piano Terraform eseguendo il `terraform apply` comando nella CLI AWS.

1. AWS CodePipeline assume un ruolo di servizio IAM che include le policy necessarie per l'accesso CodeCommit CodeBuild, AWS KMS e Amazon S3.

1. CodePipeline esegue la fase della `"checkout"` pipeline per estrarre la configurazione Terraform da un CodeCommit repository AWS per i test.

1. CodePipeline esegue la `"validate"` fase per testare la configurazione Terraform eseguendo strumenti di convalida IaC ed eseguendo comandi di convalida Terraform IAc in un progetto. CodeBuild 

1. CodePipeline esegue la `"plan"` fase per creare un piano nel CodeBuild progetto basato sulla configurazione Terraform. L'utente AWS può rivedere questo piano prima che le modifiche vengano applicate all'ambiente di test.

1. Code Pipeline esegue la `"apply"` fase di implementazione del piano utilizzando il CodeBuild progetto per fornire l'infrastruttura richiesta nell'ambiente di test.

1. CodePipeline esegue lo `"destroy"` stage, che utilizza CodeBuild per rimuovere l'infrastruttura di test creata durante la `"apply"` fase.

1. [Un bucket Amazon S3 archivia gli elementi della pipeline, che vengono crittografati e decrittografati utilizzando una chiave gestita dal cliente AWS KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)

## Tools (Strumenti)
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Strumenti**

*Servizi AWS*
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ti CodePipeline aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [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.

*Altri servizi*
+ [HashiCorp Terraform](https://www.terraform.io/docs) è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

**Codice**

Il codice per questo pattern è disponibile nel repository. GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples) Il repository contiene le configurazioni Terraform necessarie per creare l'architettura di destinazione delineata in questo modello.

## Epiche
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Fornisci i componenti della soluzione
<a name="provision-the-solution-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il GitHub repository. | Clona il GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repository eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Per ulteriori informazioni, consulta [Clonazione di un repository nella documentazione.](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) GitHub  | DevOps ingegnere | 
| Crea un file di definizioni variabili Terraform.  | Crea un `terraform.tfvars` file in base ai requisiti del tuo caso d'uso. Puoi aggiornare le variabili nel `examples/terraform.tfvars` file che si trova nel repository clonato.Per ulteriori informazioni, consulta [Assegnazione di valori alle variabili del modulo root](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) nella documentazione di Terraform.Il `Readme.md` file del repository include ulteriori informazioni sulle variabili richieste. | DevOps ingegnere | 
| Configura AWS come provider Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Per ulteriori informazioni, consulta il [provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) nella documentazione di Terraform. | DevOps ingegnere | 
| Aggiorna la configurazione del provider Terraform per creare il bucket di replica Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)La replica attiva la copia automatica e asincrona degli oggetti tra i bucket Amazon S3. | DevOps ingegnere | 
| Inizializza la configurazione Terraform. | Per inizializzare la directory di lavoro che contiene i file di configurazione Terraform, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform init</pre> | DevOps ingegnere | 
| Crea il piano Terraform. | Per creare un piano Terraform, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform valuta i file di configurazione per determinare lo stato di destinazione per le risorse dichiarate. Quindi confronta lo stato di destinazione con lo stato attuale e crea un piano. | DevOps ingegnere | 
| Verifica il piano Terraform. | Rivedi il piano Terraform e conferma che configuri l'architettura richiesta nel tuo account AWS di destinazione. | DevOps ingegnere | 
| Distribuire la soluzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform crea, aggiorna o distrugge l'infrastruttura per raggiungere lo stato di destinazione dichiarato nei file di configurazione. | DevOps ingegnere | 

### Convalida le configurazioni Terraform eseguendo la pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il repository del codice sorgente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps ingegnere | 
| Convalida le fasi della pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Per ulteriori informazioni, consulta [Visualizza i dettagli e la cronologia della pipeline (console)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) nella *AWS CodePipeline User Guide*.Quando viene apportata una modifica al ramo principale del repository di origine, la pipeline di test viene attivata automaticamente. | DevOps ingegnere | 
| Verifica l'output del rapporto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Il `<project_name>-validate` CodeBuild progetto genera report di vulnerabilità per il codice durante la fase. `"validate"` | DevOps ingegnere | 

### Pulizia delle risorse
<a name="clean-up-your-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci la pipeline e le risorse associate. | Per eliminare le risorse di test dal tuo account AWS, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps ingegnere | 

## risoluzione dei problemi
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Riceverai un **AccessDenied **errore durante lo `"apply"` stage. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Risorse correlate
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blocchi di moduli](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentazione Terraform)
+ [Come utilizzare CI/CD per distribuire e configurare i servizi di sicurezza AWS con Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (post sul blog AWS)
+ [Utilizzo di ruoli collegati ai servizi (documentazione IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html))
+ [create-pipeline (documentazione](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) AWS CLI)
+ [Configurare la crittografia lato server per gli artefatti archiviati in Amazon S3](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) per (documentazione AWS) CodePipeline CodePipeline 
+ [Quote per AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentazione AWS)
+ [Protezione dei dati in AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentazione AWS)

## Informazioni aggiuntive
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Moduli Terraform personalizzati**

Di seguito è riportato un elenco di moduli Terraform personalizzati utilizzati in questo modello:
+ `codebuild_terraform`crea i CodeBuild progetti che formano ogni fase della pipeline.
+ `codecommit_infrastructure_source_repo`acquisisce e crea il repository di origine CodeCommit .
+ `codepipeline_iam_role`crea i ruoli IAM richiesti per la pipeline.
+ `codepipeline_kms`crea la chiave AWS KMS richiesta per la crittografia e la decrittografia degli oggetti Amazon S3.
+ `codepipeline_terraform`crea la pipeline di test per il repository di origine. CodeCommit 
+ `s3_artifacts_bucket`crea un bucket Amazon S3 per gestire gli artefatti della pipeline.

**Crea file di specifiche**

Di seguito è riportato un elenco di file di specifiche di build (buildspec) utilizzati da questo pattern per eseguire ogni fase della pipeline:
+ `buildspec_validate.yml`gestisce il palco. `"validate"`
+ `buildspec_plan.yml`dirige il `"plan"` palco.
+ `buildspec_apply.yml`dirige il `"apply"` palco.
+ `buildspec_destroy.yml`dirige il `"destroy"` palco.

*Crea variabili del file di specificazione*

Ogni file buildspec utilizza le seguenti variabili per attivare diverse impostazioni specifiche della build:


| 
| 
| Variabile | Valore predefinito | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." |  CodeCommit Definisce la directory di origine | 
| `TF_VERSION` | «1.3.7" | Definisce la versione Terraform per l'ambiente di compilazione | 

Il `buildspec_validate.yml` file supporta anche le seguenti variabili per attivare diverse impostazioni specifiche della build:


| 
| 
| Variabile | Valore predefinito | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | ». /modelli/script» | Definisce la directory degli script | 
| `ENVIRONMENT` | «dev» | Definisce il nome dell'ambiente | 
| `SKIPVALIDATIONFAILURE` | «Y» | Salta la convalida in caso di errori | 
| `ENABLE_TFVALIDATE` | «Y» | Attiva Terraform validate  | 
| `ENABLE_TFFORMAT` | «Y» | Attiva il formato Terraform | 
| `ENABLE_TFCHECKOV` | «Y» | Attiva la scansione Check-Ov | 
| `ENABLE_TFSEC` | «Y» | Attiva la scansione tfsec | 
| `TFSEC_VERSION` | «v1.28.1" | Definisce la versione di tfsec | 

# Altri modelli
<a name="devops-more-patterns-pattern-list"></a>

**Topics**
+ [Accedi alle applicazioni container in modo privato su Amazon EKS utilizzando AWS PrivateLink e un Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Associa un AWS CodeCommit repository in uno Account AWS ad Amazon SageMaker AI Studio Classic in un altro account](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Automatizza la creazione di account utilizzando Landing Zone Accelerator su AWS](automate-account-creation-lza.md)
+ [Automatizza l'aggiunta o l'aggiornamento delle voci di registro di Windows utilizzando AWS Systems Manager](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [Automatizza i backup per le istanze DB di Amazon RDS for PostgreSQL utilizzando AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatizza la distribuzione di applicazioni annidate utilizzando AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatizza la distribuzione di Node Termination Handler in Amazon EKS utilizzando una pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Automatizza la configurazione di RabbitMQ in Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.md)
+ [Automatizza la replica delle istanze Amazon RDS su Account AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Crea e distribuisci automaticamente un'applicazione Java su Amazon EKS utilizzando una pipeline CI/CD](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Genera automaticamente un modello PynamoDB e funzioni CRUD per Amazon DynamoDB utilizzando un'applicazione Python](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Convalida e distribuisci automaticamente le policy e i ruoli IAM utilizzando CodePipeline IAM Access Analyzer e le macro AWS CloudFormation](automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.md)
+ [Eseguire il backup dei server Sun SPARC nell'emulatore Stromasys Charon-SSP sul Cloud AWS](back-up-sun-sparc-servers-in-the-stromasys-charon-ssp-emulator-on-the-aws-cloud.md)
+ [Crea una pipeline di dati per importare, trasformare e analizzare i dati di Google Analytics utilizzando il AWS DataOps Development Kit](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Create un Micro Focus Enterprise Server PAC con Amazon EC2 Auto Scaling e Systems Manager](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Crea una pipeline per immagini di container rinforzate utilizzando Image EC2 Builder e Terraform](build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.md)
+ [Crea un MLOps flusso di lavoro usando Amazon SageMaker AI e Azure DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [Centralizza la risoluzione DNS utilizzando AWS Managed Microsoft AD e localmente Microsoft Active Directory](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Pulisci le risorse di AWS Account Factory for Terraform (AFT) in modo sicuro dopo la perdita dei file di stato](clean-up-aft-resources-safely-after-state-file-loss.md)
+ [Configura la registrazione per le applicazioni.NET in Amazon CloudWatch Logs utilizzando NLog](configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.md)
+ [Copia le immagini dei container Amazon ECR su e Account AWS Regioni AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Crea un'immagine di contenitore Docker personalizzata SageMaker e usala per l'addestramento dei modelli in AWS Step Functions](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Crea una pipeline nelle regioni AWS che non supportano AWS CodePipeline](create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.md)
+ [Crea allarmi per metriche personalizzate utilizzando il rilevamento delle anomalie di Amazon CloudWatch](create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection.md)
+ [Personalizza i nomi dei ruoli predefiniti utilizzando AWS CDK gli aspetti e gli escape hatch](customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.md)
+ [Implementa una pipeline che rilevi simultaneamente i problemi di sicurezza in più risultati di codice](deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.md)
+ [Implementa e gestisci un data lake serverless sul cloud AWS utilizzando l'infrastruttura come codice](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Distribuisci applicazioni containerizzate in AWS IoT Greengrass V2 esecuzione come contenitore Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Distribuisci risorse e pacchetti Kubernetes utilizzando Amazon EKS e un repository di grafici Helm in Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Distribuisci applicazioni multi-stack utilizzando AWS CDK con TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Implementa la convalida della sicurezza della codifica in tempo reale utilizzando un server MCP con Kiro e altri assistenti di codifica](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [Distribuisci istanze di cluster di failover di SQL Server su Amazon e EC2 Amazon FSx utilizzando Terraform](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Implementa le automazioni di sicurezza per la AWS WAF soluzione utilizzando Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Sviluppa assistenti avanzati basati sull'intelligenza artificiale generativa utilizzando RAG e suggerimenti ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Abilita Amazon in GuardDuty modo condizionale utilizzando modelli AWS CloudFormation](enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.md)
+ [Configura la scalabilità automatica basata sugli eventi in Amazon EKS utilizzando Amazon EKS Pod Identity e KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Genera consigli personalizzati e riclassificati con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Ricevi notifiche Amazon SNS quando lo stato chiave di una chiave AWS KMS cambia](get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.md)
+ [Gestisci i set di autorizzazioni per più account utilizzando Account Factory for Terraform](govern-permission-sets-aft.md)
+ [Identifica automaticamente le immagini duplicate dei container durante la migrazione a un repository Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Implementa il controllo delle versioni delle API basato sul percorso utilizzando domini personalizzati in Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Migliora le prestazioni operative abilitando Amazon DevOps Guru su più regioni AWS, account e OUs con AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Installa SSM Agent sui nodi di lavoro Amazon EKS utilizzando Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Integra il controller universale Stonebranch con la modernizzazione del mainframe AWS](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Modernizzazione del mainframe: attiva DevOps AWS con Rocket Software Enterprise Suite](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Gestisci i set di AWS IAM Identity Center autorizzazioni come codice utilizzando AWS CodePipeline](manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.md)
+ [Gestisci i set di AWS autorizzazioni in modo dinamico utilizzando Terraform](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [Gestisci le applicazioni container locali configurando Amazon ECS Anywhere con AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Gestisci AWS Organizations le policy come codice utilizzando AWS CodePipeline Amazon Bedrock](manage-organizations-policies-as-code.md)
+ [Esegui la migrazione di record DNS in blocco verso una zona ospitata privata di Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Esegui la migrazione di applicazioni ospitate da IIS su Amazon utilizzando appcmd.exe EC2](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Monitora l'uso di un'Amazon Machine Image condivisa su più Account AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Orchestra una pipeline ETL con convalida, trasformazione e partizionamento utilizzando AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Automatizza le blue/green implementazioni dei database globali di Amazon Aurora utilizzando i principi IaC](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Conserva lo spazio IP instradabile nei progetti VPC multi-account per sottoreti non destinate ai carichi di lavoro](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Fornisci un prodotto Terraform AWS Service Catalog utilizzando un repository di codice](provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.md)
+ [Esegui le attività di AWS Systems Manager Automation in modo sincrono da AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Configura una CI/CD pipeline per carichi di lavoro ibridi su Amazon ECS Anywhere utilizzando AWS CDK e GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configura una CI/CD pipeline per la migrazione del database utilizzando Terraform](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Configura un'infrastruttura Multi-AZ per SQL Server Always On FCI utilizzando Amazon FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [Configura automaticamente i bot UiPath RPA su Amazon EC2 utilizzando AWS CloudFormation](set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.md)
+ [Semplifica l'autenticazione delle applicazioni con TLS reciproco in Amazon ECS utilizzando Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Onboarding dei tenant nell'architettura SaaS per il modello a silo utilizzando C\$1 e AWS CDK](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [Usa Terraform per abilitare automaticamente Amazon GuardDuty per un'organizzazione](use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.md)
+ [Usa gli agenti Amazon Bedrock per automatizzare la creazione di controlli di accesso in Amazon EKS tramite istruzioni basate su testo](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Convalida il codice Account Factory for Terraform (AFT) localmente](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Visualizza i risultati AI/ML del modello utilizzando Flask e AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)