

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

# Tutorial: distribuzione su Amazon EKS con CodePipeline
<a name="tutorials-eks-deploy"></a>

Questo tutorial ti aiuta a creare un'azione di distribuzione CodePipeline che distribuisca il codice in un cluster che hai configurato in Amazon EKS.

L'azione EKS supporta cluster EKS pubblici e privati. I cluster privati sono il tipo consigliato da EKS; tuttavia, entrambi i tipi sono supportati.

**Nota**  
Come parte della creazione di una pipeline nella console, un bucket di artefatti S3 verrà utilizzato da for artifacts. CodePipeline (Questo è diverso dal bucket utilizzato per un'azione sorgente S3.) Se il bucket di artefatti S3 si trova in un account diverso dall'account della pipeline, assicurati che il bucket di artefatti S3 sia di proprietà di persone sicure e affidabili. Account AWS 

**Nota**  
Questa azione utilizza il calcolo gestito per eseguire comandi in un ambiente di CodePipeline compilazione. CodeBuild L'esecuzione dell'azione dei comandi comporterà costi separati in. AWS CodeBuild

**Nota**  
L'azione di `EKS` distribuzione è disponibile solo per le pipeline di tipo V2.

## Prerequisiti
<a name="tutorials-eks-deploy-prereqs"></a>

Per utilizzare questo tutorial per creare la pipeline di distribuzione continua, è necessario disporre di alcune risorse. Ecco di cosa hai bisogno prima di iniziare:

**Nota**  
Tutte queste risorse devono essere create all'interno della stessa regione. AWS 
+ Un repository di controllo del codice sorgente (utilizzato da questo tutorial GitHub) in cui aggiungere un `deployment.yaml` file di esempio.
+ È necessario utilizzare un ruolo di CodePipeline servizio esistente che aggiornerai con le autorizzazioni per questa azione utilizzando [Passaggio 3: aggiorna la politica del ruolo del servizio in IAM CodePipeline](#tutorials-eks-deploy-role) di seguito. Le autorizzazioni necessarie si basano sul tipo di cluster creato. Per ulteriori informazioni, consulta [Ruolo del servizio, policy, autorizzazioni](action-reference-EKS.md#action-reference-EKS-service-role).
+ Un'immagine funzionante e un tag del repository che hai inviato a ECR o al tuo repository di immagini.

Dopo aver soddisfatto questi prerequisiti, puoi procedere con il tutorial e creare la pipeline di distribuzione continua.

## Fase 1: (Facoltativo) Creare un cluster in Amazon EKS
<a name="tutorials-eks-deploy-cluster"></a>

Puoi scegliere di creare un cluster EKS con un endpoint pubblico o privato. 

Nei passaggi seguenti, crei un cluster pubblico o privato in EKS. Questo passaggio è facoltativo se hai già creato il cluster.

### Crea un cluster pubblico in Amazon EKS
<a name="tutorials-eks-deploy-cluster-public"></a>

In questo passaggio, crei un cluster in EKS.

**Crea un cluster pubblico**

1. Apri la console EKS, quindi scegli ** Crea cluster**.

1. In ** Nome**, assegna un nome al cluster. Scegli **Avanti**.

1. Scegli **Crea**.

### Crea un cluster privato in Amazon EKS
<a name="tutorials-eks-deploy-cluster-private"></a>

Se scegli di creare un cluster con un endpoint privato, assicurati di collegare solo le sottoreti private e assicurati che abbiano una connessione Internet.

Segui i cinque passaggi secondari successivi per creare un cluster con un endpoint privato.

**Crea un VPC nella console**

1. Apri la console VPC, quindi scegli ** Crea VPC. **

1. In **Impostazioni VPC**, scegli **VPC e altro**.

1. Scegli di creare una sottorete pubblica e 4 sottoreti private. Seleziona **Crea VPC**.

1. Nella pagina delle sottoreti, scegli Privato. ** ** 

**Determina le sottoreti private nel tuo VPC**

1. Accedi al tuo VPC e scegli l'ID VPC per aprire la pagina dei dettagli del VPC.

1. Nella pagina dei dettagli del VPC, scegli la scheda Mappa delle ** risorse. **

1. Visualizza il diagramma e annota le tue sottoreti private. Le sottoreti vengono visualizzate con etichette che indicano lo stato pubblico o privato e ogni sottorete è mappata su una tabella di routing.  
![Un diagramma della console che mostra le sottoreti e la mappa delle risorse per un VPC.](https://docs.aws.amazon.com/it_it/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Nota che un cluster privato avrà tutte le sottoreti private.

1. Crea una sottorete pubblica per ospitare il gateway NAT. È possibile allegare un solo gateway Internet a un VPC alla volta.

**Crea un gateway NAT nella sottorete pubblica**

1. Nella sottorete pubblica, create un gateway NAT. Accedi alla console VPC, quindi scegli ** i gateway Internet. ** Scegliere **Crea gateway Internet**.

1. In Nome, inserisci un nome per il tuo gateway Internet. Scegliere **Crea gateway Internet**.

Aggiorna la tabella di routing per la sottorete privata per indirizzare il traffico verso il gateway NAT.

**Aggiungi il gateway NAT alle tabelle di routing per le tue sottoreti private**

1. Accedi alla console VPC, quindi scegli Subnet. ** **

1. Per ogni sottorete privata, sceglila e quindi scegli la tabella di routing per quella sottorete nella pagina dei dettagli. Scegli ** Modifica tabella di percorso. ** 

1. Aggiorna la tabella di routing per la sottorete privata per indirizzare il traffico Internet verso il gateway NAT. Seleziona **Aggiungi route**. Scegli il gateway ** NAT tra le opzioni ** da aggiungere. Scegli il gateway Internet che hai creato.

1. Per la sottorete pubblica, crea una tabella di routing personalizzata. Verifica che l'elenco di controllo dell'accesso alla rete (ACL) per la tua sottorete pubblica consenta il traffico in entrata dalla sottorete privata.

1. Scegli **Save changes** (Salva modifiche).

In questo passaggio, crei un cluster in EKS.

**Crea un cluster privato**

1. Apri la console EKS, quindi scegli ** Crea cluster**.

1. In ** Nome**, assegna un nome al cluster. Scegli **Avanti**.

1. Specifica il tuo VPC e altre informazioni di configurazione. Scegli **Crea**.

Il tuo cluster EKS può essere pubblico o privato. Questo passaggio è per i cluster che hanno SOLO un endpoint privato. Assicurati che il tuo cluster sia privato.

## Passaggio 2: configura il tuo cluster privato in Amazon EKS
<a name="tutorials-eks-deploy-cluster-private-configure"></a>

Questo passaggio è applicabile solo se hai creato un cluster privato. Questo passaggio è per i cluster che hanno SOLO un endpoint privato. 

**Configura il tuo cluster**

1. Collega sottoreti private solo nel cluster EKS nella scheda ** Rete**. Collega le sottoreti private acquisite nella sezione ** Determina le sottoreti private nel tuo VPC in basso. ** [Fase 1: (Facoltativo) Creare un cluster in Amazon EKS](#tutorials-eks-deploy-cluster)

1. Assicurati che le sottoreti private abbiano accesso a Internet poiché CodePipeline archivia e recupera gli artefatti dal bucket di artefatti S3 per la tua pipeline.

## Passaggio 3: aggiorna la politica del ruolo del servizio in IAM CodePipeline
<a name="tutorials-eks-deploy-role"></a>

In questo passaggio, aggiornerai un ruolo di CodePipeline servizio esistente`cp-service-role`, ad esempio con le autorizzazioni necessarie CodePipeline per connettersi al cluster. Se non disponi di un ruolo esistente, creane uno nuovo.

Aggiorna il tuo ruolo di CodePipeline servizio con i seguenti passaggi.

**Per aggiornare la politica relativa CodePipeline al ruolo di servizio**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dal pannello di controllo della console, scegli **Roles (Ruoli)**.

1. Cerca il tuo ruolo CodePipeline di servizio, ad esempio`cp-service-role`.

1. Aggiungi una nuova politica in linea.

1. Nell'editor delle ** politiche**, inserisci quanto segue.
   + Per un cluster pubblico, aggiungi le seguenti autorizzazioni.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:{{111122223333}}:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             }
         ]
     }
     ```

------
   + Per un cluster privato, aggiungi le seguenti autorizzazioni. I cluster privati richiederanno autorizzazioni aggiuntive per il tuo VPC, se applicabili.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:{{111122223333}}:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterfacePermission",
                 "Resource": "*",
                 "Condition": {
                     "ArnEquals": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{111122223333}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:{{ACCOUNT-ID}}:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

1. Scegli **Aggiorna policy**.

## Fase 4: Creare una voce di accesso per il ruolo di servizio CodePipeline
<a name="tutorials-eks-deploy-access-entry"></a>

In questo passaggio, crei una voce di accesso sul tuo cluster che aggiungerà il ruolo di CodePipeline servizio aggiornato nel passaggio 3, insieme a una politica di accesso gestito.

1. Apri la console EKS e accedi al tuo cluster.

1. Scegliere la scheda **Accesso**.

1. Sotto le voci di accesso ** IAM**, scegli ** Crea voce di accesso**.

1. Nell'ARN principale di ** IAM**, inserisci il ruolo che hai appena aggiornato per l'azione, ad esempio`cp-service-role`. Scegli **Avanti**.

1. Nella ** pagina ** Step 2: Aggiungi policy di accesso, in Nome ** policy**, scegli la policy gestita per l'accesso, ad esempio`AmazonEKSClusterAdminPolicy`. Scegli **Aggiungi policy**. Scegli **Avanti**.
**Nota**  
Questa è la politica utilizzata dall' CodePipeline azione per parlare con Kubernetes. Come best practice, per limitare le autorizzazioni nella tua policy con privilegi minimi anziché in quella amministrativa, allega invece una policy personalizzata.

1. Nella pagina di revisione, scegli ** Crea. **

## Passaggio 5: crea un repository di sorgenti e aggiungi i file di configurazione del grafico `` Helm
<a name="tutorials-eks-deploy-source"></a>

In questo passaggio, crei un file di configurazione appropriato per la tua azione (file manifest di Kubernetes o diagramma di Helm) e memorizzi il file di configurazione nel tuo repository di origine. Usa il file appropriato per la tua configurazione. Per ulteriori informazioni, consulta [https://kubernetes.io/docs/reference/kubectl/quick-reference/](https://kubernetes.io/docs/reference/kubectl/quick-reference/) o [https://helm.sh/docs/topics/charts/](https://helm.sh/docs/topics/charts/).
+ Per Kubernetes, usa un file manifest.
+ Per Helm, usa un grafico Helm.

1. Crea o usa un repository esistente GitHub .

1. Crea una nuova struttura nel tuo repository per i tuoi file grafici Helm, come mostrato nell'esempio seguente.

   ```
   mychart
   |-- Chart.yaml
   |-- charts
   |-- templates
   |   |-- NOTES.txt
   |   |-- _helpers.tpl
   |   |-- deployment.yaml
   |   |-- ingress.yaml
   |   `-- service.yaml
   `-- values.yaml
   ```

1. Aggiungete il file al livello principale del vostro repository.

## Passaggio 6: creazione della pipeline
<a name="tutorials-eks-deploy-pipeline"></a>

Usa la CodePipeline procedura guidata per creare le fasi della pipeline e connettere il tuo repository di origine.

**Creazione della pipeline**

1. Apri la console all' CodePipeline indirizzo. [ https://console.aws.amazon.com/codepipeline/ ](https://console.aws.amazon.com/codepipeline/)

1. Nella pagina **Welcome (Benvenuto)**, pagina **Getting started (Nozioni di base)** o pagina **Pipelines (Pipeline)**, scegliere **Create pipeline (Crea pipeline)**.

1. Nella ** pagina ** Passaggio 1: scegli l'opzione di creazione, in Opzioni di ** creazione**, scegli l'**opzione ** Crea pipeline personalizzata. Scegli **Avanti**.

1. Nel ** passaggio 2: scegli le impostazioni della pipeline**, in Nome della ** pipeline**, inserisci. **MyEKSPipeline**

1. CodePipeline fornisce pipeline di tipo V1 e V2, che si differenziano per caratteristiche e prezzo. Il tipo V2 è l’unico tipo che puoi scegliere nella console. Per ulteriori informazioni, consulta [tipi di pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Per informazioni sui prezzi di CodePipeline, vedi Prezzi. [https://aws.amazon.com/codepipeline/pricing/](https://aws.amazon.com/codepipeline/pricing/)

1. In Ruolo di ** servizio**, scegli il ruolo del servizio che hai aggiornato nel passaggio 3.

1. Lasciare i valori predefiniti delle impostazioni in **Advanced settings (Impostazioni avanzate)**, quindi scegliere **Next (Successivo)**.

1. Nella ** pagina ** Step 3: Add source stage, in ** Source provider**, scegli ** di creare una connessione al tuo GitHub repository**.

1. Nella ** pagina ** Passaggio 4: Aggiungi fase di compilazione, scegli ** ** Ignora.

1. Nella ** pagina ** Passaggio 5: Aggiungi fase di distribuzione, scegli ** Amazon EKS. **  
![Modulo di configurazione di distribuzione con Helm selezionato, che mostra i campi relativi al nome della release, alla posizione del grafico e ad altre opzioni.](https://docs.aws.amazon.com/it_it/codepipeline/latest/userguide/images/eks-action-example.png)

   1. In Tipo di configurazione ** Deploy**, scegli Helm. ** **

   1. Nella posizione del grafico di ** Helm**, inserisci il nome della release, ad esempio. `my-release` Per la posizione del grafico di ** Helm**, inserisci il percorso dei file del grafico di Helm, ad esempio. `mychart`

   1. Scegli **Avanti**.

1. Nella pagina **Step 6: Review** (Fase 6: esamina), esamina la configurazione della pipeline, quindi seleziona **Create pipeline** (Crea pipeline) per creare la pipeline.  
![Un diagramma della console che mostra una pipeline eseguita con successo con l'azione di distribuzione aggiunta alla pipeline.](https://docs.aws.amazon.com/it_it/codepipeline/latest/userguide/images/eks-deploy-pipeline.png)

1. Una volta eseguita correttamente la pipeline, scegli ** Visualizza dettagli ** per visualizzare i log dell'azione e visualizzare l'output dell'azione.