

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

# 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)