

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

# Contenitori e microservizi
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Accedi a un database Amazon Neptune da un container Amazon EKS](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Accedi alle applicazioni container in modo privato su Amazon ECS utilizzando AWS PrivateLink e un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Accedi alle applicazioni container in modo privato su Amazon ECS utilizzando AWS Fargate, PrivateLink AWS e un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [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)
+ [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 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)
+ [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)
+ [Copia le immagini dei container Amazon ECR su e Account AWS Regioni AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Crea una definizione di attività Amazon ECS e monta un file system su EC2 istanze utilizzando Amazon EFS](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Implementa le funzioni Lambda con immagini dei container](deploy-lambda-functions-with-container-images.md)
+ [Distribuisci microservizi Java su Amazon ECS utilizzando AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.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)
+ [Implementa un cluster CockroachDB in Amazon EKS utilizzando Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Implementa un microservizio Java di esempio su Amazon EKS ed esponi il microservizio utilizzando un Application Load Balancer](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.md)
+ [Implementa un'applicazione basata su gRPC su un cluster Amazon EKS e accedi ad essa con un Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.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 contenitori utilizzando Elastic Beanstalk](deploy-containers-by-using-elastic-beanstalk.md)
+ [Genera un indirizzo IP statico in uscita utilizzando una funzione Lambda, Amazon VPC e un'architettura serverless](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.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)
+ [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)
+ [Installa l'agente SSM e l' CloudWatch agente sui nodi di lavoro Amazon EKS utilizzando preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.md)
+ [Esegui la migrazione dei controller di ingresso NGINX quando abiliti la modalità automatica di Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Esegui la migrazione dei carichi di lavoro dei container da Azure Red Hat OpenShift (ARO) a Servizio Red Hat OpenShift su AWS (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [Esegui attività Amazon ECS su Amazon WorkSpaces con Amazon ECS Anywhere](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [Esegui un contenitore Docker dell'API Web ASP.NET Core su un'istanza Amazon Linux EC2](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Esegui carichi di lavoro con stato con storage persistente dei dati utilizzando Amazon EFS su Amazon EKS con AWS Fargate](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.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)
+ [Semplifica le implementazioni di PostgreSQL su Amazon EKS utilizzando PGO](streamline-postgresql-deployments-amazon-eks-pgo.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)
+ [Altri modelli](containersandmicroservices-more-patterns-pattern-list.md)

# Accedi a un database Amazon Neptune da un container Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Riepilogo
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Questo modello stabilisce una connessione tra Amazon Neptune, che è un database grafico completamente gestito, e Amazon Elastic Kubernetes Service (Amazon EKS), un servizio di orchestrazione di container, per accedere a un database Neptune. I cluster Neptune DB sono confinati all'interno di un cloud privato virtuale (VPC) attivo. AWS Per questo motivo, l'accesso a Neptune richiede un'attenta configurazione del VPC per abilitare la connettività.

A differenza di Amazon Relational Database Service (Amazon RDS) per PostgreSQL, Neptune non si basa sulle tipiche credenziali di accesso al database. Utilizza invece ruoli (IAM) per l'autenticazione. AWS Identity and Access Management Pertanto, la connessione a Neptune da Amazon EKS implica la configurazione di un ruolo IAM con le autorizzazioni necessarie per accedere a Neptune.

Inoltre, gli endpoint Neptune sono accessibili solo all'interno del VPC in cui risiede il cluster. Ciò significa che devi configurare le impostazioni di rete per facilitare la comunicazione tra Amazon EKS e Neptune. A seconda dei requisiti specifici e delle preferenze di rete, esistono [diversi approcci alla configurazione del VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) per consentire una connettività perfetta tra Neptune e Amazon EKS. Ogni metodo offre vantaggi e considerazioni distinti, che offrono flessibilità nella progettazione dell'architettura del database per soddisfare le esigenze dell'applicazione.

## Prerequisiti e limitazioni
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Prerequisiti**
+ [Installa l'ultima versione di **kubectl** (vedi istruzioni).](https://kubernetes.io/docs/tasks/tools/#kubectl) Per verificare la tua versione, esegui: 

  ```
  kubectl version --short
  ```
+ Installa l'ultima versione di **eksctl** (vedi [istruzioni](https://eksctl.io/installation/)). Per verificare la tua versione, esegui: 

  ```
  eksctl info
  ```
+ Installa l'ultima versione di AWS Command Line Interface (AWS CLI) versione 2 (vedi [istruzioni](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Per verificare la tua versione, esegui: 

  ```
  aws --version
  ```
+ [Crea un cluster Neptune DB (vedi istruzioni).](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html) Assicurati di stabilire comunicazioni tra il VPC del cluster e Amazon EKS tramite [peering VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) o un altro metodo. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Assicurati inoltre che lo stato del cluster sia «disponibile» e che abbia una regola in entrata sulla porta 8182 per il gruppo di sicurezza.
+ [Configura un provider IAM OpenID Connect (OIDC) su un cluster Amazon EKS esistente (vedi istruzioni).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Versioni del prodotto**
+ [Amazon EKS 1,27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Motore Amazon Neptune versione 1.3.0.0 (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Architecture
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

Il diagramma seguente mostra la connessione tra i pod Kubernetes in un cluster Amazon EKS e Neptune per fornire l'accesso a un database Neptune.

![\[Connessione di pod in un nodo Kubernetes con Amazon Neptune.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automazione e scalabilità**

Puoi usare Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) per scalare questa soluzione.

## Tools (Strumenti)
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Servizi**
+ [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.
+ [Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) è un servizio di database a grafi che ti aiuta a creare ed eseguire applicazioni che funzionano con set di dati altamente connessi.

## Best practice
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Per le best practice, consulta [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) nelle *guide alle best practice di Amazon EKS*.

## Epiche
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Impostazione delle variabili di ambiente
<a name="set-environment-variables"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica il contesto del cluster. | Prima di interagire con il cluster Amazon EKS utilizzando Helm o altri strumenti da riga di comando, devi definire variabili di ambiente che incapsulino i dettagli del cluster. Queste variabili vengono utilizzate nei comandi successivi per garantire che siano indirizzate al cluster e alle risorse corretti.Innanzitutto, verifica che stai operando nel contesto del cluster corretto. Ciò garantisce che tutti i comandi successivi vengano inviati al cluster Kubernetes previsto. Per verificare il contesto corrente, esegui il comando seguente.<pre>kubectl config current-context</pre> | Amministratore AWS, amministratore cloud | 
| Definisci la `CLUSTER_NAME` variabile. | Definisci la variabile di `CLUSTER_NAME` ambiente per il tuo cluster Amazon EKS. Nel comando seguente, sostituisci il valore di esempio `us-west-2` con quello corretto Regione AWS per il tuo cluster. Sostituisci il valore di esempio `eks-workshop` con il nome del cluster esistente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Amministratore AWS, amministratore cloud | 
| Convalida l'output. | Per verificare che le variabili siano state impostate correttamente, esegui il comando seguente.<pre>echo $CLUSTER_NAME</pre>Verificate che l'output di questo comando corrisponda all'input specificato nel passaggio precedente. | Amministratore AWS, amministratore cloud | 

### Crea un ruolo IAM e associalo a Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un account di servizio . | Utilizzi [i ruoli IAM per gli account di servizio per](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) mappare i tuoi account di servizio Kubernetes ai ruoli IAM, per consentire una gestione granulare delle autorizzazioni per le tue applicazioni eseguite su Amazon EKS. Puoi usare [eksctl](https://eksctl.io/) per creare e associare un ruolo IAM a un account di servizio Kubernetes specifico all'interno del tuo cluster Amazon EKS. La policy AWS gestita `NeptuneFullAccess` consente l'accesso in scrittura e lettura al cluster Neptune specificato.È necessario che al cluster sia associato un [endpoint OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) prima di eseguire questi comandi.Crea un account di servizio da associare a una politica AWS gestita denominata. `NeptuneFullAccess`<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>dove `eks-neptune-sa ` è il nome dell'account di servizio che desideri creare.Al termine, questo comando visualizza la seguente risposta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Amministratore AWS, amministratore cloud | 
| Verifica che l'account sia configurato correttamente. | Assicurati che l'account del `eks-neptune-sa` servizio sia configurato correttamente nello spazio dei nomi predefinito del cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>L'output dovrebbe essere simile al seguente:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Amministratore AWS, amministratore cloud | 
| Verifica la connettività. | Implementa un pod di esempio chiamato `pod-util` e verifica la connettività con Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Amministratore AWS, amministratore cloud | 

### Convalida l'attività di connessione
<a name="validate-connection-activity"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita l'autenticazione del database IAM. | Per impostazione predefinita, l'autenticazione del database IAM è disabilitata quando si crea un cluster Neptune DB. È possibile abilitare o disabilitare l'autenticazione del database IAM utilizzando. Console di gestione AWSSegui i passaggi indicati nella AWS documentazione per [abilitare l'autenticazione del database IAM in Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Amministratore AWS, amministratore cloud | 
| Verifica le connessioni. | In questo passaggio, interagisci con il `pod-util` contenitore, che è già in stato di esecuzione, per installare **awscurl** e verificare la connessione.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Amministratore AWS, amministratore cloud | 

## risoluzione dei problemi
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Impossibile accedere al database Neptune. | Esamina la policy IAM allegata all'account del servizio. Assicurati che consenta le azioni necessarie (ad esempio`neptune:Connec,neptune:DescribeDBInstances`) per le operazioni che desideri eseguire. | 

## Risorse correlate
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Concedi ai carichi di lavoro Kubernetes l'accesso all' AWS utilizzo degli account di servizio Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentazione Amazon EKS)
+ [Ruoli IAM per gli account di servizio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentazione Amazon EKS)
+ [Creazione di un nuovo cluster Neptune DB](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) (documentazione Amazon Neptune)

# Accedi alle applicazioni container in modo privato su Amazon ECS utilizzando AWS PrivateLink e un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Riepilogo
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Questo modello descrive come ospitare privatamente un'applicazione container Docker su Amazon Elastic Container Service (Amazon ECS) con un Network Load Balancer e accedere all'applicazione utilizzando AWS. PrivateLink Puoi quindi utilizzare una rete privata per accedere in modo sicuro ai servizi sul cloud Amazon Web Services (AWS). Amazon Relational Database Service (Amazon RDS) ospita il database relazionale per l'applicazione in esecuzione su Amazon ECS con alta disponibilità (HA). Amazon Elastic File System (Amazon EFS) viene utilizzato se l'applicazione richiede uno storage persistente.

Il servizio Amazon ECS che esegue le applicazioni Docker, con un Network Load Balancer sul front-end, può essere associato a un endpoint di cloud privato virtuale (VPC) per l'accesso tramite AWS. PrivateLink Questo servizio di endpoint VPC può quindi essere condiviso con altri utenti utilizzando i rispettivi VPCs endpoint VPC.

Puoi anche utilizzare [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) al posto di un gruppo Amazon Auto EC2 Scaling. Per ulteriori informazioni, consulta [Accesso privato alle applicazioni container su Amazon ECS utilizzando AWS Fargate, PrivateLink AWS e un Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card).

## Prerequisiti e limitazioni
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, installata e configurata su Linux, macOS o Windows
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows
+ Un'applicazione in esecuzione su Docker

## Architecture
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utilizzo PrivateLink di AWS per accedere a un'app container su Amazon ECS con un Network Load Balancer.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Stack tecnologico**
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ Amazon EC2 Auto Scaling
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

*Automazione e scalabilità*
+ Puoi usare [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) per creare questo modello utilizzando [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Tools (Strumenti)
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) — Amazon Elastic Compute Cloud (Amazon EC2) fornisce capacità di calcolo scalabile nel cloud AWS.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html): Amazon EC2 Auto Scaling ti aiuta a garantire il numero corretto di istanze EC2 Amazon disponibili per gestire il carico della tua applicazione.
+ [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.
+ [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 AWS gestito che è sicuro, scalabile e affidabile.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) fornisce un file system NFS elastico semplice, scalabile e completamente gestito da utilizzare con i servizi cloud AWS e le risorse locali.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — Lambda è un servizio di calcolo per l'esecuzione di codice senza effettuare il provisioning o la gestione di server.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/) — Amazon Relational Database Service (Amazon RDS) è un servizio Web che semplifica la configurazione, il funzionamento e la scalabilità di un database relazionale nel cloud AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/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.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) — Secrets Manager ti aiuta a sostituire le credenziali codificate nel codice, comprese le password, fornendo una chiamata API a Secrets Manager per recuperare il segreto a livello di codice.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html): Elastic Load Balancing distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni, come istanze EC2 Amazon, contenitori e indirizzi IP, in più zone di disponibilità.
+ [Docker](https://www.docker.com/): Docker aiuta gli sviluppatori a imballare, spedire ed eseguire qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

## Epiche
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Crea componenti di rete
<a name="create-networking-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Crea i sistemi di bilanciamento del carico
<a name="create-the-load-balancers"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea un Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Creare un file system Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file system Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Monta gli obiettivi per le sottoreti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Verifica che le sottoreti siano montate come destinazioni.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Creare un bucket S3
<a name="create-an-s3-bucket"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un bucket S3.  | Apri la console Amazon S3 e crea un bucket S3 per archiviare gli asset statici dell'applicazione, se necessario. | Amministratore cloud | 

### Crea un segreto di Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una chiave AWS KMS per crittografare il segreto di Secrets Manager. | Apri la console AWS Key Management Service (AWS KMS) e crea una chiave KMS. | Amministratore del cloud | 
|  Crea un segreto di Secrets Manager per archiviare la password di Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud  | 

### Crea un'istanza Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione di un gruppo di sottoreti del database.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea un'istanza Amazon RDS. | Crea e configura un'istanza Amazon RDS all'interno delle sottoreti private. Assicurati che **Multi-AZ** sia attivato per HA. | Amministratore del cloud | 
| Carica i dati sull'istanza Amazon RDS.  | Carica i dati relazionali richiesti dall'applicazione nella tua istanza Amazon RDS. Questo processo varierà in base alle esigenze dell'applicazione e al modo in cui lo schema del database viene definito e progettato. | Amministratore cloud, DBA | 

### Crea i componenti Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea le immagini Docker.  | Crea le immagini Docker seguendo le istruzioni nella sezione *Risorse correlate*. | Amministratore cloud | 
| Crea repository Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore del cloud, ingegnere DevOps  | 
| Autentica il tuo client Docker per il repository Amazon ECR.  | Per autenticare il tuo client Docker per il repository Amazon ECR, esegui il comando "`aws ecr get-login-password`nella CLI di AWS. | Amministratore cloud | 
| Invia le immagini Docker al repository Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea una definizione di attività Amazon ECS.  | Per eseguire i container Docker in Amazon ECS è necessaria una definizione di attività. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Per informazioni sull'impostazione della definizione dell'attività, consulta «Creazione di una definizione di attività» nella sezione *Risorse correlate*. Assicurati di fornire le immagini Docker che hai inviato ad Amazon ECR. | Amministratore cloud | 
| Crea un servizio Amazon ECS.  | Crea un servizio Amazon ECS utilizzando il cluster ECS creato in precedenza. Assicurati di scegliere Amazon EC2 come tipo di avvio e scegli la definizione dell'attività creata nel passaggio precedente, nonché il gruppo target dell'Application Load Balancer. | Amministratore cloud | 

### Crea un gruppo Amazon EC2 Auto Scaling
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione di una configurazione di avvio. | Apri la EC2 console Amazon e crea una configurazione di avvio. Assicurati che i dati utente contengano il codice per consentire alle EC2 istanze di unirsi al cluster ECS desiderato. Per un esempio del codice richiesto, consulta la sezione *Risorse correlate*. | Amministratore cloud | 
| Crea un gruppo Amazon EC2 Auto Scaling.  | Torna alla EC2 console Amazon e in **Auto Scaling**, scegli i gruppi **Auto Scaling**. Configura un gruppo Amazon EC2 Auto Scaling. Assicurati di scegliere le sottoreti private e di avviare la configurazione creata in precedenza. | Amministratore cloud | 

### Configura AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l' PrivateLink endpoint AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)*Per ulteriori informazioni, consulta la sezione Risorse correlate.* | Amministratore cloud | 

### Creare un endpoint VPC
<a name="create-a-vpc-endpoint"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un endpoint VPC. | Crea un endpoint VPC per l'endpoint AWS che hai creato in PrivateLink precedenza. L'endpoint VPC Fully Qualified Domain Name (FQDN) punterà al nome di dominio completo dell'endpoint AWS. PrivateLink Questo crea un'interfaccia di rete elastica per il servizio endpoint VPC a cui gli endpoint DNS possono accedere. | Amministratore cloud | 

### Creazione della funzione Lambda
<a name="create-the-lambda-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione della funzione Lambda | Sulla console AWS Lambda, crea una funzione Lambda per aggiornare gli indirizzi IP di Application Load Balancer come destinazioni per il Network Load Balancer. Per ulteriori informazioni su questo argomento, consulta il post sul [blog Using AWS Lambda to enable static IP address for Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | Sviluppatore di app | 

## Risorse correlate
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Crea i sistemi di bilanciamento del carico:**
+ [Usa un Network Load Balancer per Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Creare un Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Usa un Application Load Balancer per Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Creare un Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Crea un file system Amazon EFS:**
+ [Crea un file system Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crea obiettivi di montaggio in Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Crea un bucket S3:**
+ [Crea un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Crea un segreto di Secrets Manager:**
+ [Crea chiavi in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Crea un segreto in AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Crea un'istanza Amazon RDS:**
+ [Crea un'istanza database Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Crea i componenti Amazon ECS:**
+ [Crea un cluster Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Crea un'immagine Docker](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Crea un repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autentica Docker con il repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Invia un'immagine a un repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Crea una definizione di attività Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Crea un servizio Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Crea un gruppo Amazon EC2 Auto Scaling:**
+ [Crea una configurazione di lancio](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Creare un gruppo con dimensionamento automatico utilizzando una configurazione di avvio](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Istanze di container Bootstrap con dati utente Amazon EC2 ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**Configura AWS PrivateLink:**
+ [Servizi endpoint VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Crea un endpoint VPC:**
+ [Endpoint VPC di interfaccia (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Crea la funzione Lambda:**
+ [Creare una funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Altre risorse:**
+ [Utilizzo di indirizzi IP statici per Application Load Balancer](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Accesso sicuro ai servizi tramite AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Accedi alle applicazioni container in modo privato su Amazon ECS utilizzando AWS Fargate, PrivateLink AWS e un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Riepilogo
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Questo modello descrive come ospitare privatamente un'applicazione contenitore Docker sul cloud Amazon Web Services (AWS) utilizzando Amazon Elastic Container Service (Amazon ECS) con un tipo di avvio AWS Fargate, con un Network Load Balancer, e accedere all'applicazione utilizzando AWS. PrivateLink Amazon Relational Database Service (Amazon RDS) ospita il database relazionale per l'applicazione in esecuzione su Amazon ECS con alta disponibilità (HA). Puoi usare Amazon Elastic File System (Amazon EFS) se l'applicazione richiede uno storage persistente.

Questo modello utilizza un [tipo di avvio Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) per il servizio Amazon ECS che esegue le applicazioni Docker, con un Network Load Balancer nel front-end. Può quindi essere associato a un endpoint di cloud privato virtuale (VPC) per l'accesso tramite AWS. PrivateLink Questo servizio di endpoint VPC può quindi essere condiviso con altri utenti utilizzando i rispettivi VPCs endpoint VPC.

Puoi usare Fargate con Amazon ECS per eseguire container senza dover gestire server o cluster di istanze Amazon Elastic Compute Cloud ( EC2Amazon). Puoi anche utilizzare un gruppo Amazon EC2 Auto Scaling anziché Fargate. Per ulteriori informazioni, consulta [Accesso privato alle applicazioni container su Amazon ECS utilizzando AWS PrivateLink e un Network](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card) Load Balancer.

## Prerequisiti e limitazioni
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, installata e configurata su Linux, macOS o Windows
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows
+ Un'applicazione in esecuzione su Docker

## Architecture
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utilizzo PrivateLink per accedere a un'app contenitore su Amazon ECS con un tipo di lancio AWS Fargate.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Stack tecnologico**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

**Automazione e scalabilità**
+ Puoi usare [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) per creare questo modello utilizzando [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Tools (Strumenti)
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**Servizi 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 AWS gestito che è sicuro, scalabile e affidabile.
+ [Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) è un servizio di gestione dei container veloce e altamente scalabile che semplifica l'esecuzione, l'arresto e la gestione dei container su un cluster.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) fornisce un file system NFS elastico semplice, scalabile e completamente gestito da utilizzare con i servizi cloud AWS e le risorse locali.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)è una tecnologia che puoi usare con Amazon ECS per eseguire container senza dover gestire server o cluster di istanze Amazon EC2 .
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/rds/index.html)) è un servizio Web che semplifica la configurazione, il funzionamento e la scalabilità di un database relazionale in. Cloud AWS
+ [Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) è uno storage per Internet. È concepito per rendere più accessibili agli sviluppatori risorse informatiche su grande scala per il Web.
+ Con [Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/) 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 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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni, come EC2 istanze, contenitori e indirizzi IP, in più zone di disponibilità.

**Altri strumenti**
+ [Docker](https://www.docker.com/) aiuta gli sviluppatori a imballare, spedire ed eseguire facilmente qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

## Epiche
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Crea componenti di rete
<a name="create-networking-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Crea i sistemi di bilanciamento del carico
<a name="create-the-load-balancers"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Per informazioni su questa e altre storie, consulta la sezione *Risorse correlate*. | Amministratore cloud | 
| Crea un Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Creare un file system Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file system Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Monta gli obiettivi per le sottoreti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Verifica che le sottoreti siano montate come destinazioni.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Creare un bucket S3
<a name="create-an-s3-bucket"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un bucket S3. | Apri la console Amazon S3 e [crea un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket) per archiviare gli asset statici dell'applicazione, se necessario. | Amministratore cloud | 

### Crea un segreto di Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Crea una chiave AWS KMS per crittografare il segreto di Secrets Manager. | Apri la console AWS Key Management Service (AWS KMS) e crea una chiave KMS. | Amministratore del cloud | 
|  Crea un segreto di Secrets Manager per archiviare la password di Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Crea un'istanza Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione di un gruppo di sottoreti del database.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea un'istanza Amazon RDS. | Crea e configura un'istanza Amazon RDS all'interno delle sottoreti private. Assicurati che **Multi-AZ** sia attivato per l'alta disponibilità (HA). | Amministratore cloud | 
| Carica i dati sull'istanza Amazon RDS.  | Carica i dati relazionali richiesti dall'applicazione nella tua istanza Amazon RDS. Questo processo varierà in base alle esigenze dell'applicazione e al modo in cui lo schema del database viene definito e progettato. | DBA | 

### Crea i componenti Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea le immagini Docker. | [Crea le immagini Docker seguendo le istruzioni nella AWS documentazione.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html) | Amministratore cloud | 
| Crea un repository Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore del cloud, ingegnere DevOps  | 
| Invia le immagini Docker al repository Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 
| Crea una definizione di attività Amazon ECS.  | Per eseguire i container Docker in Amazon ECS è necessaria una definizione di attività. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Per informazioni sull'impostazione della definizione dell'attività, consulta «Creazione di una definizione di attività» nella sezione *Risorse correlate*. Assicurati di fornire le immagini Docker che hai inviato ad Amazon ECR. | Amministratore cloud | 
| Crea un servizio ECS e scegli Fargate come tipo di lancio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Configura AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l' PrivateLink endpoint AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Amministratore cloud | 

### Creare un endpoint VPC
<a name="create-a-vpc-endpoint"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un endpoint VPC. | [Crea un endpoint VPC per l'endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) AWS che hai creato in PrivateLink precedenza. L'endpoint VPC Fully Qualified Domain Name (FQDN) punterà al nome di dominio completo dell'endpoint AWS. PrivateLink Questo crea un'interfaccia di rete elastica per il servizio endpoint VPC a cui possono accedere gli endpoint del Domain Name Service. | Amministratore cloud | 

### Imposta l'obiettivo
<a name="set-the-target"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungete l'Application Load Balancer come destinazione. | [Per aggiungere l'Application Load Balancer come destinazione per il Network Load Balancer, segui le istruzioni nella documentazione.AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html) | Sviluppatore di app | 

## Risorse correlate
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Crea i load balancer:**
+ [Usa un Network Load Balancer per Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Creare un Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Usa un Application Load Balancer per Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Creare un Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Crea un file system Amazon EFS:**
+ [Crea un file system Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crea obiettivi di montaggio in Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Crea un segreto di Secrets Manager:**
+ [Crea chiavi in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Crea un segreto in AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Crea un'istanza Amazon RDS:**
+ [Crea un'istanza database Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Crea i componenti Amazon ECS**
+ [Crea un repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autentica Docker con il repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Invia un'immagine a un repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Crea una definizione di attività Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Crea un servizio Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Altre risorse:**
+ [Accesso sicuro ai servizi tramite AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Accedi alle applicazioni container in modo privato su Amazon EKS utilizzando AWS PrivateLink e un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Riepilogo
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Questo modello descrive come ospitare privatamente un'applicazione container Docker su Amazon Elastic Kubernetes Service (Amazon EKS) con un Network Load Balancer e accedere all'applicazione utilizzando AWS. PrivateLink Puoi quindi utilizzare una rete privata per accedere in modo sicuro ai servizi sul cloud Amazon Web Services (AWS). 

Il cluster Amazon EKS che esegue le applicazioni Docker, con un Network Load Balancer sul front-end, può essere associato a un endpoint di cloud privato virtuale (VPC) per l'accesso tramite AWS. PrivateLink Questo servizio di endpoint VPC può quindi essere condiviso con altri utenti utilizzando i rispettivi VPCs endpoint VPC.

La configurazione descritta da questo modello è un modo sicuro per condividere l'accesso alle applicazioni VPCs tra account AWS. Non richiede configurazioni di connettività o routing speciali, poiché la connessione tra gli account consumer e provider si trova sulla spina dorsale globale di AWS e non attraversa la rete Internet pubblica.

## Prerequisiti e limitazioni
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prerequisiti**
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows.
+ Un'applicazione in esecuzione su Docker.
+ Un account AWS attivo.
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installata e configurata su Linux, macOS o Windows.
+ Un cluster Amazon EKS esistente con sottoreti private etichettate e configurato per ospitare applicazioni. Per ulteriori informazioni, consulta [Subnet tagging nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) di Amazon EKS. 
+ Kubectl, installato e configurato per accedere alle risorse sul tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Installazione di kubectl nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) di Amazon EKS. 

## Architecture
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Usa PrivateLink un Network Load Balancer per accedere a un'applicazione in un container Amazon EKS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Stack tecnologico**
+ Amazon EKS
+ AWS PrivateLink
+ Network Load Balancer

**Automazione e scalabilità**
+ I manifesti di Kubernetes possono essere tracciati e gestiti su un repository basato su Git e distribuiti utilizzando l'integrazione continua e la distribuzione continua (CI/CD) in AWS. CodePipeline 
+ Puoi usare AWS CloudFormation per creare questo modello utilizzando Infrastructure as Code (IaC).

## Tools (Strumenti)
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html): Elastic Load Balancing distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni, come istanze Amazon Elastic Compute Cloud ( EC2Amazon), contenitori e indirizzi IP, in una o più zone di disponibilità.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) — Amazon Elastic Kubernetes Service (Amazon 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.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes.

## Epiche
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Distribuisci i file manifest di distribuzione e servizio di Kubernetes
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Crea il file manifesto di distribuzione di Kubernetes. | Crea un file manifesto di distribuzione modificando il seguente file di esempio in base alle tue esigenze.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Questo è un file di configurazione di esempio di NGINX che viene distribuito utilizzando l'immagine NGINX Docker. Per ulteriori informazioni, consulta [Come usare l'immagine ufficiale di NGINX Docker nella documentazione Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/). | DevOps ingegnere | 
| Distribuisci il file manifesto di distribuzione di Kubernetes. | Esegui il comando seguente per applicare il file manifest di distribuzione al tuo cluster Amazon EKS:`kubectl apply –f <your_deployment_file_name> ` | DevOps ingegnere | 
|  Crea il file manifesto del servizio Kubernetes.  | Crea un file di manifesto del servizio modificando il seguente file di esempio in base alle tue esigenze.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Assicurati di aver incluso quanto segue `annotations` per definire un Network Load Balancer interno:<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps ingegnere | 
| Distribuisci il file di manifesto del servizio Kubernetes. | Esegui il comando seguente per applicare il file manifest del servizio al tuo cluster Amazon EKS:`kubectl apply -f <your_service_file_name>` | DevOps ingegnere | 

### Crea gli endpoint
<a name="create-the-endpoints"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Registra il nome del Network Load Balancer.  | Esegui il comando seguente per recuperare il nome del Network Load Balancer:`kubectl get svc sample-service -o wide`Registra il nome del Network Load Balancer, necessario per creare un PrivateLink endpoint AWS. | DevOps ingegnere | 
| Crea un PrivateLink endpoint AWS. | Accedi alla Console di gestione AWS, apri la console Amazon VPC e crea un endpoint PrivateLink AWS. Associando questo endpoint al Network Load Balancer, l'applicazione sarà disponibile privatamente per i clienti. Per ulteriori informazioni, consulta [VPC endpoint services (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) nella documentazione di Amazon VPC.Se l'account consumer richiede l'accesso all'applicazione, l'[ID dell'account AWS dell'account](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) consumer deve essere aggiunto all'elenco dei principali consentiti per la configurazione degli PrivateLink endpoint AWS. Per ulteriori informazioni, consulta [Aggiungere e rimuovere le autorizzazioni per il servizio endpoint nella documentazione](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) di Amazon VPC. | Amministratore cloud  | 
| Crea un endpoint VPC. | Sulla console Amazon VPC, scegli **Endpoint Services**, quindi scegli **Create** Endpoint Service. Crea un endpoint VPC per l'endpoint AWS. PrivateLink Il nome di dominio completo (FQDN) dell'endpoint VPC punta al nome di dominio completo per l'endpoint AWS. PrivateLink Questo crea un'interfaccia di rete elastica per il servizio endpoint VPC a cui gli endpoint DNS possono accedere.  | Amministratore cloud | 

## Risorse correlate
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Utilizzando l'immagine ufficiale di NGINX Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)
+ [Bilanciamento del carico di rete su Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [Creazione di servizi endpoint VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Aggiungere e rimuovere le autorizzazioni per il servizio endpoint](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Automatizza i backup per le istanze DB di Amazon RDS for PostgreSQL utilizzando AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Riepilogo
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

Il backup dei database PostgreSQL è un'attività importante e in genere può essere completata con l'utilità [pg\$1dump, che utilizza il comando COPY per impostazione predefinita per creare uno schema e un dump](https://www.postgresql.org/docs/current/app-pgdump.html) dei dati di un database PostgreSQL. Tuttavia, questo processo può diventare ripetitivo se sono necessari backup regolari per più database PostgreSQL. Se i tuoi database PostgreSQL sono ospitati nel cloud, puoi anche sfruttare la funzionalità di backup [automatico](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) fornita da Amazon Relational Database Service (Amazon RDS) anche per PostgreSQL. Questo modello descrive come automatizzare i backup regolari per le istanze DB Amazon RDS for PostgreSQL utilizzando l'utilità pg\$1dump.

Nota: le istruzioni presuppongono che tu stia utilizzando Amazon RDS. Tuttavia, puoi utilizzare questo approccio anche per i database PostgreSQL ospitati all'esterno di Amazon RDS. Per eseguire i backup, la funzione AWS Lambda deve essere in grado di accedere ai database.

Un evento Amazon CloudWatch Events basato sul tempo avvia una funzione Lambda che cerca [tag di backup specifici applicati ai metadati delle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) istanze DB PostgreSQL su Amazon RDS. Se le istanze DB PostgreSQL hanno il tag **DBDump BKP:Automated = Active e altri tag di backup richiesti, la** funzione Lambda invia singoli job per ogni backup del database ad AWS Batch. 

AWS Batch elabora questi processi e carica i dati di backup in un bucket Amazon Simple Storage Service (Amazon S3). Questo modello utilizza un Dockerfile e un file entrypoint.sh per creare un'immagine del contenitore Docker che viene utilizzata per eseguire backup nel job AWS Batch. Una volta completato il processo di backup, AWS Batch registra i dettagli del backup in una tabella di inventario su Amazon DynamoDB. Come ulteriore protezione, un evento CloudWatch Events avvia una notifica Amazon Simple Notification Service (Amazon SNS) se un processo fallisce in AWS Batch. 

## Prerequisiti e limitazioni
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un ambiente di elaborazione gestito o non gestito esistente. Per ulteriori informazioni, consulta [Ambienti di calcolo gestiti e non gestiti nella documentazione](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) di AWS Batch. 
+ [Immagine Docker AWS Command Line Interface (CLI) versione 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), installata e configurata.
+ Istanze database Amazon RDS for PostgreSQL esistenti.  
+ Un bucket S3 esistente. 
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows.
+ Familiarità con la programmazione in Lambda. 

## Architecture
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Architettura per il backup delle istanze DB di Amazon RDS for PostgreSQL utilizzando l'utilità pg_dump.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Stack tecnologico**
+  CloudWatch Eventi Amazon
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Simple Storage Service (Amazon S3)
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Tools (Strumenti)
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Events offre un flusso quasi in tempo reale di eventi di sistema che descrivono i cambiamenti nelle risorse AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) — DynamoDB è un servizio di database NoSQL completamente gestito che offre prestazioni veloci e prevedibili con una scalabilità perfetta.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html) — Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container AWS gestito che è sicuro, scalabile e affidabile.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html) — Amazon Relational Database Service (Amazon RDS) è un servizio Web che semplifica la configurazione, il funzionamento e la scalabilità di un database relazionale nel cloud AWS.
+ [Amazon SNS — Amazon Simple](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Notification Service (Amazon SNS) è un servizio gestito che fornisce il recapito dei messaggi dagli editori agli abbonati.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html) — Amazon Simple Storage Service (Amazon S3) è uno storage per Internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html): AWS Batch ti aiuta a eseguire carichi di lavoro di elaborazione in batch sul cloud AWS.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html) — AWS Key Management Service (AWS KMS) è un servizio gestito che semplifica la creazione e il controllo delle chiavi di crittografia utilizzate per crittografare i dati.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html) — Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza effettuare il provisioning o gestire server.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html) — Secrets Manager ti aiuta a sostituire le credenziali hardcoded nel codice, incluse le password, con una chiamata API a Secrets Manager per recuperare il segreto a livello di codice.
+ [Docker](https://www.docker.com/) — Docker aiuta gli sviluppatori a imballare, spedire ed eseguire facilmente qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

[Le tue istanze DB PostgreSQL su Amazon RDS devono avere tag applicati ai relativi metadati.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) La funzione Lambda cerca i tag per identificare le istanze DB di cui eseguire il backup e in genere vengono utilizzati i tag seguenti.


| 
| 
| Tag | Description | 
| --- |--- |
| BKP: automatizzato = attivo DBDump  | Identifica un'istanza DB Amazon RDS come candidata per i backup. | 
| bkp: = AutomatedBackupSecret <secret\$1name > | Identifica il segreto di Secrets Manager che contiene le credenziali di accesso di Amazon RDS. | 
| BKP: bucket S3 automatizzato = DBDump <s3\$1bucket\$1name> | Identifica il bucket S3 a cui inviare i backup. | 
| BKP: frequenza automatizzata DBDumpBKP: Tempo automatizzato DBDump | Identifica la frequenza e gli orari in cui eseguire il backup dei database.  | 
| bkp: comando pgdump = <pgdump\$1command> | Identifica i database per i quali devono essere eseguiti i backup. | 

## Epiche
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Creare una tabella di inventario in DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una tabella in DynamoDB. | Accedi alla Console di gestione AWS, apri la console Amazon DynamoDB e crea una tabella. Per assistenza su questa e altre storie, consulta la sezione *Risorse correlate*. | Amministratore del cloud, amministratore del database | 
| Conferma che la tabella è stata creata.  | Esegui il comando `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus`. Se la tabella esiste, il comando restituirà il `"TableStatus": "ACTIVE",` risultato. | Amministratore del cloud, amministratore del database | 

### Crea un argomento SNS per gli eventi di job non riusciti in AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare un argomento SNS. | Apri la console Amazon SNS, scegli **Argomenti** e crea un argomento SNS con il nome. `JobFailedAlert` Sottoscrivi un indirizzo e-mail attivo all'argomento e controlla la tua casella di posta elettronica per confermare l'e-mail di iscrizione a SNS da AWS Notifications. | Amministratore del cloud | 
| Crea una regola relativa agli eventi di lavoro non riusciti per AWS Batch.  | Apri la CloudWatch console Amazon, scegli **Eventi**, quindi scegli **Crea regola**. Scegli **Mostra opzioni avanzate** e scegli **Modifica**. Per **Crea un pattern che seleziona gli eventi da elaborare in base ai tuoi obiettivi**, sostituisci il testo esistente con il codice «Failed job event» nella sezione *Informazioni aggiuntive*. Questo codice definisce una regola CloudWatch Events che viene avviata quando AWS Batch ha un `Failed` evento. | Amministratore cloud | 
| Aggiungi l'obiettivo della regola dell'evento.  | In **Target**, scegli **Aggiungi obiettivi** e scegli l'argomento `JobFailedAlert` SNS. Configura i dettagli rimanenti e crea la regola Cloudwatch Events. | Amministratore cloud | 

### Crea un'immagine Docker e inviala a un repository Amazon ECR
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Apri la console Amazon ECR e scegli la regione AWS in cui desideri creare il tuo repository. **Scegli **Repositories**, quindi scegli Crea repository.** Configura il repository in base alle tue esigenze. | Amministratore cloud | 
| Scrivere un Dockerfile.  | Accedi a Docker e usa «Sample Dockerfile» e «Sample entrypoint.sh file» dalla sezione *Informazioni aggiuntive* per creare un Dockerfile. | DevOps ingegnere | 
| Crea un'immagine Docker e inviala al repository Amazon ECR. | Crea il Dockerfile in un'immagine Docker e invialo al repository Amazon ECR. *Per informazioni su questa storia, consulta la sezione Risorse correlate.* | DevOps ingegnere | 

### Crea i componenti AWS Batch
<a name="create-the-aws-batch-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una definizione di processo AWS Batch. | Apri la console AWS Batch e crea una definizione di processo che includa l'URI (Uniform Resource Identifier) del repository Amazon ECR come proprietà. `Image` | Amministratore cloud | 
| Configura la coda dei job di AWS Batch.  | Nella console AWS Batch, scegli **Job queues**, quindi scegli **Create queue**. Crea una coda di lavoro che memorizzerà i lavori fino a quando AWS Batch non li eseguirà sulle risorse all'interno del tuo ambiente di calcolo. Importante: assicurati di scrivere la logica per AWS Batch per registrare i dettagli del backup nella tabella di inventario di DynamoDB. | Amministratore cloud | 

### Creare e pianificare una funzione Lambda
<a name="create-and-schedule-a-lambda-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una funzione Lambda per cercare i tag. | Crea una funzione Lambda che cerca i tag nelle tue istanze DB PostgreSQL e identifica i candidati al backup. Assicurati che la tua funzione Lambda sia in grado di identificare il `bkp:AutomatedDBDump = Active` tag e tutti gli altri tag richiesti. Importante: la funzione Lambda deve anche essere in grado di aggiungere lavori alla coda di lavori di AWS Batch. | DevOps ingegnere | 
| Crea un evento CloudWatch Events basato sul tempo.  | Apri la CloudWatch console Amazon e crea un evento CloudWatch Events che utilizzi un'espressione cron per eseguire la funzione Lambda a intervalli regolari. Importante: tutti gli eventi pianificati utilizzano il fuso orario UTC. | Amministratore cloud | 

### Prova l'automazione del backup
<a name="test-the-backup-automation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una chiave Amazon KMS. | Apri la console Amazon KMS e crea una chiave KMS che può essere utilizzata per crittografare le credenziali Amazon RDS archiviate in AWS Secrets Manager. | Amministratore cloud | 
| Crea un segreto di AWS Secrets Manager. | Apri la console AWS Secrets Manager e archivia le credenziali del database Amazon RDS for PostgreSQL come segreto. | Amministratore cloud | 
| Aggiungi i tag richiesti alle istanze DB PostgreSQL. | Apri la console Amazon RDS e aggiungi tag alle istanze DB PostgreSQL di cui desideri eseguire il backup automatico. *Puoi utilizzare i tag della tabella nella sezione Strumenti.* Se hai bisogno di backup da più database PostgreSQL all'interno della stessa istanza Amazon RDS, usali come valore per `-d test:-d test1` il tag. `bkp:pgdumpcommand` `test`e sono nomi di database. `test1` Assicurati che non ci sia spazio dopo i due punti (:). | Amministratore cloud | 
| Verifica l'automazione del backup.  | Per verificare l'automazione del backup, puoi richiamare la funzione Lambda o attendere l'inizio della pianificazione del backup. Una volta completato il processo di backup, verifica che la tabella di inventario di DynamoDB contenga una voce di backup valida per le tue istanze DB PostgreSQL. Se corrispondono, il processo di automazione del backup ha esito positivo. | Amministratore cloud | 

## Risorse correlate
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Creare una tabella di inventario in DynamoDB**
+ [Creare una tabella Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Crea un argomento SNS per gli eventi di job non riusciti in AWS Batch**
+ [Crea un argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Invia avvisi SNS per eventi di lavoro non riusciti in AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Crea un'immagine Docker e inviala a un repository Amazon ECR**
+ [Crea un repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Scrivi un Dockerfile, crea un'immagine Docker e inviala ad Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Crea i componenti AWS Batch**
+ [Crea una definizione di processo AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Configura il tuo ambiente di calcolo e la coda di lavoro di AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Crea una coda di lavoro in AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Creare una funzione Lambda**
+ [Crea una funzione Lambda e scrivi codice](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Usare Lambda con DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Crea un evento Events CloudWatch **
+ [Crea un CloudWatch evento Events basato sul tempo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Usa le espressioni cron in Cloudwatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Prova l'automazione del backup**
+ [Crea una chiave Amazon KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Crea un segreto di Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Aggiungere tag a un'istanza Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Informazioni aggiuntive
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Evento di processo non riuscito:**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Dockerfile di esempio:**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**File entrypoint.sh di esempio:**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Automatizza la distribuzione di Node Termination Handler in Amazon EKS utilizzando una pipeline CI/CD
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh e John Vargas, Amazon Web Services*

## Riepilogo
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

**Avviso**: AWS non CodeCommit è 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/)

Sul cloud Amazon Web Services (AWS), puoi utilizzare [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), un progetto open source, per gestire senza problemi l'arresto delle istanze Amazon Elastic Compute Cloud (Amazon EC2) all'interno di Kubernetes. AWS Node Termination Handler aiuta a garantire che il piano di controllo di Kubernetes risponda in modo appropriato agli eventi che possono rendere l'istanza non disponibile. EC2 Tali eventi includono quanto segue:
+ [EC2 manutenzione programmata dell'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Interruzioni delle istanze Amazon EC2 Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [Auto Scaling, ridimensionamento del gruppo in](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Ribilanciamento del gruppo Auto Scaling tra le zone di disponibilità](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage)
+ EC2 terminazione dell'istanza tramite l'API o la Console di gestione AWS

Se un evento non viene gestito, il codice dell'applicazione potrebbe non interrompersi correttamente. Inoltre, potrebbe essere necessario più tempo per ripristinare la piena disponibilità o programmare accidentalmente il lavoro sui nodi che non funzionano. `aws-node-termination-handler`(NTH) può funzionare in due diverse modalità: Instance Metadata Service (IMDS) o Queue Processor. [Per ulteriori informazioni sulle due modalità, consultate il file Readme.](https://github.com/aws/aws-node-termination-handler#readme)

Questo modello utilizza AWS CodeCommit e automatizza la distribuzione di NTH utilizzando Queue Processor attraverso una pipeline di integrazione e distribuzione continue (CI/CD).

**Nota**  
Se utilizzi [gruppi di nodi gestiti da EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), non hai bisogno di. `aws-node-termination-handler`

## Prerequisiti e limitazioni
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un browser Web supportato per l'uso con la Console di gestione AWS. Consulta l'[elenco dei browser supportati](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).
+ AWS Cloud Development Kit (AWS CDK) [installato](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
+ `kubectl`[, lo strumento da riga di comando Kubernetes, installato.](https://kubernetes.io/docs/tasks/tools/)
+ `eksctl`[, l'AWS Command Line Interface (AWS CLI) per Amazon Elastic Kubernetes Service (Amazon EKS), installata.](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+ Un cluster EKS in esecuzione con versione 1.20 o successiva.
+ Un gruppo di nodi autogestito collegato al cluster EKS. Per creare un cluster Amazon EKS con un gruppo di nodi autogestito, esegui il comando seguente.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Per ulteriori informazioni su`eksctl`, consulta la documentazione di [eksctl](https://eksctl.io/usage/creating-and-managing-clusters/).
+ Provider AWS Identity and Access Management (IAM) OpenID Connect (OIDC) per il tuo cluster. Per ulteriori informazioni, consulta [Creazione di un provider IAM OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) per il cluster.

**Limitazioni**
+ È necessario utilizzare una regione AWS che supporti il servizio Amazon EKS.

**Versioni del prodotto**
+ Kubernetes versione 1.20 o successiva
+ `eksctl`versione 0.107.0 o successiva
+ AWS CDK versione 2.27.0 o successiva

## Architecture
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Stack tecnologico Target**
+ Un cloud privato virtuale (VPC)
+ Un cluster EKS
+ Amazon Simple Queue Service (Amazon SQS)
+ IAM
+ Kubernetes

**Architettura Target******

Il diagramma seguente mostra la visualizzazione di alto livello dei end-to-end passaggi quando viene avviata la terminazione del nodo.

![\[Un VPC con un gruppo Auto Scaling, un cluster EKS con Node Termination Handler e una coda SQS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


Il flusso di lavoro mostrato nel diagramma è costituito dai seguenti passaggi di alto livello:

1. L'evento di terminazione dell' EC2 istanza di ridimensionamento automatico viene inviato alla coda SQS.

1. L'NTH Pod monitora la presenza di nuovi messaggi nella coda SQS.

1. L'NTH Pod riceve il nuovo messaggio ed esegue le seguenti operazioni:
   + Collega il nodo in modo che il nuovo pod non venga eseguito sul nodo.
   + Drena il nodo, in modo che il pod esistente venga evacuato
   + Invia un segnale hook del ciclo di vita al gruppo Auto Scaling in modo che il nodo possa essere terminato.

**Automazione e scalabilità**
+ Il codice è gestito e distribuito da AWS CDK, supportato da AWS CloudFormation nested stacks.
+ Il [piano di controllo di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) funziona su più zone di disponibilità per garantire un'elevata disponibilità.
+ [Per la [scalabilità automatica](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html), Amazon EKS supporta Kubernetes [Cluster](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) Autoscaler e Karpenter.](https://karpenter.sh/)

## Tools (Strumenti)
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-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 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.
+ [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 EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) ti aiuta a mantenere la disponibilità delle applicazioni e ti consente di aggiungere o rimuovere automaticamente EC2 istanze Amazon in base alle condizioni da te definite.
+ [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.

**Altri strumenti**
+ [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/) è uno strumento da riga di comando di Kubernetes per eseguire comandi su cluster Kubernetes. Puoi usare kubectl per distribuire applicazioni, ispezionare e gestire le risorse del cluster e visualizzare i log.

**Codice**

Il codice per questo pattern è disponibile nel repository su .com. [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks) GitHub Il repository di codice contiene i seguenti file e cartelle.
+ `nth folder`— Il grafico Helm, i file di valori e gli script per scansionare e distribuire il CloudFormation modello AWS per Node Termination Handler.
+ `config/config.json`— Il file dei parametri di configurazione per l'applicazione. Questo file contiene tutti i parametri necessari per la distribuzione di CDK.
+ `cdk`— Codice sorgente di AWS CDK.
+ `setup.sh`— Lo script utilizzato per distribuire l'applicazione AWS CDK per creare la CI/CD pipeline richiesta e altre risorse richieste.
+ `uninstall.sh`— Lo script utilizzato per ripulire le risorse.

Per utilizzare il codice di esempio, segui le istruzioni nella sezione *Epics*.

## Best practice
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Per le best practice per l'automazione di AWS Node Termination Handler, consulta quanto segue:
+ [Guide alle migliori pratiche EKS](https://aws.github.io/aws-eks-best-practices/)
+ [Node Termination Handler - Configurazione](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Epiche
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository. | Per clonare il repository utilizzando SSH (Secure Shell), esegui il seguente comando.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Per clonare il repository utilizzando HTTPS, esegui il comando seguente.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>La clonazione del repository crea una cartella denominata. `deploy-nth-to-eks`Passa a quella directory.<pre>cd deploy-nth-to-eks</pre> | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 
| Imposta il file kubeconfig. | Imposta le tue credenziali AWS nel tuo terminale e conferma di avere i diritti per assumere il ruolo di cluster. Puoi usare il seguente codice di esempio.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps ingegnere, sviluppatore di app | 

### Implementa la pipeline CI/CD
<a name="deploy-the-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Imposta i parametri. | Nel `config/config.json` file, impostate i seguenti parametri obbligatori.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 
| Crea la CI/CD pipeline per distribuire NTH. | Esegui lo script setup.sh.<pre>./setup.sh</pre>Lo script distribuirà l'applicazione AWS CDK che creerà il CodeCommit repository con codice di esempio, la pipeline e i CodeBuild progetti in base ai parametri di input dell'utente nel file. `config/config.json`Questo script richiederà la password mentre installa i pacchetti npm con il comando sudo. | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 
| Esamina la CI/CD pipeline. | Apri la Console di gestione AWS ed esamina le seguenti risorse create nello stack.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Dopo il corretto funzionamento della pipeline, la versione Helm `aws-node-termination-handler` viene installata nel cluster EKS. Inoltre, un Pod denominato `aws-node-termination-handler` è in esecuzione nello spazio dei `kube-system` nomi del cluster. | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 

### Prova l'implementazione di NTH
<a name="test-nth-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Simula un evento di scalabilità in gruppo Auto Scaling. | Per simulare un evento di scalabilità automatica, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Esamina i registri. | Durante l'evento di scale-in, l'NTH Pod collegherà e svuoterà il nodo di lavoro corrispondente (l' EC2 istanza che verrà terminata come parte dell'evento scale-in). *Per controllare i log, usa il codice nella sezione Informazioni aggiuntive.* | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci tutte le risorse AWS. | Per ripulire le risorse create da questo modello, esegui il comando seguente.<pre>./uninstall.sh</pre>Questo pulirà tutte le risorse create in questo modello eliminando lo CloudFormation stack. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il registro npm non è impostato correttamente. | Durante l'installazione di questa soluzione, lo script installa npm install per scaricare tutti i pacchetti richiesti. Se durante l'installazione viene visualizzato un messaggio che dice «Impossibile trovare il modulo», il registro npm potrebbe non essere impostato correttamente. Per visualizzare l'impostazione corrente del registro, esegui il comando seguente.<pre>npm config get registry</pre>Per impostare il registro con`https://registry.npmjs.org/`, esegui il comando seguente.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Ritarda il recapito dei messaggi SQS. | Come parte della risoluzione dei problemi, se desideri ritardare la consegna dei messaggi SQS a NTH Pod, puoi modificare il parametro del ritardo di consegna di SQS. Per ulteriori informazioni, consulta le code di [ritardo di Amazon SQS.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html) | 

## Risorse correlate
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Codice sorgente di AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler)
+ [EC2 seminario](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [Kit di sviluppo AWS per il cloud](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Informazioni aggiuntive
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Trova il nome del Pod NTH.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Controllo dei log. Un registro di esempio è simile al seguente. Mostra che il nodo è stato isolato e drenato prima di inviare il segnale di completamento del ciclo di vita del gruppo Auto Scaling.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Crea e distribuisci automaticamente un'applicazione Java su Amazon EKS utilizzando una pipeline CI/CD
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen e James Radtke, Amazon Web Services*

## Riepilogo
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Questo modello descrive come creare una pipeline di integrazione e distribuzione continua (CI/CD) che crea e distribuisce automaticamente un'applicazione Java con le DevSecOps pratiche consigliate in un cluster Amazon Elastic Kubernetes Service (Amazon EKS) su. Cloud AWS Questo modello utilizza un'applicazione di saluto sviluppata con un framework Java Spring Boot e che utilizza Apache Maven.

Puoi utilizzare l'approccio di questo pattern per creare il codice per un'applicazione Java, impacchettare gli artefatti dell'applicazione come immagine Docker, eseguire la scansione di sicurezza dell'immagine e caricare l'immagine come contenitore di carichi di lavoro su Amazon EKS. L'approccio di questo pattern è utile se desideri migrare da un'architettura monolitica strettamente accoppiata a un'architettura di microservizi. L'approccio consente inoltre di monitorare e gestire l'intero ciclo di vita di un'applicazione Java, garantendo un livello di automazione più elevato e contribuendo a evitare errori o bug.

## Prerequisiti e limitazioni
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ AWS Command Line Interface (AWS CLI) versione 2, installata e configurata. Per ulteriori informazioni su questo argomento, vedere [Installazione o aggiornamento alla versione più recente di AWS CLI nella](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) AWS CLI documentazione.

  AWS CLI la versione 2 deve essere configurata con lo stesso ruolo AWS Identity and Access Management (IAM) che crea il cluster Amazon EKS, poiché solo quel ruolo è autorizzato ad aggiungere altri ruoli IAM a `aws-auth``ConfigMap`. Per informazioni e passaggi di configurazione AWS CLI, consulta [Configurazione delle impostazioni](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) nella AWS CLI documentazione.
+ Ruoli e autorizzazioni IAM con accesso completo a. AWS CloudFormation Per ulteriori informazioni su questo argomento, consulta [Controlling access with IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) nella CloudFormation documentazione.
+ Un cluster Amazon EKS esistente, con dettagli sul nome del ruolo IAM e sull'Amazon Resource Name (ARN) del ruolo IAM per i nodi di lavoro nel cluster EKS.
+ Kubernetes Cluster Autoscaler, installato e configurato nel tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Scale cluster compute with Karpenter e Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) nella documentazione di Amazon EKS. 
+ Accesso al codice nel repository. GitHub 

**Importante**  
AWS Security Hub CSPM è abilitato come parte dei CloudFormation modelli inclusi nel codice di questo modello. Per impostazione predefinita, dopo l'attivazione di Security Hub CSPM, viene fornita una prova gratuita di 30 giorni. Dopo il periodo di prova, è previsto un costo. Servizio AWS Per ulteriori informazioni sui prezzi, consulta [Prezzi di AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versioni del prodotto**
+ Helm versione 3.4.2 o successiva
+ Apache Maven versione 3.6.3 o successiva
+ BridgeCrew Checkov versione 2.2 o successiva
+ Aqua Security Trivy versione 0.37 o successiva

## Architecture
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Stack tecnologico**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notification Service (Amazon SNS)

**Architettura Target**

![\[Flusso di lavoro per la distribuzione di un'applicazione Java su Amazon EKS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Lo sviluppatore aggiorna il codice dell'applicazione Java nel ramo base del CodeCommit repository, che crea una pull request (PR).

1. Non appena il PR viene inviato, Amazon CodeGuru Reviewer esamina automaticamente il codice, lo analizza in base alle migliori pratiche per Java e fornisce consigli allo sviluppatore.

1. Dopo che il PR è stato unito al ramo base, viene creato un EventBridge evento Amazon.

1. L' EventBridge evento avvia la CodePipeline pipeline, che si avvia.

1. CodePipeline esegue la fase di CodeSecurity scansione (sicurezza continua).

1. AWS CodeBuild avvia il processo di scansione di sicurezza in cui i file Helm della distribuzione Dockerfile e Kubernetes vengono scansionati utilizzando Checkov e il codice sorgente dell'applicazione viene scansionato in base alle modifiche incrementali del codice. La scansione del codice sorgente dell'applicazione viene eseguita dal wrapper [CLI (Command Line Interface) di CodeGuru Reviewer](https://github.com/aws/aws-codeguru-cli).
**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. 

1. Se la fase di scansione di sicurezza ha esito positivo, viene avviata la fase di compilazione (integrazione continua).

1. Nella fase di compilazione, CodeBuild crea l'artefatto, lo impacchetta in un'immagine Docker, analizza l'immagine alla ricerca di vulnerabilità di sicurezza utilizzando Aqua Security Trivy e archivia l'immagine in Amazon ECR.

1. Le vulnerabilità rilevate dalla fase 8 vengono caricate su Security Hub CSPM per ulteriori analisi da parte di sviluppatori o ingegneri. Security Hub CSPM fornisce una panoramica e consigli per correggere le vulnerabilità.

1. Le notifiche e-mail delle fasi sequenziali all'interno della CodePipeline pipeline vengono inviate tramite Amazon SNS.

1. Una volta completate le fasi di integrazione continua, CodePipeline entra nella fase Deploy (distribuzione continua).

1. L'immagine Docker viene distribuita su Amazon EKS come carico di lavoro container (pod) utilizzando i grafici Helm.

1. Il pod dell'applicazione è configurato con l'agente Amazon CodeGuru Profiler, che invia i dati di profilazione dell'applicazione (CPU, utilizzo dell'heap e latenza) a CodeGuru Profiler, che aiuta gli sviluppatori a comprendere il comportamento dell'applicazione.

## Tools (Strumenti)
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-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 il loro ciclo di vita in tutte le regioni. Account 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.
+ [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.
+ [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.
+ [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/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, tra cui 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 Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fornisce una visione completa dello stato di sicurezza su. AWS Inoltre, consente di verificare la conformità AWS dell'ambiente agli standard e alle best practice del settore della sicurezza.
+ [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.

**Altri servizi**
+ [Helm](https://helm.sh/docs/) è un gestore di pacchetti open source per Kubernetes.
+ [Apache Maven](https://maven.apache.org/) è uno strumento di comprensione e gestione di progetti software.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) è uno strumento statico di analisi del codice per la scansione dei file Infrastructure as Code (IaC) alla ricerca di configurazioni errate che potrebbero portare a problemi di sicurezza o conformità.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) è uno scanner completo per le vulnerabilità nelle immagini dei container, nei file system e negli archivi Git, oltre ai problemi di configurazione.

**Codice**

Il codice per questo pattern è disponibile nel repository. GitHub [aws-codepipeline-devsecops-amazoneks](https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks)

## Best practice
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Questo modello segue le [migliori pratiche di sicurezza IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) per applicare il principio del privilegio minimo per le entità IAM in tutte le fasi della soluzione. Se desideri estendere la soluzione con strumenti aggiuntivi Servizi AWS o di terze parti, ti consigliamo di consultare la sezione sull'[applicazione delle autorizzazioni con privilegi minimi nella documentazione IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Se disponi di più applicazioni Java, ti consigliamo di creare pipeline separate CI/CD per ogni applicazione.
+ Se disponi di un'applicazione monolitica, ti consigliamo di suddividerla in microservizi, ove possibile. I microservizi sono più flessibili, semplificano la distribuzione delle applicazioni come contenitori e offrono una migliore visibilità sulla creazione e sulla distribuzione complessive dell'applicazione.

## Epiche
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il GitHub repository. | Per clonare il repository, esegui il comando seguente.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Sviluppatore di app, ingegnere DevOps  | 
| Crea un bucket S3 e carica il codice. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, amministratore del cloud, DevOps ingegnere | 
| Crea uno CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingegnere | 
| Convalida l'implementazione dello CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingegnere | 
| Eliminare il bucket S3. | Svuota ed elimina il bucket S3 che hai creato in precedenza. 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, DevOps ingegnere | 

### Configura i grafici Helm
<a name="configure-the-helm-charts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura i grafici Helm della tua applicazione Java. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingegnere | 
| Convalida i grafici Helm per errori di sintassi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingegnere | 

### Configura la CI/CD pipeline Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la CI/CD pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Attiva l'integrazione tra Security Hub CSPM e Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Attiva l'integrazione con Aqua Security. | Questo passaggio è necessario per caricare i risultati di vulnerabilità delle immagini Docker segnalati da Trivy su Security Hub CSPM. Poiché CloudFormation non supporta le integrazioni CSPM di Security Hub, questo processo deve essere eseguito manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Amministratore, DevOps ingegnere di AWS | 

### Configura CodeBuild per eseguire i comandi Helm o kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Consenti CodeBuild di eseguire comandi Helm o kubectl nel cluster Amazon EKS. |  CodeBuild Per autenticarti per utilizzare Helm o `kubectl` i comandi con il cluster Amazon EKS, devi aggiungere i ruoli IAM a. `aws-auth` `ConfigMap` In questo caso, aggiungi l'ARN del ruolo IAM`EksCodeBuildkubeRoleARN`, che è il ruolo IAM creato per consentire al CodeBuild servizio di accedere al cluster Amazon EKS e distribuire carichi di lavoro su di esso. Questa è un'attività una tantum.La seguente procedura deve essere completata prima della fase di approvazione della distribuzione. CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)`aws_auth``ConfigMap`è configurato e l'accesso è concesso.  | DevOps | 

### Convalida la pipeline CI/CD
<a name="validate-the-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verificate che la CI/CD pipeline si avvii automaticamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Per ulteriori informazioni sull'avvio della pipeline utilizzando CodePipeline, consulta [Avviare una pipeline inCodePipeline, Avviare una pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html) [manualmente e Avviare una pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) [in base a una pianificazione nella documentazione](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html). CodePipeline  | DevOps | 
| Approvare la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Convalida la profilazione dell'applicazione. | Una volta completata la distribuzione e distribuito il pod dell'applicazione in Amazon EKS, l'agente Amazon CodeGuru Profiler configurato nell'applicazione proverà a inviare i dati di profilazione dell'applicazione (CPU, riepilogo dell'heap, latenza e colli di bottiglia) a Profiler. CodeGuru Per la distribuzione iniziale di un'applicazione, CodeGuru Profiler impiega circa 15 minuti per visualizzare i dati di profilazione. | AWS DevOps | 

## Risorse correlate
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline documentazione](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Scansione di immagini con Trivy in un AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (AWS post sul blog)
+ [Miglioramento delle applicazioni Java con Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (post di AWS blog)
+ [AWS Sintassi del Security Finding Format (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Modelli di EventBridge eventi Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Aggiornamento del timone](https://helm.sh/docs/helm/helm_upgrade/)

## Informazioni aggiuntive
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru Profiler non deve essere confuso con il AWS X-Ray servizio in termini di funzionalità. Ti consigliamo di utilizzare CodeGuru Profiler per identificare le righe di codice più costose che potrebbero causare strozzature o problemi di sicurezza e risolverle prima che diventino un potenziale rischio. Il servizio X-Ray serve per il monitoraggio delle prestazioni delle applicazioni.
+ In questo modello, le regole degli eventi sono associate al bus di eventi predefinito. Se necessario, è possibile estendere il pattern per utilizzare un bus di eventi personalizzato.
+ Questo modello utilizza CodeGuru Reviewer come strumento statico di test della sicurezza delle applicazioni (SAST) per il codice dell'applicazione. Puoi utilizzare questa pipeline anche per altri strumenti, come SonarQube Checkmarx. È possibile aggiungere le istruzioni di configurazione della scansione per ognuno di questi strumenti in sostituzione delle CodeGuru istruzioni `buildspec/buildspec_secscan.yaml` di scansione.
**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.

# Copia le immagini dei container Amazon ECR su e Account AWS Regioni AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Riepilogo
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Questo modello mostra come utilizzare un approccio serverless per replicare immagini con tag da repository Amazon Elastic Container Registry (Amazon ECR) esistenti su altri e. Account AWS Regioni AWS La soluzione consente di gestire il flusso AWS Step Functions di lavoro di replica e le AWS Lambda funzioni per copiare immagini di contenitori di grandi dimensioni.

Amazon ECR utilizza funzionalità di replica native [tra regioni](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) e [account che replicano le immagini dei container tra](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) regioni e account. Tuttavia, queste funzionalità replicano le immagini solo dal momento in cui la replica viene attivata. Non esiste alcun meccanismo per replicare le immagini esistenti in diverse regioni e account. 

Questo modello aiuta i team di intelligenza artificiale (AI) a distribuire modelli, framework (ad esempio, e TensorFlow Hugging Face) e dipendenze di machine learning (ML) containerizzati ad altri account e regioni. PyTorch Questo può aiutarti a superare i limiti del servizio e ottimizzare le risorse di calcolo della GPU. Puoi anche replicare selettivamente i repository Amazon ECR da account e regioni di origine specifici. Per ulteriori informazioni, consulta la pagina [Cross-Region Replication in Amazon ECR](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/) has landed.

## Prerequisiti e limitazioni
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Prerequisiti**
+ Due o più account attivi Account AWS (almeno un account di origine e un account di destinazione)
+ Autorizzazioni appropriate AWS Identity and Access Management (IAM) in tutti gli account
+ Docker per creare l'immagine del contenitore Lambda
+ AWS Command Line Interface (AWS CLI) configurato per tutti gli account

**Limitazioni**
+ **Esclusione di immagini senza tag:** la soluzione copia solo le immagini dei contenitori con tag espliciti. Ignora le immagini senza tag che esistono con i digest. `SHA256`
+ **Vincoli di timeout di esecuzione Lambda:** AWS Lambda è limitato a un timeout di esecuzione massimo di 15 minuti, che potrebbe essere insufficiente per copiare immagini di contenitori o repository di grandi dimensioni.
+ **Gestione manuale dell'immagine del contenitore:** il codice `crane-app.py` Python richiede la ricostruzione e la ridistribuzione dell'immagine del contenitore Lambda.
+ **Capacità di elaborazione parallela limitata:** l'impostazione `MaxConcurrency` dello stato limita il numero di repository che è possibile copiare contemporaneamente. Tuttavia, puoi modificare questa impostazione nel AWS CloudFormation modello dell'account di origine. Tieni presente che valori di concorrenza più elevati possono causare il superamento dei limiti di velocità di servizio e delle quote di esecuzione Lambda a livello di account.

## Architecture
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Pila di obiettivi**

Il pattern ha quattro componenti principali:
+ **Infrastruttura dell'account di origine:** CloudFormation modello che crea i componenti di orchestrazione
+ **Infrastruttura dell'account di destinazione:** CloudFormation modello che crea ruoli di accesso tra account
+ Funzione **Lambda: funzione** basata su Python che utilizza Crane per una copia efficiente delle immagini
+ **Immagine del contenitore:** contenitore Docker che racchiude la funzione Lambda con gli strumenti richiesti

**Architettura Target**

![\[alt text not found\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Flusso di lavoro Step Functions**

La macchina a stati Step Functions orchestra quanto segue, come mostrato nel diagramma seguente:
+ `PopulateRepositoryList`**—** Scansiona i repository Amazon ECR e popola Amazon DynamoDB
+ `GetRepositoryList`**—** Recupera un elenco di repository univoco da DynamoDB
+ `DeduplicateRepositories`**—** Assicura che non vi siano elaborazioni duplicate
+ `CopyRepositories`**—** Gestisce la copia parallela dei repository
+ `NotifySuccess`/`NotifyFailure`**—** Notifiche Amazon Simple Notification Service (Amazon SNS) basate sul risultato dell'esecuzione

![\[alt text not found\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Tools (Strumenti)
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Strumenti Amazon**
+ [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 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.
+ [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.
+ [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 serverless che consente di combinare funzioni Lambda e altro Servizi AWS per creare applicazioni aziendali critiche.

**Altri strumenti**
+ [Crane](https://michaelsauter.github.io/crane/index.html) è uno strumento di orchestrazione Docker. È simile a Docker Compose ma ha funzionalità aggiuntive.
+ [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 contenitori.

**Archivio di codici**
+ Il codice per questo pattern è disponibile nel GitHub [sample-ecr-copy repository](https://github.com/aws-samples/sample-ecr-copy). È possibile utilizzare il CloudFormation modello del repository per creare le risorse sottostanti.

## Best practice
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

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="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Prepara un ambiente
<a name="prepare-your-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura AWS CLI i profili. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere dei dati, ingegnere ML | 
| Raccogli le informazioni richieste. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere dati, ingegnere ML | 
| Clonare il repository. | Clona il repository del pattern sulla tua workstation locale:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps ingegnere, ingegnere dei dati, ingegnere ML | 

### Implementa l'infrastruttura per l'account di destinazione
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida il modello. | Convalida il modello: CloudFormation <pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Implementa l'infrastruttura di destinazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Verifica l'implementazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere ML, ingegnere dati | 

### Crea e distribuisci l'immagine del contenitore Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prepara la costruzione del contenitore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Crea l'immagine del contenitore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Crea un repository e carica l'immagine. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Verifica l'immagine. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 

### Implementa l'infrastruttura dell'account di origine
<a name="deploy-the-source-account-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Preparare i parametri di distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, DevOps ingegnere, ingegnere ML | 
| Convalida il modello sorgente. | Convalida il modello sorgente: CloudFormation <pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Implementa l'infrastruttura di origine. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 
| Verifica l'implementazione e raccogli gli output. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Conferma la tua iscrizione via e-mail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingegnere dei dati, ingegnere ML, DevOps ingegnere | 

### Esegui e monitora il processo di copia
<a name="run-and-monitor-the-copy-process"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui e monitora il processo di copia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Esegui la funzione step. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Monitora i progressi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Controlla i risultati. | Attendi il completamento del processo (aggiornato ogni 30 secondi):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps ingegnere, ingegnere ML, ingegnere dati | 
| Verifica le immagini. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingegnere, ingegnere dei dati, ingegnere ML | 

## risoluzione dei problemi
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Le funzioni Step non vengono eseguite. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Risorse correlate
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Documentazione Crane](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [Cos'è Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Che cos'è AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Che cos'è Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Informazioni aggiuntive
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parametri di configurazione**


| 
| 
| Parametro | Description | Esempio | 
| --- |--- |--- |
| `SourceAccountId` |  Account AWS ID di origine | `11111111111` | 
| `DestinationAccountId` |  Account AWS ID di destinazione | `22222222222` | 
| `DestinationRegion` | Obiettivo Regione AWS | `us-east-2` | 
| `SourceRegion` | Fonte Regione AWS | `us-east-1` | 
| `NotificationEmail` | Email per le notifiche | `abc@xyz.com` | 
| `RepositoryList` | Archivi da copiare | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI dell'immagine del contenitore Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Crea una definizione di attività Amazon ECS e monta un file system su EC2 istanze utilizzando Amazon EFS
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Riepilogo
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Questo modello fornisce esempi di codice e passaggi per creare una definizione di attività Amazon Elastic Container Service (Amazon ECS) da eseguire su istanze Amazon Elastic Compute Cloud ( EC2Amazon) nel cloud Amazon Web Services (AWS), utilizzando Amazon Elastic File System (Amazon EFS) per montare un file system su tali istanze. EC2 Le attività di Amazon ECS che utilizzano Amazon EFS montano automaticamente i file system specificati nella definizione dell'attività e li rendono disponibili per i contenitori dell'attività in tutte le zone di disponibilità in una regione AWS.

Per soddisfare i tuoi requisiti di storage persistente e di storage condiviso, puoi usare Amazon ECS e Amazon EFS insieme. Ad esempio, puoi utilizzare Amazon EFS per archiviare dati utente persistenti e dati applicativi per le tue applicazioni con coppie di contenitori ECS attivi e in standby in esecuzione in diverse zone di disponibilità per un'elevata disponibilità. Puoi anche utilizzare Amazon EFS per archiviare dati condivisi a cui è possibile accedere in parallelo dai container ECS e dai carichi di lavoro distribuiti.

Per utilizzare Amazon EFS con Amazon ECS, puoi aggiungere una o più definizioni di volume a una definizione di attività. Una definizione di volume include un ID del file system Amazon EFS, un ID del punto di accesso e una configurazione per l'autorizzazione AWS Identity and Access Management (IAM) o la crittografia Transport Layer Security (TLS) in transito. È possibile utilizzare le definizioni dei contenitori all'interno delle definizioni delle attività per specificare i volumi di definizione delle attività che vengono montati durante l'esecuzione del contenitore. Quando viene eseguita un'attività che utilizza un file system Amazon EFS, Amazon ECS garantisce che il file system sia montato e disponibile per i contenitori che devono accedervi.

## Prerequisiti e limitazioni
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un cloud privato virtuale (VPC) con un endpoint o un router di rete privata virtuale (VPN)
+ (Consigliato) [Agente container Amazon ECS 1.38.0 o versione successiva](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) per la compatibilità con i punti di accesso Amazon EFS e le funzionalità di autorizzazione IAM (per ulteriori informazioni, consulta il post del blog AWS New [for Amazon EFS — IAM Authorization and Access](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/) Points).

**Limitazioni**
+ Le versioni di Amazon ECS Container Agent precedenti alla 1.35.0 non supportano i file system Amazon EFS per le attività che utilizzano il EC2 tipo di avvio.

## Architecture
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

Il diagramma seguente mostra un esempio di applicazione che utilizza Amazon ECS per creare una definizione di attività e montare un file system Amazon EFS su EC2 istanze in contenitori ECS.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Crea un file system Amazon EFS.

1. Crea una definizione di attività con un contenitore.

1. Configura le istanze del contenitore per montare il file system Amazon EFS. La definizione del task fa riferimento ai montaggi del volume, quindi l'istanza del contenitore può utilizzare il file system Amazon EFS. Le attività ECS hanno accesso allo stesso file system Amazon EFS, indipendentemente dall'istanza di contenitore su cui vengono create tali attività.

1. Crea un servizio Amazon ECS con tre istanze della definizione dell'attività.

**Stack tecnologico**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Tools (Strumenti)
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/?id=docs_gateway) — Amazon Elastic Compute Cloud (Amazon EC2) fornisce capacità di calcolo scalabile nel cloud AWS. Puoi usare Amazon EC2 per lanciare tutti o pochi server virtuali di cui hai bisogno, con scalabilità orizzontale o orizzontale.
+ [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 per l'esecuzione, l'arresto e la gestione dei 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 le tue attività e i tuoi servizi su un cluster di EC2 istanze da te gestito.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) fornisce un file system NFS elastico semplice, scalabile e completamente gestito da utilizzare con i servizi cloud AWS e le risorse locali.
+ [AWS CLI — L'](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)AWS Command Line Interface (AWS CLI) è uno strumento open source per interagire con i servizi AWS tramite comandi nella shell della riga di comando. Con una configurazione minima, puoi eseguire comandi AWS CLI che implementano funzionalità equivalenti a quelle fornite dalla Console di gestione AWS basata su browser da un prompt dei comandi.

## Epiche
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Creare un file system Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file system Amazon EFS utilizzando la Console di gestione AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Crea una definizione di attività Amazon ECS utilizzando un file system Amazon EFS o l'AWS CLI
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una definizione di attività utilizzando un file system Amazon EFS. | Crea una definizione di attività utilizzando la [nuova console Amazon ECS o la classica console](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) con le seguenti configurazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Crea una definizione di attività utilizzando la CLI di AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Risorse correlate
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Definizioni delle attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Volumi Amazon EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Allegati
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Implementa le funzioni Lambda con immagini dei container
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Riepilogo
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda supporta le immagini dei contenitori come modello di distribuzione. Questo modello mostra come distribuire le funzioni Lambda tramite immagini dei contenitori. 

Lambda è un servizio di elaborazione serverless e basato sugli eventi che puoi utilizzare per eseguire codice praticamente per qualsiasi tipo di applicazione o servizio di backend senza dover fornire o gestire server. Con il supporto di immagini container per le funzioni Lambda, ottieni i vantaggi di un massimo di 10 GB di spazio di archiviazione per gli elementi dell'applicazione e la possibilità di utilizzare strumenti familiari per lo sviluppo di immagini container.

L'esempio in questo modello utilizza Python come linguaggio di programmazione sottostante, ma è possibile utilizzare altri linguaggi, come Java, Node.js o Go. Per la fonte, prendi in considerazione un sistema basato su Git come GitHub, o Bitbucket GitLab, oppure usa Amazon Simple Storage Service (Amazon S3).

## Prerequisiti e limitazioni
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Prerequisiti**
+ Amazon Elastic Container Registry (Amazon ECR) attivato
+ Codice dell'applicazione
+ Immagini Docker con il client di interfaccia runtime e l'ultima versione di Python
+ Conoscenza pratica di Git

**Limitazioni**
+ La dimensione massima dell'immagine supportata è di 10 GB.
+ L'autonomia massima per una distribuzione di container basata su Lambda è di 15 minuti.

## Architecture
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Architettura di Target**

![\[Processo in quattro fasi per creare la funzione Lambda.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Si crea un repository Git e si esegue il commit del codice dell'applicazione nel repository.

1. Il AWS CodeBuild progetto viene attivato dal commit delle modifiche.

1. Il CodeBuild progetto crea l'immagine Docker e pubblica l'immagine creata su Amazon ECR.

1. La funzione Lambda viene creata utilizzando l'immagine in Amazon ECR.

**Automazione e scalabilità**

Questo modello può essere automatizzato utilizzando AWS CloudFormation o operazioni API da un SDK. AWS Cloud Development Kit (AWS CDK) Lambda può scalare automaticamente in base al numero di richieste e puoi ottimizzarlo utilizzando i parametri di concorrenza. Per ulteriori informazioni, consulta la documentazione di [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Tools (Strumenti)
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)AWS CloudFormationhelps configuri AWS le risorse, le fornisci in modo rapido e coerente e le gestisci per tutto il loro ciclo di vita su Account AWS e. Regioni AWS Questo modello utilizza [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), che consente di visualizzare e modificare visivamente i modelli. CloudFormation 
+ [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.
+ [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 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.

**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[GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html)](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), e [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) sono alcuni dei sistemi di controllo del codice sorgente basati su Git comunemente usati per tenere traccia delle modifiche al codice sorgente.

## Best practice
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Rendi la tua funzione il più efficiente e ridotta possibile per evitare di caricare file non necessari.
+ Cerca di avere livelli statici più in alto nell'elenco dei file Docker e posiziona i livelli che cambiano più spesso più in basso. Ciò migliora la memorizzazione nella cache, che migliora le prestazioni.
+ Il proprietario dell'immagine è responsabile dell'aggiornamento e della correzione dell'immagine. Aggiungete questa cadenza di aggiornamento ai vostri processi operativi. Per ulteriori informazioni, consulta la [documentazione relativa ad AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epiche
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Crea un progetto in CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Git. | Crea un repository Git che conterrà il codice sorgente dell'applicazione, il Dockerfile e il file. `buildspec.yaml`  | Developer | 
| Crea un progetto. CodeBuild  | Per utilizzare un CodeBuild progetto per creare l'immagine Lambda personalizzata, procedi come segue: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Developer | 
| Modifica il Dockerfile. | Il Dockerfile dovrebbe trovarsi nella directory di primo livello in cui stai sviluppando l'applicazione. Il codice Python dovrebbe trovarsi nella cartella`src`.Quando crei l'immagine, usa le immagini [ufficiali supportate da Lambda](https://gallery.ecr.aws/lambda?page=1). In caso contrario, si verificherà un errore di bootstrap che renderà più difficile il processo di compressione.Per i dettagli, consulta la sezione [Informazioni aggiuntive](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Crea un repository in Amazon ECR. | Crea un repository di contenitori in Amazon ECR. Nel seguente comando di esempio, il nome del repository creato è: `cf-demo`<pre>aws ecr create-repository --cf-demo </pre>Il repository verrà referenziato nel file. `buildspec.yaml` | Amministratore AWS, sviluppatore | 
| Invia l'immagine ad Amazon ECR. | È possibile utilizzare CodeBuild per eseguire il processo di creazione dell'immagine. CodeBuild necessita dell'autorizzazione per interagire con Amazon ECR e lavorare con S3. Come parte del processo, l'immagine Docker viene creata e inserita nel registro Amazon ECR. Per i dettagli sul modello e sul codice, consulta la sezione Informazioni [aggiuntive](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Verifica che l'immagine sia nel repository. | **Per verificare che l'immagine sia presente nel repository, sulla console Amazon ECR, scegli Repositories.** L'immagine dovrebbe essere elencata, con i tag e con i risultati di un rapporto di scansione delle vulnerabilità se tale funzionalità è stata attivata nelle impostazioni di Amazon ECR.  Per ulteriori informazioni, consulta la [documentazione di AWS](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Crea la funzione Lambda per eseguire l'immagine
<a name="create-the-lambda-function-to-run-the-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione della funzione Lambda | Sulla console Lambda, scegli **Crea funzione**, quindi scegli Immagine **contenitore**. Inserisci il nome della funzione e l'URI per l'immagine che si trova nel repository Amazon ECR, quindi scegli **Crea** funzione. Per ulteriori informazioni, consulta la documentazione di [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Sviluppatore di app | 
| Prova la funzione Lambda. | **Per richiamare e testare la funzione, scegli Test.** Per ulteriori informazioni, consulta la documentazione di [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Sviluppatore di app | 

## risoluzione dei problemi
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La compilazione non ha esito positivo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Risorse correlate
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Immagini di base per Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Esempio di Docker per CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Passa credenziali temporanee](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Informazioni aggiuntive
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Modifica il Dockerfile**

Il codice seguente mostra i comandi che modifichi nel Dockerfile:

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

Nel `FROM` comando, usa il valore appropriato per la versione di Python supportata da Lambda (ad esempio,). `3.12` Questa sarà l'immagine di base disponibile nell'archivio pubblico di immagini Amazon ECR. 

Il `COPY app.py ${LAMBDA_TASK_ROOT}` comando copia il codice nella directory principale dell'attività, che verrà utilizzata dalla funzione Lambda. Questo comando utilizza la variabile di ambiente, quindi non dobbiamo preoccuparci del percorso effettivo. La funzione da eseguire viene passata come argomento al `CMD [ "app.lambda_handler" ]` comando.

Il `COPY requirements.txt` comando acquisisce le dipendenze necessarie per il codice. 

Il `RUN pip install --user -r requirements.txt` comando installa le dipendenze nella directory utente locale. 

Per creare l'immagine, esegui il comando seguente.

```
docker build -t <image name> .
```

**Aggiungi l'immagine in Amazon ECR**

Nel codice seguente, sostituiscilo `aws_account_id` con il numero di account e sostituiscilo `us-east-1` se utilizzi una regione diversa. Il `buildspec` file utilizza il numero di CodeBuild build per identificare in modo univoco le versioni delle immagini come valore del tag. Puoi modificarlo in base alle tue esigenze.

*Il codice personalizzato buildspec*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Distribuisci microservizi Java su Amazon ECS utilizzando AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson e Sandeep Bondugula, Amazon Web Services*

## Riepilogo
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Questo modello fornisce indicazioni per la distribuzione di microservizi Java containerizzati su Amazon Elastic Container Service (Amazon ECS) utilizzando AWS Fargate. Il modello non utilizza Amazon Elastic Container Registry (Amazon ECR) per la gestione dei container; le immagini Docker vengono invece estratte da un hub Docker. 

## Prerequisiti e limitazioni
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Prerequisiti**
+ Un'applicazione di microservizi Java esistente su un hub Docker
+ Un repository Docker pubblico
+ Un account AWS attivo
+ Familiarità con i servizi AWS, tra cui Amazon ECS e Fargate
+ Framework Docker, Java e Spring Boot
+ Amazon Relational Database Service (Amazon RDS) attivo e funzionante (opzionale)
+ Un cloud privato virtuale (VPC) se l'applicazione richiede Amazon RDS (opzionale)

## Architecture
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Stack tecnologico di origine**
+ Microservizi Java (ad esempio, implementati in Spring Boot) e distribuiti su Docker

**Architettura di origine**

![\[Architettura di origine per i microservizi Java distribuiti su Docker\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Stack tecnologico Target**
+ Un cluster Amazon ECS che ospita ogni microservizio utilizzando Fargate
+ Una rete VPC per ospitare il cluster Amazon ECS e i gruppi di sicurezza associati 
+ Una cluster/task definizione per ogni microservizio che attiva i contenitori utilizzando Fargate

**Architettura Target**

![\[Architettura di destinazione su microservizi Java su Amazon ECS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Tools (Strumenti)
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Strumenti**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) elimina la necessità di installare e utilizzare il proprio software di orchestrazione dei container, gestire e scalare un cluster di macchine virtuali o pianificare contenitori su tali macchine virtuali. 
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) ti aiuta a eseguire container senza dover gestire server o istanze Amazon Elastic Compute Cloud (Amazon). EC2 Viene utilizzato insieme ad Amazon Elastic Container Service (Amazon ECS).
+ [Docker](https://www.docker.com/) è una piattaforma software che consente di creare, testare e distribuire applicazioni rapidamente. Docker impacchetta il software in unità standardizzate chiamate *contenitori che contengono* tutto ciò di cui il software ha bisogno per funzionare, tra cui librerie, strumenti di sistema, codice e runtime. 

**Codice Docker**

Il seguente Dockerfile specifica la versione di Java Development Kit (JDK) utilizzata, in cui esiste il file di archivio Java (JAR), il numero di porta esposto e il punto di ingresso per l'applicazione.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Epiche
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Crea nuove definizioni di attività
<a name="create-new-task-definitions"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una definizione di attività. | L'esecuzione di un contenitore Docker in Amazon ECS richiede una definizione di attività. Apri la console Amazon ECS all'indirizzo [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/), scegli **Definizioni attività**, quindi crea una nuova definizione di attività. Per ulteriori informazioni, consulta la [documentazione di Amazon ECS.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) | Amministratore di sistema AWS, sviluppatore di app | 
| Scegli il tipo di lancio. | Scegli **Fargate** come tipo di lancio. | Amministratore di sistema AWS, sviluppatore di app | 
| Configura l'attività. | Definire un nome per l'attività e configurare l'applicazione con la quantità appropriata di memoria e CPU. | Amministratore di sistema AWS, sviluppatore di app | 
| Definisci il contenitore. | Specificate il nome del contenitore. Per l'immagine, inserisci il nome del sito Docker, il nome del repository e il nome del tag dell'immagine Docker (). `docker.io/sample-repo/sample-application:sample-tag-name` Imposta i limiti di memoria per l'applicazione e imposta le mappature delle porte (`8080, 80`) per le porte consentite. | Amministratore di sistema AWS, sviluppatore di app | 
| Crea l'attività. | Quando le configurazioni dell'attività e del contenitore sono a posto, crea l'attività. Per istruzioni dettagliate, consulta i collegamenti nella sezione *Risorse correlate*. | Amministratore di sistema AWS, sviluppatore di app | 

### Configurazione del cluster
<a name="configure-the-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea e configura un cluster. | Scegli **Solo rete** come tipo di cluster, configura il nome, quindi crea il cluster o utilizza un cluster esistente, se disponibile. Per ulteriori informazioni, consulta la [documentazione di Amazon ECS.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) | Amministratore di sistema AWS, sviluppatore di app | 

### Configura Task
<a name="configure-task"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un’attività . | All'interno del cluster, scegli **Esegui nuova attività**. | Amministratore di sistema AWS, sviluppatore di app | 
| Scegli il tipo di lancio. | Scegli **Fargate** come tipo di lancio. | Amministratore di sistema AWS, sviluppatore di app | 
| Scegli la definizione dell'attività, la revisione e la versione della piattaforma. | Scegli l'attività che desideri eseguire, la revisione della definizione dell'attività e la versione della piattaforma. | Amministratore di sistema AWS, sviluppatore di app | 
| Seleziona il cluster . | Scegli il cluster da cui desideri eseguire l'attività. | Amministratore di sistema AWS, sviluppatore di app | 
| Specificare il numero di attività. | Configura il numero di attività da eseguire. Se si avvia con due o più attività, è necessario un sistema di bilanciamento del carico per distribuire il traffico tra le attività. | Amministratore di sistema AWS, sviluppatore di app | 
| Specificare il gruppo di attività. | (Facoltativo) Specificate il nome di un gruppo di attività per identificare un insieme di attività correlate come gruppo di attività. | Amministratore di sistema AWS, sviluppatore di app | 
| Configura il VPC del cluster, le sottoreti e i gruppi di sicurezza. | Configura il VPC del cluster e le sottoreti su cui desideri distribuire l'applicazione. Crea o aggiorna gruppi di sicurezza (HTTP, HTTPS e porta 8080) per fornire l'accesso alle connessioni in entrata e in uscita. | Amministratore di sistema AWS, sviluppatore di app | 
| Configura le impostazioni IP pubbliche. | Abilita o disabilita l'IP pubblico, a seconda che desideri utilizzare un indirizzo IP pubblico per le attività di Fargate. L'opzione predefinita e consigliata è **Abilitata**. | Amministratore di sistema AWS, sviluppatore di app | 
| Rivedi le impostazioni e crea l'attività | Controlla le impostazioni, quindi scegli **Esegui operazione**. | Amministratore di sistema AWS, sviluppatore di app | 

### Tagliare
<a name="cut-over"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia l'URL dell'applicazione. | Quando lo stato dell'attività è stato aggiornato a In *esecuzione*, seleziona l'attività. Nella sezione Rete, copia l'IP pubblico. | Amministratore di sistema AWS, sviluppatore di app | 
| Testa la tua applicazione. | Nel browser, inserisci l'IP pubblico per testare l'applicazione. | Amministratore di sistema AWS, sviluppatore di app | 

## Risorse correlate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ Nozioni di [base su Docker per Amazon ECS (](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)documentazione Amazon ECS)
+ [Amazon ECS su AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (documentazione Amazon ECS)
+ [Creazione di una definizione di attività](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (documentazione Amazon ECS)
+ [Creazione di un cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (documentazione Amazon ECS)
+ [Configurazione dei parametri di base del servizio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (documentazione Amazon ECS)
+ [Configurazione di una rete](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) (documentazione Amazon ECS)
+ [Implementazione di microservizi Java su Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) (post di blog)

# Distribuisci risorse e pacchetti Kubernetes utilizzando Amazon EKS e un repository di grafici Helm in Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Riepilogo
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Questo modello ti aiuta a gestire le applicazioni Kubernetes in modo efficiente, indipendentemente dalla loro complessità. Il modello integra Helm nelle pipeline esistenti di integrazione continua e distribuzione continua (CI/CD) per distribuire le applicazioni in un cluster Kubernetes. Helm è un gestore di pacchetti Kubernetes che ti aiuta a gestire le applicazioni Kubernetes. I grafici Helm aiutano a definire, installare e aggiornare applicazioni Kubernetes complesse. I grafici possono essere modificati in versioni e archiviati negli archivi Helm, il che migliora il tempo medio di ripristino (MTTR) durante le interruzioni. 

Questo modello utilizza Amazon Elastic Kubernetes Service (Amazon EKS) per il cluster Kubernetes. Utilizza Amazon Simple Storage Service (Amazon S3) come repository di grafici Helm, in modo che i grafici possano essere gestiti centralmente e accessibili dagli sviluppatori di tutta l'organizzazione.

## Prerequisiti e limitazioni
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo con un cloud privato virtuale (VPC)
+ Cluster Amazon EKS 
+ Nodi di lavoro configurati all'interno del cluster Amazon EKS e pronti a gestire carichi di lavoro
+ Kubectl per configurare il file Amazon EKS kubeconfig per il cluster di destinazione nel computer client
+ Accesso ad AWS Identity and Access Management (IAM) per creare il bucket S3
+ Accesso IAM (programmatico o di ruolo) ad Amazon S3 dal computer client
+ Gestione del codice sorgente e pipeline CI/CD 

**Limitazioni**
+ Al momento non è disponibile alcun supporto per l'aggiornamento, l'eliminazione o la gestione delle definizioni di risorse personalizzate (). CRDs
+ Se si utilizza una risorsa che fa riferimento a un CRD, il CRD deve essere installato separatamente (al di fuori del grafico).

**Versioni del prodotto**
+ Helm v3.6.3

## Architecture
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Stack tecnologico Target**
+ Amazon EKS
+ Amazon VPC
+ Simple Storage Service (Amazon S3)
+ Gestione del codice sorgente
+ Helm
+ Kubectl

**Architettura di destinazione**

![\[Client Helm e Kubectl distribuiscono un repository di grafici Helm in Amazon S3 per cluster Amazon EKS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automazione e scalabilità**
+ AWS CloudFormation può essere utilizzato per automatizzare la creazione dell'infrastruttura. Per ulteriori informazioni, consulta [Creazione di risorse Amazon EKS con AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) nella documentazione di Amazon EKS.
+ Helm deve essere incorporato nel tuo strumento di CI/CD automazione esistente per automatizzare il packaging e il controllo delle versioni dei grafici Helm (al di fuori dell'ambito di questo schema).
+ GitVersion oppure è possibile utilizzare i numeri di build Jenkins per automatizzare il controllo delle versioni dei grafici.

## Tools (Strumenti)
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Strumenti**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) — Amazon Elastic Kubernetes Service (Amazon EKS) è un servizio gestito per eseguire Kubernetes su AWS senza dover installare o mantenere il proprio piano di controllo Kubernetes. Kubernetes è un sistema open source per automatizzare l'implementazione, il dimensionamento e la gestione di applicazioni containerizzate.
+ [Helm — Helm](https://helm.sh/docs/) è un gestore di pacchetti per Kubernetes che ti aiuta a installare e gestire applicazioni sul tuo cluster Kubernetes.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) — Amazon Simple Storage Service (Amazon S3) è uno storage per Internet. È possibile utilizzare Amazon S3 per memorizzare e recuperare qualsiasi volume di dati, in qualunque momento e da qualunque luogo tramite il Web.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) è un'utilità da riga di comando per l'esecuzione di comandi su cluster Kubernetes.

**Codice**

Il codice di esempio è allegato.

## Epiche
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Configura e inizializza Helm
<a name="configure-and-initialize-helm"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa il client Helm. | Per scaricare e installare il client Helm sul sistema locale, utilizzare il seguente comando. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps ingegnere | 
| Convalida l'installazione di Helm. | Per verificare che Helm sia in grado di comunicare con il server API Kubernetes all'interno del cluster Amazon EKS, esegui. `helm version` | DevOps ingegnere | 

### Crea e installa un grafico Helm nel cluster Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un grafico Helm per NGINX. | Per creare un diagramma Helm denominato `my-nginx` sul computer client, esegui. `helm create my-nginx` | DevOps ingegnere | 
| Esamina la struttura del grafico. | Per rivedere la struttura del grafico, esegui il comando tree`tree my-nginx/`. | DevOps ingegnere | 
| Disattiva la creazione dell'account di servizio nel grafico. | Nella `serviceAccount` sezione`values.yaml`, imposta la `create` chiave su. `false` Questa opzione è disattivata perché non è necessario creare un account di servizio per questo pattern. | DevOps ingegnere | 
| Convalida (lint) il grafico modificato per eventuali errori sintattici. | Per convalidare il grafico per eventuali errori sintattici prima di installarlo nel cluster di destinazione, esegui. `helm lint my-nginx/` | DevOps ingegnere | 
| Installa il grafico per distribuire le risorse Kubernetes. | Per eseguire l'installazione di Helm chart, usa il comando seguente. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>Il `debug` flag opzionale emette tutti i messaggi di debug durante l'installazione. Il `namespace` flag specifica lo spazio dei nomi in cui verranno create le risorse che fanno parte di questo grafico. | DevOps ingegnere | 
| Esamina le risorse nel cluster Amazon EKS. | Per esaminare le risorse che sono state create come parte del grafico Helm nel `helm-space` namespace, usa il comando seguente. <pre>kubectl get all -n helm-space</pre> | DevOps ingegnere | 

### Torna a una versione precedente di un'applicazione Kubernetes
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica e aggiorna la versione. | Per modificare il grafico, in`values.yaml`, modifica il `replicaCount` valore in`2`. Quindi aggiorna la versione già installata eseguendo il comando seguente.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps ingegnere | 
| Consulta la cronologia della versione di Helm. | Per elencare tutte le revisioni di una versione specifica che sono state installate utilizzando Helm, esegui il comando seguente. <pre>helm history my-nginx-release</pre> | DevOps ingegnere | 
| Esamina i dettagli per una revisione specifica. | Prima di passare o ripristinare una versione funzionante e per un ulteriore livello di convalida prima di installare una revisione, visualizza quali valori sono stati passati a ciascuna delle revisioni utilizzando il comando seguente.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps ingegnere | 
| Torna a una versione precedente. | Per tornare a una revisione precedente, usa il seguente comando. <pre>helm rollback my-nginx-release 1 </pre>In questo esempio viene eseguito il rollback alla revisione numero 1. | DevOps ingegnere | 

### Inizializza un bucket S3 come repository Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un bucket S3 per i grafici Helm. | Crea un bucket S3 unico. Nel bucket, crea una cartella chiamata. `charts` L'esempio di questo modello utilizza `s3://my-helm-charts/charts` come archivio grafico di destinazione. | Amministratore cloud | 
| Installa il plug-in Helm per Amazon S3. | Per installare il plugin helm-s3 sul tuo computer client, usa il seguente comando. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Nota: il supporto per Helm V3 è disponibile con la versione del plugin 0.9.0 e successive. | DevOps ingegnere | 
| Inizializza il repository Amazon S3 Helm.  | Per inizializzare la cartella di destinazione come repository Helm, usa il seguente comando. <pre>helm S3 init s3://my-helm-charts/charts </pre>Il comando crea un `index.yaml` file nella destinazione per tenere traccia di tutte le informazioni del grafico archiviate in quella posizione. | DevOps ingegnere | 
| Aggiungi il repository Amazon S3 a Helm. | Per aggiungere il repository nel computer client, usa il seguente comando.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Questo comando aggiunge un alias al repository di destinazione nel computer client Helm. | DevOps ingegnere | 
| Controlla l'elenco dei repository. | Per visualizzare l'elenco dei repository nel computer client Helm, esegui. `helm repo list` | DevOps ingegnere | 

### Package e memorizza i grafici nel repository Amazon S3 Helm
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione pacchetto del grafico. | Per impacchettare il `my-nginx` grafico che hai creato, esegui`helm package ./my-nginx/`. Il comando racchiude tutto il contenuto della cartella del `my-nginx` grafico in un file di archivio, denominato utilizzando il numero di versione indicato nel `Chart.yaml` file. | DevOps ingegnere | 
| Archivia il pacchetto nel repository Amazon S3 Helm. | Per caricare il pacchetto nel repository Helm in Amazon S3, esegui il comando seguente, utilizzando il nome corretto del file. `.tgz`<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps ingegnere | 
| Cerca la carta Helm. | Per confermare che il grafico sia visualizzato sia localmente che nel repository Helm in Amazon S3, esegui il comando seguente.<pre>helm search repo my-nginx</pre> | DevOps ingegnere | 

### Modifica, versione e impacchetta un grafico
<a name="modify-version-and-package-a-chart"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica e impacchetta il grafico. | In`values.yaml`, imposta il `replicaCount` valore su`1`. Quindi impacchetta il grafico eseguendolo`helm package ./my-nginx/`, questa volta cambiando la versione `Chart.yaml` in`0.1.1`. Il controllo delle versioni viene idealmente aggiornato tramite l'automazione utilizzando strumenti come Jenkins GitVersion o Jenkins build Numbers in una CI/CD pipeline. L'automazione del numero di versione non rientra nell'ambito di questo schema. | DevOps ingegnere | 
| Invia la nuova versione al repository Helm in Amazon S3. | Per inviare il nuovo pacchetto con la versione 0.1.1 al repository `my-helm-charts` Helm in Amazon S3, esegui il comando seguente.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps ingegnere | 

### Cerca e installa un grafico dal repository Amazon S3 Helm
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Cerca tutte le versioni del grafico my-nginx. | Per visualizzare tutte le versioni disponibili di un grafico, esegui il seguente comando con il flag. `--versions`<pre>helm search repo my-nginx --versions</pre>Senza il flag, per impostazione predefinita Helm visualizza l'ultima versione caricata di un grafico. | DevOps ingegnere | 
| Installa un grafico dal repository Amazon S3 Helm. | I risultati della ricerca dell'attività precedente mostrano le diverse versioni del grafico. `my-nginx` Per installare la nuova versione (0.1.1) dal repository Amazon S3 Helm, usa il seguente comando.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps ingegnere | 

## Risorse correlate
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [documentazione HELM](https://helm.sh/docs/)
+ [plugin helm-s3 (licenza MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [File binario del client HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Documentazione Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Allegati
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Implementa un cluster CockroachDB in Amazon EKS utilizzando Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay e Kalyan Senthilnathan, Amazon Web Services*

## Riepilogo
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Questo modello fornisce un modulo HashiCorp Terraform per la distribuzione di un cluster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) multinodo su Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando l'operatore CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) CockroachDB è un database SQL distribuito che fornisce sharding orizzontale automatico, alta disponibilità e prestazioni coerenti in cluster distribuiti geograficamente. Questo modello utilizza Amazon EKS come piattaforma Kubernetes gestita e implementa [cert-manager](https://cert-manager.io/docs/) per comunicazioni tra nodi protette da TLS. Utilizza anche un [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) per la distribuzione del traffico e crea CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)con pod che replicano automaticamente i dati per la tolleranza ai guasti e le prestazioni.

**Destinatari**

Per implementare questo modello, ti consigliamo di conoscere quanto segue:
+ HashiCorp Concetti e pratiche di Terraform Infrastructure as Code (IaC)
+ Servizi AWS, in particolare Amazon EKS
+ Nozioni di base su Kubernetes, tra cui operatori e configurazioni dei StatefulSets servizi
+ Database SQL distribuiti
+ Concetti di sicurezza, come la gestione dei certificati TLS.
+ DevOps pratiche, CI/CD flussi di lavoro e automazione dell'infrastruttura

## Prerequisiti e limitazioni
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Autorizzazioni per distribuire risorse in un cluster Amazon EKS
+ Un cluster Amazon EKS versione 1.23 o successiva, con nodi etichettati `node=cockroachdb`
+ [Driver Amazon Elastic Block Store Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) versione 1.19.0 o successiva, installato nel cluster Amazon EKS
+ [Terraform CLI versione 1.0.0 o successiva, installata](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), installato
+ Git, [installato](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) versione 2.9.18 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)

**Limitazioni**
+ L'operatore CockroachDB Kubernetes non supporta più cluster Kubernetes per implementazioni multiregionali. [Per ulteriori limitazioni, consulta [Orchestrate CockroachDB su più cluster Kubernetes (documentazione CockroachDB) e CockroachDB](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) Kubernetes Operator ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ L'eliminazione automatica delle dichiarazioni di PVCs volume persistenti () è attualmente disabilitata per impostazione predefinita. Ciò significa che dopo la disattivazione e la rimozione di un nodo, l'operatore non rimuoverà il volume persistente che era montato sul relativo pod. Per ulteriori informazioni, consulta [Potatura automatica del PVC](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) nella documentazione di CockroachDB.

**Versioni del prodotto**
+ CockroachDB versione 22.2.2

## Architecture
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Architettura Target**

Il diagramma seguente mostra un'implementazione di CockroachDB ad alta disponibilità in tre zone di AWS disponibilità all'interno di un cloud privato virtuale (VPC). I pod CockroachDB sono gestiti tramite Amazon EKS. L'architettura illustra come gli utenti accedono al database tramite un Network Load Balancer, che distribuisce il traffico ai pod CockroachDB. I pod vengono eseguiti su istanze Amazon Elastic Compute Cloud EC2 (Amazon) in ogni zona di disponibilità, il che offre resilienza e tolleranza agli errori.

![\[Una distribuzione CockroachDB ad alta disponibilità su tre zone di disponibilità AWS all'interno di un VPC.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Risorse create**

L'implementazione del modulo Terraform utilizzato in questo modello crea le seguenti risorse:

1. **Network Load Balancer**: questa risorsa funge da punto di ingresso per le richieste dei client e distribuisce uniformemente il traffico tra le istanze CockroachDB.

1. **CockroachDB StatefulSet**: StatefulSet definisce lo stato desiderato della distribuzione di CockroachDB all'interno del cluster Amazon EKS. Gestisce la distribuzione ordinata, il ridimensionamento e gli aggiornamenti dei pod CockroachDB.

1. Pods **CockroachDB: questi pod** sono istanze di CockroachDB in esecuzione come contenitori all'interno dei pod Kubernetes. Questi pod archiviano e gestiscono i dati in tutto il cluster distribuito.

1. Database **CockroachDB: questo è il database** distribuito gestito da CockroachDB, che si estende su più pod. Replica i dati per garantire disponibilità, tolleranza agli errori e prestazioni elevate.

## Tools (Strumenti)
<a name="deploy-cockroachdb-on-eks-using-terraform-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/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.

**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.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) è un'interfaccia a riga di comando che ti aiuta a eseguire comandi sui cluster Kubernetes.

**Archivio di codice**

Il codice per questo pattern è disponibile nel [cluster GitHub Deploy a CockroachDB in Amazon EKS](https://github.com/aws-samples/crdb-cluster-eks-terraform) utilizzando il repository Terraform. L'archivio di codice contiene i seguenti file e cartelle per Terraform:
+ `modules`folder — Questa cartella contiene il modulo Terraform per CockroachDB
+ `main`folder: questa cartella contiene il modulo root che chiama il modulo secondario CockroachDB per creare il cluster di database CockroachDB.

## Best practice
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Non ridimensionare a meno di tre nodi. Questo è considerato un anti-pattern su CockroachDB e può causare errori. Per ulteriori informazioni, consulta [Cluster Scaling](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) nella documentazione di CockroachDB.
+ Implementa la scalabilità automatica di Amazon EKS utilizzando Karpernter o Cluster Autoscaler. Ciò consente al cluster CockroachDB di scalare orizzontalmente e di aggiungere nuovi nodi automaticamente. Per ulteriori informazioni, consulta [Scale cluster compute with Karpenter e Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) nella documentazione di Amazon EKS.
**Nota**  
Grazie alla regola di pianificazione `podAntiAffinity` Kubernetes, è possibile pianificare un solo pod CockroachDB in un nodo Amazon EKS.
+ Per le best practice di sicurezza di Amazon EKS, consulta [Best Practices for Security](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) nella documentazione di Amazon EKS.
+ Per le best practice relative alle prestazioni SQL per CockroachDB, consulta [SQL Performance Best Practices](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) nella documentazione di CockroachDB.
+ Per ulteriori informazioni sulla configurazione di un backend remoto Amazon Simple Storage Service (Amazon S3) per il file di stato Terraform, consulta Amazon [S3](https://developer.hashicorp.com/terraform/language/backend/s3) nella documentazione di Terraform.

## Epiche
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del codice. | Inserisci il seguente comando per clonare il repository:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps ingegnere, Git | 
| Aggiorna le variabili Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingegnere, Terraform | 

### Implementa le risorse
<a name="deploy-the-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'infrastruttura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingegnere, Terraform | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica la creazione di risorse. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingegnere | 
| (Facoltativo) Scalabilità verso l'alto o verso il basso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingegnere, Terraform | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare l'infrastruttura. | La scalabilità dei nodi `0` ridurrà i costi di elaborazione. Tuttavia, continueranno a essere addebitati costi per i volumi Amazon EBS persistenti creati da questo modulo. Per eliminare i costi di archiviazione, segui questi passaggi per eliminare tutti i volumi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## risoluzione dei problemi
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore durante la convalida delle credenziali del provider | Quando esegui il `destroy` comando `apply` o il comando Terraform, potresti riscontrare il seguente errore:`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`Questo errore è causato dalla scadenza del token di sicurezza per le credenziali utilizzate nella configurazione del computer locale. Per istruzioni su come 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 AWS CLI documentazione. | 
| I pod di CockroachDB sono in sospeso | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Risorse correlate
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Distribuisci CockroachDB in un singolo cluster Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentazione CockroachDB)
+ [Orchestra CockroachDB su più cluster Kubernetes (documentazione CockroachDB)](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html)
+ [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentazione Terraform)

## Allegati
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Implementa un microservizio Java di esempio su Amazon EKS ed esponi il microservizio utilizzando un Application Load Balancer
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson e Akkamahadevi Hiremath, Amazon Web Services*

## Riepilogo
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Questo modello descrive come distribuire un microservizio Java di esempio come applicazione containerizzata su Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando `eksctl` l'utilità da riga di comando e Amazon Elastic Container Registry (Amazon ECR). È possibile utilizzare un Application Load Balancer per bilanciare il carico del traffico dell'applicazione.

## Prerequisiti e limitazioni
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ La versione 1.7 o successiva dell'interfaccia a riga di comando AWS (AWS CLI), installata e configurata su macOS, Linux o Windows
+ [Un demone Docker in esecuzione](https://docs.docker.com/config/daemon/)
+ L'utilità da riga di `eksctl` comando, installata e configurata su macOS, Linux o Windows (per ulteriori informazioni, consulta la sezione [Guida introduttiva ad Amazon EKS — eksctl nella documentazione di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)).
+ L'utilità da riga di `kubectl` comando, installata e configurata su macOS, Linux o Windows (per ulteriori informazioni, consulta [Installazione o aggiornamento di kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) nella documentazione di Amazon EKS).

**Limitazioni**
+ Questo modello non copre l'installazione di un certificato SSL per Application Load Balancer.

## Architecture
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Stack tecnologico Target**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Architettura di destinazione**

Il diagramma seguente mostra un'architettura per la containerizzazione di un microservizio Java su Amazon EKS.

![\[Un microservizio Java distribuito come applicazione containerizzata su Amazon EKS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Tools (Strumenti)
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [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/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.
+ [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.
+ [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, come istanze Amazon Elastic Compute Cloud ( EC2Amazon), contenitori e indirizzi IP, in una o più zone di disponibilità.
+ [eksctl](https://eksctl.io/) ti aiuta a creare cluster su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) consente di eseguire comandi contro i cluster Kubernetes.
+ [Docker](https://www.docker.com/) ti aiuta a creare, testare e distribuire applicazioni in pacchetti chiamati contenitori.

## Epiche
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Crea un cluster Amazon EKS utilizzando eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster Amazon EKS.  | Per creare un cluster Amazon EKS che utilizza due EC2 istanze Amazon t2.small come nodi, esegui il seguente comando:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Il processo può richiedere dai 15 ai 20 minuti. [Dopo la creazione del cluster, la configurazione Kubernetes appropriata viene aggiunta al file kubeconfig.](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) Puoi utilizzare il `kubeconfig` file con per distribuire l'applicazione nei `kubectl`**** passaggi successivi. | Sviluppatore, amministratore di sistema | 
| Verifica il cluster Amazon EKS. | Per verificare che il cluster sia stato creato e che tu possa connetterti ad esso, esegui il `kubectl get nodes` comando. | Sviluppatore, amministratore di sistema | 

### Crea un repository Amazon ECR e invia l'immagine Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Segui le istruzioni riportate nella sezione [Creazione di un repository privato](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) nella documentazione di Amazon ECR. | Sviluppatore, amministratore di sistema | 
| Crea un file XML POM. | Crea un `pom.xml` file basato sul codice del *file POM di esempio* nella sezione [Informazioni aggiuntive](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) di questo modello. | Sviluppatore, amministratore di sistema | 
| Crea un file sorgente. | Crea un file sorgente chiamato `HelloWorld.java` nel `src/main/java/eksExample` percorso in base al seguente esempio:<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Assicuratevi di utilizzare la seguente struttura di cartelle:<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Crea un Dockerfile. | Crea un file `Dockerfile` basato sul codice *Dockerfile di esempio* nella sezione [Informazioni aggiuntive](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) di questo modello. | Sviluppatore, amministratore di sistema | 
| Crea e invia l'immagine Docker. | Nella directory in cui desideri `Dockerfile` creare, taggare e inviare l'immagine ad Amazon ECR, esegui i seguenti comandi:<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Modifica la regione AWS, il numero di account e i dettagli del repository nei comandi precedenti. Assicurati di annotare l'URL dell'immagine per un uso successivo.Un sistema macOS con un chip M1 ha problemi a creare un'immagine compatibile con Amazon EKS in esecuzione su una piattaforma. AMD64 Per risolvere questo problema, usa [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) per creare un'immagine Docker che funzioni su Amazon EKS. |  | 

### Implementa i microservizi Java
<a name="deploy-the-java-microservices"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file di distribuzione.  | Crea un file YAML chiamato in `deployment.yaml` base al codice del *file di distribuzione di esempio* nella sezione [Informazioni aggiuntive](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) di questo modello.Usa l'URL dell'immagine che hai copiato in precedenza come percorso del file di immagine per il repository Amazon ECR. | Sviluppatore, amministratore di sistema | 
| Implementa i microservizi Java sul cluster Amazon EKS.  | Per creare una distribuzione nel tuo cluster Amazon EKS, esegui il `kubectl apply -f deployment.yaml` comando. | Sviluppatore, amministratore di sistema | 
| Verifica lo stato dei pod. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Sviluppatore, amministratore di sistema | 
| Crea un servizio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Sviluppatore, amministratore di sistema | 
| Installa il componente aggiuntivo AWS Load Balancer Controller. | Segui le istruzioni contenute nell'[installazione del componente aggiuntivo AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) nella documentazione di Amazon EKS.È necessario che il componente aggiuntivo sia installato per creare un Application Load Balancer o un Network Load Balancer per un servizio Kubernetes. | Sviluppatore, amministratore di sistema | 
| Crea una risorsa di ingresso. | Crea un file YAML chiamato in `ingress.yaml` base al codice del *file di risorse di ingresso di esempio* nella sezione [Informazioni aggiuntive](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) di questo modello. | Sviluppatore, amministratore di sistema | 
| Crea un Application Load Balancer. | Per distribuire la risorsa in ingresso e creare un Application Load Balancer, esegui il comando. `kubectl apply -f ingress.yaml` | Sviluppatore, amministratore di sistema | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Testa e verifica l'applicazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Sviluppatore, amministratore di sistema | 

## Risorse correlate
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Creazione di un repository privato](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (documentazione Amazon ECR)
+ [Inviare un'immagine Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentazione Amazon ECR)
+ [Controller di ingresso (Amazon EKS](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) Workshop)
+ Compilazioni [Docker (Docker](https://docs.docker.com/engine/reference/commandline/buildx/) docs)

## Informazioni aggiuntive
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Esempio di file POM**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Esempio di Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Esempio di file di distribuzione**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**File di servizio di esempio**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Esempio di file di risorse di ingresso**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# Implementa un'applicazione basata su gRPC su un cluster Amazon EKS e accedi ad essa con un Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar e Huy Nguyen, Amazon Web Services*

## Riepilogo
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Questo modello descrive come ospitare un'applicazione basata su gRPC su un cluster Amazon Elastic Kubernetes Service (Amazon EKS) e accedervi in modo sicuro tramite un Application Load Balancer.

[gRPC](https://grpc.io/) è un framework RPC (Remote Procedure Call) open source che può essere eseguito in qualsiasi ambiente. Puoi usarlo per integrazioni di microservizi e comunicazioni client-server. Per ulteriori informazioni su gRPC, consulta il post sul blog di AWS [Application Load Balancer support per end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) e gRPC.

Questo modello mostra come ospitare un'applicazione basata su gRPC che viene eseguita su pod Kubernetes su Amazon EKS. Il client gRPC si connette a un Application Load Balancer tramite il protocollo HTTP/2 con una connessione crittografata. SSL/TLS L'Application Load Balancer inoltra il traffico all'applicazione gRPC in esecuzione sui pod Amazon EKS. Il numero di pod gRPC può essere ridimensionato automaticamente in base al traffico utilizzando [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Il gruppo target di Application Load Balancer esegue controlli di integrità sui nodi Amazon EKS, valuta se il target è integro e inoltra il traffico solo ai nodi integri.

## Prerequisiti e limitazioni
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows.
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installata e configurata su Linux, macOS o Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installato e configurato su Linux, macOS o Windows.
+ `kubectl`, installato e configurato per accedere alle risorse sul tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Installazione o aggiornamento di kubectl nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) di Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installato e configurato.
+ Un cluster Amazon EKS nuovo o esistente. Per ulteriori informazioni, consulta [Guida introduttiva ad Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Il terminale del computer è configurato per accedere al cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare il computer per comunicare con il cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) nella documentazione di Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), fornito nel cluster Amazon EKS.
+ Un nome host DNS esistente con un certificato o SSL valido. SSL/TLS Puoi ottenere un certificato per il tuo dominio utilizzando AWS Certificate Manager (ACM) o caricando un certificato esistente su ACM. Per ulteriori informazioni su queste due opzioni, consulta [Richiesta di un certificato pubblico](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) e [Importazione di certificati in AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) nella documentazione ACM.

## Architecture
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

Il diagramma seguente mostra l'architettura implementata da questo modello.

![\[Architettura per applicazioni basate su gRPC su Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Il diagramma seguente mostra un flusso di lavoro in cui SSL/TLS il traffico viene ricevuto da un client gRPC che viene trasferito a un Application Load Balancer. Il traffico viene inoltrato in testo semplice al server gRPC perché proviene da un cloud privato virtuale (VPC).

![\[Flusso di lavoro per l'invio di SSL/TLS traffico a un server gRPC\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Tools (Strumenti)
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-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 ti aiuta a interagire con i servizi AWS tramite comandi nella shell della riga di comando.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori e indirizzi IP in una o più zone di disponibilità.
+ [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/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.  

**Strumenti**
+ [eksctl](https://eksctl.io/) è un semplice strumento CLI per creare cluster su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) ti aiuta a gestire AWS Elastic Load Balancers per un cluster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) è uno strumento da riga di comando che consente di interagire con i servizi gRPC.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Epiche
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Crea e invia l'immagine Docker del server gRPC su Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Accedi alla Console di gestione AWS, apri la [console Amazon ECR](https://console.aws.amazon.com/ecr/) e crea un repository Amazon ECR. Per ulteriori informazioni, consulta [Creazione di un repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) nella documentazione di Amazon ECR. Assicurati di registrare l'URL del repository Amazon ECR.Puoi anche creare un repository Amazon ECR con AWS CLI eseguendo il seguente comando:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Amministratore cloud | 
| Creazione dell'immagine Docker.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 
| Invia l'immagine Docker ad Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 

### Implementa i manifest Kubernetes nel cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica i valori nel file manifest di Kubernetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 
| Distribuisci il file manifest di Kubernetes.  | Distribuisci il `grpc-sample.yaml` file nel cluster Amazon EKS eseguendo il seguente `kubectl` comando: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps ingegnere | 

### Crea il record DNS per l'FQDN di Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Registra il nome di dominio completo per l'Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 

### Test della soluzione
<a name="test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova il server gRPC.  | Usa g RPCurl per testare l'endpoint eseguendo il seguente comando:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>`grpc.example.com`Sostituiscilo con il tuo nome DNS. | DevOps ingegnere | 
| Prova il server gRPC utilizzando un client gRPC.  | Nel client gRPC di `helloworld_client_ssl.py` esempio, sostituisci il nome host di `grpc.example.com` con il nome host utilizzato per il server gRPC.  Il seguente esempio di codice mostra la risposta del server gRPC alla richiesta del client:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Ciò dimostra che il client può parlare con il server e che la connessione è riuscita. | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi il record DNS. | Rimuovi il record DNS che rimanda al nome di dominio completo di Application Load Balancer creato in precedenza.  | Amministratore cloud | 
| Rimuovi il sistema di bilanciamento del carico. | Sulla [console Amazon EC2](https://console.aws.amazon.com/ec2/), scegli **Load Balancers, quindi rimuovi il load balancer** creato dal controller Kubernetes per la tua risorsa in ingresso. | Amministratore cloud | 
| Elimina il cluster Amazon EKS. | Elimina il cluster Amazon EKS utilizzando`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Risorse correlate
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Bilanciamento del carico di rete su Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Gruppi target per i tuoi Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Informazioni aggiuntive
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Esempio di risorsa di ingresso:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Esempio di risorsa di implementazione:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Output di esempio**:

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Distribuisci applicazioni containerizzate in AWS IoT Greengrass V2 esecuzione come contenitore Docker
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella e Gustav Svalander, Amazon Web Services*

## Riepilogo
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, se distribuito come contenitore Docker, non supporta nativamente l'esecuzione di contenitori di applicazioni Docker. Questo modello mostra come creare un'immagine del contenitore personalizzata basata sull'ultima versione AWS IoT Greengrass V2 che abilita la funzionalità Docker-in-Docker (DiND). Con DiND, puoi eseguire applicazioni containerizzate all'interno dell'ambiente. AWS IoT Greengrass V2 

Puoi implementare questo modello come soluzione autonoma o integrarlo con piattaforme di orchestrazione dei container come Amazon ECS Anywhere. In entrambi i modelli di implementazione, mantieni la piena AWS IoT Greengrass V2 funzionalità, comprese le funzionalità di elaborazione AWS IoT SiteWise Edge, abilitando al contempo implementazioni scalabili basate su contenitori. 

## Prerequisiti e limitazioni
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Per i AWS IoT Greengrass Version 2 prerequisiti generali, vedere [Prerequisiti](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html) nella AWS IoT Greengrass Version 2 documentazione. 
+ Docker Engine, installato e configurato su Linux, macOS o Windows.
+ Docker Compose (se utilizzi l'interfaccia a riga di comando (CLI) di Docker Compose per eseguire immagini Docker).
+ Un sistema operativo Linux.
+ Un hypervisor con un server host che supporta la virtualizzazione.
+ Requisiti di sistema:
  + 2 GB di RAM (minimo)
  + 5 GB di spazio disponibile su disco (minimo)
  + Per AWS IoT SiteWise Edge, una CPU quad-core x86\$164 con 16 GB di RAM e 50 GB di spazio disponibile su disco. Per ulteriori informazioni sull'elaborazione AWS IoT SiteWise dei dati, consulta Requisiti del [pacchetto di elaborazione dati](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7) nella documentazione. AWS IoT SiteWise 

**Versioni del prodotto**
+ AWS IoT Greengrass Version 2 versione 2.5.3 o successiva
+ Docker-in-Docker versione 1.0.0 o successiva
+ Docker Compose versione 1.22 o successiva
+ Docker Engine versione 20.10.12 o successiva

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

## Architecture
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Stack tecnologico Target**
+ **Fonti di dati**: dispositivi IoT, sensori o apparecchiature industriali che generano dati per l'elaborazione
+ **AWS IoT Greengrass V2**— Funzionamento come contenitore Docker con D-in-D funzionalità, distribuito su infrastrutture periferiche
+ Applicazioni **containerizzate: applicazioni** personalizzate eseguite all'interno dell'ambiente come contenitori Docker annidati AWS IoT Greengrass V2 
+ **(Facoltativo) Amazon ECS** Anywhere: orchestrazione dei container che gestisce la distribuzione dei container AWS IoT Greengrass V2 
+ **Altro Servizi AWS** — AWS IoT Core e altro Servizi AWS per AWS IoT SiteWise l'elaborazione e la gestione dei dati

**Architettura Target**

Il diagramma seguente mostra un esempio di architettura di distribuzione di destinazione che utilizza Amazon ECS Anywhere, uno strumento di gestione dei container.

![\[Architettura di distribuzione con Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


Il diagramma mostra il flusso di lavoro seguente:

**1: Archiviazione delle immagini dei container:** Amazon ECR archivia le immagini dei AWS IoT Greengrass container e tutti i contenitori di applicazioni personalizzati necessari per l'elaborazione edge.

**2** e **3: Implementazione dei container:** Amazon ECS Anywhere distribuisce AWS IoT Greengrass l'immagine del contenitore da Amazon ECR all'edge location, gestendo il ciclo di vita del contenitore e il processo di distribuzione.

**4: Distribuzione dei componenti:** il AWS IoT Greengrass core distribuito distribuisce automaticamente i componenti pertinenti in base alla configurazione. I componenti includono AWS IoT SiteWise Edge e altri componenti necessari per l'elaborazione dei bordi all'interno dell'ambiente containerizzato.

**5: Inserimento dei dati:** dopo la configurazione completa, AWS IoT Greengrass inizia a importare dati di telemetria e sensori da varie fonti di dati IoT presso l'edge location.

**6: Elaborazione dei dati e integrazione nel cloud**: il AWS IoT Greengrass core containerizzato elabora i dati localmente utilizzando i componenti implementati (incluso Edge per i dati industriali). AWS IoT SiteWise Quindi, invia i dati elaborati ai Cloud AWS servizi per ulteriori analisi e archiviazione.

## Tools (Strumenti)
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**Servizi AWS**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) Anywhere ti aiuta a distribuire, utilizzare e gestire attività e servizi Amazon ECS sulla tua infrastruttura.
+ [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 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 IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)è un servizio cloud e runtime edge open source per l'Internet of Things (IoT) che ti aiuta a creare, implementare e gestire applicazioni IoT sui tuoi dispositivi.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)ti aiuta a raccogliere, modellare, analizzare e visualizzare i dati delle apparecchiature industriali su larga scala.

**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.
+ [Docker Compose è uno strumento per definire ed eseguire](https://docs.docker.com/compose/) applicazioni multi-contenitore.
+ [Docker Engine](https://docs.docker.com/engine/) è una tecnologia di containerizzazione open source per la creazione e la containerizzazione di applicazioni.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [AWS IoT Greengrass v2 Docker-in-Docker](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker).

## Epiche
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Costruisci l'immagine AWS IoT Greengrass V2 Docker-in-Docker
<a name="build-the-gg2-docker-in-docker-image"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona e accedi al repository. | Per clonare il repository, usa il seguente comando: `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Per accedere alla `docker` directory, utilizzate il seguente comando:`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps ingegnere, AWS DevOps | 
| Creazione dell'immagine Docker. | Per creare l'immagine Docker con la versione predefinita (più recente), esegui il seguente comando:`docker build -t x86_64/aws-iot-greengrass:latest .`Oppure, per creare l'immagine Docker con una versione specifica, esegui il seguente comando:`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Per verificare la build, esegui il comando seguente:`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps ingegnere, sviluppatore di app | 
| (Facoltativo) Invia ad Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Sviluppatore di app, AWS DevOps, DevOps ingegnere | 

### Configura le AWS credenziali
<a name="configure-aws-credentials"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Seleziona il metodo di autenticazione. | Scegli una delle seguenti opzioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Amministratore AWS | 
| Configura il metodo di autenticazione. | Per il metodo di autenticazione selezionato, utilizza la seguente guida alla configurazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Amministratore AWS | 

### Esegui con Docker Compose
<a name="run-with-docker-compose"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare `docker-compose.yml`. | Aggiorna il `docker-compose.yml` file con le variabili di ambiente come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingegnere | 
| Avvia e verifica il contenitore. | Per iniziare in primo piano, esegui il seguente comando:`docker-compose up --build`Oppure, per iniziare in background, esegui il seguente comando:`docker-compose up --build -d`Per verificare lo stato, esegui il comando seguente:`docker-compose ps`Per monitorare i log, esegui il comando seguente:`docker-compose logs -f` | DevOps ingegnere | 

### Esegui con Docker CLI
<a name="run-with-docker-cli"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il contenitore con la CLI Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingegnere | 
| Verifica il contenitore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingegnere | 

### Gestisci applicazioni containerizzate
<a name="manage-containerized-applications"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci applicazioni. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Sviluppatore di app | 
| Accesso e test Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingegnere | 

### (Opzionale) Integrazione con Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il cluster Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Amministratore AWS | 
| Implementa attività Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Amministratore AWS | 

### Interrompi e pulisci
<a name="stop-and-cleanup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Fermare il contenitore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il contenitore non si avvia con errori di autorizzazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`concede privilegi estesi al contenitore. | 
| Il provisioning fallisce a causa di errori nelle credenziali. | Per verificare che le credenziali siano configurate correttamente, attenersi alla seguente procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Assicurati che le autorizzazioni IAM includano`iot:CreateThing`,`iot:CreatePolicy`, `iot:AttachPolicy``iam:CreateRole`, e. `iam:AttachRolePolicy` | 
| Impossibile connettersi al demone Docker all'interno del contenitore. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Il contenitore esaurisce lo spazio su disco. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Garantire uno spazio minimo su disco: 5 GB per le operazioni di base e 50 GB per Edge AWS IoT SiteWise  | 
| Crea problemi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Problemi di connettività di rete. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verificate che il firewall consenta il traffico HTTPS (443) e MQTT (8883) in uscita. | 
| I componenti Greengrass non vengono distribuiti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Controlla i log specifici dei componenti nella directory. `/greengrass/v2/logs/` | 
| Il contenitore esce immediatamente dopo l'avvio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifica che tutte le variabili di ambiente richieste siano impostate correttamente se. `PROVISION=true` Assicurati che il `--init` flag sia usato all'avvio del contenitore. | 

## Risorse correlate
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS resources**
+ [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
+ [Configura l'elaborazione dei dati edge per AWS IoT SiteWise modelli e asset](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [Che cos'è AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Altre risorse**
+ [Documentazione Docker](https://docs.docker.com/)

## Informazioni aggiuntive
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Per l'elaborazione dei dati AWS IoT SiteWise Edge, Docker deve essere disponibile all'interno dell' AWS IoT Greengrass ambiente.
+ Per eseguire un contenitore annidato, è necessario eseguire il AWS IoT Greengrass contenitore con credenziali di amministratore.

# Distribuisci contenitori utilizzando Elastic Beanstalk
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott e Jean-Baptiste Guillois, Amazon Web Services*

## Riepilogo
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

Sul cloud Amazon Web Services (AWS), AWS Elastic Beanstalk supporta Docker come piattaforma disponibile, in modo che i contenitori possano essere eseguiti con l'ambiente creato. Questo modello mostra come distribuire contenitori utilizzando il servizio Elastic Beanstalk. L'implementazione di questo modello utilizzerà l'ambiente del server Web basato sulla piattaforma Docker.

Per utilizzare Elastic Beanstalk per distribuire e scalare applicazioni e servizi Web, devi caricare il codice e la distribuzione viene gestita automaticamente. Sono inclusi anche il provisioning della capacità, il bilanciamento del carico, la scalabilità automatica e il monitoraggio dello stato delle applicazioni. Quando usi Elastic Beanstalk, puoi assumere il pieno controllo delle risorse AWS che crea per tuo conto. Non sono previsti costi aggiuntivi per l'utilizzo di Elastic Beanstalk. Paghi solo per le risorse AWS utilizzate per archiviare ed eseguire le tue applicazioni.

Questo modello include istruzioni per la distribuzione utilizzando l'[interfaccia a riga di comando AWS Elastic Beanstalk (EB CLI) e la Console di gestione AWS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html).

**Casi d'uso**

I casi d'uso di Elastic Beanstalk includono quanto segue: 
+ Implementa un ambiente prototipo per dimostrare un'applicazione frontend. (Questo modello utilizza un Dockerfile**** come esempio.)
+ Implementa un'API per gestire le richieste API per un determinato dominio.
+ Implementa una soluzione di orchestrazione utilizzando Docker-Compose (****non `docker-compose.yml` viene utilizzato come esempio pratico in questo modello).

## Prerequisiti e limitazioni
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Prerequisiti**
+ Un account AWS
+ AWS EB CLI installata localmente
+ Docker installato su un computer locale

**Limitazioni**
+ Il piano gratuito prevede un limite Docker di 100 pull per 6 ore per indirizzo IP.

## Architecture
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Stack tecnologico Target**
+ Istanze Amazon Elastic Compute Cloud (Amazon EC2)
+ Gruppo di sicurezza
+ Application Load Balancer
+ Gruppo Auto Scaling

**Architettura Target**

![\[Architettura per l'implementazione di container con Elastic Beanstalk.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**Automazione e scalabilità**

AWS Elastic Beanstalk può scalare automaticamente in base al numero di richieste effettuate. Le risorse AWS create per un ambiente includono un Application Load Balancer, un gruppo Auto Scaling e una o più istanze Amazon. EC2  

Il sistema di bilanciamento del carico si trova davanti EC2 alle istanze Amazon, che fanno parte del gruppo Auto Scaling. Amazon EC2 Auto Scaling avvia automaticamente EC2 istanze Amazon aggiuntive per far fronte all'aumento del carico sull'applicazione. Se il carico sull'applicazione diminuisce, Amazon EC2 Auto Scaling interrompe le istanze, ma mantiene almeno un'istanza in esecuzione.

**Trigger di scalabilità automatica**

Il gruppo Auto Scaling nel tuo ambiente Elastic Beanstalk utilizza due CloudWatch allarmi Amazon per avviare le operazioni di scalabilità. I trigger predefiniti eseguono il dimensionamento quando la media del traffico di rete in uscita da ciascuna istanza è superiore a 6 MB o inferiore a 2 MB per un intervallo di tempo di cinque minuti. Per utilizzare Amazon EC2 Auto Scaling in modo efficace, configura i trigger appropriati per la tua applicazione, il tipo di istanza e i requisiti di servizio. È possibile effettuare il dimensionamento in base a diverse statistiche, tra cui latenza, I/O su disco, uso della CPU e numero di richieste. Per ulteriori informazioni, consulta Trigger di [Auto Scaling.](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html)

## Tools (Strumenti)
<a name="deploy-containers-by-using-elastic-beanstalk-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 ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
+ [AWS EB Command Line Interface (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) è un client a riga di comando che puoi utilizzare per creare, configurare e gestire ambienti Elastic Beanstalk.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori e indirizzi IP in una o più zone di disponibilità.

**Altri servizi**
+ [Docker impacchetta](https://www.docker.com/) il software in unità standardizzate chiamate contenitori che includono librerie, strumenti di sistema, codice e runtime.

**Codice**

Il codice per questo pattern è disponibile nel repository GitHub [Cluster Sample Application](https://github.com/aws-samples/cluster-sample-app).

## Epiche
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Costruisci con un Dockerfile
<a name="build-with-a-dockerfile"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Inizializza il progetto Elastic Beanstalk Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Testa il progetto localmente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 

### Implementazione tramite EB CLI
<a name="deploy-using-eb-cli"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il comando di distribuzione | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Accedi alla versione distribuita. | Al termine del comando di distribuzione, accedi al progetto utilizzando il `eb open` comando. | Sviluppatore di app, amministratore AWS, AWS DevOps | 

### Esegui la distribuzione utilizzando la console
<a name="deploy-using-the-console"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci l'applicazione utilizzando il browser. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Accedi alla versione distribuita. | Dopo la distribuzione, accedi all'applicazione distribuita e scegli l'URL fornito. | Sviluppatore di app, amministratore AWS, AWS DevOps | 

## Risorse correlate
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Ambienti di server Web](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Installare l'EB CLI su macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Installazione manuale dell'EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Informazioni aggiuntive
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Vantaggi dell'utilizzo di Elastic Beanstalk**
+ Provisioning automatico dell'infrastruttura
+ Gestione automatica della piattaforma sottostante
+ Patch e aggiornamenti automatici per supportare l'applicazione
+ Ridimensionamento automatico dell'applicazione
+ Possibilità di personalizzare il numero di nodi
+ Possibilità di accedere ai componenti dell'infrastruttura, se necessario
+ Facilità di implementazione rispetto ad altre soluzioni di implementazione di container

# Genera un indirizzo IP statico in uscita utilizzando una funzione Lambda, Amazon VPC e un'architettura serverless
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Riepilogo
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

Questo modello descrive come generare un indirizzo IP statico in uscita nel cloud Amazon Web Services (AWS) utilizzando un'architettura serverless. La tua organizzazione può trarre vantaggio da questo approccio se desidera inviare file a un'entità aziendale separata utilizzando il Secure File Transfer Protocol (SFTP). Ciò significa che l'entità aziendale deve avere accesso a un indirizzo IP che consenta ai file di attraversare il firewall. 

L'approccio del pattern ti aiuta a creare una funzione AWS Lambda che utilizza un [indirizzo IP elastico come indirizzo IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in uscita. Seguendo i passaggi di questo schema, è possibile creare una funzione Lambda e un cloud privato virtuale (VPC) che instrada il traffico in uscita attraverso un gateway Internet con un indirizzo IP statico. Per utilizzare l'indirizzo IP statico, si collega la funzione Lambda al VPC e alle relative sottoreti. 

## Prerequisiti e limitazioni
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo. 
+ Autorizzazioni AWS Identity and Access Management (IAM) per creare e distribuire una funzione Lambda e per creare un VPC e le relative sottoreti. Per ulteriori informazioni su questo argomento, consulta [Ruolo di esecuzione e autorizzazioni utente nella documentazione](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) di AWS Lambda.
+ Se prevedi di utilizzare l'infrastruttura come codice (IaC) per implementare l'approccio di questo modello, hai bisogno di un ambiente di sviluppo integrato (IDE) come AWS Cloud9. Per ulteriori informazioni su questo argomento, consulta [Cos'è AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html)? nella documentazione di AWS Cloud9.

## Architecture
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

Il diagramma seguente mostra l'architettura serverless per questo modello.

![\[Cloud AWS VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Il traffico in uscita esce. `NAT gateway 1` `Public subnet 1`

1. Il traffico in uscita esce`NAT gateway 2`. `Public subnet 2`

1. La funzione Lambda può essere eseguita in `Private subnet 1` o. `Private subnet 2`

1. `Private subnet 1`e `Private subnet 2` indirizzano il traffico verso i gateway NAT nelle sottoreti pubbliche.

1. I gateway NAT inviano il traffico in uscita al gateway Internet dalle sottoreti pubbliche.

1. I dati in uscita vengono trasferiti dal gateway Internet al server esterno.



**Stack tecnologico**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC) (Amazon VPC)

 

**Automazione e scalabilità**

È possibile garantire l'alta disponibilità (HA) utilizzando due sottoreti pubbliche e due private in diverse zone di disponibilità. Anche se una zona di disponibilità diventa non disponibile, la soluzione del pattern continua a funzionare.

## Tools (Strumenti)
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [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 VPC](https://docs.aws.amazon.com/vpc/): Amazon Virtual Private Cloud (Amazon VPC) fornisce una sezione logicamente isolata del cloud AWS in cui è possibile avviare le risorse AWS in una rete virtuale definita dall'utente. 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.

## Epiche
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Creazione di un nuovo VPC
<a name="create-a-new-vpc"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un nuovo VPC. | Accedi alla Console di gestione AWS, apri la console Amazon VPC e crea un VPC denominato `Lambda VPC` che abbia `10.0.0.0/25`**** come intervallo CIDR. IPv4 Per ulteriori informazioni sulla creazione di un VPC, consulta la sezione [Guida introduttiva ad Amazon VPC nella documentazione di Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc).  | Amministratore AWS | 

### Crea due sottoreti pubbliche
<a name="create-two-public-subnets"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la prima sottorete pubblica. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea la seconda sottorete pubblica. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 

### Crea due sottoreti private
<a name="create-two-private-subnets"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la prima sottorete privata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea la seconda sottorete privata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 

### Crea due indirizzi IP elastici per i tuoi gateway NAT
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Crea il primo indirizzo IP elastico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Questo indirizzo IP elastico viene utilizzato per il primo gateway NAT.  | Amministratore AWS | 
| Crea il secondo indirizzo IP elastico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Questo indirizzo IP elastico viene utilizzato per il secondo gateway NAT. | Amministratore AWS | 

### Creazione di un Internet Gateway
<a name="create-an-internet-gateway"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione di un gateway Internet | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Collega il gateway Internet al VPC. | Selezionare l'Internet Gateway appena creato, quindi selezionare **Actions, Attach to VPC (Operazioni, Collega al VPC)**. | Amministratore AWS | 

### Crea due gateway NAT
<a name="create-two-nat-gateways"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il primo gateway NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea il secondo gateway NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 

### Crea tabelle di routing per le tue sottoreti pubbliche e private
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la tabella di routing per la subnet public-one. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea la tabella di routing per la sottorete public-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea la tabella di routing per la sottorete privata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Crea la tabella di routing per la sottorete private-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 

### Crea la funzione Lambda, aggiungila al VPC e testa la soluzione
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una nuova funzione Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Aggiungi la funzione Lambda al tuo VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 
| Scrivi codice per chiamare un servizio esterno. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Amministratore AWS | 

## Risorse correlate
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Configurazione di una funzione Lambda per accedere alle risorse in un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Identifica automaticamente le immagini duplicate dei container durante la migrazione a un repository Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav e Rishi Singla, Amazon Web Services*

## Riepilogo
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

Il modello fornisce una soluzione automatizzata per identificare se le immagini archiviate in diversi archivi di contenitori sono duplicate. Questo controllo è utile quando prevedi di migrare immagini da altri repository di container ad Amazon Elastic Container Registry (Amazon ECR).

Per informazioni di base, il modello descrive anche i componenti di un'immagine del contenitore, come image digest, manifest e tag. Quando pianifichi una migrazione ad Amazon ECR, potresti decidere di sincronizzare le immagini dei container tra i registri dei container confrontando i digest delle immagini. Prima di migrare le immagini dei container, devi verificare se tali immagini esistono già nel repository Amazon ECR per evitare la duplicazione. Tuttavia, può essere difficile rilevare la duplicazione confrontando i digest di immagini e ciò potrebbe causare problemi nella fase iniziale di migrazione.  Questo modello confronta i digest di due immagini simili archiviate in registri di contenitori diversi e spiega perché i digest variano, per aiutarvi a confrontare le immagini in modo accurato.

## Prerequisiti e limitazioni
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Un attivo Account AWS
+ Accesso al registro [pubblico di Amazon ECR](https://gallery.ecr.aws/)
+ Familiarità con quanto segue: Servizi AWS
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)
+  CodeCommit Credenziali configurate (vedi [istruzioni](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Architecture
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Componenti dell'immagine del contenitore**

Il diagramma seguente illustra alcuni dei componenti di un'immagine contenitore. Questi componenti sono descritti dopo il diagramma.

![\[Manifesto, configurazione, livelli del file system e digest.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Termini e definizioni**

I seguenti termini sono definiti nella [Open Container Initiative (OCI) Image Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registry:** un servizio per l'archiviazione e la gestione delle immagini.
+ **Client:** uno strumento che comunica con i registri e funziona con immagini locali.
+ **Push:** il processo per caricare le immagini in un registro.
+ **Pull:** il processo per scaricare immagini da un registro.
+ **Blob:** la forma binaria del contenuto che viene archiviata da un registro e può essere indirizzata tramite un digest.
+ **Indice:** costrutto che identifica più manifesti di immagini per diverse piattaforme di computer (ad esempio x86-64 o ARM a 64 bit) o tipi di media. [Per ulteriori informazioni, vedere la specifica OCI Image Index.](https://github.com/opencontainers/image-spec/blob/main/image-index.md)
+ **Manifest:** un documento JSON che definisce un'immagine o un artefatto che viene caricato tramite l'endpoint del manifesto. Un manifest può fare riferimento ad altri blob in un repository utilizzando descrittori. Per ulteriori informazioni, vedere la specifica [OCI Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Livello del filesystem:** librerie di sistema e altre dipendenze per un'immagine.
+ **Configurazione:** un blob che contiene i metadati degli artefatti e a cui viene fatto riferimento nel manifesto. [Per ulteriori informazioni, vedere la specifica di configurazione dell'immagine OCI.](https://github.com/opencontainers/image-spec/blob/main/config.md)
+ **Oggetto o artefatto:** un contenuto concettuale archiviato come blob e associato a un manifesto di accompagnamento con una configurazione.
+ **Digest:** un identificatore univoco creato da un hash crittografico del contenuto di un manifesto. L'image digest aiuta a identificare in modo univoco un'immagine di contenitore immutabile. Quando estraete un'immagine utilizzando il relativo digest, scaricherete sempre la stessa immagine su qualsiasi sistema operativo o architettura. Per ulteriori informazioni, consulta la [specifica dell'immagine OCI](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag: un identificatore** di manifesto leggibile dall'uomo. Rispetto ai digest di immagini, che sono immutabili, i tag sono dinamici. Un tag che punta a un'immagine può cambiare e spostarsi da un'immagine all'altra, sebbene l'image digest sottostante rimanga lo stesso.

**Architettura di Target**

Il diagramma seguente mostra l'architettura di alto livello della soluzione fornita da questo modello per identificare immagini di container duplicate confrontando le immagini archiviate in Amazon ECR e negli archivi privati.

![\[Rilevamento automatico dei duplicati con e. CodePipeline CodeBuild\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Tools (Strumenti)
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-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 
+ [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 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.

**Codice**

Il codice di questo modello è disponibile nel GitHub repository [Soluzione**** automatizzata per identificare immagini di container duplicate tra](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) i repository.

## Best practice
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation migliori pratiche](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [AWS CodePipeline migliori pratiche](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## poemi epici
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Estrai immagini dei container dagli archivi pubblici e privati di Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Estrai un'immagine dall'archivio pubblico di Amazon ECR. | Dal terminale, esegui il seguente comando per estrarre l'immagine `amazonlinux` dall'archivio pubblico di Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Quando l'immagine è stata caricata sul tuo computer locale, vedrai il seguente pull digest, che rappresenta l'indice dell'immagine.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | Sviluppatore di app, AWS DevOps, amministratore AWS | 
| Invia l'immagine a un repository privato Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Amministratore AWS, AWS DevOps, sviluppatore di app | 
| Estrai la stessa immagine dall'archivio privato di Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Sviluppatore di app, AWS DevOps, amministratore AWS | 

### Confronta i manifesti delle immagini
<a name="compare-the-image-manifests"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Trova il manifesto dell'immagine archiviata nell'archivio pubblico di Amazon ECR. | Dal terminale, esegui il comando seguente per estrarre il manifesto dell'immagine `public.ecr.aws/amazonlinux/amazonlinux:2018.03` dall'archivio pubblico di Amazon ECR.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | Amministratore AWS, AWS DevOps, sviluppatore di app | 
| Trova il manifesto dell'immagine archiviata nell'archivio privato di Amazon ECR. | Dal terminale, esegui il seguente comando per estrarre il manifesto dell'immagine `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` dall'archivio privato di Amazon ECR.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, amministratore di sistema AWS, sviluppatore di app | 
| Confronta il digest estratto da Docker con il manifest digest per l'immagine nel repository privato di Amazon ECR. | Un'altra domanda è perché il digest fornito dal comando **docker** pull differisce dal digest del manifest per l'immagine. `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`Il digest utilizzato per **docker** pull rappresenta il digest del manifesto dell'immagine, che è archiviato in un registro. Questo digest è considerato la radice di una catena di hash, poiché il manifest contiene l'hash del contenuto che verrà scaricato e importato in Docker.L'ID dell'immagine utilizzato in Docker può essere trovato in questo manifesto come. `config.digest` Rappresenta la configurazione dell'immagine utilizzata da Docker. Quindi si potrebbe dire che il manifesto è la busta e l'immagine è il contenuto della busta. Il manifest digest è sempre diverso dall'ID dell'immagine. Tuttavia, un manifesto specifico dovrebbe sempre produrre lo stesso ID di immagine. Poiché il manifest digest è una catena di hash, non possiamo garantire che sarà sempre la stessa per un determinato ID di immagine. Nella maggior parte dei casi, produce lo stesso digest, sebbene Docker non possa garantirlo. La possibile differenza nel manifest digest deriva dal fatto che Docker non memorizza localmente i blob compressi con gzip. Pertanto, l'esportazione dei livelli potrebbe produrre un digest diverso, sebbene il contenuto non compresso rimanga lo stesso. L'ID dell'immagine verifica che il contenuto non compresso sia lo stesso; in altre parole, l'ID dell'immagine è ora un identificatore indirizzabile al contenuto (). `chainID`Per confermare queste informazioni, puoi confrontare l'output del comando **docker inspect** sui repository pubblici e privati di Amazon ECR:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)I risultati verificano che entrambe le immagini abbiano lo stesso Image ID digest e lo stesso layer digest.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Strati: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`Inoltre, i digest si basano sui byte dell'oggetto gestito localmente (il file locale è un tar del livello di immagine del contenitore) o sul blob inviato al server di registro. Tuttavia, quando inviate il blob a un registro, il tar viene compresso e il digest viene calcolato nel file tar compresso. Pertanto, la differenza nel valore del **docker pull** digest deriva dalla compressione applicata a livello di registro (Amazon ECR privato o pubblico).Questa spiegazione è specifica per l'utilizzo di un client Docker. Questo comportamento non si verificherà con altri client come **nerdctl** o **Finch**, perché non comprimono automaticamente l'immagine durante le operazioni push e pull. | AWS DevOps, amministratore di sistema AWS, sviluppatore di app | 

### Identifica automaticamente le immagini duplicate tra gli archivi pubblici e privati di Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Clona il repository Github per questo pattern in una cartella locale:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Amministratore AWS, AWS DevOps | 
| Configura una CI/CD pipeline. | Il GitHub repository include un `.yaml` file che crea uno CloudFormation stack in cui configurare una pipeline. AWS CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)La pipeline verrà impostata in due fasi (CodeCommit e CodeBuild, come mostrato nel diagramma dell'architettura) per identificare le immagini nell'archivio privato che esistono anche nell'archivio pubblico. La pipeline è configurata con le seguenti risorse:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Amministratore AWS, AWS DevOps | 
| Popola il CodeCommit repository. | Per popolare il CodeCommit repository, effettuate le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Amministratore AWS, AWS DevOps | 
| Elimina. | Per evitare di incorrere in future spese, elimina le risorse seguendo questi passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Amministratore AWS | 

## risoluzione dei problemi
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Quando provi a inviare, estrarre o interagire in altro modo con un CodeCommit repository dal terminale o dalla riga di comando, ti viene richiesto di fornire un nome utente e una password e devi fornire le credenziali Git per il tuo utente IAM. | Le cause più comuni di questo errore sono le seguenti:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)A seconda del sistema operativo in uso e dell'ambiente locale, può essere necessario installare un sistema di gestione delle credenziali, configurare quello incluso nel sistema operativo oppure personalizzare l'ambiente locale per l'utilizzo di un sistema di storage delle credenziali. Ad esempio, se sul computer è in esecuzione macOS, è possibile utilizzare l'utilità Keychain Access per archiviare le credenziali. Se il computer esegue Windows puoi utilizzare la funzionalità Git Credential Manager installata con Git per Windows. Per ulteriori informazioni, consulta [Configurazione per utenti HTTPS che utilizzano credenziali Git](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) nella CodeCommit documentazione e [Archiviazione delle credenziali](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) nella documentazione Git. | 
| Quando invii un'immagine al repository Amazon ECR, riscontri errori HTTP 403 o «nessuna credenziale di autenticazione di base». | **Potresti riscontrare questi messaggi di errore dal comando **docker push** o **docker pull**, anche se ti sei autenticato con successo su Docker utilizzando il comando aws ecr. get-login-password** Le cause note sono:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Risorse correlate
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Soluzione automatizzata per identificare le immagini duplicate dei container tra i repository (repository](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/)) GitHub 
+ [Galleria pubblica di Amazon ECR](https://gallery.ecr.aws/)
+ [Immagini private in Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (documentazione Amazon ECR)
+ [AWS::CodePipeline::Pipeline risorsa (documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html))CloudFormation 
+ [Specificazione del formato di immagine OCI](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Informazioni aggiuntive
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Risultato dell'ispezione Docker per l'immagine nell'archivio pubblico Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Risultato dell'ispezione Docker per l'immagine nell'archivio privato Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Installa SSM Agent sui nodi di lavoro Amazon EKS utilizzando Kubernetes DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Riepilogo
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Nota, settembre 2021:** l'ultima versione ottimizzata di Amazon EKS AMIs installa automaticamente SSM Agent. Per ulteriori informazioni, consulta le [note di rilascio](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) di giugno 2021 AMIs.

In Amazon Elastic Kubernetes Service (Amazon EKS), a causa delle linee guida sulla sicurezza, ai nodi di lavoro non sono associate coppie di chiavi Secure Shell (SSH). Questo modello mostra come utilizzare il tipo di DaemonSet risorsa Kubernetes per installare AWS Systems Manager Agent (SSM Agent) su tutti i nodi di lavoro, anziché installarlo manualmente o sostituire l'Amazon Machine Image (AMI) per i nodi. DaemonSet utilizza un cron job sul nodo di lavoro per pianificare l'installazione di SSM Agent. È inoltre possibile utilizzare questo modello per installare altri pacchetti sui nodi di lavoro.

Quando si risolvono i problemi del cluster, l'installazione di SSM Agent on demand consente di stabilire una sessione SSH con il nodo di lavoro, di raccogliere i log o di esaminare la configurazione dell'istanza, senza coppie di chiavi SSH.

## Prerequisiti e limitazioni
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Prerequisiti**
+ Un cluster Amazon EKS esistente con nodi di lavoro Amazon Elastic Compute Cloud (Amazon EC2).
+ Le istanze di container devono disporre delle autorizzazioni necessarie per comunicare con il servizio SSM. Il ruolo gestito di AWS Identity and Access Management (IAM) **Amazon SSMManaged InstanceCore** fornisce le autorizzazioni necessarie per l'esecuzione di SSM Agent sulle EC2 istanze. Per ulteriori informazioni, consulta la [documentazione di AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Limitazioni**
+ Questo modello non è applicabile ad AWS Fargate, perché DaemonSets non sono supportati sulla piattaforma Fargate.
+ Questo modello si applica solo ai nodi di lavoro basati su Linux.
+ I DaemonSet pod funzionano in modalità privilegiata. Se il cluster Amazon EKS dispone di un webhook che blocca i pod in modalità privilegiata, l'agente SSM non verrà installato.

## Architecture
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

Il diagramma seguente illustra l'architettura di questo modello.

![\[Utilizzo di Kubernetes DaemonSet per installare SSM Agent sui nodi di lavoro Amazon EKS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Tools (Strumenti)
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Strumenti**
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) è un'utilità da riga di comando utilizzata per interagire con un cluster Amazon EKS. Questo modello viene utilizzato `kubectl` per distribuire un agente SSM DaemonSet sul cluster Amazon EKS, che installerà l'agente SSM su tutti i nodi di lavoro.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) semplifica l'esecuzione di Kubernetes su AWS senza dover installare, utilizzare e mantenere il tuo piano di controllo o i tuoi nodi Kubernetes. Kubernetes è un sistema open source per automatizzare l'implementazione, il dimensionamento e la gestione di applicazioni containerizzate.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) consente di gestire le EC2 istanze, le istanze locali e le macchine virtuali (VMs) tramite una shell interattiva basata su browser con un solo clic o tramite l'AWS Command Line Interface (AWS CLI).

**Codice**

Utilizza il codice seguente per creare un file di DaemonSet configurazione che installerà l'agente SSM sul cluster Amazon EKS. Segui le istruzioni nella sezione [Epics](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Epiche
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Configura kubectl
<a name="set-up-kubectl"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa e configura kubectl per accedere al cluster EKS. | Se `kubectl` non è già installato e configurato per accedere al cluster Amazon EKS, consulta [Installazione di kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) nella documentazione di Amazon EKS. | DevOps | 

### Implementa il DaemonSet
<a name="deploy-the-daemonset"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il file DaemonSet di configurazione. | Utilizza il codice nella sezione [Codice](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) precedente di questo modello per creare un file di DaemonSet configurazione chiamato`ssm_daemonset.yaml`, che verrà distribuito nel cluster Amazon EKS. Il pod lanciato da DaemonSet ha un contenitore principale e un `init` contenitore. Il contenitore principale ha un `sleep` comando. Il `init` contenitore include una `command` sezione che crea un file cron job per installare SSM Agent sul percorso. `/etc/cron.d/` Il cron job viene eseguito solo una volta e il file che crea viene automaticamente eliminato dopo il completamento del lavoro. Quando il contenitore init è terminato, il contenitore principale attende 60 minuti prima di uscire. Dopo 60 minuti, viene lanciato un nuovo pod. Questo pod installa SSM Agent, se manca, o aggiorna SSM Agent alla versione più recente.Se necessario, puoi modificare il `sleep` comando per riavviare il pod una volta al giorno o per eseguirlo più spesso.  | DevOps | 
| Implementa il DaemonSet file sul cluster Amazon EKS. | Per distribuire il file di DaemonSet configurazione creato nel passaggio precedente sul cluster Amazon EKS, utilizza il seguente comando:<pre>kubectl apply -f ssm_daemonset.yaml </pre>Questo comando crea un comando DaemonSet per eseguire i pod sui nodi di lavoro per installare SSM Agent. | DevOps | 

## Risorse correlate
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Installazione di kubectl (documentazione Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Configurazione di Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (documentazione di AWS Systems Manager)

# Installa l'agente SSM e l' CloudWatch agente sui nodi di lavoro Amazon EKS utilizzando preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## Riepilogo
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Questo modello fornisce esempi di codice e passaggi per installare i nodi di lavoro AWS Systems Manager (SSM Agent) e Amazon CloudWatch sul cloud Amazon Elastic Kubernetes Service (Amazon EKS) nel cloud Amazon Web Services (AWS) durante la creazione del cluster Amazon EKS. Puoi installare l'agente e CloudWatch l'agente SSM utilizzando la `preBootstrapCommands` proprietà dallo schema del [file di `eksctl` configurazione](https://eksctl.io/usage/schema/) (documentazione Weaveworks). Quindi, puoi utilizzare l'agente SSM per connetterti ai tuoi nodi di lavoro senza utilizzare una coppia di chiavi Amazon Elastic Compute Cloud EC2 (Amazon). Inoltre, puoi utilizzare l' CloudWatch agente per monitorare l'utilizzo della memoria e del disco sui nodi di lavoro Amazon EKS.

## Prerequisiti e limitazioni
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ L'[utilità da riga di comando eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), installata e configurata su macOS, Linux o Windows
+ L'[utilità da riga di comando kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), installata e configurata su macOS, Linux o Windows

**Limitazioni**
+ Ti consigliamo di evitare di aggiungere script di lunga durata alla `preBootstrapCommands`**** proprietà, poiché ciò ritarda l'adesione del nodo al cluster Amazon EKS durante le attività di scalabilità. Ti consigliamo invece di creare un'[Amazon Machine Image (AMI) personalizzata](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html).
+ Questo modello si applica solo alle istanze Amazon EC2 Linux.

## Architecture
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Stack tecnologico**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ AWS Systems Manager Parameter Store

**Architettura Target**

Il diagramma seguente mostra un esempio di utente che si connette ai nodi di lavoro di Amazon EKS utilizzando l'agente SSM che è stato installato utilizzando. `preBootstrapCommands`

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


Il diagramma mostra il flusso di lavoro seguente:

1. L'utente crea un cluster Amazon EKS utilizzando il file di `eksctl` configurazione con la `preBootstrapCommands` proprietà, che installa l'agente e CloudWatch l'agente SSM.

1. Tutte le nuove istanze che si uniscono al cluster in un secondo momento a causa delle attività di scalabilità vengono create con l'agente e l'agente SSM preinstallati. CloudWatch 

1. L'utente si connette ad Amazon EC2 utilizzando l'agente SSM e quindi monitora l'utilizzo della memoria e del disco utilizzando l'agente. CloudWatch 

## Tools (Strumenti)
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [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.
+ [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.
+ [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.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) ti aiuta a gestire le EC2 istanze, le istanze locali e le macchine virtuali tramite una shell interattiva basata su browser con un solo clic o tramite l'AWS Command Line Interface (AWS CLI).
+ [eksctl](https://eksctl.io/usage/schema/) è un'utilità da riga di comando per la creazione e la gestione di cluster Kubernetes su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità a riga di comando per comunicare con il server API del cluster.

## Poemi epici
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Crea un cluster Amazon EKS.
<a name="create-an-amazon-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Memorizza il file di configurazione CloudWatch dell'agente. | Archivia il file di configurazione dell' CloudWatch agente in [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) nella regione AWS in cui desideri creare il tuo cluster Amazon EKS. A tale scopo, [crea un parametro](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) in AWS Systems Manager Parameter Store e annota il nome del parametro (ad esempio,`AmazonCloudwatch-linux`).Per ulteriori informazioni, consulta il codice del *file di configurazione dell' CloudWatch agente di esempio* nella sezione [Informazioni aggiuntive](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) di questo modello. | DevOps ingegnere | 
| Crea il file di configurazione eksctl e il cluster.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Verifica che l'agente SSM e l' CloudWatch agente funzionino
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova l'agente SSM. | Usa SSH per connetterti ai nodi del cluster Amazon EKS utilizzando uno dei metodi descritti in [Avvia una sessione](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) dalla documentazione di AWS Systems Manager. | AWS DevOps | 
| Testa l' CloudWatch agente. | Usa la CloudWatch console per convalidare l' CloudWatch agente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Risorse correlate
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Installazione ed esecuzione dell' CloudWatch agente sui tuoi server](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch documentazione Amazon)
+ [Creare un parametro Systems Manager (console)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (documentazione di AWS Systems Manager)
+ [Crea il file di configurazione CloudWatch dell'agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch documentazione Amazon)
+ [Avvio di una sessione (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) (documentazione di AWS Systems Manager)
+ [Avvio di una sessione ( EC2 console Amazon)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (documentazione AWS Systems Manager)

## Informazioni aggiuntive
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Esempio di file di configurazione CloudWatch dell'agente**

Nell'esempio seguente, l' CloudWatch agente è configurato per monitorare l'utilizzo del disco e della memoria su istanze Amazon Linux:

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Esempio di file di configurazione eksctl**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Dettagli aggiuntivi sul codice**
+ Nell'ultima riga della `preBootstrapCommands` proprietà, `AmazonCloudwatch-linux` c'è il nome del parametro creato in AWS System Manager Parameter Store. Devi includerlo `AmazonCloudwatch-linux` in Parameter Store nella stessa regione AWS in cui hai creato il cluster Amazon EKS. È anche possibile specificare un percorso di file, ma si consiglia di utilizzare Systems Manager per semplificare l'automazione e la riutilizzabilità.
+ Se lo usi `preBootstrapCommands` nel file di `eksctl` configurazione, vedrai due modelli di avvio nella Console di gestione AWS. Il primo modello di avvio include i comandi specificati in`preBootstrapCommands`. Il secondo modello include i comandi specificati `preBootstrapCommands` e i dati utente predefiniti di Amazon EKS. Questi dati sono necessari per far sì che i nodi entrino a far parte del cluster. Il gruppo Auto Scaling del gruppo di nodi utilizza questi dati utente per avviare nuove istanze.
+ Se utilizzi l'`iam`attributo nel file di `eksctl` configurazione, devi elencare le policy Amazon EKS predefinite con eventuali policy aggiuntive richieste nelle policy AWS Identity and Access Management (IAM) allegate. Nel frammento di codice del passaggio *Crea il file di configurazione eksctl e il cluster*, `AmazonSSMMangedInstanceCore` sono state aggiunte politiche aggiuntive per garantire che l' CloudWatch agente `CloudWatchAgentServerPolicy` e l'agente SSM funzionino come previsto. Le `AmazonEC2ContainerRegistryReadOnly` politiche `AmazonEKSWorkerNodePolicy``AmazonEKS_CNI_Policy`,, sono politiche obbligatorie necessarie per il corretto funzionamento del cluster Amazon EKS.

# Esegui la migrazione dei controller di ingresso NGINX quando abiliti la modalità automatica di Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye e Shamanth Devagari, Amazon Web Services*

## Riepilogo
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

[La modalità automatica EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) per Amazon Elastic Kubernetes Service (Amazon EKS) può ridurre il sovraccarico operativo legato all'esecuzione dei carichi di lavoro sui cluster Kubernetes. Questa modalità consente anche di configurare e gestire AWS l'infrastruttura per tuo conto. Quando abiliti la modalità automatica EKS su un cluster esistente, devi pianificare attentamente la migrazione delle configurazioni di [NGINX Ingress](https://docs.nginx.com/nginx-ingress-controller/overview/about/) Controller. Questo perché il trasferimento diretto dei Network Load Balancer non è possibile.

Puoi utilizzare una strategia di blue/green distribuzione per migrare un'istanza di NGINX Ingress Controller quando abiliti EKS Auto Mode in un cluster Amazon EKS esistente.

## Prerequisiti e limitazioni
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un [cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) che esegue Kubernetes versione 1.29 o successiva
+ Componenti aggiuntivi Amazon EKS con versioni [minime](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ [Ultima versione di kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Un'istanza esistente di [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/#aws)
+ (Facoltativo) Una [zona ospitata](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) in Amazon Route 53 per lo spostamento del traffico basato su DNS

## Architecture
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Una *distribuzione blu/verde* è una strategia di distribuzione in cui si creano due ambienti separati ma identici. Blue/green le implementazioni offrono funzionalità di downtime, release e rollback quasi nulle. L'idea fondamentale è spostare il traffico tra due ambienti identici che eseguono versioni diverse dell'applicazione.

L'immagine seguente mostra la migrazione dei Network Load Balancer da due diverse istanze di NGINX Ingress Controller quando si abilita la modalità automatica EKS. Si utilizza una blue/green distribuzione per spostare il traffico tra i due Network Load Balancer.

![\[Utilizzo di una strategia di blue/green implementazione per migrare le istanze di NGINX Ingress Controller.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


*Lo spazio dei nomi originale è lo spazio dei nomi blu.* È qui che vengono eseguiti il servizio e l'istanza originali di NGINX Ingress Controller, prima di abilitare la modalità automatica EKS. Il servizio e l'istanza originali si connettono a un Network Load Balancer con un nome DNS configurato in Route 53. Il [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) ha distribuito questo Network Load Balancer nel cloud privato virtuale (VPC) di destinazione.

Il diagramma mostra il seguente flusso di lavoro per configurare un ambiente per una distribuzione: blue/green 

1. *Installa e configura un'altra istanza di NGINX Ingress Controller in un namespace diverso, uno spazio dei nomi verde.*

1. In Route 53, configura un nome DNS per un nuovo Network Load Balancer.

## Tools (Strumenti)
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Servizi 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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori e indirizzi IP in una o più zone di disponibilità.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.
+ [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**
+ [Helm](https://helm.sh/) è un gestore di pacchetti open source per Kubernetes che ti aiuta a installare e gestire le applicazioni sul tuo cluster Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'interfaccia a riga di comando che consente di eseguire comandi sui cluster Kubernetes.
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) collega le app e i servizi Kubernetes con la gestione delle richieste, l'autenticazione, le risorse personalizzate self-service e il debug.

## Epiche
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Esamina l'ambiente esistente
<a name="review-the-existing-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica che l'istanza originale di NGINX Ingress Controller sia operativa. | Immettete il seguente comando per verificare che le risorse nel `ingress-nginx` namespace siano operative. Se hai distribuito NGINX Ingress Controller in un altro spazio dei nomi, aggiorna il nome dello spazio dei nomi in questo comando.<pre>kubectl get all -n ingress-nginx</pre>Nell'output, conferma che i pod di NGINX Ingress Controller siano in esecuzione. Di seguito è riportato un esempio di output:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps ingegnere | 

### Implementa un HTTPd carico di lavoro di esempio per utilizzare NGINX Ingress Controller
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea le risorse Kubernetes. | Inserisci i seguenti comandi per creare un esempio di implementazione, servizio e ingresso Kubernetes:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingegnere | 
| Esamina le risorse distribuite. | Immettete il comando seguente per visualizzare un elenco delle risorse distribuite:<pre>kubectl get all,ingress</pre>Nell'output, confermate che il HTTPd pod di esempio sia in esecuzione. Di seguito è riportato un esempio di output:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps ingegnere | 
| Conferma che il servizio è raggiungibile. | Immettere il seguente comando per confermare che il servizio è raggiungibile tramite il nome DNS del Network Load Balancer:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>L'output previsto è il seguente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingegnere | 
| (Facoltativo) Crea un record DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingegnere, AWS DevOps | 

### Abilita la modalità EKS Auto sul cluster esistente
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita la modalità automatica EKS. | Segui le istruzioni in [Abilita la modalità automatica EKS su un cluster esistente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentazione Amazon EKS). | AWS DevOps | 

### Installa un nuovo controller di ingresso NGINX
<a name="install-a-new-nginx-ingress-controller"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura una nuova istanza di NGINX Ingress Controller. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingegnere | 
| Distribuisci la nuova istanza di NGINX Instance Controller. | Immettete il seguente comando per applicare il file manifest modificato:<pre>kubectl apply -f deploy.yaml</pre> | DevOps ingegnere | 
| Conferma la corretta implementazione. | Immettete il comando seguente per verificare che le risorse nel `ingress-nginx-v2` namespace siano operative:<pre>kubectl get all -n ingress-nginx-v2</pre>Nell'output, conferma che i pod di NGINX Ingress Controller siano in esecuzione. Di seguito è riportato un esempio di output:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps ingegnere | 
| Crea un nuovo ingresso per il carico di HTTPd lavoro di esempio. | Immettete il seguente comando per creare un nuovo ingresso per il carico di lavoro di esempio esistente: HTTPd <pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingegnere | 
| Conferma che il nuovo ingresso funzioni. | Immettete il seguente comando per confermare che il nuovo ingresso funzioni:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>L'output previsto è il seguente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingegnere | 

### tagliare
<a name="cut-over"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Passa al nuovo namespace. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps ingegnere | 
| Controlla i due ingressi. | Immettete il comando seguente per esaminare i due ingressi creati per il carico di lavoro di esempio HTTPd :<pre>kubectl get ingress</pre>Di seguito è riportato un esempio di output:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps ingegnere | 

## Risorse correlate
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Abilita la modalità automatica EKS su un cluster esistente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentazione Amazon EKS)
+ [Risolvi i problemi relativi ai sistemi di bilanciamento del carico creati dal controller di servizio Kubernetes in Amazon](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) EKS (re:POST Knowledge Center)AWS 
+ [NGINX](https://docs.nginx.com/nginx-ingress-controller/) Ingress Controller (documentazione NGINX)

# Esegui la migrazione dei carichi di lavoro dei container da Azure Red Hat OpenShift (ARO) a Servizio Red Hat OpenShift su AWS (ROSA)
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala e Gireesh Sreekantan, Amazon Web Services*

## Riepilogo
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

[Questo modello fornisce step-by-step istruzioni per la migrazione dei carichi di lavoro dei container da Azure Red Hat (ARO) a (ROSA). OpenShift Servizio Red Hat OpenShift su AWS](https://aws.amazon.com/rosa/) ROSA è un servizio Kubernetes gestito fornito da Red Hat in collaborazione con. AWS Ti aiuta a implementare, gestire e scalare le tue applicazioni containerizzate utilizzando la piattaforma Kubernetes e sfrutta sia l'esperienza di Red Hat in Kubernetes che l'infrastruttura. Cloud AWS 

La migrazione dei carichi di lavoro dei container da ARO, da altri cloud o dall'ambiente locale a ROSA comporta il trasferimento di applicazioni, configurazioni e dati da una piattaforma all'altra. Questo modello aiuta a garantire una transizione fluida ottimizzando al contempo Cloud AWS i servizi, la sicurezza e l'efficienza dei costi. Copre due metodi per la migrazione dei carichi di lavoro verso i cluster ROSA: CI/CD e Migration Toolkit for Containers (MTC).

Questo modello copre entrambi i metodi. Il metodo scelto dipende dalla complessità e dalla certezza del processo di migrazione. Se hai il pieno controllo sullo stato dell'applicazione e puoi garantire una configurazione coerente attraverso una pipeline, ti consigliamo di utilizzare questo CI/CD metodo. Tuttavia, se lo stato dell'applicazione comporta incertezze, cambiamenti imprevisti o un ecosistema complesso, consigliamo di utilizzare MTC come percorso affidabile e controllato per migrare l'applicazione e i relativi dati in un nuovo cluster. [Per un confronto dettagliato dei due metodi, consultate la sezione Informazioni aggiuntive.](#migrate-container-workloads-from-aro-to-rosa-additional)

Vantaggi della migrazione a ROSA:
+ ROSA si integra perfettamente con AWS come servizio nativo. È facilmente accessibile tramite Console di gestione AWS e fatturato tramite un unico. Account AWS Offre la piena compatibilità con gli altri Servizi AWS e fornisce supporto collaborativo sia da parte di Red Hat che da parte di Red AWS Hat.
+ ROSA supporta implementazioni ibride e multi-cloud. Consente alle applicazioni di funzionare in modo coerente tra data center locali e più ambienti cloud.
+ ROSA trae vantaggio dall'attenzione rivolta da Red Hat alla sicurezza e offre funzionalità come il controllo degli accessi basato sui ruoli (RBAC), la scansione delle immagini e la valutazione delle vulnerabilità per garantire un ambiente container sicuro.
+ ROSA è progettato per scalare facilmente le applicazioni e offre opzioni di alta disponibilità. Consente alle applicazioni di crescere secondo necessità mantenendo l'affidabilità.
+ ROSA automatizza e semplifica l'implementazione di un cluster Kubernetes rispetto ai metodi di configurazione e gestione manuali. Questo accelera il processo di sviluppo e implementazione.
+ ROSA trae vantaggio dai Cloud AWS servizi e offre una perfetta integrazione con AWS offerte come servizi di database, soluzioni di archiviazione e servizi di sicurezza.

## Prerequisiti e limitazioni
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ Autorizzazioni configurate in base alle quali ROSA si basa per fornire funzionalità. Servizi AWS Per ulteriori informazioni, consulta [Prerequisiti](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html) nella documentazione ROSA.
+ ROSA è abilitato sulla [console ROSA](https://console.aws.amazon.com/rosa). Per istruzioni, consultate la [documentazione di ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ Il cluster ROSA è stato installato e configurato. Per ulteriori informazioni, consulta la [Guida introduttiva a ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) nella documentazione di ROSA. Per comprendere i diversi metodi di configurazione di un cluster ROSA, consulta la Guida AWS prescrittiva alle strategie di [implementazione di ROSA](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ [Connettività di rete stabilita dalla rete locale a quella AWS passante [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(preferita) o AWS Virtual Private Network ().Site-to-Site VPN](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)
+ Un'istanza Amazon Elastic Compute Cloud (Amazon EC2) o un altro server virtuale per installare strumenti come `aws client` client OpenShift CLI `oc` (), client ROSA e binario Git.

Prerequisiti aggiuntivi per il metodo: CI/CD 
+ Accesso al server Jenkins locale con le autorizzazioni per creare una nuova pipeline, aggiungere fasi, aggiungere OpenShift cluster ed eseguire build.
+ Accesso al repository Git in cui viene mantenuto il codice sorgente dell'applicazione, con le autorizzazioni per creare un nuovo ramo Git ed eseguire commit sul nuovo ramo.

Prerequisiti aggiuntivi per il metodo MTC:
+ Un bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3), che verrà utilizzato come repository di replica.
+ Accesso amministrativo al cluster ARO di origine. Ciò è necessario per configurare la connessione MTC.

**Limitazioni**
+ 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 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.

## Architecture
<a name="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

ROSA offre tre modelli di distribuzione di rete: pubblico, privato e. [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) PrivateLinkconsente ai team di Red Hat Site Reliability Engineering (SRE) di gestire il cluster utilizzando una sottorete privata connessa all' PrivateLink endpoint del cluster in un VPC esistente.

La scelta dell' PrivateLinkopzione offre la configurazione più sicura. Per questo motivo, la consigliamo per carichi di lavoro sensibili o requisiti di conformità rigorosi. Per informazioni sulle opzioni di implementazione di reti pubbliche e private, consulta la [ OpenShift documentazione di Red Hat](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**Importante**  
È possibile creare un PrivateLink cluster solo al momento dell'installazione. Non è possibile modificare un cluster da utilizzare PrivateLink dopo l'installazione.

Il diagramma seguente illustra l' PrivateLink architettura di un cluster ROSA utilizzato Direct Connect per connettersi agli ambienti locali e ARO.

![\[Cluster ROSA che utilizza AWS Direct Connect e AWS PrivateLink.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS autorizzazioni per ROSA**

Per AWS le autorizzazioni a ROSA, ti consigliamo di utilizzare AWS Security Token Service (AWS STS) con token dinamici di breve durata. Questo metodo utilizza ruoli e politiche predefiniti con privilegi minimi per concedere a ROSA le autorizzazioni minime per operare in e supporta l'installazione Account AWS, il piano di controllo e le funzionalità di calcolo di ROSA.

**Ridistribuzione della pipeline CI/CD**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDgasdotto. Scegliendo questa opzione, è possibile utilizzare qualsiasi [strategia di DevOps implementazione](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) per spostare gradualmente il carico delle applicazioni verso le distribuzioni su ROSA.

**Nota**  
Questo modello presuppone un caso d'uso comune in cui si dispone di una pipeline Git, JFrog Artifactory e Jenkins locali. [Questo approccio richiede di stabilire la connettività di rete dalla rete locale a AWS quella esterna e di configurare il cluster ROSA prima di seguire le istruzioni nella sezione Epics. Direct Connect](#migrate-container-workloads-from-aro-to-rosa-epics) Per i dettagli, consulta la sezione [Prerequisiti](#migrate-container-workloads-from-aro-to-rosa-prereqs).

Il diagramma seguente mostra il flusso di lavoro per questo metodo.

![\[Migrazione dei contenitori da ARO a ROSA utilizzando il CI/CD metodo.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**Metodo MTC**

Puoi utilizzare [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) per**** migrare i carichi di lavoro containerizzati tra diversi ambienti Kubernetes, ad esempio da ARO a ROSA. MTC semplifica il processo di migrazione automatizzando diverse attività chiave e fornendo un framework completo per la gestione del ciclo di vita della migrazione.

Il diagramma seguente mostra il flusso di lavoro per questo metodo.

![\[Migrazione dei contenitori da ARO a ROSA utilizzando il metodo MTC.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Tools (Strumenti)
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**Servizi AWS**
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)è un servizio di trasferimento e individuazione di dati online che consente di spostare file o dati di oggetti da, verso e tra i servizi di AWS archiviazione.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)collega la rete interna a una Direct Connect posizione tramite un cavo Ethernet standard in fibra ottica. Con questa connessione, è possibile creare interfacce virtuali direttamente al pubblico Servizi AWS ignorando i provider di servizi Internet nel percorso di rete.
+ [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.
+ [Servizio Red Hat OpenShift su AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) è un servizio gestito che aiuta OpenShift gli utenti Red Hat a creare, scalare e gestire applicazioni containerizzate su. AWS
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) consente di richiedere credenziali temporanee con privilegi limitati per gli utenti.

**Altri strumenti**
+ [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) fornisce una console e un'API per la migrazione di applicazioni containerizzate da ARO a ROSA.

## Best practice
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Per la [resilienza](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) e se disponi di carichi di lavoro di conformità alla sicurezza, configura un cluster ROSA Multi-AZ che utilizzi. PrivateLink [Per ulteriori informazioni, consulta la documentazione ROSA.](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html)
**Nota**  
PrivateLink non può essere configurato dopo l'installazione.
+ Il bucket S3 utilizzato per l'archivio di replica non deve essere pubblico. Utilizza le policy dei bucket S3 appropriate per limitare l'accesso.
+ Se scegli il metodo MTC, utilizza l'opzione di migrazione **Stage** per ridurre la finestra di inattività durante il cutover.
+ Controllate le quote di servizio prima e dopo il provisioning del cluster ROSA. Se necessario, richiedete un aumento della quota in base alle vostre esigenze. Per ulteriori informazioni, consulta la pagina relativa alla [Documentazione sulle quote di servizio](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Rivedi le [linee guida sulla sicurezza ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) e implementa le migliori pratiche di sicurezza.
+ Si consiglia di rimuovere l'amministratore predefinito del cluster dopo l'installazione. Per ulteriori informazioni, consulta la [ OpenShift documentazione di Red Hat](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Utilizza la scalabilità automatica del pool di macchine per ridurre i nodi di lavoro inutilizzati nel cluster ROSA e ottimizzare i costi. Per ulteriori informazioni, consultate il [ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool) Workshop.
+ Utilizza il servizio Red Hat Cost Management for OpenShift Container Platform per comprendere e monitorare meglio i costi di cloud e container. Per ulteriori informazioni, consulta il [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Monitora e verifica i servizi e le applicazioni dell'infrastruttura del cluster ROSA utilizzando Servizi AWS. Per ulteriori informazioni, vedere il [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Epiche
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Opzione 1: utilizzare una pipeline CI/CD
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi il nuovo cluster ROSA a Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Amministratore AWS, amministratore di sistema AWS, AWS DevOps | 
| Aggiungi il `oc` client ai tuoi nodi Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Amministratore AWS, amministratore di sistema AWS, AWS DevOps | 
| Crea un nuovo ramo Git. | Crea un nuovo ramo nel tuo repository Git per`rosa-dev`. Questo ramo separa il codice o le modifiche ai parametri di configurazione per ROSA dalla pipeline esistente. | AWS DevOps | 
| Tagga le immagini per ROSA. | Nella fase di creazione, usa un tag diverso per identificare le immagini create dalla pipeline ROSA. | Amministratore AWS, amministratore di sistema AWS, AWS DevOps | 
| Creare una pipeline. | Crea una nuova pipeline Jenkins simile alla tua pipeline esistente. Per questa pipeline, usa il ramo `rosa-dev` Git che hai creato in precedenza e assicurati di includere le fasi di checkout, scansione del codice e compilazione di Git identiche alla pipeline esistente. | Amministratore AWS, amministratore di sistema AWS, AWS DevOps | 
| Aggiungi una fase di distribuzione ROSA. | Nella nuova pipeline, aggiungi una fase da implementare nel cluster ROSA e fai riferimento al cluster ROSA che hai aggiunto alla configurazione globale di Jenkins. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Inizia una nuova build. | In Jenkins, seleziona la tua pipeline e scegli **Costruisci ora**, oppure inizia una nuova build eseguendo una modifica al ramo `rosa-dev` in Git. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Verifica la distribuzione. | Utilizzate il comando **oc** o la [console ROSA](https://console.aws.amazon.com/rosa) per verificare che l'applicazione sia stata distribuita sul cluster ROSA di destinazione. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Copia i dati nel cluster di destinazione. | Per i carichi di lavoro con stato, copia i dati dal cluster di origine al cluster di destinazione utilizzando AWS DataSync le nostre utilità open source come **rsync** oppure puoi utilizzare il metodo MTC. Per ulteriori informazioni, consulta la [documentazione relativa ad AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Testa la tua applicazione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Tagliare. | Se il test ha esito positivo, utilizza la policy Amazon Route 53 appropriata per spostare il traffico dall'applicazione ospitata da ARO all'applicazione ospitata da ROSA. Una volta completato questo passaggio, il carico di lavoro dell'applicazione passerà completamente al cluster ROSA. | Amministratore AWS, amministratore di sistema AWS | 

### Opzione 2: usa MTC
<a name="option-2-use-mtc"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa l'operatore MTC. | Installa l'operatore MTC su entrambi i cluster ARO e ROSA:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Configura il traffico di rete verso l'archivio di replica. | Se utilizzi un server proxy, configuralo per consentire il traffico di rete tra l'archivio di replica e i cluster. Il repository di replica è un oggetto di storage intermedio che MTC utilizza per migrare i dati. I cluster di origine e di destinazione devono avere accesso di rete al repository di replica durante la migrazione. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Aggiungi il cluster di origine a MTC. | Sulla console web MTC, aggiungete il cluster di origine ARO. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Aggiungi Amazon S3 come repository di replica. | Sulla console web MTC, aggiungi il bucket Amazon S3 ([vedi](#migrate-container-workloads-from-aro-to-rosa-prereqs) Prerequisiti) come repository di replica. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Crea un piano di migrazione. | Sulla console web MTC, create un piano di migrazione e specificate il tipo di trasferimento dei dati come **Copia**. Ciò indicherà a MTC di copiare i dati dal cluster di origine (ARO) al bucket S3 e dal bucket al cluster di destinazione (ROSA). | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 
| Esegui il piano di migrazione. | Esegui il piano di migrazione utilizzando l'opzione **Stage** o **Cutover**:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Amministratore AWS, AWS DevOps, amministratore di sistema AWS | 

## risoluzione dei problemi
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Problemi di connettività | Quando esegui la migrazione dei carichi di lavoro dei container da ARO a ROSA, potresti riscontrare problemi di connettività che devono essere risolti per garantire una migrazione di successo. Per risolvere questi problemi di connettività (elencati in questa tabella) durante la migrazione, sono fondamentali una pianificazione meticolosa, il coordinamento con i team di rete e sicurezza e test approfonditi. L'implementazione di una strategia di migrazione graduale e la verifica della connettività in ogni fase contribuiranno a ridurre al minimo le potenziali interruzioni e a garantire una transizione fluida da ARO a ROSA. | 
| Differenze di configurazione di rete | ARO e ROSA potrebbero presentare variazioni nelle configurazioni di rete, come le impostazioni della rete virtuale (VNet), le sottoreti e le politiche di rete. Per una comunicazione corretta tra i servizi, assicuratevi che le impostazioni di rete siano allineate tra le due piattaforme. | 
| Regole del gruppo di sicurezza e del firewall | ROSA e ARO potrebbero avere impostazioni predefinite diverse per il gruppo di sicurezza e il firewall. Assicurati di modificare e aggiornare queste regole per consentire il traffico necessario a mantenere la connettività tra contenitori e servizi durante la migrazione.  | 
| Modifiche all'indirizzo IP e al DNS | Durante la migrazione dei carichi di lavoro, gli indirizzi IP e i nomi DNS potrebbero cambiare. Riconfigura le applicazioni che si basano su nomi DNS statici IPs o specifici.  | 
| Accesso ai servizi esterni | Se l'applicazione dipende da servizi esterni come i database oppure APIs, potrebbe essere necessario aggiornare le impostazioni di connessione per assicurarsi che possano comunicare con i nuovi servizi di ROSA. | 
| Configurazione di Azure Private Link | Se usi Azure Private Link o servizi endpoint privati in ARO, dovrai configurare la funzionalità equivalente in ROSA per garantire la connettività privata tra le risorse. | 
| Site-to-Site VPN o configurazione Direct Connect  | Se esistono Direct Connect connessioni Site-to-Site VPN o tra la rete locale e ARO, sarà necessario stabilire connessioni simili con ROSA per una comunicazione ininterrotta con le risorse locali. | 
| Impostazioni di ingresso e bilanciamento del carico | Le configurazioni dei controller di ingresso e dei sistemi di bilanciamento del carico potrebbero differire tra ARO e ROSA. Riconfigurate queste impostazioni per mantenere l'accesso esterno ai vostri servizi. | 
| Gestione di certificati e TLS | Se le tue applicazioni utilizzano certificati SSL o TLS, assicurati che i certificati siano validi e configurati correttamente in ROSA. | 
| Accesso al registro dei contenitori | Se i contenitori sono ospitati in un registro di contenitori esterno, imposta l'autenticazione e le autorizzazioni di accesso appropriate per ROSA. | 
| Monitoraggio e registrazione dei log | Aggiorna le configurazioni di monitoraggio e registrazione in modo da rispecchiare la nuova infrastruttura su ROSA in modo da poter continuare a monitorare efficacemente lo stato e le prestazioni dei tuoi contenitori. | 

## Risorse correlate
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****riferimenti**
+ [Che cos'è Servizio Red Hat OpenShift su AWS?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (documentazione ROSA)
+ [Inizia a usare ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (documentazione ROSA)
+ [Servizio Red Hat OpenShift su AWS strategie di implementazione](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (AWS Prescriptive Guidance)
+ [Servizio Red Hat OpenShift su AWS Now GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (AWS post sul blog)
+ [Workshop ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [Domande frequenti su ROSA](https://aws.amazon.com/rosa/faqs/)
+ [Domande frequenti sul seminario ROSA](https://www.rosaworkshop.io/rosa/14-faq/)
+ [Prezzi ROSA](https://aws.amazon.com/rosa/pricing/)

** OpenShift Documentazione Red Hat**
+ [Installazione rapida di un cluster su AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Installazione di un cluster AWS in una rete con restrizioni](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Installazione di un cluster AWS in un VPC esistente](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Installazione di un cluster su un'infrastruttura fornita dall'utente tramite modelli AWS CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Installazione di un cluster AWS in una rete limitata con un'infrastruttura fornita dall'utente](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Installazione di un cluster con personalizzazioni AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Guida introduttiva alla OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Informazioni aggiuntive
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Scelta tra MTC e le opzioni di ridistribuzione della CI/CD pipeline**

La migrazione delle applicazioni da un OpenShift cluster a un altro richiede un'attenta considerazione. Idealmente, si vorrebbe una transizione fluida utilizzando una CI/CD pipeline per ridistribuire l'applicazione e gestire la migrazione dei dati di volume persistenti. Tuttavia, in pratica, un'applicazione in esecuzione su un cluster è suscettibile di modifiche impreviste nel tempo. Queste modifiche possono far sì che l'applicazione si discosti gradualmente dallo stato di distribuzione originale. MTC offre una soluzione per scenari in cui il contenuto esatto di un namespace è incerto ed è importante una migrazione senza interruzioni di tutti i componenti dell'applicazione in un nuovo cluster.

Fare la scelta giusta richiede la valutazione dello scenario specifico e la valutazione dei vantaggi di ciascun approccio. In questo modo, potete garantire una migrazione efficace e senza interruzioni, in linea con le vostre esigenze e priorità. Di seguito sono riportate ulteriori linee guida per la scelta tra le due opzioni.

**Ridistribuzione della pipeline CI/CD**

Il metodo della CI/CD pipeline è l'approccio consigliato se l'applicazione può essere ridistribuita con sicurezza utilizzando una pipeline. Ciò garantisce che la migrazione sia controllata, prevedibile e allineata alle pratiche di distribuzione esistenti. Scegliendo questo metodo, è possibile utilizzare strategie di [implementazione blu/green](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) o canary per spostare gradualmente il carico sulle implementazioni su ROSA. In questo scenario, questo modello presuppone che Jenkins stia orchestrando le distribuzioni delle applicazioni dall'ambiente locale.

Vantaggi:
+ Non è necessario l'accesso amministrativo al cluster ARO di origine né è necessario distribuire operatori sul cluster di origine o di destinazione.
+ Questo approccio consente di modificare gradualmente il traffico utilizzando una DevOps strategia.

Svantaggi:
+ È necessario uno sforzo maggiore per testare la funzionalità dell'applicazione.
+ Se l'applicazione contiene dati persistenti, sono necessari passaggi aggiuntivi per copiare i dati utilizzando AWS DataSync o altri strumenti.

**Migrazione MTC**

Nel mondo reale, le applicazioni in esecuzione possono subire modifiche impreviste che le allontanano dalla distribuzione iniziale. Scegliete l'opzione MTC quando non siete sicuri dello stato attuale dell'applicazione nel cluster di origine. Ad esempio, se il vostro ecosistema applicativo comprende vari componenti, configurazioni e volumi di archiviazione dei dati, vi consigliamo di scegliere MTC per garantire una migrazione completa che copra l'applicazione e il suo intero ambiente.

Vantaggi:
+ MTC fornisce il backup e il ripristino completi del carico di lavoro.
+ Copierà i dati persistenti dall'origine alla destinazione durante la migrazione del carico di lavoro.
+ Non richiede l'accesso all'archivio del codice sorgente.

Svantaggi:
+ Sono necessari i privilegi amministrativi per installare l'operatore MTC sui cluster di origine e di destinazione.
+ Il DevOps team richiede una formazione per utilizzare lo strumento MTC ed eseguire le migrazioni. 

# Esegui attività Amazon ECS su Amazon WorkSpaces con Amazon ECS Anywhere
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Riepilogo
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

Amazon Elastic Container Service (Amazon ECS) Anywhere supporta la distribuzione di attività Amazon ECS in qualsiasi ambiente, inclusa l'infrastruttura gestita di Amazon Web Services (AWS) e l'infrastruttura gestita dai clienti. Puoi farlo utilizzando un piano di controllo completamente gestito da AWS, in esecuzione nel cloud e sempre aggiornato. 

Le aziende utilizzano spesso Amazon WorkSpaces per lo sviluppo di applicazioni basate su container. Ciò ha richiesto Amazon Elastic Compute Cloud (Amazon EC2) o AWS Fargate con un cluster Amazon ECS per testare ed eseguire le attività ECS. Ora, utilizzando Amazon ECS Anywhere, puoi aggiungere WorkSpaces Amazon come istanze esterne direttamente a un cluster ECS ed eseguire le tue attività direttamente. Ciò riduce i tempi di sviluppo, poiché puoi testare il tuo contenitore con un cluster ECS localmente su Amazon WorkSpaces. Puoi anche risparmiare sui costi di utilizzo EC2 delle istanze Fargate per testare le tue applicazioni container.

Questo modello mostra come distribuire le attività ECS su Amazon WorkSpaces con Amazon ECS Anywhere. Configura il cluster ECS e utilizza AWS Directory Service Simple AD per avviare il WorkSpaces. Quindi l'attività ECS di esempio avvia NGINX in. WorkSpaces

## Prerequisiti e limitazioni
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Un account AWS attivo
+ Interfaccia a riga di comando di AWS (CLI AWS)
+ Credenziali AWS [configurate sulla tua macchina](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)

## Architecture
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Stack tecnologico Target**
+ Un cloud privato virtuale (VPC)
+ Un cluster Amazon ECS
+ Amazon WorkSpaces
+ AWS Directory Service con Simple AD

**Architettura Target**

![\[ECS Anywhere configura il cluster ECS e utilizza Simple AD per l'avvio. WorkSpaces\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

L'architettura include i seguenti servizi e risorse:
+ Un cluster ECS con sottoreti pubbliche e private in un VPC personalizzato
+ Simple AD nel VPC per fornire agli utenti l'accesso ad Amazon WorkSpaces
+ Amazon ha effettuato il WorkSpaces provisioning nel VPC utilizzando Simple AD
+ AWS Systems Manager attivato per aggiungere Amazon WorkSpaces come istanze gestite
+ Utilizzando Amazon ECS e AWS Systems Manager Agent (SSM Agent), Amazon si è WorkSpaces aggiunto a Systems Manager e al cluster ECS
+ Un esempio di attività ECS da eseguire nel cluster ECS WorkSpaces 

## Tools (Strumenti)
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ [AWS Directory Service Simple Active Directory (Simple AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) è una directory gestita autonoma alimentata da un server compatibile con Active Directory Samba 4. Simple AD fornisce un sottoinsieme delle funzionalità offerte da AWS Managed Microsoft AD, inclusa la capacità di gestire gli utenti e di connettersi in modo sicuro alle istanze Amazon EC2 .
+ [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 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 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 nel cloud AWS. Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e ti aiuta a gestire le tue risorse AWS in modo sicuro su larga scala.
+ [Amazon](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) ti WorkSpaces aiuta a fornire desktop Microsoft Windows o Amazon Linux virtuali basati sul cloud per i tuoi utenti, noti come. *WorkSpaces* WorkSpaces elimina la necessità di procurarsi e distribuire hardware o installare software complessi.

## Epiche
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea e configura il cluster ECS. | Per creare il cluster ECS, segui le istruzioni nella [documentazione AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), inclusi i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Architetto del cloud | 

### Avvia Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura Simple AD e avvia Amazon WorkSpaces. | Per effettuare il provisioning di una directory Simple AD per il tuo VPC appena creato e avviare Amazon WorkSpaces, segui le istruzioni nella documentazione [AWS](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html). | Architetto del cloud | 

### Configurare AWS Systems Manager per un ambiente ibrido
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica gli script allegati. | Sul computer locale, scaricate i `ssm-activation.json` file `ssm-trust-policy.json` e contenuti nella sezione *Allegati.* | Architetto del cloud | 
| Aggiungi il ruolo IAM. | Aggiungi variabili di ambiente in base ai tuoi requisiti aziendali.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Eseguire il seguente comando seguente.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Architetto del cloud | 
| Aggiungi la SSMManaged InstanceCore policy di Amazon al ruolo IAM. | Eseguire il seguente comando seguente.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Architetto del cloud | 
| Aggiungi la policy Amazon EC2 ContainerServicefor EC2 Role al ruolo IAM. | Eseguire il seguente comando seguente.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Architetto del cloud | 
| Verifica il ruolo IAM. | Per verificare il ruolo IAM, esegui il comando seguente.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Architetto del cloud | 
| Attiva Systems Manager. | Eseguire il seguente comando seguente.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Architetto del cloud | 

### Aggiungi WorkSpaces al cluster ECS
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Connect al tuo WorkSpaces. | Per connetterti e configurare i tuoi spazi di lavoro, segui le istruzioni nella [documentazione AWS](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html). | Sviluppatore di app | 
| Scarica lo script di installazione ecs-anywhere. | Nel prompt dei comandi, eseguire il seguente comando .<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | Sviluppatore di app | 
| Verifica l'integrità dello script della shell. | (Facoltativo) Eseguite il comando seguente.<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | Sviluppatore di app | 
| Aggiungi un repository EPEL su Amazon Linux. | Per aggiungere un repository Extra Packages for Enterprise Linux (EPEL), esegui il comando. `sudo amazon-linux-extras install epel -y` | Sviluppatore di app | 
| Installa Amazon ECS Anywhere. | Per eseguire lo script di installazione, usa il seguente comando.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Controlla le informazioni sull'istanza dal cluster ECS. | Per controllare le informazioni sulle istanze del cluster Systems Manager ed ECS e convalidare quelle WorkSpaces aggiunte al cluster, esegui il comando seguente dal computer locale.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | Sviluppatore di app | 

### Aggiungi un'attività ECS per WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ruolo IAM per l'esecuzione delle attività. | Scarica `task-execution-assume-role.json` e `external-task-definition.json` dalla sezione *Allegati.* Sul computer locale, esegui il seguente comando.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Architetto del cloud | 
| Aggiungi la policy al ruolo di esecuzione. | Eseguire il seguente comando seguente.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Architetto del cloud | 
| Crea un ruolo da svolgere. | Eseguire il seguente comando seguente.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Architetto del cloud | 
| Registra la definizione dell'attività nel cluster. | Sul computer locale, esegui il comando seguente.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Architetto del cloud | 
| Esegui l'attività. | Sul computer locale, esegui il comando seguente.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Architetto del cloud | 
| Convalida lo stato di esecuzione dell'attività. | Per recuperare l'ID dell'attività, esegui il comando seguente.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>Con l'ID dell'attività, esegui il comando seguente.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Architetto del cloud | 
| Verifica l'attività su WorkSpace. | Per verificare che NGINX sia in esecuzione su WorkSpace, esegui il comando. ` curl http://localhost:8080` | Sviluppatore di app | 

## Risorse correlate
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [Cluster ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Configurazione di un ambiente ibrido](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [Simple AD](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Allegati
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

[Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Esegui un contenitore Docker dell'API Web ASP.NET Core su un'istanza Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam e Sreelaxmi Pai, Amazon Web Services*

## Riepilogo
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Questo modello è destinato alle persone che stanno iniziando a containerizzare le proprie applicazioni sul cloud Amazon Web Services (AWS). Quando inizi a containerizzare le app sul cloud, di solito non sono configurate piattaforme di orchestrazione dei container. Questo modello ti aiuta a configurare rapidamente l'infrastruttura su AWS per testare le tue applicazioni containerizzate senza bisogno di un'elaborata infrastruttura di orchestrazione dei container.

Il primo passo nel percorso di modernizzazione consiste nel trasformare l'applicazione. Se si tratta di un'applicazione.NET Framework legacy, è necessario innanzitutto modificare il runtime in ASP.NET Core. Quindi, esegui queste operazioni:
+ Crea l'immagine del contenitore Docker
+ Esegui il contenitore Docker utilizzando l'immagine integrata
+ Convalida l'applicazione prima di distribuirla su qualsiasi piattaforma di orchestrazione dei container, come Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS). 

Questo modello copre gli aspetti di creazione, esecuzione e convalida dello sviluppo di applicazioni moderne su un'istanza Amazon Elastic Compute Cloud EC2 (Amazon) Linux.

## Prerequisiti e limitazioni
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Prerequisiti**
+ Un [account Amazon Web Services (AWS)](https://aws.amazon.com/account/) attivo
+ Un [ruolo AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) con accesso sufficiente per creare risorse AWS per questo modello 
+ Scaricato e installato [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) o versione successiva
+ Un progetto.NET Framework modernizzato in ASP.NET Core
+ Un repository GitHub 

**Versioni del prodotto**
+ Visual Studio Community 2022 o versioni successive

## Architecture
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Architettura Target**

Questo modello utilizza un [ CloudFormation modello AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) per creare l'architettura ad alta disponibilità mostrata nel diagramma seguente. Un'istanza Amazon EC2 Linux viene avviata in una sottorete privata. AWS Systems Manager Session Manager viene utilizzato per accedere all'istanza privata di Amazon EC2 Linux e per testare l'API in esecuzione nel contenitore Docker.

![\[Un utente che accede all'istanza Amazon EC2 Linux e testa l'API in esecuzione nel contenitore Docker.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Accesso all'istanza Linux tramite Session Manager

## Tools (Strumenti)
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Servizi AWS**
+ [Interfaccia a riga di comando AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): AWS Command Line Interface (AWS CLI) è uno strumento open source per interagire con i servizi AWS tramite comandi nella shell della riga di comando. Con una configurazione minima, puoi eseguire comandi AWS CLI che implementano funzionalità equivalenti a quelle fornite dalla Console di gestione AWS basata su browser.
+ [Console di gestione AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html): la Console di gestione AWS è un'applicazione Web che comprende e fa riferimento a un'ampia raccolta di console di servizio per la gestione delle risorse AWS. Quando effettui l'accesso per la prima volta, visualizzi la home page della console. La home page fornisce l'accesso a ciascuna console di servizio e offre un unico posto per accedere alle informazioni necessarie per eseguire le attività relative ad AWS.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) — Session Manager è una funzionalità di AWS Systems Manager completamente gestita. Con Session Manager, puoi gestire le tue istanze Amazon Elastic Compute Cloud (Amazon EC2). Session Manager fornisce una gestione sicura e verificabile dei nodi senza la necessità di aprire porte in entrata, gestire host bastion o gestire chiavi SSH.

**Altri strumenti**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) — Visual Studio 2022 è un ambiente di sviluppo integrato (IDE).
+ [Docker](https://www.docker.com/): Docker è un set di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in contenitori.

**Codice**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Epiche
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Sviluppa l'API web ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un esempio di API Web ASP.NET Core utilizzando Visual Studio. | Per creare un esempio di API web ASP.NET Core, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Sviluppatore di app | 
| Crea un Dockerfile. | Per creare un Dockerfile, esegui una delle seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Per inviare le modifiche al tuo GitHub repository, esegui il comando seguente.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Sviluppatore di app | 

### Configurare l'istanza Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l'infrastruttura. | Avvia il [ CloudFormation modello AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) per creare l'infrastruttura, che include quanto segue: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Per ulteriori informazioni sull'accesso a un' EC2 istanza Amazon privata utilizzando Session Manager senza richiedere un host bastion, consulta il post sul blog [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Accedi all'istanza Amazon EC2 Linux. | Per connetterti all'istanza Amazon EC2 Linux nella sottorete privata, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Sviluppatore di app | 
| Installa e avvia Docker. | Per installare e avviare Docker nell'istanza Amazon EC2 Linux, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Installa Git e clona il repository. | Per installare Git sull'istanza Amazon EC2 Linux e clonare il repository GitHub, procedi come segue.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 
| Crea ed esegui il contenitore Docker. | Per creare l'immagine Docker ed eseguire il contenitore all'interno dell'istanza Amazon EC2 Linux, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Sviluppatore di app, amministratore AWS, AWS DevOps | 

### Testa l'API web
<a name="test-the-web-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Testa l'API web usando il comando curl. | Per testare l'API web, esegui il comando seguente.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Verifica la risposta dell'API.Puoi ottenere i comandi curl per ogni endpoint da Swagger quando lo esegui localmente. | Sviluppatore di app | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare tutte le risorse. | Elimina lo stack per rimuovere tutte le risorse. In questo modo non ti verranno addebitati costi per i servizi che non utilizzi. | Amministratore AWS, AWS DevOps | 

## Risorse correlate
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Connect alla propria istanza Linux da Windows utilizzando PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Crea un'API web con ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Verso un mondo senza bastioni](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Esegui carichi di lavoro con stato con storage persistente dei dati utilizzando Amazon EFS su Amazon EKS con AWS Fargate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa e Lucio Pereira, Amazon Web Services*

## Riepilogo
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Questo modello fornisce indicazioni per abilitare Amazon Elastic File System (Amazon EFS) come dispositivo di storage per contenitori in esecuzione su Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando AWS Fargate per il provisioning delle risorse di calcolo.

La configurazione descritta in questo modello segue le migliori pratiche di sicurezza e fornisce sicurezza a riposo e sicurezza in transito per impostazione predefinita. Per crittografare il tuo file system Amazon EFS, utilizza una chiave AWS Key Management Service (AWS KMS), ma puoi anche specificare un alias chiave che esegua il processo di creazione di una chiave KMS.

Puoi seguire i passaggi di questo schema per creare uno spazio dei nomi e un profilo Fargate per un'applicazione proof-of-concept (PoC), installare il driver Amazon EFS Container Storage Interface (CSI) utilizzato per integrare il cluster Kubernetes con Amazon EFS, configurare la classe di storage e distribuire l'applicazione PoC. Questi passaggi portano a un file system Amazon EFS condiviso tra più carichi di lavoro Kubernetes, in esecuzione su Fargate. Lo schema è accompagnato da script che automatizzano questi passaggi.

È possibile utilizzare questo modello se si desidera la persistenza dei dati nelle applicazioni containerizzate ed evitare la perdita di dati durante le operazioni di scalabilità. Esempio:
+ **DevOps strumenti** — Uno scenario comune è lo sviluppo di uno strumento di integrazione e distribuzione continua (strumento). CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CD
+ **Server Web**: uno scenario comune consiste nell'utilizzare Apache come server Web HTTP. Puoi usare Amazon EFS come file system condiviso per archiviare file statici condivisi tra diverse istanze del server Web. In questo scenario di esempio, le modifiche vengono applicate direttamente al file system anziché inserire file statici in un'immagine Docker.

## Prerequisiti e limitazioni
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un cluster Amazon EKS esistente con Kubernetes versione 1.17 o successiva (testato fino alla versione 1.27)
+ Un file system Amazon EFS esistente per associare un Kubernetes StorageClass e fornire i file system in modo dinamico
+ Autorizzazioni di amministrazione del cluster
+ Contesto configurato per puntare al cluster Amazon EKS desiderato

**Limitazioni**
+ Ci sono alcune limitazioni da considerare quando usi Amazon EKS con Fargate. Ad esempio, l'uso di alcuni costrutti Kubernetes, come DaemonSets i contenitori privilegiati, non è supportato. Per ulteriori informazioni sulle limitazioni di Fargate, consulta le [considerazioni su AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) nella documentazione di Amazon EKS.
+ Il codice fornito con questo pattern supporta le workstation che eseguono Linux o macOS.

**Versioni del prodotto**
+ AWS Command Line Interface (AWS CLI) versione 2 o successiva
+ Driver Amazon EFS CSI versione 1.0 o successiva (testato fino alla versione 2.4.8)
+ eksctl versione 0.24.0 o successiva (testato fino alla versione 0.158.0)
+ jq versione 1.6 o successiva
+ kubectl versione 1.17 o successiva (testata fino alla versione 1.27)
+ Kubernetes versione 1.17 o successiva (testato fino alla versione 1.27)

## Architecture
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Diagramma dell'architettura dell'esecuzione di carichi di lavoro con stato con storage persistente dei dati utilizzando Amazon EFS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


L'architettura di destinazione è composta dalla seguente infrastruttura:
+ Un cloud privato virtuale (VPC)
+ Due zone di disponibilità
+ Una sottorete pubblica con un gateway NAT che fornisce l'accesso a Internet
+ Una sottorete privata con un cluster Amazon EKS e target di montaggio Amazon EFS (noti anche come *punti di montaggio*)
+ Amazon EFS a livello di VPC

Di seguito è riportata l'infrastruttura ambientale per il cluster Amazon EKS:
+ Profili AWS Fargate che supportano i costrutti Kubernetes a livello di namespace
+ Uno spazio dei nomi Kubernetes con:
  + Due pod applicativi distribuiti tra le zone di disponibilità
  + Una dichiarazione di volume persistente (PVC) associata a un volume persistente (PV) a livello di cluster
+ Un PV a livello di cluster associato al PVC nello spazio dei nomi e che punta alle destinazioni di montaggio di Amazon EFS nella sottorete privata, all'esterno del cluster

## Tools (Strumenti)
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-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 puoi usare per interagire con i servizi AWS dalla riga di comando.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) ti aiuta a creare e configurare file system condivisi nel cloud AWS. In questo modello, fornisce un file system semplice, scalabile, completamente gestito e condiviso da utilizzare con Amazon EKS.
+ [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 i tuoi cluster.
+ [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) è un motore di elaborazione serverless per Amazon EKS. Crea e gestisce risorse di calcolo per le tue applicazioni Kubernetes.
+ [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.

**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.
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) è un'utilità da riga di comando per la creazione e la gestione di cluster Kubernetes su Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) è un'interfaccia a riga di comando che ti aiuta a eseguire comandi sui cluster Kubernetes.
+ [jq è uno strumento a riga di comando per l'analisi di JSON.](https://stedolan.github.io/jq/download/)

**Codice**

Il codice per questo pattern è fornito nella [configurazione di GitHub persistenza con Amazon EFS su Amazon EKS utilizzando il repository AWS Fargate](https://github.com/aws-samples/eks-efs-share-within-fargate). Gli script sono organizzati da epic, nelle cartelle `epic01` Through`epic06`, corrispondenti all'ordine nella sezione [Epics](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) di questo schema.

## Best practice
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

L'architettura di destinazione include i seguenti servizi e componenti e segue le best practice di [AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/) Framework:
+ Amazon EFS, che fornisce un file system NFS elastico semplice, scalabile e completamente gestito. Viene utilizzato come file system condiviso tra tutte le repliche dell'applicazione PoC in esecuzione nei pod, distribuiti nelle sottoreti private del cluster Amazon EKS scelto.
+ Una destinazione di montaggio Amazon EFS per ogni sottorete privata. Ciò fornisce ridondanza per zona di disponibilità all'interno del cloud privato virtuale (VPC) del cluster.
+ Amazon EKS, che esegue i carichi di lavoro Kubernetes. È necessario effettuare il provisioning di un cluster Amazon EKS prima di utilizzare questo modello, come descritto nella sezione [Prerequisiti](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs).
+ AWS KMS, che fornisce la crittografia a riposo per i contenuti archiviati nel file system Amazon EFS.
+ Fargate, che gestisce le risorse di elaborazione per i container in modo che tu possa concentrarti sui requisiti aziendali anziché sul carico dell'infrastruttura. Il profilo Fargate viene creato per tutte le sottoreti private. Fornisce ridondanza per zona di disponibilità all'interno del cloud privato virtuale (VPC) del cluster.
+ Kubernetes Pods, per verificare che i contenuti possano essere condivisi, consumati e scritti da diverse istanze di un'applicazione.

## Epiche
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Esegui il provisioning di un cluster Amazon EKS (opzionale)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster Amazon EKS. | Se hai già un cluster distribuito, passa alla prossima epopea. Crea un cluster Amazon EKS nel tuo account AWS esistente. Nella [GitHub directory](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap), utilizza uno dei modelli per distribuire un cluster Amazon EKS utilizzando Terraform o eksctl. Per ulteriori informazioni, consulta [Creazione di un cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) nella documentazione di Amazon EKS. Nel modello Terraform, ci sono anche esempi che mostrano come: collegare i profili Fargate al cluster Amazon EKS, creare un file system Amazon EFS e distribuire il driver CSI Amazon EFS nel cluster Amazon EKS. | Amministratore AWS, amministratore Terraform o eksctl, amministratore Kubernetes | 
| Esporta variabili di ambiente. | Esegui lo script env.sh. Ciò fornisce le informazioni richieste nei passaggi successivi.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Se non ancora indicato, puoi ottenere tutte le informazioni richieste sopra con i seguenti comandi CLI.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | Amministratore di sistema AWS | 

### Crea un namespace Kubernetes e un profilo Fargate collegato
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea uno spazio dei nomi Kubernetes e un profilo Fargate per i carichi di lavoro delle applicazioni. | Crea uno spazio dei nomi per ricevere i carichi di lavoro delle applicazioni che interagiscono con Amazon EFS. Eseguire lo script `create-k8s-ns-and-linked-fargate-profile.sh`. Puoi scegliere di utilizzare un nome di namespace personalizzato o lo spazio dei nomi fornito di default. `poc-efs-eks-fargate`**Con un nome di namespace dell'applicazione personalizzato:**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Senza un nome di namespace dell'applicazione personalizzato:**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>`$CLUSTER_NAME`dov'è il nome del tuo cluster Amazon EKS. Il `-n <NAMESPACE>` parametro è facoltativo; se non viene informato, verrà fornito un nome di namespace generato di default. | Utente Kubernetes con autorizzazioni concesse | 

### Creare un file system Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Genera un token unico. | Amazon EFS richiede un token di creazione per garantire un funzionamento idempotente (la chiamata all'operazione con lo stesso token di creazione non ha alcun effetto). Per soddisfare questo requisito, è necessario generare un token univoco utilizzando una tecnica disponibile. Ad esempio, è possibile generare un identificatore univoco universale (UUID) da utilizzare come token di creazione. | Amministratore di sistema AWS | 
| Crea un file system Amazon EFS. | Crea il file system per ricevere i file di dati letti e scritti dai carichi di lavoro dell'applicazione. È possibile creare un file system crittografato o non crittografato. (Come procedura ottimale, il codice di questo modello crea un sistema crittografato per abilitare la crittografia a riposo per impostazione predefinita.) Puoi utilizzare una chiave AWS KMS unica e simmetrica per crittografare il tuo file system. Se non viene specificata una chiave personalizzata, viene utilizzata una chiave gestita AWS.Utilizza lo script create-efs.sh per creare un file system Amazon EFS crittografato o non crittografato, dopo aver generato un token univoco per Amazon EFS.**Con crittografia inattiva, senza chiave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>dove `$CLUSTER_NAME` è il nome del tuo cluster Amazon EKS ed `$EFS_CREATION_TOKEN` è un token di creazione univoco per il file system.**Con crittografia inattiva, con una chiave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>dove `$CLUSTER_NAME` è il nome del cluster Amazon EKS, `$EFS_CREATION_TOKEN` è un token di creazione univoco per il file system ed `$KMS_KEY_ALIAS` è l'alias per la chiave KMS.**Senza crittografia:**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>dove `$CLUSTER_NAME` è il nome del tuo cluster Amazon EKS, `$EFS_CREATION_TOKEN` è un token di creazione univoco per il file system e `–d` disabilita la crittografia a riposo. | Amministratore di sistema AWS | 
| Creare un gruppo di sicurezza. | Crea un gruppo di sicurezza per consentire al cluster Amazon EKS di accedere al file system Amazon EFS. | Amministratore di sistema AWS | 
| Aggiorna la regola in entrata per il gruppo di sicurezza. | Aggiorna le regole in entrata del gruppo di sicurezza per consentire il traffico in entrata per le seguenti impostazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | Amministratore di sistema AWS | 
| Aggiungi una destinazione di montaggio per ogni sottorete privata. | Per ogni sottorete privata del cluster Kubernetes, crea una destinazione di montaggio per il file system e il gruppo di sicurezza. | Amministratore di sistema AWS | 

### Installa i componenti Amazon EFS nel cluster Kubernetes
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa il driver CSI di Amazon EFS. | Implementa il driver CSI Amazon EFS nel cluster. Il driver effettua il provisioning dello storage in base alle dichiarazioni di volume persistenti create dalle applicazioni. Esegui lo `create-k8s-efs-csi-sc.sh` script per distribuire il driver CSI di Amazon EFS e la classe di storage nel cluster.<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Questo script utilizza l'`kubectl`utilità, quindi assicurati che il contesto sia stato configurato e punti al cluster Amazon EKS desiderato. | Utente Kubernetes con autorizzazioni concesse | 
| Implementare la classe di archiviazione. | Implementa la classe di storage nel cluster per il provisioner Amazon EFS (efs.csi.aws.com). | Utente Kubernetes con autorizzazioni concesse | 

### Installa l'applicazione PoC nel cluster Kubernetes
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci il volume persistente. | Implementa il volume persistente e collegalo alla classe di storage creata e all'ID del file system Amazon EFS. L'applicazione utilizza il volume persistente per leggere e scrivere contenuti. È possibile specificare qualsiasi dimensione per il volume persistente nel campo di archiviazione. Kubernetes richiede questo campo, ma poiché Amazon EFS è un file system elastico, non impone alcuna capacità del file system. Puoi distribuire il volume persistente con o senza crittografia. (Il driver CSI di Amazon EFS abilita la crittografia per impostazione predefinita, come best practice.) Esegui lo `deploy-poc-app.sh` script per distribuire il volume persistente, l'attestazione del volume persistente e i due carichi di lavoro.**Con crittografia in transito:**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>`$EFS_CREATION_TOKEN`dov'è il token di creazione univoco per il file system.**Senza crittografia in transito:**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>dove `$EFS_CREATION_TOKEN` è il token di creazione univoco per il file system e `–d` disabilita la crittografia in transito. | Utente Kubernetes con autorizzazioni concesse | 
| Implementa la dichiarazione di volume persistente richiesta dall'applicazione. | Implementate la dichiarazione di volume persistente richiesta dall'applicazione e collegatela alla classe di archiviazione. Utilizza la stessa modalità di accesso del volume persistente creato in precedenza. È possibile specificare qualsiasi dimensione per l'attestazione del volume persistente nel campo di archiviazione. Kubernetes richiede questo campo, ma poiché Amazon EFS è un file system elastico, non impone alcuna capacità del file system. | Utente Kubernetes con autorizzazioni concesse | 
| Distribuisci il carico di lavoro 1. | Distribuisci il pod che rappresenta il carico di lavoro 1 dell'applicazione. Questo carico di lavoro scrive il contenuto nel file. `/data/out1.txt` | Utente Kubernetes con autorizzazioni concesse | 
| Implementa il carico di lavoro 2. | Implementa il pod che rappresenta il carico di lavoro 2 dell'applicazione. Questo carico di lavoro scrive il contenuto nel file. `/data/out2.txt` | Utente Kubernetes con autorizzazioni concesse | 

### Convalida la persistenza, la durabilità e la condivisibilità del file system
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Controlla lo stato di`PersistentVolume`. | Immettere il seguente comando per verificare lo stato di`PersistentVolume`.<pre>kubectl get pv</pre>Per un esempio di output, vedere la sezione [Informazioni aggiuntive](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Utente Kubernetes con autorizzazioni concesse | 
| Controlla lo stato di. `PersistentVolumeClaim` | Immettere il seguente comando per verificare lo stato di`PersistentVolumeClaim`.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Per un esempio di output, vedere la sezione [Informazioni aggiuntive](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Utente Kubernetes con autorizzazioni concesse | 
| Verifica che il workload 1 possa scrivere sul file system. | Immetti il comando seguente per convalidare il carico di lavoro 1 su cui sta scrivendo. `/data/out1.txt`<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>I risultati sono simili ai seguenti:<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Utente Kubernetes con autorizzazioni concesse | 
| Verifica che Workload 2 sia in grado di scrivere sul file system. | Immetti il comando seguente per convalidare il workload 2 su cui sta scrivendo. `/data/out2.txt`<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>I risultati sono simili ai seguenti:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Utente Kubernetes con autorizzazioni concesse | 
| Verifica che il carico di lavoro 1 sia in grado di leggere il file scritto da workload 2. | Immetti il seguente comando per verificare che il carico di lavoro 1 sia in grado di leggere il `/data/out2.txt` file scritto dal carico di lavoro 2.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>I risultati sono simili ai seguenti:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Utente Kubernetes con autorizzazioni concesse | 
| Verifica che il carico di lavoro 2 sia in grado di leggere il file scritto dal carico di lavoro 1. | Immetti il seguente comando per verificare che il carico di lavoro 2 sia in grado di leggere il `/data/out1.txt` file scritto dal carico di lavoro 1.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>I risultati sono simili ai seguenti:<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Utente Kubernetes con autorizzazioni concesse | 
| Verifica che i file vengano conservati dopo aver rimosso i componenti dell'applicazione. | Successivamente, utilizzate uno script per rimuovere i componenti dell'applicazione (persistent volume, persistent volume claim e pods) e verificare che i file `/data/out2.txt` vengano conservati nel file `/data/out1.txt` system. Eseguire lo script `validate-efs-content.sh` utilizzando il comando seguente.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>`$EFS_CREATION_TOKEN`dov'è il token di creazione univoco per il file system.I risultati sono simili ai seguenti:<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Utente Kubernetes con autorizzazioni concesse, amministratore di sistema | 

### Monitora le operazioni
<a name="monitor-operations"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Monitora i registri delle applicazioni. | Nell'ambito di un'operazione che dura il secondo giorno, spedisci i log delle applicazioni ad Amazon CloudWatch per il monitoraggio. | Amministratore di sistema AWS, utente Kubernetes con autorizzazioni concesse | 
| Monitora i contenitori Amazon EKS e Kubernetes con Container Insights. | Nell'ambito di un'operazione del secondo giorno, monitora i sistemi Amazon EKS e Kubernetes utilizzando Amazon Container Insights. CloudWatch Questo strumento raccoglie, aggrega e riepiloga i parametri delle applicazioni containerizzate a diversi livelli e dimensioni. [Per ulteriori informazioni, consulta la sezione Risorse correlate.](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources) | Amministratore di sistema AWS, utente Kubernetes con autorizzazioni concesse | 
| Monitora Amazon EFS con CloudWatch. | Nell'ambito di un'operazione del secondo giorno, monitora i file system utilizzando Amazon CloudWatch, che raccoglie ed elabora i dati grezzi da Amazon EFS in metriche leggibili quasi in tempo reale. [Per ulteriori informazioni, consulta la sezione Risorse correlate.](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources) | Amministratore di sistema AWS | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci tutte le risorse create per il pattern. | Dopo aver completato questo schema, pulisci tutte le risorse per evitare di incorrere in costi AWS. Esegui lo `clean-up-resources.sh` script per rimuovere tutte le risorse dopo aver finito di utilizzare l'applicazione PoC. Completate una delle seguenti opzioni.**Con crittografia inattiva, con una chiave KMS:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>dove `$CLUSTER_NAME` è il nome del cluster Amazon EKS, `$EFS_CREATION_TOKEN` è il token di creazione per il file system ed `$KMS_KEY_ALIAS` è l'alias per la chiave KMS.**Senza crittografia a riposo:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>dove `$CLUSTER_NAME` è il nome del cluster Amazon EKS ed `$EFS_CREATION_TOKEN` è il token di creazione per il file system. | Utente Kubernetes con autorizzazioni concesse, amministratore di sistema | 

## Risorse correlate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Riferimenti**
+ [AWS Fargate per Amazon EKS ora supporta Amazon EFS (annuncio](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/))
+ [Come acquisire i log delle applicazioni quando si utilizza Amazon EKS su AWS Fargate](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (post sul blog)
+ [Utilizzo di Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch documentazione Amazon)
+ [Configurazione di Container Insights su Amazon EKS e Kubernetes (documentazione Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) CloudWatch 
+ [Metriche di Amazon EKS e Kubernetes Container Insights (documentazione](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) Amazon) CloudWatch 
+ [Monitoraggio di Amazon EFS con Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (documentazione Amazon EFS)

**GitHub tutorial ed esempi**
+ [Provisioning statico](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Crittografia in transito](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Accesso al file system da più pod](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Consumo di Amazon EFS in StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Montaggio dei sottopercorsi](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Utilizzo dei punti di accesso Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Progetti Amazon EKS per Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Strumenti necessari**
+ [Installazione della versione 2 dell'interfaccia a riga di comando di AWS](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Installazione di eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Installare kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Installazione di jq](https://stedolan.github.io/jq/download/)

## Informazioni aggiuntive
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

Di seguito è riportato un esempio di output del `kubectl get pv` comando.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

Di seguito è riportato un esempio di output del `kubectl -n poc-efs-eks-fargate get pvc` comando.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Configura la scalabilità automatica basata sugli eventi in Amazon EKS utilizzando Amazon EKS Pod Identity e KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi e Mahendra Revanasiddappa, Amazon Web Services*

## Riepilogo
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Le piattaforme di orchestrazione, come [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS), hanno semplificato la gestione del ciclo di vita delle applicazioni basate su container. Questo aiuta le organizzazioni a concentrarsi sulla creazione, la protezione, il funzionamento e la manutenzione di applicazioni basate su contenitori. Man mano che le implementazioni basate sugli eventi diventano più comuni, le organizzazioni scalano sempre più spesso le implementazioni di Kubernetes in base a varie fonti di eventi. Questo metodo, combinato con la scalabilità automatica, può portare a significativi risparmi sui costi fornendo risorse di elaborazione su richiesta e una scalabilità efficiente adattata alla logica dell'applicazione.

[KEDA](https://keda.sh/) è un autoscaler basato su eventi basato su Kubernetes. KEDA ti aiuta a scalare qualsiasi contenitore in Kubernetes in base al numero di eventi che devono essere elaborati. È leggero e si integra con qualsiasi cluster Kubernetes. [Funziona anche con componenti Kubernetes standard, come Horizontal Pod Autoscaling (HPA).](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) Offre anche KEDA [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication), una funzionalità che consente di delegare l'autenticazione. Consente di descrivere i parametri di autenticazione separati dai contenitori ScaledObject e dai contenitori di distribuzione.

AWS fornisce ruoli AWS Identity and Access Management (IAM) che supportano diverse opzioni di implementazione di Kubernetes, tra cui Amazon EKS, Amazon EKS Anywhere Servizio Red Hat OpenShift su AWS (ROSA) e cluster Kubernetes autogestiti su Amazon Elastic Compute Cloud (Amazon). EC2 Questi ruoli utilizzano costrutti IAM, come i provider di identità OpenID Connect (OIDC) e le policy di fiducia IAM, per operare in ambienti diversi senza affidarsi direttamente ai servizi Amazon EKS o. APIs Per ulteriori informazioni, consulta [i ruoli IAM per gli account di servizio](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) nella documentazione di Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) semplifica il processo con cui gli account di servizio Kubernetes assumono ruoli IAM senza richiedere provider OIDC. Offre la possibilità di gestire le credenziali per le tue applicazioni. Invece di creare e distribuire AWS le tue credenziali ai contenitori o utilizzare il ruolo dell' EC2 istanza Amazon, associ un ruolo IAM a un account di servizio Kubernetes e configuri i tuoi Pods per utilizzare l'account di servizio. Questo ti aiuta a utilizzare un ruolo IAM su più cluster e semplifica la gestione delle policy abilitando il riutilizzo delle politiche di autorizzazione tra i ruoli IAM.

Implementando KEDA con Amazon EKS Pod Identity, le aziende possono ottenere una scalabilità automatica efficiente basata sugli eventi e una gestione semplificata delle credenziali. Le applicazioni si scalano in base alla domanda, il che ottimizza l'utilizzo delle risorse e riduce i costi.

Questo modello ti aiuta a integrare Amazon EKS Pod Identity con KEDA. Mostra come utilizzare l'account del `keda-operator` servizio e delegare l'autenticazione con. `TriggerAuthentication` Descrive inoltre come impostare una relazione di trust tra un ruolo IAM per l'operatore KEDA e un ruolo IAM per l'applicazione. Questa relazione di fiducia consente a KEDA di monitorare i messaggi nelle code degli eventi e di regolare il ridimensionamento per gli oggetti Kubernetes di destinazione.

## Prerequisiti e limitazioni
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Prerequisiti**
+ AWS Command Line Interface [(AWS CLI) versione 2.13.17 o successiva, installata](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python versione 3.11.5 o successiva, installata](https://www.python.org/downloads/)
+ AWS SDK per Python (Boto3) [versione 1.34.135 o successiva, installata](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm versione 3.12.3 o successiva, installata](https://helm.sh/docs/intro/install/)
+ [kubectl versione 1.25.1 o successiva, installata](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine versione 26.1.1 o successiva, installata](https://docs.docker.com/engine/install/)
+ [Creazione di un cluster Amazon EKS versione 1.24 o successiva](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [Prerequisiti per la creazione dell'agente Amazon EKS Pod Identity, soddisfatti](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Limitazioni**
+ È necessario stabilire una relazione di fiducia tra il `keda-operator` ruolo e il `keda-identity` ruolo. Le istruzioni sono fornite nella sezione [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) di questo modello.

## Architecture
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

In questo modello, crei le seguenti AWS risorse:
+ Repository **Amazon Elastic Container Registry (Amazon ECR)**: in questo modello, questo repository viene denominato. `keda-pod-identity-registry` Questo repository privato viene utilizzato per archiviare le immagini Docker dell'applicazione di esempio.
+ Coda **Amazon Simple Queue Service (Amazon SQS)**: in questo modello, questa coda viene denominata. `event-messages-queue` La coda funge da buffer dei messaggi che raccoglie e archivia i messaggi in arrivo. KEDA monitora le metriche della coda, come il numero di messaggi o la lunghezza della coda, e ridimensiona automaticamente l'applicazione in base a queste metriche.
+ **Ruolo IAM per l'applicazione**: in questo modello, questo ruolo viene denominato. `keda-identity` Il `keda-operator` ruolo assume questo ruolo. Questo ruolo consente l'accesso alla coda di Amazon SQS.
+ **Ruolo IAM per l'operatore KEDA**: in questo modello, questo ruolo è denominato. `keda-operator` L'operatore KEDA utilizza questo ruolo per effettuare le chiamate AWS API richieste. Questo ruolo dispone delle autorizzazioni necessarie per assumerlo`keda-identity`. A causa della relazione di fiducia tra i ruoli `keda-operator` e i `keda-identity` ruoli, il `keda-operator` ruolo dispone delle autorizzazioni Amazon SQS.

Tramite le risorse personalizzate `TriggerAuthentication` e `ScaledObject` Kubernetes, l'operatore utilizza il `keda-identity` ruolo per connettersi a una coda Amazon SQS. In base alla dimensione della coda, KEDA ridimensiona automaticamente la distribuzione dell'applicazione. Aggiunge 1 pod ogni 5 messaggi non letti nella coda. Nella configurazione predefinita, se non ci sono messaggi non letti nella coda di Amazon SQS, l'applicazione viene ridimensionata fino a 0 pod. L'operatore KEDA monitora la coda a intervalli specificati dall'utente.

 

L'immagine seguente mostra come utilizzi Amazon EKS Pod Identity per fornire al `keda-operator` ruolo un accesso sicuro alla coda Amazon SQS.

![\[Utilizzo di KEDA e Amazon EKS Pod Identity per scalare automaticamente un'applicazione basata su Kubernetes.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Installa l'agente Amazon EKS Pod Identity nel cluster Amazon EKS.

1. Implementa l'operatore KEDA nello spazio dei nomi KEDA nel cluster Amazon EKS.

1. Crei i ruoli `keda-operator` e `keda-identity` IAM nella destinazione. Account AWS

1. Stabilisci una relazione di fiducia tra i ruoli IAM.

1. L'applicazione viene distribuita nel `security` namespace.

1. L'operatore KEDA esegue il polling dei messaggi in una coda Amazon SQS.

1. KEDA avvia l'HPA, che ridimensiona automaticamente l'applicazione in base alla dimensione della coda.

## Tools (Strumenti)
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Servizi 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.
+ [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.
+ [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.

**Altri strumenti**
+ [KEDA](https://keda.sh/) è un autoscaler basato su eventi basato su Kubernetes.

**Deposito di codice**

Il codice per questo pattern è disponibile nella [scalabilità GitHub automatica basata sugli eventi utilizzando EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) il repository KEDA.

## Best practice
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Consigliamo di seguire queste best practices:
+ [Best practice di Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Best practice per la sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Best practice di Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epiche
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Crea risorse AWS
<a name="create-aws-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il ruolo IAM per l'operatore KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Amministratore AWS | 
| Crea il ruolo IAM per l'applicazione di esempio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Amministratore AWS | 
| Creare una coda Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Informazioni generali su AWS | 
| Crea un repository Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Informazioni generali su AWS | 

### Configura il cluster Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'agente Amazon EKS Pod Identity. | Per il cluster Amazon EKS di destinazione, configura l'agente Amazon EKS Pod Identity. Segui le istruzioni in [Configurare Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) nella documentazione di Amazon EKS. | AWS DevOps | 
| Implementa KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Assegna il ruolo IAM all'account del servizio Kubernetes. | Segui le istruzioni in [Assegnare un ruolo IAM a un account di servizio Kubernetes nella](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) documentazione di Amazon EKS. Utilizzare i seguenti valori:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Crea uno spazio dei nomi . | Immetti il seguente comando per creare uno spazio `security` dei nomi nel cluster Amazon EKS di destinazione:<pre>kubectl create ns security</pre> | DevOps ingegnere | 

### Distribuzione di un'applicazione di esempio
<a name="deploy-the-sample-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare i file dell'applicazione. | Inserisci il seguente comando per clonare l'[auto scaling basato sugli eventi utilizzando EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) il repository KEDA da: GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingegnere | 
| Creazione dell'immagine Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Invia l'immagine Docker ad Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Puoi trovare i comandi push accedendo alla pagina del repository Amazon ECR e scegliendo **Visualizza** comandi push. | DevOps ingegnere | 
| Implementare un’applicazione di esempio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Assegna il ruolo IAM all'account del servizio applicativo. | Effettua una delle seguenti operazioni per associare il ruolo `keda-identity` IAM all'account di servizio per l'applicazione di esempio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Implementa `ScaledObject` e. `TriggerAuthentication` | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 

### Prova il ridimensionamento automatico
<a name="test-auto-scaling"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia messaggi alla coda di Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 
| Monitora i pod delle applicazioni. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingegnere | 

## risoluzione dei problemi
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| L'operatore KEDA non è in grado di scalare l'applicazione. | Immettete il seguente comando per controllare i log del ruolo `keda-operator` IAM:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Se è presente un codice di `HTTP 403` risposta, l'applicazione e lo scaler KEDA non dispongono di autorizzazioni sufficienti per accedere alla coda di Amazon SQS. Completa questa procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Se si `Assume-Role` verifica un errore, un [ruolo IAM del nodo Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) non è in grado di assumere il ruolo IAM per cui è stato definito`TriggerAuthentication`. Completa questa procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Risorse correlate
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configurare Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentazione Amazon EKS)
+ [Implementazione di KEDA (documentazione](https://keda.sh/docs/2.14/deploy/) KEDA)
+ [ScaledObject specifiche (documentazione KEDA](https://keda.sh/docs/2.16/reference/scaledobject-spec/))
+ [Autenticazione con TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentazione KEDA)

# Semplifica le implementazioni di PostgreSQL su Amazon EKS utilizzando PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Riepilogo
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Questo modello integra Postgres Operator di Crunchy Data (PGO) con Amazon Elastic Kubernetes Service (Amazon EKS) per semplificare le implementazioni di PostgreSQL in ambienti nativi del cloud. PGO offre automazione e scalabilità per la gestione dei database PostgreSQL in Kubernetes. Combinando PGO con Amazon EKS, si forma una solida piattaforma per la distribuzione, la gestione e la scalabilità efficiente dei database PostgreSQL.

Questa integrazione offre i seguenti vantaggi chiave:
+ Distribuzione automatizzata: semplifica l'implementazione e la gestione dei cluster PostgreSQL.
+ Definizioni di risorse personalizzate (CRDs):**** utilizza le primitive Kubernetes per la gestione di PostgreSQL.
+ Alta disponibilità: supporta il failover automatico e la replica sincrona.
+ Backup e ripristini automatizzati:**** semplifica i processi di backup e ripristino.
+ Scalabilità orizzontale:**** consente il ridimensionamento dinamico dei cluster PostgreSQL.
+ Aggiornamenti di versione: facilita gli aggiornamenti continui con tempi di inattività minimi.
+ Sicurezza: applica la crittografia, i controlli di accesso e i meccanismi di autenticazione.

## Prerequisiti e limitazioni
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS.
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installata e configurata su Linux, macOS o Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), per connettere AWS le risorse dalla riga di comando.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installato e configurato su Linux, macOS o Windows.
+ `kubectl`, installato e configurato per accedere alle risorse sul tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare kubectl ed eksctl nella documentazione di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html). 
+ Il terminale del tuo computer è configurato per accedere al cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare il computer per comunicare con il cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) nella documentazione di Amazon EKS.

**Versioni del prodotto**
+ [Versioni di Kubernetes 1.21—1.24 o successive (consulta la documentazione di PGO).](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)
+ PostgreSQL versione 10 o successiva. Questo modello utilizza PostgreSQL versione 16.

**Limitazioni**
+ 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 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.

## Architecture
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Stack tecnologico Target**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC) (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Architettura di destinazione**

![\[Architettura per l'utilizzo di PGO con tre zone di disponibilità e due repliche e PgBouncer operatore PGO.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Questo modello crea un'architettura che contiene un cluster Amazon EKS con tre nodi. Ogni nodo viene eseguito su un set di istanze EC2 nel backend. Questa configurazione di PostgreSQL segue un'architettura di replica primaria, particolarmente efficace per i casi d'uso ad alta intensità di lettura. L'architettura include i seguenti componenti:
+ Il **contenitore del database primario (pg-primary)** ospita l'istanza PostgreSQL principale in cui sono dirette tutte le operazioni di scrittura.
+ **I contenitori di replica secondari (pg-replica) ospitano** le istanze PostgreSQL che replicano i dati dal database primario e gestiscono le operazioni di lettura.
+ **PgBouncer**è un pool di connessioni leggero per database PostgreSQL incluso in PGO. Si colloca tra il client e il server PostgreSQL e funge da intermediario per le connessioni al database.
+ **PGO** automatizza l'implementazione e la gestione dei cluster PostgreSQL in questo ambiente Kubernetes.
+ **Patroni** è uno strumento open source che gestisce e automatizza le configurazioni ad alta disponibilità per PostgreSQL. È incluso in PGO. Quando usi Patroni con PGO in Kubernetes, svolge un ruolo cruciale nel garantire la resilienza e la tolleranza ai guasti di un cluster PostgreSQL. [Per ulteriori informazioni, consulta la documentazione di Patroni.](https://patroni.readthedocs.io/en/latest/)

Il flusso di lavoro include i seguenti passaggi:
+ **Implementa l'operatore PGO**. Implementa l'operatore PGO sul tuo cluster Kubernetes eseguito su Amazon EKS. Questo può essere fatto utilizzando i manifesti di Kubernetes o i grafici Helm. Questo modello utilizza i manifesti di Kubernetes.
+ **Definisci le istanze PostgreSQL**. Quando l'operatore è in esecuzione, si creano risorse personalizzate (CRs) per specificare lo stato desiderato delle istanze PostgreSQL. Ciò include configurazioni come archiviazione, replica e impostazioni di alta disponibilità.
+ **Gestione degli operatori**. Interagisci con l'operatore tramite oggetti API Kubernetes, ad esempio CRs per creare, aggiornare o eliminare istanze PostgreSQL.
+ **Monitoraggio e manutenzione.** Puoi monitorare lo stato e le prestazioni delle istanze PostgreSQL in esecuzione su Amazon EKS. Gli operatori spesso forniscono metriche e registrazioni per scopi di monitoraggio. Se necessario, è possibile eseguire attività di manutenzione di routine come aggiornamenti e patch. Per ulteriori informazioni, consulta [Monitoraggio delle prestazioni del cluster e visualizzazione dei log](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) nella documentazione di Amazon EKS.
+ **Scalabilità e backup**: è possibile utilizzare le funzionalità fornite dall'operatore per ridimensionare le istanze PostgreSQL e gestire i backup.

Questo modello non copre le operazioni di monitoraggio, manutenzione e backup.

**Automazione e scalabilità**
+ È possibile utilizzare CloudFormation per automatizzare la creazione dell'infrastruttura. Per ulteriori informazioni, consulta [Creare risorse Amazon EKS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) nella documentazione di Amazon EKS.
+ Puoi utilizzare GitVersion o Jenkins build Numbers per automatizzare la distribuzione delle istanze di database.

## Tools (Strumenti)
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Servizi AWS**
+ [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 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 tramite comandi nella shell della riga di comando. Servizi AWS 

**Altri strumenti**
+ [eksctl](https://eksctl.io/) è un semplice strumento da riga di comando per la creazione di cluster su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes.
+ [PGO](https://github.com/CrunchyData/postgres-operator) automatizza e ridimensiona la gestione dei database PostgreSQL in Kubernetes.

## Best practice
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Segui queste best practice per garantire un'implementazione fluida ed efficiente:
+ **Proteggi il tuo cluster EKS**. Implementa le migliori pratiche di sicurezza per il tuo cluster EKS, come l'utilizzo di ruoli AWS Identity and Access Management (IAM) per account di servizio (IRSA), policy di rete e gruppi di sicurezza VPC. Limita l'accesso al server API del cluster EKS e crittografa le comunicazioni tra i nodi e il server API utilizzando TLS.
+ **Garantisci la compatibilità delle versioni** tra PGO e Kubernetes in esecuzione su Amazon EKS. Alcune funzionalità di PGO potrebbero richiedere versioni specifiche di Kubernetes o introdurre limitazioni di compatibilità. Per ulteriori informazioni, consulta [Componenti e compatibilità](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) nella documentazione di PGO.
+ **Pianifica l'allocazione delle risorse** per la tua implementazione PGO, tra cui CPU, memoria e archiviazione. Considera i requisiti di risorse sia di PGO che delle istanze PostgreSQL che gestisce. Monitora l'utilizzo delle risorse e ridimensiona le risorse in base alle esigenze.
+ **Progettato per un'elevata disponibilità**. Progetta la tua implementazione PGO per un'elevata disponibilità per ridurre al minimo i tempi di inattività e garantire l'affidabilità. Implementa più repliche di PGO su più zone di disponibilità per la tolleranza agli errori.
+ **Implementa procedure di backup e ripristino** per i database PostgreSQL gestiti da PGO. Utilizza le funzionalità fornite da PGO o soluzioni di backup di terze parti compatibili con Kubernetes e Amazon EKS.
+ **Configura il monitoraggio e la registrazione per la** tua implementazione PGO per tenere traccia delle prestazioni, dello stato e degli eventi. Utilizza strumenti come Prometheus per il monitoraggio delle metriche e Grafana per la visualizzazione. Configura la registrazione per acquisire i registri PGO per la risoluzione dei problemi e il controllo.
+ **Configura correttamente la rete** per consentire le comunicazioni tra PGO, istanze PostgreSQL e altri servizi nel tuo cluster Kubernetes. Utilizza le funzionalità di rete Amazon VPC e i plug-in di rete Kubernetes come Calico o Amazon [VPC](https://github.com/aws/amazon-vpc-cni-k8s) CNI per l'applicazione delle politiche di rete e l'isolamento del traffico.
+ **Scegli le opzioni di storage appropriate** per i tuoi database PostgreSQL, considerando fattori quali prestazioni, durabilità e scalabilità. Usa volumi Amazon Elastic Block Store (Amazon EBS) AWS o servizi di storage gestito per lo storage persistente. Per ulteriori informazioni, consulta [Archivia volumi Kubernetes con Amazon EBS nella documentazione di Amazon](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) EKS.
+ **Utilizza strumenti Infrastructure as Code (IaC)** CloudFormation per automatizzare la distribuzione e la configurazione di PGO su Amazon EKS. Definisci i componenti dell'infrastruttura, tra cui il cluster EKS, il networking e le risorse PGO, come codice per garantire coerenza, ripetibilità e controllo delle versioni.

## Epiche
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Creazione di un ruolo IAM
<a name="create-an-iam-role"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ruolo IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS | 

### Crea un cluster Amazon EKS.
<a name="create-an-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un cluster Amazon EKS. | Se hai già distribuito un cluster, salta questo passaggio. Altrimenti, distribuisci un cluster Amazon EKS nel tuo ambiente attuale Account AWS utilizzando `eksctl` Terraform o. CloudFormation Questo modello viene utilizzato `eksctl` per la distribuzione in cluster.Questo modello utilizza Amazon EC2 come gruppo di nodi per Amazon EKS. Se desideri utilizzarlo AWS Fargate, consulta la `managedNodeGroups` configurazione nella documentazione di [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS, amministratore Terraform o eksctl, amministratore Kubernetes | 
| Convalida lo stato del cluster. | Esegui il comando seguente per visualizzare lo stato corrente dei nodi nel cluster:<pre>kubectl get nodes</pre>Se riscontri errori, consulta la [sezione sulla risoluzione dei problemi](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) della documentazione di Amazon EKS. | Amministratore AWS, amministratore Terraform o eksctl, amministratore Kubernetes | 

### Crea un provider di identità OIDC
<a name="create-an-oidc-identity-provider"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita il provider IAM OIDC. | Come prerequisito per il driver Amazon EBS Container Storage Interface (CSI), devi disporre di un provider IAM OpenID Connect (OIDC) esistente per il tuo cluster.Abilita il provider IAM OIDC utilizzando il seguente comando:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Per ulteriori informazioni su questo passaggio, consulta la [documentazione di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Amministratore AWS | 
| Crea un ruolo IAM per il driver CSI di Amazon EBS. | Usa il seguente `eksctl` comando per creare il ruolo IAM per il driver CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Se utilizzi unità Amazon EBS crittografate, devi configurare ulteriormente la policy. Per istruzioni, consulta la [documentazione del driver Amazon EBS SCI](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Amministratore AWS | 
| Aggiungi il driver Amazon EBS CSI. | Usa il seguente `eksctl` comando per aggiungere il driver Amazon EBS CSI:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Amministratore AWS | 

### Installa PGO
<a name="install-pgo"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository PGO. | Clona il repository per PGO GitHub :<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Fornisci i dettagli del ruolo per la creazione dell'account di servizio. | Per concedere al cluster Amazon EKS l'accesso alle AWS risorse richieste, specifica l'Amazon Resource Name (ARN) del ruolo OIDC che hai creato in precedenza nel `service_account.yaml` file in cui si trova. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Amministratore AWS, amministratore Kubernetes | 
| Crea il namespace e i prerequisiti PGO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore Kubernetes | 
| Verifica la creazione dei pod. | Verifica che lo spazio dei nomi e la configurazione predefinita siano stati creati:<pre>kubectl get pods -n postgres-operator</pre> | Amministratore AWS, amministratore Kubernetes | 
| Verifica. PVCs | Utilizzate il seguente comando per verificare le dichiarazioni di volume persistenti (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Amministratore AWS, amministratore Kubernetes | 

### Crea e distribuisci un operatore
<a name="create-and-deploy-an-operator"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un operatore. | Modifica il contenuto del file che si trova in `/kustomize/postgres/postgres.yaml` modo che corrisponda a quanto segue:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Questi aggiornamenti eseguono le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Amministratore AWS, DBA, amministratore Kubernetes | 
| Implementa l'operatore. | Implementa l'operatore PGO per consentire la gestione e il funzionamento semplificati dei database PostgreSQL negli ambienti Kubernetes:<pre>kubectl apply -k kustomize/postgres</pre> | Amministratore AWS, DBA, amministratore Kubernetes | 
| Verifica la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Dall'output del comando, annota la replica principale (`primary_pod_name`) e leggi replica (`read_pod_name`). Li utilizzerai nei passaggi successivi. | Amministratore AWS, DBA, amministratore Kubernetes | 

### Verifica la replica in streaming
<a name="verify-streaming-replication"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scrive i dati sulla replica principale. | Usa i seguenti comandi per connetterti alla replica primaria di PostgreSQL e scrivere dati nel database:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Amministratore AWS, amministratore Kubernetes | 
| Verifica che la replica letta contenga gli stessi dati. | Connect alla replica di lettura PostgreSQL e verifica se la replica in streaming funziona correttamente:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>La replica di lettura dovrebbe contenere la tabella creata nella replica primaria nel passaggio precedente. | Amministratore AWS, amministratore Kubernetes | 

## Risoluzione dei problemi
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il pod non si avvia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Le repliche sono notevolmente inferiori rispetto al database principale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Non hai visibilità sulle prestazioni e sullo stato del cluster PostgreSQL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| La replica non funziona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Risorse correlate
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) Service *(white paper sulla panoramica delle opzioni di distribuzione* su AWS)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html)(*Panoramica delle opzioni di distribuzione nel white paper di AWS*)
+ [Inizia a usare Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Amazon EKS User Guide*)
+ [Configura kubectl ed eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (Guida per l'utente di *Amazon EKS*)
+ [Creare un ruolo per la federazione OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*IAM User Guide*)
+ [Configurazione delle impostazioni per la AWS CLI(Guida per l'AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)*utente*)
+ [Documentazione di Crunchy Postgres per Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) Postgres per Kubernetes 5.0 (video)

# Semplifica l'autenticazione delle applicazioni con TLS reciproco in Amazon ECS utilizzando Application Load Balancer
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye e Shamanth Devagari, Amazon Web Services*

## Riepilogo
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

Questo modello ti aiuta a semplificare l'autenticazione delle applicazioni e ad alleggerire gli oneri di sicurezza con il TLS reciproco in Amazon Elastic Container Service (Amazon ECS) [utilizzando Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html) Balancer (ALB). Con ALB, puoi autenticare i certificati client X.509 da. AWS Autorità di certificazione privata Questa potente combinazione aiuta a garantire una comunicazione sicura tra i servizi, riducendo la necessità di complessi meccanismi di autenticazione all'interno delle applicazioni. Inoltre, il modello utilizza Amazon Elastic Container Registry (Amazon ECR) per archiviare le immagini dei container.

L'esempio di questo modello utilizza immagini Docker da una galleria pubblica per creare inizialmente i carichi di lavoro di esempio. Successivamente, vengono create nuove immagini Docker per essere archiviate in Amazon ECR. Per la fonte, prendi in considerazione un sistema basato su Git come GitHub, o Bitbucket GitLab, oppure usa Amazon Simple Storage Service Amazon S3 (Amazon S3). Per creare le immagini Docker, valuta la possibilità di utilizzarle per le immagini successive. AWS CodeBuild 

## Prerequisiti e limitazioni
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS con accesso agli stack di distribuzione. AWS CloudFormation Assicurati di disporre delle [autorizzazioni utente o di ruolo AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) (IAM) per la distribuzione. CloudFormation
+ AWS Command Line Interface [(AWS CLI) installato.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) [Configurate](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) AWS le credenziali sul computer locale o nell'ambiente utilizzando AWS CLI o impostando le variabili di ambiente nel `~/.aws/credentials` file.
+ [OpenSSL](https://www.openssl.org/) installato.
+ [Docker installato.](https://www.docker.com/get-started/)
+ [Familiarità con quanto Servizi AWS descritto in Strumenti.](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools)
+ Conoscenza di Docker e NGINX.

**Limitazioni**
+ Mutual TLS for Application Load Balancer supporta solo i certificati client X.509v3. I certificati client X.509v1 non sono supportati.
+ Il CloudFormation modello fornito nell'archivio di codice di questo pattern non include il provisioning di un CodeBuild progetto come parte dello stack.
+ 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**
+ Docker versione 27.3.1 o successiva
+ AWS CLI versione 2.14.5 o successiva

## Architecture
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

Il diagramma seguente mostra i componenti dell'architettura di questo modello.

![\[Flusso di lavoro per l'autenticazione con TLS reciproco utilizzando Application Load Balancer.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


 Il diagramma mostra il flusso di lavoro seguente:

1. Crea un repository Git ed esegui il commit del codice dell'applicazione nel repository.

1. Crea un'autorità di certificazione (CA) privata in. AWS Private CA

1. Crea un CodeBuild progetto. CodeBuildproject Viene attivato dalle modifiche di commit, crea l'immagine Docker e pubblica l'immagine creata su Amazon ECR.

1. Copia la catena di certificati e l'ente del certificato dalla CA e carica il pacchetto di certificati su Amazon S3.

1. Crea un trust store con il pacchetto CA che hai caricato su Amazon S3. Associate il trust store ai listener TLS reciproci sull'Application Load Balancer (ALB).

1. Utilizza la CA privata per emettere certificati client per i carichi di lavoro dei container. Crea anche un certificato TLS privato utilizzando. AWS Private CA

1. Importa il certificato TLS privato in AWS Certificate Manager (ACM) e usalo con ALB.

1. Il carico di lavoro del container in `ServiceTwo` utilizza il certificato client emesso per autenticarsi con l'ALB quando comunica con il carico di lavoro del contenitore in. `ServiceOne`

1. Il carico di lavoro del container in `ServiceOne` utilizza il certificato client emesso per autenticarsi con l'ALB quando comunica con il carico di lavoro del contenitore in. `ServiceTwo`

**Automazione e scalabilità**

Questo modello può essere completamente automatizzato utilizzando CloudFormation o AWS Cloud Development Kit (AWS CDK) eseguendo operazioni API da un SDK per fornire le AWS risorse.

Puoi utilizzarla AWS CodePipeline per implementare una pipeline di integrazione e distribuzione continua (CI/CD) CodeBuild per automatizzare il processo di creazione di immagini dei container e distribuire nuove versioni ai servizi del cluster Amazon ECS.

## Tools (Strumenti)
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Servizi AWS **
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) ti aiuta a creare, archiviare e rinnovare certificati e chiavi SSL/TLS X.509 pubblici e privati che proteggono i tuoi siti Web e le tue applicazioni. 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.
+ [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 di gestione dei container veloce e altamente scalabile per l'esecuzione, l'arresto e la gestione dei 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) che gestisci.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) ti consente di interagire direttamente con i container senza dover prima interagire con il sistema operativo del contenitore host, aprire le porte in entrata o gestire le chiavi SSH. Puoi usare ECS Exec per eseguire comandi in o inserire una shell in un contenitore in esecuzione su un' EC2 istanza Amazon o su. AWS Fargate
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra EC2 istanze Amazon, contenitori e indirizzi IP, in una o più zone di disponibilità. ELB monitora lo stato dei target registrati e indirizza il traffico solo verso gli obiettivi integri. ELB ridimensiona il sistema di bilanciamento del carico in base alle variazioni del traffico in entrata nel tempo. Può adattarsi automaticamente alla maggior parte dei carichi di lavoro.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)ti aiuta a eseguire contenitori senza dover gestire server o EC2 istanze Amazon. Fargate è compatibile sia con Amazon ECS che con Amazon Elastic Kubernetes Service (Amazon EKS). Puoi eseguire le tue attività e i tuoi servizi Amazon ECS con il tipo di lancio Fargate o con un provider di capacità Fargate. A tale scopo, impacchetta l'applicazione in contenitori, specifica i requisiti di CPU e memoria, definisci le politiche di rete e IAM e avvia l'applicazione. Ogni attività Fargate ha il proprio limite di isolamento e non condivide il kernel sottostante, le risorse della CPU, le risorse di memoria o l'interfaccia elastica di rete con un'altra attività.
+ [AWS Autorità di certificazione privata](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)consente la creazione di gerarchie di autorità di certificazione (CA) private, tra cui root e subordinate CAs, senza i costi di investimento e manutenzione legati alla gestione di una CA locale.

**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[GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html)](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), e [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) sono alcuni dei sistemi di controllo del codice sorgente basati su Git comunemente usati per tenere traccia delle modifiche al codice sorgente.
+ [NGINX Open Source è un sistema open source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) di bilanciamento del carico, cache dei contenuti e server web. Questo modello lo utilizza come server web.
+ [OpenSSL](https://www.openssl.org/) è una libreria open source che fornisce servizi utilizzati dalle implementazioni OpenSSL di TLS e CMS. 

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Best practice
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Usa Amazon ECS Exec per eseguire comandi o inserire una shell in un contenitore in esecuzione su Fargate. Puoi anche usare ECS Exec per raccogliere informazioni diagnostiche per il debug.
+ Utilizza i gruppi di sicurezza e gli elenchi di controllo degli accessi alla rete (ACLs) per controllare il traffico in entrata e in uscita tra i servizi. Le attività Fargate ricevono un indirizzo IP dalla sottorete configurata nel cloud privato virtuale (VPC).

## Epiche
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Crea il repository
<a name="create-the-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica il codice sorgente. | Per scaricare il codice sorgente di questo pattern, esegui il fork o clona il repository GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps ingegnere | 
| Crea un repository Git. | Per creare un repository Git che contenga il Dockerfile e `buildspec.yaml` i file, usa i seguenti passaggi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps ingegnere | 

### Crea CA e genera certificati
<a name="create-ca-and-generate-certificates"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una CA privata in AWS Private CA. | Per creare un'autorità di certificazione (CA) privata, esegui i seguenti comandi nel tuo terminale. Sostituite i valori nelle variabili di esempio con i vostri valori. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Per maggiori dettagli, consulta [Creare una CA privata AWS Private CA nella](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) AWS documentazione. | DevOps ingegnere, AWS DevOps | 
| Crea e installa il tuo certificato CA privato. | Per creare e installare un certificato per la tua CA root privata, esegui i seguenti comandi nel tuo terminale:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps ingegnere | 
| Richiedi un certificato gestito. | Per richiedere un certificato privato AWS Certificate Manager da utilizzare con il tuo ALB privato, usa il seguente comando:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps ingegnere, AWS DevOps | 
| Utilizza la CA privata per emettere un certificato client. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Questo comando restituisce la CSR e la chiave privata per i due servizi. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Per ulteriori informazioni, consulta [Emettere certificati privati per entità finali](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) nella AWS documentazione. | DevOps ingegnere, AWS DevOps | 

### Fornitura di servizi AWS
<a name="provision-aws-services"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Fornitura Servizi AWS con il CloudFormation modello. | Per effettuare il provisioning del cloud privato virtuale (VPC), del cluster Amazon ECS, dei servizi Amazon ECS, Application Load Balancer e Amazon Elastic Container Registry (Amazon ECR), utilizza il modello. CloudFormation  | DevOps ingegnere | 
| Ottieni variabili. | Verifica di avere un cluster Amazon ECS con due servizi in esecuzione. Per recuperare i dettagli delle risorse e memorizzarli come variabili, usa i seguenti comandi:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps ingegnere | 
| Crea un CodeBuild progetto. | Per utilizzare un CodeBuild progetto per creare le immagini Docker per i tuoi servizi Amazon ECS, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Per maggiori dettagli, consulta [Creare un progetto di compilazione AWS CodeBuild nella](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) AWS documentazione. | AWS DevOps, DevOps ingegnere | 
| Crea le immagini Docker. | È possibile utilizzare CodeBuild per eseguire il processo di creazione dell'immagine. CodeBuild necessita delle autorizzazioni per interagire con Amazon ECR e lavorare con Amazon S3.Come parte del processo, l'immagine Docker viene creata e inserita nel registro Amazon ECR. [Per dettagli sul modello e sul codice, consulta Informazioni aggiuntive.](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional)(Facoltativo) Per creare localmente a scopo di test, utilizzate il seguente comando:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps ingegnere | 

### Abilita il TLS reciproco
<a name="enable-mutual-tls"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Carica il certificato CA su Amazon S3. | Per caricare il certificato CA nel bucket Amazon S3, usa il seguente comando di esempio:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps ingegnere | 
| Crea il trust store. | Per creare il trust store, usa il seguente comando di esempio:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps ingegnere | 
| Carica i certificati dei clienti. | Per caricare certificati client su Amazon S3 per immagini Docker, usa il seguente comando di esempio:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps ingegnere | 
| Modifica l'ascoltatore. | Per abilitare il TLS reciproco sull'ALB, modifica i listener HTTPS utilizzando i seguenti comandi:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Per ulteriori informazioni, consulta [Configurazione del TLS reciproco su un Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer nella documentazione. AWS  | AWS DevOps, DevOps ingegnere | 

### Aggiorna i servizi
<a name="update-the-services"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna la definizione delle attività di Amazon ECS. | Per aggiornare la definizione del task di Amazon ECS, modifica il `image` parametro nella nuova revisione.Per ottenere i valori per i rispettivi servizi, aggiorna le definizioni delle attività con il nuovo Uri delle immagini Docker che hai creato nei passaggi precedenti: oppure `echo $ECRRepositoryServiceOneUri` `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Per ulteriori informazioni, consulta la sezione [Aggiornamento di una definizione di attività Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) utilizzando la console nella AWS documentazione.  | AWS DevOps, DevOps ingegnere | 
| Aggiorna il servizio Amazon ECS. | Aggiorna il servizio con la definizione di attività più recente. Questa definizione di attività è il modello per le immagini Docker di nuova creazione e contiene il certificato client richiesto per l'autenticazione TLS reciproca.  Per aggiornare il servizio, utilizzare la seguente procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Ripeti i passaggi per l'altro servizio. | Amministratore AWS, AWS DevOps, DevOps ingegnere | 

### Accedi all'applicazione
<a name="access-the-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Copia l'URL dell'applicazione. | Usa la console Amazon ECS per visualizzare l'attività. Quando lo stato dell'attività è stato aggiornato a In **esecuzione**, seleziona l'attività. Nella sezione **Attività**, copia l'ID dell'attività. | Amministratore AWS, AWS DevOps | 
| Testa la tua applicazione. | Per testare l'applicazione, usa ECS Exec per accedere alle attività.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Amministratore AWS, AWS DevOps | 

## Risorse correlate
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Documentazione Amazon ECS**
+ [Creazione di una definizione di attività Amazon ECS utilizzando la console](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Creazione di un’immagine di container da utilizzare su Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Cluster Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS per AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Best practice di rete di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parametri di definizione del servizio Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Altre risorse AWS **
+ [Come posso usare una CA AWS privata per configurare gli MTL sull'Application Load Balancer?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) ()AWS re:Post

## Informazioni aggiuntive
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Modifica del Dockerfile******

Il codice seguente mostra i comandi modificati nel Dockerfile per il servizio 1:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Il codice seguente mostra i comandi modificati nel Dockerfile per il servizio 2:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Se stai creando le immagini Docker con CodeBuild, il `buildspec` file utilizza il numero di CodeBuild build per identificare in modo univoco le versioni delle immagini come valore del tag. Puoi modificare il `buildspec` file in base alle tue esigenze, come mostrato nel seguente codice `buildspec ` personalizzato: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

# Altri modelli
<a name="containersandmicroservices-more-patterns-pattern-list"></a>

**Topics**
+ [Eliminazione automatica degli AWS CloudFormation stack e delle risorse associate](automate-deletion-cloudformation-stacks-associated-resources.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)
+ [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)
+ [Containerizza i carichi di lavoro mainframe che sono stati modernizzati da Blu Age](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.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)
+ [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 ambiente per applicazioni Blu Age containerizzate utilizzando Terraform](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Implementa la logica di preelaborazione in un modello ML in un singolo endpoint utilizzando una pipeline di inferenza in Amazon SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.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)
+ [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)
+ [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)
+ [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)
+ [Esegui la migrazione da Oracle WebLogic ad Apache Tomcat (ToMee) su Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Modernizza le applicazioni ASP.NET Web Forms su AWS](modernize-asp-net-web-forms-applications-on-aws.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)
+ [Monitora l'attività delle applicazioni utilizzando CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.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 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 i flussi di lavoro di machine learning dallo sviluppo locale agli esperimenti scalabili utilizzando SageMaker AI e Hydra](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [Struttura un progetto Python in architettura esagonale utilizzando AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [AWS Infrastruttura di test utilizzando LocalStack e Terraform Tests](test-aws-infra-localstack-terraform.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 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)