

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

# Calcolo
<a name="compute-pattern-list"></a>

**Topics**
+ [Contenitori e microservizi](containersandmicroservices-pattern-list.md)
+ [Serverless](serverless-pattern-list.md)
+ [Rete](networking-pattern-list.md)
+ [Distribuzione di contenuti](contentdelivery-pattern-list.md)

# 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 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 Target**

![\[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 EC2 istanze 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](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 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 ridimensionale 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 file. `service_account.yaml` Questo file si trova nella cartella [namespace](https://github.com/CrunchyData/postgres-operator-examples/tree/main/kustomize/install/rbac/namespace) del repository. <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 Kunernetes | 
| 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)
+ [Imposta uno spazio dati minimo praticabile per condividere i dati tra le organizzazioni](minimum-viable-data-space-share-data-organizations.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)

# Serverless
<a name="serverless-pattern-list"></a>

**Topics**
+ [Crea un'app mobile React Native senza server utilizzando AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Manage tenants across multiple SaaS products on a single control plane (Gestione dei tenant su più prodotti SaaS su un unico piano di controllo (control-plane))](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Consolida la generazione di URL predefiniti di Amazon S3 e il download di oggetti utilizzando un endpoint associato a indirizzi IP statici](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Crea una EventBridge connessione Amazon tra più account in un'organizzazione](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Distribuisci i record DynamoDB ad Amazon S3 utilizzando Kinesis Data Streams e Firehose con AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Implementa il controllo delle versioni delle API basato sul percorso utilizzando domini personalizzati in Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Importa la libreria psycopg2 per interagire con il tuo AWS Lambda database PostgreSQL](import-psycopg2-library-lambda.md)
+ [Integra Amazon API Gateway con Amazon SQS per gestire REST asincrono APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Elabora gli eventi in modo asincrono con Amazon API Gateway e AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Elabora gli eventi in modo asincrono con Amazon API Gateway e Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Elabora gli eventi in modo asincrono con Amazon API Gateway, Amazon SQS e AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.md)
+ [Esegui le attività di AWS Systems Manager Automation in modo sincrono da AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Esegui letture parallele di oggetti S3 usando Python in una funzione AWS Lambda](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Invia dati di telemetria da AWS Lambda a OpenSearch per analisi e visualizzazione in tempo reale](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Configura un router cellulare serverless per un'architettura basata su celle](serverless-cell-router-architecture.md)
+ [Configura l'accesso privato a un bucket Amazon S3 tramite un endpoint VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Risolvi i problemi relativi agli stati AWS Step Functions utilizzando Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Altri modelli](serverless-more-patterns-pattern-list.md)

# Crea un'app mobile React Native senza server utilizzando AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Riepilogo
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Questo modello mostra come creare un backend serverless per un'app mobile React Native utilizzando AWS Amplify e i seguenti servizi AWS:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Dopo aver configurato e distribuito il backend dell'app utilizzando Amplify, Amazon Cognito autentica gli utenti dell'app e li autorizza ad accedere all'app. AWS interagisce AppSync quindi con l'app frontend e con una tabella DynamoDB di backend per creare e recuperare dati.

**Nota**  
Questo modello utilizza una semplice app "ToDoList" come esempio, ma puoi utilizzare una procedura simile per creare qualsiasi app mobile React Native.

## Prerequisiti e limitazioni
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [Interfaccia a riga di comando Amplify (Amplify CLI), installata e configurata](https://docs.amplify.aws/cli/start/install/)
+ XCode (qualsiasi versione)
+ Microsoft Visual Studio (qualsiasi versione, qualsiasi editor di codice, qualsiasi editor di testo)
+ Familiarità con Amplify
+ Familiarità con Amazon Cognito
+ Familiarità con AWS AppSync
+ Familiarità con DynamoDB
+ Familiarità con Node.js
+ Familiarità con npm
+ Familiarità con React e React Native
+ Familiarità con JavaScript e ECMAScript 6 () ES6
+ Familiarità con GraphQL

## Architecture
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

Il diagramma seguente mostra un'architettura di esempio per l'esecuzione del backend di un'app mobile React Native nel cloud AWS:

![\[Flusso di lavoro per l'esecuzione di un'app mobile React Native con servizi AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


Il diagramma mostra la seguente architettura:

1. Amazon Cognito autentica gli utenti dell'app e li autorizza ad accedere all'app.

1. Per creare e recuperare dati, AWS AppSync utilizza un'API GraphQL per interagire con l'app frontend e una tabella DynamoDB di backend.

## Tools (Strumenti)
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**Servizi AWS**
+ [AWS Amplify è un set di strumenti e funzionalità appositamente progettati che aiuta gli sviluppatori web e mobili di frontend a creare rapidamente applicazioni complete su AWS](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html).
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) fornisce un'interfaccia GraphQL scalabile che aiuta gli sviluppatori di applicazioni a combinare dati provenienti da più fonti, tra cui Amazon DynamoDB, AWS Lambda e HTTP. APIs
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.
+ [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.

**Codice**

Il codice per l'applicazione di esempio utilizzata in questo modello è disponibile nel ios-todo-app repository GitHub [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Per utilizzare i file di esempio, segui le istruzioni nella sezione **Epics** di questo pattern.

## Epiche
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Crea ed esegui la tua app React Native
<a name="create-and-run-your-react-native-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un ambiente di sviluppo React Native.  | Per istruzioni, consulta [Configurazione dell'ambiente di sviluppo](https://reactnative.dev/docs/next/environment-setup) nella documentazione di React Native. | Sviluppatore di app | 
| Crea ed esegui l'app mobile ToDoList React Native in iOS Simulator. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Sviluppatore di app | 

### Inizializza un nuovo ambiente di backend per l'app
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i servizi di backend necessari per supportare l'app in Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Per la configurazione ToDoList dell'app utilizzata in questo modello, applica la seguente configurazione di esempio.**Esempio di impostazioni di configurazione dell'app React Native Amplify**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Per ulteriori informazioni, consulta [Creare un nuovo backend Amplify nella documentazione di Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) Dev Center.Il `amplify init` comando fornisce le seguenti risorse utilizzando [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Sviluppatore di app | 

### Aggiungi l'autenticazione Amazon Cognito alla tua app Amplify React Native
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un servizio di autenticazione Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Per la configurazione ToDoList dell'app utilizzata in questo modello, applica la seguente configurazione di esempio.**Esempio di impostazioni di configurazione del servizio di autenticazione**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>Il `amplify add auth` comando crea le cartelle, i file e i file di dipendenza necessari in una cartella locale (**amplify**) all'interno della directory principale del progetto. Per la configurazione ToDoList dell'app utilizzata in questo schema, il **file aws-exports.js** viene creato a questo scopo. | Sviluppatore di app | 
| Distribuisci il servizio Amazon Cognito nel cloud AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Per vedere i servizi distribuiti nel tuo progetto, vai alla console Amplify eseguendo il seguente comando:`amplify console` | Sviluppatore di app | 
| Installa le librerie Amplify richieste per React Native e le CocoaPods dipendenze per iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Sviluppatore di app | 
| Importa e configura il servizio Amplify. | Nel file del punto di ingresso dell'app (ad esempio, **App.js**), importa e carica il file di configurazione del servizio Amplify inserendo le seguenti righe di codice:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Se ricevi un errore dopo l'importazione del servizio Amplify nel file del punto di ingresso dell'app, interrompi l'app. Quindi, apri XCode e seleziona il **ToDoListAmplifyfile.xcworkspace** dalla cartella iOS del progetto ed esegui l'app. | Sviluppatore di app | 
| Aggiorna il file del punto di ingresso dell'app per utilizzare il componente WithAuthenticator Higher-order (HOC). | L'`withAuthenticator`HOC fornisce flussi di lavoro di accesso, registrazione e password dimenticata nell'app utilizzando solo poche righe di codice. Per ulteriori informazioni, consulta [Opzione 1: utilizzare componenti dell'interfaccia utente predefiniti](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) in Amplify Dev Center. Inoltre, [componenti di ordine superiore](https://reactjs.org/docs/higher-order-components.html) nella documentazione di React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Esempio di codice HOC WithAuthenticator**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>In iOS Simulator, l'app mostra la schermata di accesso fornita dal servizio Amazon Cognito. | Sviluppatore di app | 
| Verifica la configurazione del servizio di autenticazione. | In iOS Simulator, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Puoi anche aprire la [console Amazon Cognito](https://console.aws.amazon.com/cognito/) e verificare se un nuovo utente è stato creato o meno nel **pool di identità**. | Sviluppatore di app | 

### Connect un' AppSync API AWS e un database DynamoDB all'app
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un' AppSync API AWS e un database DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Per la configurazione dell' ToDoList app utilizzata in questo modello, applica la seguente configurazione di esempio.**Esempio di impostazioni di configurazione dell'API e del database**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Esempio di schema GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Sviluppatore di app | 
| Implementa l' AppSync API AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Per la configurazione ToDoList dell'app utilizzata in questo modello, applica la seguente configurazione di esempio.**Esempio di impostazioni di configurazione AppSync dell'API AWS**La seguente configurazione crea l'API GraphQL in AWS AppSync e una tabella **Todo** in Dynamo DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | Sviluppatore di app | 
| Connect il frontend dell'app all' AppSync API AWS. | Per utilizzare l' ToDoList app di esempio fornita in questo modello, copia il codice dal file **App.js** nel ios-todo-app GitHub repository [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Quindi, integra il codice di esempio nel tuo ambiente locale.Il codice di esempio fornito nel file **App.js** del repository esegue le seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Sviluppatore di app | 

## Risorse correlate
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)
+ [React](https://reactjs.org/) (documentazione React) 

# Manage tenants across multiple SaaS products on a single control plane (Gestione dei tenant su più prodotti SaaS su un unico piano di controllo (control-plane))
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava e Jennifer Pascal, Amazon Web Services*

## Riepilogo
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Questo modello mostra come gestire i cicli di vita dei tenant su più prodotti SaaS (Software as a Service) su un unico piano di controllo nel cloud AWS. L'architettura di riferimento fornita può aiutare le organizzazioni a ridurre l'implementazione di funzionalità ridondanti e condivise nei singoli prodotti SaaS e fornire efficienze di governance su larga scala.

Le grandi aziende possono disporre di più prodotti SaaS in diverse unità aziendali. Questi prodotti spesso devono essere forniti per essere utilizzati da tenant esterni con diversi livelli di abbonamento. Senza una soluzione tenant comune, gli amministratori IT devono dedicare del tempo alla gestione di funzionalità indifferenziate su più SaaS APIs, invece di concentrarsi sullo sviluppo delle funzionalità principali del prodotto.

La soluzione tenant comune fornita in questo modello può aiutare a centralizzare la gestione di molte delle funzionalità condivise dei prodotti SaaS di un'organizzazione, tra cui:
+ Sicurezza
+ Approvvigionamento per gli inquilini
+ Archiviazione dei dati degli inquilini
+ Comunicazioni con i tenant
+ Gestione del prodotto
+ Registrazione e monitoraggio delle metriche

## Prerequisiti e limitazioni
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Conoscenza di Amazon Cognito o di un provider di identità (IdP) di terze parti
+ Conoscenza di Amazon API Gateway
+ Conoscenza di AWS Lambda
+ Conoscenza di Amazon DynamoDB
+ Conoscenza di AWS Identity and Access Management (IAM)
+ Conoscenza di AWS Step Functions
+ Conoscenza di AWS CloudTrail e Amazon CloudWatch
+ Conoscenza delle librerie e del codice Python
+ Conoscenza del SaaS APIs, compresi i diversi tipi di utenti (organizzazioni, inquilini, amministratori e utenti delle applicazioni), i modelli di abbonamento e i modelli di isolamento dei tenant
+ Conoscenza dei requisiti SaaS multiprodotto e degli abbonamenti multi-tenant dell'organizzazione

**Limitazioni**
+ Le integrazioni tra la soluzione tenant comune e i singoli prodotti SaaS non sono coperte da questo modello.
+ Questo modello distribuisce il servizio Amazon Cognito solo in una singola regione AWS.

## Architecture
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Stack tecnologico Target**
+ Gateway Amazon API
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notification Service (Amazon SNS)
+ Funzioni AWS Step

**Architettura Target**

Il diagramma seguente mostra un esempio di flusso di lavoro per la gestione dei cicli di vita dei tenant su più prodotti SaaS su un unico piano di controllo nel cloud AWS.

![\[Flusso di lavoro per la gestione dei cicli di vita dei tenant su un unico piano di controllo.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 Il diagramma mostra il flusso di lavoro seguente:

1. Un utente AWS avvia azioni relative al provisioning dei tenant, al provisioning dei prodotti o all'amministrazione effettuando una chiamata a un endpoint API Gateway.

1. L'utente viene autenticato da un token di accesso recuperato da un pool di utenti di Amazon Cognito o da un altro IdP.

1. Le singole attività di provisioning o amministrazione vengono eseguite da funzioni Lambda integrate con gli endpoint API API Gateway.

1. L'amministrazione APIs della soluzione Common Tenant (per tenant, prodotti e utenti) raccoglie tutti i parametri di input, le intestazioni e i token richiesti. Quindi, l'amministrazione APIs richiama le funzioni Lambda associate.

1. Le autorizzazioni IAM sia per l'amministrazione che per APIs le funzioni Lambda sono convalidate dal servizio IAM.

1. Le funzioni Lambda archiviano e recuperano i dati dai cataloghi (per tenant, prodotti e utenti) in DynamoDB e Amazon S3.

1. Dopo la convalida delle autorizzazioni, viene richiamato un flusso di lavoro AWS Step Functions per eseguire un'attività specifica. L'esempio nel diagramma mostra un flusso di lavoro di provisioning dei tenant.

1. Le singole attività del flusso di lavoro AWS Step Functions vengono eseguite in un flusso di lavoro predeterminato (macchina a stati).

1. Tutti i dati essenziali necessari per eseguire la funzione Lambda associata a ciascuna attività del flusso di lavoro vengono recuperati da DynamoDB o Amazon S3. Potrebbe essere necessario effettuare il provisioning di altre risorse AWS utilizzando un CloudFormation modello AWS.

1. Se necessario, il flusso di lavoro invia una richiesta di fornitura di risorse AWS aggiuntive per uno specifico prodotto SaaS all'account AWS di quel prodotto.

1. Quando la richiesta ha esito positivo o negativo, il flusso di lavoro pubblica l'aggiornamento di stato come messaggio su un argomento di Amazon SNS.

1. Amazon SNS è abbonato all'argomento Amazon SNS del flusso di lavoro Step Functions.

1. Amazon SNS invia quindi l'aggiornamento dello stato del flusso di lavoro all'utente AWS.

1. I log delle azioni di ogni servizio AWS, incluso un audit trail delle chiamate API, vengono inviati a CloudWatch. È possibile configurare regole e allarmi specifici CloudWatch per ogni caso d'uso.

1. I log vengono archiviati in bucket Amazon S3 per scopi di controllo.

**Automazione e scalabilità**

Questo modello utilizza un CloudFormation modello per aiutare ad automatizzare l'implementazione della soluzione tenant comune. Il modello può anche aiutarti a scalare rapidamente verso l'alto o verso il basso le risorse associate.

Per ulteriori informazioni, consulta [Working with AWS CloudFormation templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) nella *AWS CloudFormation User Guide*.

## Tools (Strumenti)
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-tools"></a>

**Servizi AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) ti CloudTrail aiuta a controllare la governance, la conformità e il rischio operativo del tuo account AWS.
+ [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 DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) è un servizio di orchestrazione serverless che ti aiuta a combinare le funzioni di AWS Lambda e altri servizi AWS per creare applicazioni aziendali critiche.

## Best practice
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

La soluzione in questo modello utilizza un unico piano di controllo per gestire l'onboarding di più tenant e fornire l'accesso a più prodotti SaaS. Il piano di controllo aiuta gli utenti amministrativi a gestire altri quattro piani specifici per funzionalità:
+ Piano di sicurezza
+ Piano del flusso di lavoro
+ Piano di comunicazione
+ Piano di registrazione e monitoraggio

## Epiche
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Configura il piano di sicurezza
<a name="configure-the-security-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Stabilisci i requisiti per la tua piattaforma SaaS multi-tenant. | Stabilisci requisiti dettagliati per quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Architetto cloud, amministratore di sistema AWS | 
| Configura il servizio Amazon Cognito. | Segui le istruzioni in [Introduzione ad Amazon Cognito nella Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) *Developer Guide*. | Architetto del cloud | 
| Configura le politiche IAM richieste. | Crea le policy IAM richieste per il tuo caso d'uso. Quindi, associa le policy ai ruoli IAM in Amazon Cognito.Per ulteriori informazioni, consulta [Gestire l'accesso utilizzando le policy](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) e il [controllo degli accessi basato sui ruoli](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) nella *Amazon Cognito Developer Guide*. | Amministratore cloud, architetto cloud, sicurezza AWS IAM | 
| Configura le autorizzazioni API richieste.  | Configura le autorizzazioni di accesso all'API Gateway utilizzando i ruoli e le policy IAM e gli autorizzatori Lambda.Per istruzioni, consulta le seguenti sezioni della *Amazon API Gateway Developer Guide*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Amministratore cloud, architetto cloud | 

### Configura il piano dati
<a name="configure-the-data-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea i cataloghi di dati richiesti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Per ulteriori informazioni, consulta [Configurazione di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) nella Amazon DynamoDB Developer *Guide*. | DBA | 

### Configurare il piano di controllo
<a name="configure-the-control-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea funzioni Lambda e API Gateway APIs per eseguire le attività richieste dal piano di controllo. | Crea funzioni Lambda e API Gateway separati APIs per aggiungere, eliminare e gestire quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Per ulteriori informazioni, consulta [Using AWS Lambda with Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) nella *AWS Lambda Developer Guide*. | Sviluppatore di app | 

### Configura il piano del flusso di lavoro
<a name="configure-the-workflow-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Identifica le attività che i flussi di lavoro di AWS Step Functions devono eseguire. | Identifica e documenta i requisiti dettagliati del flusso di lavoro di AWS Step Functions per quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Assicurati che le principali parti interessate approvino i requisiti. | Proprietario dell'app | 
| Crea i flussi di lavoro AWS Step Functions richiesti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Sviluppatore di app, Build lead | 

### Configura il piano di comunicazione
<a name="configure-the-communication-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea argomenti Amazon SNS. | Crea argomenti Amazon SNS per ricevere notifiche su quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Per ulteriori informazioni, consulta l'[argomento Creazione di un SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) nella *Amazon SNS* Developer Guide. | Proprietario dell'app, Cloud architect | 
| Sottoscrivi gli endpoint a ogni argomento di Amazon SNS. | Per ricevere messaggi pubblicati su un argomento di Amazon SNS, devi sottoscrivere un endpoint per ogni argomento.Per ulteriori informazioni, consulta l'argomento [Abbonamento a un argomento Amazon SNS nella Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) *Developer Guide*. | Sviluppatore di app, architetto cloud | 

### Configura il piano di registrazione e monitoraggio
<a name="configure-the-logging-and-monitoring-plane"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Attiva la registrazione per ogni componente della soluzione tenant comune. | Attiva la registrazione a livello di componente per ogni risorsa nella soluzione tenant comune che hai creato.Per le istruzioni, consulta quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Puoi consolidare i log di ogni risorsa in un account di registrazione centralizzato utilizzando le policy IAM. Per ulteriori informazioni, consulta Registrazione [centralizzata e barriere di sicurezza per più account](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Sviluppatore di app, amministratore di sistema AWS, amministratore cloud | 

### Fornisci e distribuisci la soluzione tenant comune
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea CloudFormation modelli. | Automatizza l'implementazione e la manutenzione della soluzione Common Tenant completa e di tutti i suoi componenti utilizzando CloudFormation i modelli.Per ulteriori informazioni, consulta la [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Sviluppatore di app, DevOps ingegnere, CloudFormation sviluppatore | 

## Risorse correlate
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Controlla l'accesso a un'API REST utilizzando i pool di utenti di Amazon Cognito come autorizzatore](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Amazon API Gateway* Developer Guide)
+ [Usa gli autorizzatori API Gateway Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*Amazon API Gateway* Developer Guide)
+ [Pool di utenti di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (*Amazon Cognito Developer Guide*)
+ [ CloudWatch Console per più account e più regioni](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (*Amazon CloudWatch User Guide*)

# Consolida la generazione di URL predefiniti di Amazon S3 e il download di oggetti utilizzando un endpoint associato a indirizzi IP statici
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo e Jun Soung Lee, Amazon Web Services*

## Riepilogo
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Questo modello semplifica l'accesso ad Amazon Simple Storage Service (Amazon S3) creando file predefiniti sicuri e personalizzati per il download di oggetti. URLs La soluzione fornisce un singolo endpoint con un dominio unico e indirizzi IP statici. È personalizzato per i clienti che richiedono il consolidamento degli endpoint API e Amazon S3 in un dominio unificato con indirizzi IP statici. Il caso d'uso prevede che gli utenti seguano una politica firewall con elenchi di indirizzi IP e domini consentiti, limitando l'accesso delle API a domini e indirizzi IP specifici. 

L'architettura utilizza chiavi Servizi AWS, tra cui AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink e Amazon S3. Questo design centralizza l'API per la generazione di endpoint predefiniti URLs e Amazon S3 in un unico dominio, collegato a un acceleratore con due indirizzi IP statici. Di conseguenza, gli utenti possono richiedere URLs e scaricare facilmente oggetti Amazon S3 predefiniti tramite un endpoint di dominio unificato con indirizzi IP statici. 

Questa architettura è particolarmente vantaggiosa per i clienti con politiche o requisiti di conformità rigorosi, come quelli dei settori pubblico, medico e finanziario.

## Prerequisiti e limitazioni
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Una zona pubblica ospitata per il tuo nome di dominio personalizzato
+ Un dominio importato in AWS Certificate Manager (ACM) in un formato Regione AWS a tua scelta

**Limitazioni**
+ Il nome del bucket Amazon S3 deve corrispondere al nome di dominio dell'endpoint. Questo requisito serve a garantire che l'endpoint Amazon S3 possa essere servito tramite un unico endpoint API.
+ Il nome di dominio personalizzato utilizzato in API Gateway deve essere allineato al nome di dominio del singolo endpoint API.
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

Il diagramma seguente mostra l'architettura e il flusso di lavoro di destinazione per questo modello.

![\[Componenti e flusso di lavoro per la generazione di URL predefiniti e il download di oggetti.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


Il diagramma illustra il concetto e il flusso di lavoro seguenti:

1. Un utente avvia una richiesta per generare un URL predefinito utilizzando l'endpoint personalizzato fornito tramite AWS Global Accelerator, utilizzando il nome di dominio personalizzato e gli indirizzi IP associati.

1. Una funzione Lambda genera l'URL predefinito, che punta all'endpoint personalizzato. Risponde con un reindirizzamento 301 che contiene l'URL prefirmato generato. Tramite l'URL prefirmato reindirizzato, l'utente scarica automaticamente l'oggetto utilizzando l'endpoint personalizzato fornito tramite Global Accelerator.

I componenti dell'architettura generale per la generazione di URL predefiniti e il flusso di lavoro per il download degli oggetti sono i seguenti:
+ Fornitura di indirizzi IP statici da parte di Global Accelerator.
+ Registrazione dell'alias dell'acceleratore come record A nella zona ospitata pubblica di Amazon Route 53 con il nome di dominio personalizzato.
+ Creazione di un bucket Amazon S3 con un nome di bucket che corrisponda al nome di dominio personalizzato registrato.
+ Creazione di endpoint VPC per API Gateway e il servizio Amazon S3.
+ Configurazione di un Application Load Balancer con interfaccia interna per la connessione a Global Accelerator.
+ Assegnazione di un nome di dominio personalizzato per API Gateway con un certificato ACM allegato.
+ Implementazione di un API Gateway privato integrato con una funzione Lambda.
+ La funzione Lambda è dotata di un ruolo AWS Identity and Access Management (IAM) associato (con [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)autorizzazioni).

## Tools (Strumenti)
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Servizi AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ Gli [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuiscono il traffico delle applicazioni in entrata su più destinazioni, come le istanze Amazon Elastic Compute Cloud (Amazon EC2), in più zone di disponibilità.
+ [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 Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software che consente di definire e fornire Cloud AWS l'infrastruttura in codice.
+ [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html)è un servizio globale che supporta endpoint multipli Regioni AWS. È possibile creare acceleratori che indirizzano il traffico verso endpoint ottimali sulla AWS rete globale. Questo migliora la disponibilità e le prestazioni delle applicazioni Internet utilizzate da un pubblico globale.
+ [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 PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)ti aiuta a creare connessioni private unidirezionali dai tuoi cloud privati virtuali (VPCs) a servizi esterni al VPC.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

**Altri strumenti**
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Puoi implementare questo modello utilizzando AWS CDK o Terraform in base alle tue preferenze. La sezione [Epics](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) contiene istruzioni per entrambi i metodi di distribuzione. Il codice per questo pattern è disponibile nei seguenti GitHub repository:
+ **AWS CDK**— [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk) - -cdk presignedurl-staticips-endpoint-with
+ [Terraform — s3- **-terraform** presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform)

## Best practice
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Per migliorare la sicurezza nell'ambiente di produzione, è fondamentale implementare meccanismi di autorizzazione, come [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), per limitare l'accesso all'API di `PresignedUrl` generazione.
+ 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="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Prepara l'ambiente
<a name="prepare-the-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scegli un nome di dominio. | Scegli un nome di dominio pubblico per l'endpoint Amazon S3 unificato. Il nome di dominio viene utilizzato anche come nome del bucket Amazon S3. | Amministratore AWS, amministratore di rete | 
| Crea una zona ospitata pubblica | [Crea una zona pubblica ospitata](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) in Amazon Route 53. Il nome di dominio deve corrispondere al nome di dominio utilizzato in API Gateway. | Amministratore AWS, amministratore di rete | 
| Prepara un certificato SSL. | Utilizza AWS Certificate Manager (ACM) per [richiedere](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) o [importare](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) un certificato SSL per il dominio della tua applicazione web. | Amministratore AWS, amministratore di rete | 

### Implementa il pattern con Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l'ambiente di sviluppo Terraform. | Per configurare l'ambiente di sviluppo, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Amministratore AWS, amministratore cloud | 
| Modifica i **`provider.tf`**file `.tfvars` and. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Tieni presente quanto segue:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Amministratore AWS, amministratore cloud | 
| Fornisci risorse di rete. | Per effettuare il provisioning delle risorse di rete, esegui i seguenti comandi:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Durante l'esecuzione del `apply ` comando, digitate **yes** quando richiesto. | Amministratore AWS, amministratore cloud | 
| Esegui il provisioning di API Gateway, Amazon S3 e Lambda. | Per effettuare il provisioning delle risorse di rete, utilizza i seguenti comandi:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Amministratore AWS, amministratore cloud | 

### Implementa il pattern con AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura l'ambiente di AWS CDK sviluppo. | Per configurare l'ambiente di sviluppo, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Amministratore AWS, amministratore cloud | 
| Configura le impostazioni del dominio nel `config/index.ts` file. | Per modificare le opzioni della variabile costante, utilizzate i seguenti comandi:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Nei comandi, sostituisci ogni segnaposto con le tue informazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Amministratore AWS, amministratore cloud | 
| Distribuisci gli stack. | Per distribuire due stack, uno per il cloud privato virtuale (VPC) e l'altro per l'applicazione, usa il seguente comando:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Amministratore AWS, amministratore cloud | 

### Prova il modello
<a name="test-the-pattern"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica gli indirizzi IP dell'endpoint. | Per verificare che il dominio per questo pattern abbia indirizzi IP statici, utilizzate il seguente comando:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Amministratore di rete | 
| Carica un file di test che potrai scaricare in seguito. | Carica il file di test nella `'/objects'` cartella del bucket Amazon S3. | Amministratore AWS, amministratore cloud | 
| Richiama l'API per generare un URL predefinito. | Per generare un URL predefinito, richiamate l'URL da un browser o da un client API (ad esempio, [Postman](https://www.postman.com/product/what-is-postman/)) utilizzando il seguente formato:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Sostituisci i valori segnaposto in `${s3-bucket-prefix}` e `${domain}` con i valori impostati nei passaggi precedenti. | Proprietario dell'app | 
| Controlla il risultato. | Il risultato previsto è che dovresti ricevere un codice di stato di reindirizzamento 301 (Spostato permanentemente). Questa risposta conterrà l'URL predefinito, che dovrebbe avviare automaticamente il download del file di test. | Tecnico di test | 

### Pulisci con Terraform
<a name="clean-up-with-terraform"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distruggi le risorse API Gateway, Amazon S3 e Lambda. | Per eliminare le risorse, usa i seguenti comandi:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Amministratore AWS, amministratore cloud | 
| Distruggi le risorse di rete. | Per eliminare le risorse di rete, utilizzate i seguenti comandi:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Amministratore AWS, amministratore cloud | 

### Pulisci con AWS CDK
<a name="clean-up-with-cdk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distruggi le pile. | Per distruggere sia il VPC che lo stack delle applicazioni, usa il seguente comando:<pre>$ cdk destroy --all</pre> | Amministratore AWS, amministratore cloud | 
| Svuota ed elimina i bucket Amazon S3. | [Svuota](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) ed [elimina](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) il bucket Amazon S3 oggetto e il bucket Amazon S3 di log che non vengono eliminati per impostazione predefinita.I nomi dei bucket Amazon S3 sono e. `${s3-bucket-prefix}.${domain}` `${s3-bucket-prefix}.${domain}-logs`Se preferisci usare il [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) per eliminare i bucket, usa i seguenti comandi:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Sostituite `${s3-bucket-prefix}` e `${domain}` con i valori impostati nei passaggi precedenti. , /p> | Amministratore AWS, amministratore cloud | 

## Risorse correlate
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blog**
+ [Accesso a un Amazon API Gateway tramite indirizzi IP statici forniti da AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Genera un URL predefinito in formato modulare AWS CDK per JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hosting di siti Web statici HTTPS interni con ALB, S3 e PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Crea una EventBridge connessione Amazon tra più account in un'organizzazione
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson e Robert Stone, Amazon Web Services*

## Riepilogo
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

I sistemi distribuiti di grandi dimensioni utilizzano Amazon EventBridge per comunicare i cambiamenti di stato tra diversi account Amazon Web Services (AWS) in un' AWS Organizations organizzazione. Tuttavia, EventBridge è generalmente in grado di rivolgersi solo agli endpoint o ai consumatori della stessa Account AWS. L'eccezione è un bus di eventi in un account diverso. Quel bus di eventi è un obiettivo valido. Per utilizzare gli eventi di un bus di eventi in un altro account, gli eventi devono essere trasferiti dal bus degli eventi dell'account di origine al bus degli eventi dell'account di destinazione. Per evitare problemi nella gestione di eventi critici tra applicazioni diverse Account AWS, utilizzate l'approccio consigliato presentato in questo modello.

Questo modello illustra come implementare un'architettura basata sugli eventi EventBridge che coinvolga più persone Account AWS in un'organizzazione. AWS Organizations Il modello utilizza AWS Cloud Development Kit (AWS CDK) Toolkit e. AWS CloudFormation

EventBridge offre un bus di eventi senza server che consente di ricevere, filtrare, trasformare, indirizzare e distribuire eventi. Un componente fondamentale delle architetture basate sugli eventi, EventBridge supporta la separazione tra produttori di messaggi e consumatori di tali messaggi. In un unico account, questo è semplice. Una struttura con più account richiede considerazioni aggiuntive affinché gli eventi sull'Event Bus di un account vengano utilizzati in altri account all'interno della stessa organizzazione.

[Per informazioni sulle considerazioni specifiche relative agli account per produttori e consumatori, consulta la sezione Informazioni aggiuntive.](#create-cross-account-amazon-eventbridge-connection-organization-additional)

## Prerequisiti e limitazioni
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Prerequisiti**
+ Un' AWS Organizations organizzazione con almeno due associati Account AWS
+ Un ruolo AWS Identity and Access Management (IAM) in entrambi Account AWS che consente di effettuare il provisioning dell'infrastruttura in entrambi Account AWS utilizzando AWS CloudFormation
+ Git [installato localmente](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [installato localmente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [installato localmente](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) e [avviato in entrambi](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) Account AWS

**Versioni del prodotto**

Questo modello è stato creato e testato utilizzando i seguenti strumenti e versioni:
+ AWS CDK Toolkit 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Questo modello dovrebbe funzionare con qualsiasi versione di AWS CDK v2 o npm. Le versioni da 13.0.0 a 13.6.0 di Node.js non sono compatibili con. AWS CDK

## Architecture
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Architettura Target**

Il diagramma seguente mostra il flusso di lavoro dell'architettura per trasferire un evento da un account e consumarlo in un altro account.

![\[Il processo in tre fasi per connettere l'account del produttore di origine e l'account consumatore di destinazione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


Il flusso di lavoro prevede i seguenti passaggi:

1. La AWS Lambda funzione Producer nell'account Source inserisce un evento nel bus degli EventBridge eventi dell'account.

1. La EventBridge regola cross-account indirizza l'evento a un bus di EventBridge eventi nell'account di destinazione.

1. Il bus EventBridge eventi nell'account Destination ha una regola Lambda di destinazione che richiama la funzione Consumer Lambda.

Una procedura ottimale consiste nell'utilizzare una [Dead Letter Queue (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) per gestire le chiamate non riuscite della funzione Consumer Lambda. Tuttavia, il DLQ è stato omesso da questa soluzione per motivi di chiarezza. [Per ulteriori informazioni su come implementare un DLQ nei flussi di lavoro e migliorare la capacità dei flussi di lavoro di ripristino in caso di errori, consulta il post sul blog Implementing error handling patterns. AWS Lambda](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/)

**Automazione e scalabilità**

AWS CDK esegue automaticamente il provisioning dell'architettura richiesta. EventBridge può scalare fino a migliaia di record al secondo a seconda di Regione AWS. Per ulteriori informazioni, consulta la [documentazione sulle EventBridge quote Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Tools (Strumenti)
<a name="create-cross-account-amazon-eventbridge-connection-organization-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che ti aiuta a definire e fornire Cloud AWS l'infrastruttura in codice. Questo modello utilizza il [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html), un kit di sviluppo cloud a riga di comando che consente di interagire con AWS CDK l'app.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che ti aiuta a consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.

**Altri strumenti**
+ [Node.js](https://nodejs.org/en/docs/) è un ambiente di JavaScript runtime basato sugli eventi progettato per la creazione di applicazioni di rete scalabili.
+ [npm](https://docs.npmjs.com/about-npm) è un registro software che viene eseguito in un ambiente Node.js e viene utilizzato per condividere o prendere in prestito pacchetti e gestire la distribuzione di pacchetti privati.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Archivio di codice**

Il codice per questo modello è disponibile nel repository GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

## Best practice
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Per le migliori pratiche di utilizzo EventBridge, consulta le seguenti risorse:
+ [Le migliori pratiche per i modelli di EventBridge eventi di Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Le migliori pratiche per la definizione delle regole in Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Epiche
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Prepara il tuo ambiente di AWS CDK distribuzione locale
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura le credenziali locali per l'account di origine e l'account di destinazione. | [Consulta la sezione Configurazione della nuova configurazione e delle nuove credenziali](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new) e utilizza il metodo di autenticazione e credenziali più adatto al tuo ambiente.Assicurati di configurare l'autenticazione sia AWS CLI per l'account di origine che per l'account di destinazione.Queste istruzioni presuppongono che tu abbia configurato due profili AWS localmente: `sourceAccount` e`destinationAccount`. | Sviluppatore di app | 
| Bootstrap entrambi Account AWS. | Per avviare gli account, esegui i seguenti comandi:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Sviluppatore di app | 
| Clona il codice del pattern. | Per clonare il repository, esegui il seguente comando:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>Quindi, cambia la directory nella cartella del progetto appena clonata:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Sviluppatore di app | 

### Esegui la distribuzione sull'account ProducerStack di origine
<a name="deploy-producerstack-to-the-source-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica inserendo `cdk.json` i tuoi dati AWS Organizations e quelli del tuo account. | Nella cartella principale del progetto, apporta le seguenti modifiche a`cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Sviluppatore di app | 
| Distribuisci le ProducerStack risorse. | Esegui il comando seguente dalla directory principale del progetto:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Quando richiesto, accetta i nuovi ruoli IAM e le altre autorizzazioni relative alla sicurezza create tramite. AWS CloudFormation | Sviluppatore di app | 
| Verifica che le risorse siano distribuite. ProducerStack  | Per verificare le risorse, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Sviluppatore di app | 

### Esegui la distribuzione sull' ConsumerStack account di destinazione
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci le ConsumerStack risorse. | Esegui il comando seguente dalla directory principale del progetto:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Quando richiesto, accetta i nuovi ruoli IAM e le altre autorizzazioni relative alla sicurezza create tramite. CloudFormation | Sviluppatore di app | 
| Verifica che le risorse siano distribuite ConsumerStack  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Sviluppatore di app | 

### Produci e consuma eventi
<a name="produce-and-consume-events"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invoca la funzione Producer Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Sviluppatore di app | 
| Verifica che l'evento sia stato ricevuto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Sviluppatore di app | 

### Pulizia
<a name="cleanup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distruggi le ConsumerStack risorse. | Se utilizzi questo schema come test, pulisci le risorse distribuite per evitare di incorrere in costi aggiuntivi.Esegui il comando seguente dalla directory principale del progetto:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Ti verrà richiesto di confermare l'eliminazione dello stack. | Sviluppatore di app | 
| Distruggi le risorse. ProducerStack  | Esegui il seguente comando dalla directory principale del progetto:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Ti verrà richiesto di confermare l'eliminazione dello stack. | Sviluppatore di app | 

## risoluzione dei problemi
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Non è stato ricevuto alcun evento nell'account Destination. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| L'invocazione di una funzione Lambda dalla console restituisce il seguente errore: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Contatta Account AWS l'amministratore per ricevere le autorizzazioni di `lambda:Invoke` azione appropriate sulla funzione `ProducerStack-ProducerLambdaXXXX` Lambda. | 

## Risorse correlate
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Riferimenti**
+ [AWS Organizations Guida per l'utente](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Modelli di EventBridge eventi Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Regole in Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutorial e video**
+ [Tutorial: creazione e configurazione di un'organizzazione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023 - Modelli avanzati basati sugli eventi con Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Informazioni aggiuntive
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Regola del produttore**

Nell'account Source, viene creato un bus di EventBridge eventi per accettare messaggi dai produttori (come mostrato nella sezione *Architettura*). Su questo bus di eventi viene creata una regola con autorizzazioni IAM di accompagnamento. Le regole hanno come target il bus degli EventBridge eventi nell'account di destinazione in base alla seguente struttura: `cdk.json`

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Per ogni bus di eventi che consuma, devono essere inclusi il pattern di eventi e il bus di eventi di destinazione.

*Modello di eventi*

[I pattern di eventi](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) filtrano gli eventi a cui verrà applicata questa regola. Ai fini di questo esempio, le sorgenti degli eventi e il record `detail_types` identificano gli eventi da trasmettere dal bus degli eventi dell'account di origine al bus degli eventi dell'account di destinazione.

*Bus degli eventi di destinazione*

Questa regola si rivolge a un bus di eventi che esiste in un altro account. Il valore completo `arn` (Amazon Resource Name) è necessario per identificare in modo univoco il bus degli eventi di destinazione ed `id` è l'[ID logico](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) utilizzato da AWS CloudFormation. Non è necessario che il bus degli eventi di destinazione esista effettivamente al momento della creazione della regola di destinazione.

**Considerazioni specifiche sull'account di destinazione**

Nell'account di destinazione, viene creato un bus di EventBridge eventi per ricevere messaggi dal bus eventi dell'account di origine. Per consentire la pubblicazione degli eventi dall'account Source, devi creare una politica basata [sulle risorse](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

È particolarmente importante concedere l'`events:PutEvents`autorizzazione, che consente a qualsiasi altro account della stessa organizzazione di pubblicare eventi su questo bus di eventi. L'impostazione `aws:PrincipalOrgId` come ID dell'organizzazione concede le autorizzazioni necessarie.

**Modello di evento**

Puoi modificare il pattern di eventi incluso per adattarlo al tuo caso d'uso:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

Per ridurre l'elaborazione non necessaria, il modello di eventi deve specificare che solo gli eventi che devono essere elaborati dall'account di destinazione vengono trasmessi al bus eventi dell'account di destinazione.

*Politica basata sulle risorse*

Questo esempio utilizza l'ID dell'organizzazione per controllare quali account sono autorizzati a inserire eventi sul bus eventi dell'account di destinazione. Prendi in considerazione l'utilizzo di una politica più restrittiva, come specificare l'account di origine.

*EventBridge quote*

Tieni presente le seguenti [quote](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html):
+ La quota predefinita è 300 regole per bus di eventi. Questa può essere ampliata se necessario, ma dovrebbe adattarsi alla maggior parte dei casi d'uso.
+ Il numero massimo consentito di cinque obiettivi per regola. Consigliamo agli architetti delle applicazioni di utilizzare una regola distinta per ogni account di destinazione per supportare un controllo granulare sul modello di eventi.

# Distribuisci i record DynamoDB ad Amazon S3 utilizzando Kinesis Data Streams e Firehose con AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava e Daniel Matuki da Cunha, Amazon Web Services*

## Riepilogo
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Questo modello fornisce codice di esempio e un'applicazione per la distribuzione di record da Amazon DynamoDB ad Amazon Simple Storage Service (Amazon S3) utilizzando Amazon Kinesis Data Streams e Amazon Data Firehose. L'approccio del pattern utilizza [costrutti AWS Cloud Development Kit (AWS CDK) L3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) e include un esempio di come eseguire la trasformazione dei dati AWS Lambda prima che i dati vengano consegnati al bucket S3 di destinazione sul cloud Amazon Web Services ().AWS

Kinesis Data Streams registra le modifiche a livello di elemento nelle tabelle DynamoDB e le replica nel flusso di dati Kinesis richiesto. Le applicazioni possono accedere a Kinesis Data Streams e visualizzare le modifiche a livello di elemento in tempo quasi reale. Kinesis Data Streams fornisce anche l'accesso ad altri servizi Amazon Kinesis, come Firehose e Amazon Managed Service for Apache Flink. Ciò significa che puoi creare applicazioni che forniscono dashboard in tempo reale, generare avvisi, implementare prezzi e pubblicità dinamici ed eseguire analisi sofisticate dei dati.

Puoi utilizzare questo modello per i tuoi casi d'uso di integrazione dei dati. Ad esempio, i veicoli di trasporto o le apparecchiature industriali possono inviare elevati volumi di dati a una tabella DynamoDB. Questi dati possono quindi essere trasformati e archiviati in un data lake ospitato in Amazon S3. Puoi quindi interrogare ed elaborare i dati e prevedere eventuali difetti potenziali utilizzando servizi serverless come Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition e. AWS Glue

## Prerequisiti e limitazioni
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Prerequisiti*
+ Un attivo. Account AWS
+ AWS Command Line Interface (AWS CLI), installato e configurato. Per ulteriori informazioni, consulta la sezione [Guida introduttiva AWS CLI a the](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) nella AWS CLI documentazione.
+ Node.js (18.x\$1) e npm, installati e configurati. Per ulteriori informazioni, consulta [Download e installazione di Node.js e npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) nella documentazione. `npm`
+ aws-cdk (2.x\$1), installato e configurato. Per ulteriori informazioni, consulta la sezione [Guida introduttiva a the nella documentazione](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). AWS CDK AWS CDK 
+ Il repository GitHub [aws-dynamodb-kinesisfirehose-sa 3 ingestioni](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), clonato e configurato sul computer locale.
+ Dati di esempio esistenti per la tabella DynamoDB. I dati devono utilizzare il seguente formato: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## Architecture
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

Il diagramma seguente mostra un esempio di flusso di lavoro per la distribuzione di record da DynamoDB ad Amazon S3 utilizzando Kinesis Data Streams e Firehose.

![\[Un esempio di flusso di lavoro per la distribuzione di record da DynamoDB ad Amazon S3 utilizzando Kinesis Data Streams e Firehose.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


Il diagramma mostra il flusso di lavoro seguente:

1. I dati vengono acquisiti utilizzando Amazon API Gateway come proxy per DynamoDB. Puoi anche utilizzare qualsiasi altra fonte per importare dati in DynamoDB. 

1. Le modifiche a livello di articolo vengono generate quasi in tempo reale in Kinesis Data Streams per la distribuzione ad Amazon S3.

1. Kinesis Data Streams invia i record a Firehose per la trasformazione e la distribuzione. 

1. Una funzione Lambda converte i record da un formato di record DynamoDB al formato JSON, che contiene solo i nomi e i valori degli attributi degli elementi del record.

## Tools (Strumenti)
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-tools"></a>

*Servizi AWS*
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software che ti aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) è un kit di sviluppo cloud a riga di comando che ti aiuta a interagire con la tua AWS CDK app.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [AWS 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

*Archivio di codice*

Il codice per questo pattern è disponibile nel repository a GitHub [aws-dynamodb-kinesisfirehose-s3 ingestioni](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/).

## Epiche
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Imposta e configura il codice di esempio
<a name="set-up-and-configure-the-sample-code"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa le dipendenze. | Sul computer locale, installa le dipendenze dai `package.json` file contenuti nelle `sample-application` directory `pattern/aws-dynamodb-kinesisstreams-s3` and eseguendo i seguenti comandi:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | Sviluppatore di app, General AWS | 
| Genera il CloudFormation modello. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Sviluppatore di app, General AWS, AWS DevOps | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Controlla e distribuisci le risorse. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Sviluppatore di app, General AWS, AWS DevOps | 

### Inserisci dati nella tabella DynamoDB per testare la soluzione
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Inserisci i tuoi dati di esempio nella tabella DynamoDB. | Invia una richiesta alla tua tabella DynamoDB eseguendo il seguente comando in: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`esempio:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`Per impostazione predefinita, `put-item` non restituisce alcun valore come output se l'operazione ha esito positivo. Se l'operazione non riesce, restituisce un errore. I dati vengono archiviati in DynamoDB e quindi inviati a Kinesis Data Streams e Firehose. Utilizzate approcci diversi per aggiungere dati in una tabella DynamoDB. Per ulteriori informazioni, consulta [Caricare i dati nelle tabelle](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) nella documentazione di DynamoDB. | Sviluppatore di app | 
| Verifica che venga creato un nuovo oggetto nel bucket S3. | Accedi Console di gestione AWS e monitora il bucket S3 per verificare che sia stato creato un nuovo oggetto con i dati che hai inviato. Per ulteriori informazioni, [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)consulta la documentazione di Amazon S3. | Sviluppatore di app, General AWS | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse.  | Esegui il `cdk destroy` comando per eliminare tutte le risorse utilizzate da questo modello. | Sviluppatore di app, General AWS | 

## Risorse correlate
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s-3 static-site-stack .ts (repository](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25)) GitHub 
+ [aws-apigateway-dynamodb modulo](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (repository) GitHub 
+ [aws-kinesisstreams-kinesisfirehose-smodulo 3](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub repository)
+ [Modifica l'acquisizione dei dati per DynamoDB Streams (documentazione DynamoDB)](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Utilizzo di Kinesis Data Streams per acquisire le modifiche a DynamoDB (documentazione DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html))

# Implementa il controllo delle versioni delle API basato sul percorso utilizzando domini personalizzati in Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario López Martínez, Anbazhagan Ponnuswamy, Gaurav Samudra e Abhilash Vinod, Amazon Web Services*

## Riepilogo
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Questo modello dimostra come utilizzare la funzionalità di [mappatura delle API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) dei [domini personalizzati](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) per implementare una soluzione di controllo delle versioni delle API basata sul percorso per Amazon API Gateway.

Amazon API Gateway è un servizio completamente gestito che puoi utilizzare per creare, pubblicare, mantenere, monitorare e proteggere APIs su qualsiasi scala. Utilizzando la funzionalità di dominio personalizzato del servizio, puoi creare nomi di dominio personalizzati più semplici e intuitivi URLs da fornire agli utenti delle API. Puoi utilizzare le mappature delle API per connettere le fasi dell'API a un nome di dominio personalizzato. Dopo aver creato un nome di dominio e configurato i record DNS, utilizzi le mappature delle API per inviare traffico al tuo utente APIs tramite il tuo nome di dominio personalizzato.

Dopo che un'API diventa disponibile pubblicamente, i consumatori la utilizzano. Con l'evoluzione di un'API pubblica, anche il suo contratto di servizio si evolve per riflettere nuove funzionalità e capacità. Tuttavia, non è consigliabile modificare o rimuovere le funzionalità esistenti. Eventuali modifiche sostanziali potrebbero influire sulle applicazioni del consumatore e interromperle in fase di esecuzione. Il controllo delle versioni delle API è importante per evitare l'interruzione della compatibilità con le versioni precedenti e l'interruzione del contratto.

È necessaria una strategia chiara per il controllo delle versioni delle API per aiutare i consumatori ad adottarle. Il controllo delle versioni APIs tramite path-based URLs è l'approccio più semplice e comunemente usato. In questo tipo di controllo delle versioni, le versioni sono definite esplicitamente come parte dell'API. URIs L'esempio seguente URLs mostra come un consumatore può utilizzare l'URI per specificare una versione dell'API per la propria richiesta:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Questo modello utilizza AWS Cloud Development Kit (AWS CDK) per creare, distribuire e testare un'implementazione di esempio di una soluzione di versioning scalabile basata su percorsi per l'API. AWS CDK è un framework di sviluppo software open source per modellare e fornire le risorse delle applicazioni cloud utilizzando linguaggi di programmazione familiari.

## Prerequisiti e limitazioni
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS.
+ La proprietà di un dominio è necessaria per utilizzare l'archivio di esempio di questo pattern e per utilizzare la funzionalità di dominio personalizzato di Amazon API Gateway. Puoi usare Amazon Route 53 per creare e gestire i domini per la tua organizzazione. Per informazioni su come registrare o trasferire un dominio con Route 53, consulta [Registrazione di nuovi domini](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) nella documentazione di Route 53.
+ Prima di configurare un nome di dominio personalizzato per un'API, è necessario disporre di un certificato [SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html). AWS Certificate Manager
+ È necessario creare o aggiornare il record di risorse del provider DNS per eseguire la mappatura all'endpoint API. Senza tale mappatura, le richieste API associate al nome di dominio personalizzato non possono raggiungere API Gateway.

**Limitazioni**
+ Un nome di dominio personalizzato deve essere unico all'interno di Regione AWS tutti Account AWS.
+ Per configurare le mappature API con più livelli, è necessario utilizzare un nome di dominio personalizzato regionale e la policy di sicurezza TLS 1.2.
+ In una mappatura API, il nome di dominio personalizzato e il mapping APIs devono coincidere. Account AWS
+ Le mappature API devono contenere solo lettere, numeri e i seguenti caratteri: `$-_.+!*'()/`
+ La lunghezza massima per il percorso in una mappatura API è di 300 caratteri.
+ È possibile disporre di 200 mappature API con più livelli per ogni nome di dominio.
+ È possibile mappare HTTP solo APIs a un nome di dominio personalizzato regionale con la politica di sicurezza TLS 1.2.
+ Non è possibile eseguire il WebSocket APIs mapping allo stesso nome di dominio personalizzato di un'API HTTP o di un'API REST.
+ 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**
+ [Questa implementazione di esempio utilizza la AWS CDK TypeScript versione 2.149.0.](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html)

## Architecture
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

Il diagramma seguente mostra il flusso di lavoro dell'architettura.

![\[Flusso di lavoro che utilizza mappature API e domini personalizzati per implementare una soluzione di controllo delle versioni delle API basata sul percorso.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


Il diagramma illustra quanto segue:

1. L'utente API invia una richiesta ad Amazon API Gateway con un nome di dominio personalizzato.

1. API Gateway indirizza dinamicamente la richiesta dell'utente verso un'istanza e una fase appropriate di API Gateway, in base al percorso indicato nell'URL della richiesta. La tabella seguente mostra un esempio di come i diversi percorsi basati su URL possono essere instradati verso fasi specifiche per diverse istanze di API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. L'istanza API Gateway di destinazione elabora la richiesta e restituisce il risultato all'utente.

**Automazione e scalabilità**

Ti consigliamo di utilizzare AWS CloudFormation stack separati per ogni versione della tua API. Con questo approccio, puoi avere un isolamento completo tra i backend a APIs cui può essere indirizzato la funzionalità di mappatura dell'API di dominio personalizzata. Un vantaggio di questo approccio è che diverse versioni dell'API possono essere distribuite o rimosse indipendentemente senza comportare il rischio di modificare un'altra API. Questo approccio aumenta la resilienza attraverso l'isolamento degli stack. CloudFormation Inoltre, offre diverse opzioni di back-end per l'API AWS Lambda AWS Fargate, come endpoint HTTP e azioni di. Servizi AWS

Puoi utilizzare strategie di ramificazione Git, come [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), in combinazione con CloudFormation stack isolati per gestire il codice sorgente distribuito in diverse versioni dell'API. Utilizzando questa opzione, puoi mantenere diverse versioni della tua API senza la necessità di duplicare il codice sorgente per le nuove versioni. Con Gitflow, puoi aggiungere tag ai commit all'interno del tuo repository git man mano che vengono eseguiti i rilasci. Di conseguenza, hai un'istantanea completa del codice sorgente relativo a una versione specifica. Poiché è necessario eseguire gli aggiornamenti, è possibile estrarre il codice di una versione specifica, apportare aggiornamenti e quindi distribuire il codice sorgente aggiornato CloudFormation nello stack che si allinea alla versione principale corrispondente. Questo approccio riduce il rischio di violare un'altra versione dell'API perché ogni versione dell'API ha un codice sorgente isolato e viene distribuita in stack separati. CloudFormation 

## Tools (Strumenti)
<a name="implement-path-based-api-versioning-by-using-custom-domains-tools"></a>

**Servizi AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [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 AWS applicazioni.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software open source per definire l'infrastruttura cloud in codice e fornirla tramite. CloudFormation[L'implementazione di esempio di questo pattern utilizza in.AWS CDK TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) L'utilizzo di AWS CDK in TypeScript utilizza strumenti familiari, tra cui il TypeScript compilatore Microsoft (`tsc`), [Node.js](https://nodejs.org/) e il gestore di pacchetti del nodo (`npm`). Se preferisci, puoi usare [Yarn](https://yarnpkg.com/) anche se gli esempi di questo modello lo usano. `npm` [I moduli che compongono la [AWS Construct Library](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) sono distribuiti tramite il `npm ` repository npmjs.org.](https://docs.npmjs.com/)
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, a fornirle in modo rapido e coerente e a gestirle durante tutto il loro ciclo di vita in e. Account AWS Regioni AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)è un firewall per applicazioni Web che consente di monitorare le richieste HTTP e HTTPS inoltrate alle risorse protette delle applicazioni Web.

**Altri strumenti**
+ [Bruno](https://www.usebruno.com/) è un client di test API open source e compatibile con git.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) è un'utilità open source che verifica AWS CDK le migliori pratiche delle applicazioni utilizzando pacchetti di regole.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [path-based-versioning-with-api-gateway](https://github.com/aws-samples/path-based-versioning-with-api-gateway).

## Best practice
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Utilizza una solida pipeline di integrazione e distribuzione continua (CI/CD) per automatizzare il test e l'implementazione degli stack creati con. CloudFormation AWS CDK Per ulteriori informazioni relative a questa raccomandazione, consulta la [AWS DevOps Well-Architected Guidance](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF è un firewall gestito che si integra facilmente con servizi come Amazon API Gateway. Sebbene AWS WAF non sia un componente necessario per il funzionamento di questo modello di versione, come best practice di sicurezza consigliamo di includerlo AWS WAF con API Gateway.
+ Incoraggia gli utenti delle API a eseguire regolarmente l'aggiornamento alla versione più recente dell'API in modo che le versioni precedenti dell'API possano essere obsolete e rimosse in modo efficiente.
+ Prima di utilizzare questo approccio in un ambiente di produzione, implementate un firewall e una strategia di autorizzazione per la vostra API.
+ Implementate l'accesso alla gestione delle AWS risorse della vostra azienda Account AWS utilizzando il modello di accesso con [privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ [Per applicare le migliori pratiche e i consigli di sicurezza per le applicazioni create con AWS CDK, si consiglia di utilizzare l'utilità cdk-nag.](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html) 

## Epiche
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Prepara il tuo ambiente locale
<a name="prepare-your-local-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository di applicazioni di esempio, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Sviluppatore di app | 
| Accedere al repository clonato. | Per accedere alla posizione della cartella del repository clonata, esegui il seguente comando: <pre>cd api-gateway-custom-domain-versioning</pre> | Sviluppatore di app | 
| Installare le dipendenze richieste. | Per installare le dipendenze richieste, esegui il comando seguente:<pre>npm install </pre> | Sviluppatore di app | 

### Implementa lo stack di routing CloudFormation
<a name="deploy-the-cfnshort-routing-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia l'implementazione dello stack di routing. | Per avviare la distribuzione dello stack di CloudFormation routing`CustomDomainRouterStack`, esegui il comando seguente, sostituendolo `example.com` con il nome del dominio di tua proprietà:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>La distribuzione dello stack non avrà esito positivo finché la seguente attività di convalida DNS del dominio non verrà eseguita correttamente. | Sviluppatore di app | 

### Verifica della proprietà del dominio
<a name="verify-domain-ownership"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica la proprietà del tuo dominio. | Il certificato rimarrà in stato di **convalida in sospeso** fino a quando non dimostrerai la proprietà del dominio associato. Per dimostrare la proprietà, aggiungi i record CNAME alla zona ospitata associata al dominio. Per ulteriori informazioni, consulta la [convalida DNS nella documentazione](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html). AWS Certificate Manager L'aggiunta dei record appropriati consente la corretta `CustomDomainRouterStack` implementazione. | Sviluppatore di app, amministratore di sistema AWS, amministratore di rete | 
| Crea un record di alias che punti al tuo dominio personalizzato API Gateway. | Dopo che il certificato è stato emesso e convalidato con successo, [crea un record DNS](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) che punti all'URL del tuo dominio personalizzato Amazon API Gateway. L'URL del dominio personalizzato viene generato in modo univoco dal provisioning del dominio personalizzato e viene specificato come parametro di output. CloudFormation Di seguito è riportato un [esempio del record](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Politica di routing**: routing semplice**Nome del record**: `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: Yes (Sì)**Tipo di record**: un record DNS di tipo «A» che punta a una risorsa AWS **Value (Valore)**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (secondi)**: 300 | Sviluppatore di app, amministratore di sistema AWS, amministratore di rete | 

### Distribuisci gli CloudFormation stack e richiama l'API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci lo `ApiStackV1` stack. | Per distribuire lo `ApiStackV1` stack, usa il seguente comando:<pre>npm run deploy-v1</pre>Il seguente codice CDK aggiunge la mappatura delle API:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | Sviluppatore di app | 
| Implementa lo stack. `ApiStackV2` | Per distribuire lo `ApiStackV2` stack, usa il seguente comando:<pre>npm run deploy-v2</pre> | Sviluppatore di app | 
| Invoca l'API. | [Per richiamare l'API e testare gli endpoint dell'API utilizzando Bruno, consulta le istruzioni in Informazioni aggiuntive.](#implement-path-based-api-versioning-by-using-custom-domains-additional) | Sviluppatore di app | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse. | Per distruggere le risorse associate a questa applicazione di esempio, utilizzate il seguente comando:<pre>npx cdk destroy --all</pre>Assicurati di pulire tutti i record DNS di Route 53 che sono stati aggiunti manualmente per il processo di verifica della proprietà del dominio. | Sviluppatore di app | 

## Risoluzione dei problemi
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La distribuzione è `CustomDomainRouterStack` scaduta perché il certificato non può essere convalidato. | Assicurati di aver aggiunto i record CNAME di convalida DNS appropriati, come descritto nell'attività precedente. Il nuovo certificato potrebbe continuare a mostrare lo stato **In attesa di convalida** per un massimo di 30 minuti dopo l'aggiunta dei record di convalida DNS. Per ulteriori informazioni, consulta la sezione Convalida [DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) nella documentazione. AWS Certificate Manager  | 

## Risorse correlate
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implementazione del controllo delle versioni di API Gateway basato su header con Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/): questo post di AWS Compute Blog offre una strategia di versioning basata sugli header come alternativa alla strategia di versioning basata sul percorso delineata in questo modello.
+ [AWS CDK Workshop](https://cdkworkshop.com/20-typescript.html): questo workshop introduttivo si concentra sulla creazione e la distribuzione di applicazioni utilizzando il. AWS AWS Cloud Development Kit (AWS CDK) Questo workshop supporta Go, Python e. TypeScript 

## Informazioni aggiuntive
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Testare la tua API con Bruno**

Ti consigliamo di utilizzare [Bruno, uno](https://www.usebruno.com/) strumento di test delle API open source, per verificare che il routing basato sui percorsi funzioni correttamente per l'applicazione di esempio. Questo modello fornisce una raccolta di esempi per facilitare il test dell'API di esempio.

Per richiamare e testare la tua API, utilizza i seguenti passaggi:

1. [Installa Bruno.](https://www.usebruno.com/downloads)

1. Apri Bruno.

1. Nel [repository di codice](https://github.com/aws-samples/path-based-versioning-with-api-gateway) di questo pattern, seleziona **Bruno/Sample-API-** e apri la raccolta. Gateway-Custom-Domain-Versioning 

1. Per visualizzare il menu a discesa **Ambienti** in alto a destra dell'interfaccia utente (UI), seleziona una richiesta nella raccolta.

1. **Nel menu a discesa **Ambienti**, seleziona Configura.**

1. Sostituisci il `REPLACE_ME_WITH_YOUR_DOMAIN` valore con il tuo dominio personalizzato.

1. Scegli **Salva**, quindi chiudi la sezione **Configurazione**.

1. Per **Sandbox Environment**,**** verificate che l'opzione **Attivo** sia selezionata.

1. Richiama l'API utilizzando il pulsante **->** per la richiesta selezionata.

1. Prendi nota di come viene gestita la convalida (passaggio di valori non numerici) in V1 rispetto a V2.

[Per vedere schermate di esempio di invocazione dell'API e confronto delle convalide V1 e V2, vedi **Testare l'API di esempio nel file dell'archivio di codice di questo pattern**. `README.md`](https://github.com/aws-samples/path-based-versioning-with-api-gateway)

# Importa la libreria psycopg2 per interagire con il tuo AWS Lambda database PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Riepilogo
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) è un adattatore di database PostgressSQL per Python. Gli sviluppatori utilizzano la `psycopg2` libreria per scrivere applicazioni Python che interagiscono con i database PostgreSQL.

Su Amazon Web Services (AWS), gli sviluppatori lo utilizzano anche [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)per eseguire codice per applicazioni o servizi di backend. Lambda è un servizio di elaborazione senza server e basato sugli eventi che esegue codice senza la necessità di fornire o gestire server.

Per impostazione predefinita, quando crei una nuova funzione che utilizza un [runtime Python supportato da Lambda, l'ambiente di runtime Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) viene creato da [un'immagine](https://github.com/aws/aws-lambda-base-images) di base per Lambda fornita da. AWS Le librerie, come `pandas` or`psycopg2`, non sono incluse nell'immagine di base. Per utilizzare una libreria, devi raggrupparla in un pacchetto personalizzato e collegarla a Lambda.

Esistono diversi modi per raggruppare e collegare una libreria, inclusi i seguenti:
+ Implementa la tua funzione Lambda da [un archivio di file.zip.](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)
+ Implementa la tua funzione Lambda da un'immagine di contenitore personalizzata.
+ Crea un [layer Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) e collegalo alla tua funzione Lambda.

Questo modello illustra le prime due opzioni.

Con un pacchetto di distribuzione.zip, aggiungere la `pandas` libreria alla funzione Lambda è relativamente semplice. Crea una cartella sulla tua macchina Linux, aggiungi lo script Lambda insieme alla `pandas` libreria e alle dipendenze della libreria alla cartella, comprimi la cartella e forniscila come sorgente per la tua funzione Lambda.

Sebbene l'utilizzo di un pacchetto di distribuzione.zip sia una pratica comune, questo approccio non funziona per la libreria. `psycopg2` Questo modello mostra innanzitutto l'errore che si ottiene se si utilizza un pacchetto di distribuzione.zip per aggiungere la `psycopg2` libreria alla funzione Lambda. Il modello mostra quindi come distribuire Lambda da un Dockerfile e modificare l'immagine Lambda per far funzionare la libreria. `psycopg2`

[Per informazioni sulle tre risorse distribuite dal pattern, consultate la sezione Informazioni aggiuntive.](#import-psycopg2-library-lambda-additional)

## Prerequisiti e limitazioni
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS con autorizzazioni sufficienti per distribuire le AWS risorse utilizzate da questo modello
+ AWS Cloud Development Kit (AWS CDK) installato a livello globale eseguendo `npm install -g aws-cdk`
+ Un client Git
+ Python
+ Docker

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

**Versioni del prodotto**
+ Versione runtime di Python [supportata da Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Psycopg2 versione 2.9.3
+ Pandas versione 1.5.2

## Architecture
<a name="import-psycopg2-library-lambda-architecture"></a>

**Panoramica della soluzione**

Per illustrare le sfide che potresti dover affrontare quando utilizzi la `psycopg2` libreria in Lambda, il pattern implementa due funzioni Lambda:
+ Una funzione Lambda con il runtime Python creata da un file.zip. [Le `pandas` librerie `psycopg2` and vengono installate in questo pacchetto di distribuzione.zip utilizzando pip.](https://pypi.org/project/pip/)
+ Una funzione Lambda con il runtime Python creato da un Dockerfile. Il Dockerfile installa le `pandas` librerie `psycopg2` and nell'immagine del contenitore Lambda.

La prima funzione Lambda installa la `pandas` libreria e le sue dipendenze in un file.zip e Lambda può utilizzare tale libreria.

La seconda funzione Lambda dimostra che, creando un'immagine contenitore per la funzione Lambda, è possibile eseguire le librerie and `pandas` in Lambda. `psycopg2`

## Tools (Strumenti)
<a name="import-psycopg2-library-lambda-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che ti aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [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.
+ [pandas](https://pandas.pydata.org/) è uno strumento open source basato su Python per l'analisi e la manipolazione dei dati.
+ [Psycopg](https://www.psycopg.org/docs/) è un adattatore di database PostgreSQL per il linguaggio Python progettato per applicazioni multithread. Questo modello utilizza Psycopg 2.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Il codice per questo pattern è disponibile nel repository [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - su. in-lambda-to-interact with-postgres-database GitHub

## Best practice
<a name="import-psycopg2-library-lambda-best-practices"></a>

Questo modello fornisce un esempio funzionante di utilizzo AWS CDK per creare una funzione Lambda da un Dockerfile. Se riutilizzi questo codice nella tua applicazione, assicurati che le risorse distribuite soddisfino tutti i requisiti di sicurezza. Utilizza strumenti come [Checkov](https://www.checkov.io/), che analizza le configurazioni dell'infrastruttura cloud per individuare eventuali errori di configurazione prima che l'infrastruttura venga implementata.

## Epiche
<a name="import-psycopg2-library-lambda-epics"></a>

### Clona il repository e configura la distribuzione
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il GitHub repository sul computer locale, esegui i seguenti comandi:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | Informazioni generali su AWS | 
| Configura la tua distribuzione. | Modifica il `app.py` file con informazioni su Account AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | Informazioni generali su AWS | 

### Avvia il tuo account AWS e distribuisci l'applicazione
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Bootstrap il tuo. Account AWS | Se non hai ancora [avviato il tuo ambiente AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), esegui i seguenti comandi con le AWS credenziali del tuo account: AWS <pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | Informazioni generali su AWS | 
| Implementa il codice. | Per distribuire l' AWS CDK applicazione, esegui il comando seguente:<pre>cdk deploy AWSLambdaPyscopg2</pre> | Informazioni generali su AWS | 

### Testa le funzioni Lambda dalla Console di gestione AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova la funzione Lambda creata dal file.zip. | Per testare la funzione Lambda creata dal file.zip, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Poiché Lambda non trova le librerie PostgreSQL richieste nell'immagine predefinita, non può utilizzare la libreria. `psycopg2` | Informazioni generali su AWS | 
| Prova la funzione Lambda creata dal Dockerfile. | Per utilizzare la `psycopg2` libreria all'interno della tua funzione Lambda, devi modificare l'Amazon Machine Image (AMI) Lambda.Per testare la funzione Lambda creata dal Dockerfile, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Il codice seguente mostra il Dockerfile creato dal AWS CDK modello:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>Il Dockerfile prende l'immagine AWS Lambda fornita per il runtime Python e installa [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), che contiene le librerie necessarie per compilare applicazioni che interagiscono direttamente con il server di gestione PostgreSQL. Il Dockerfile installa anche le librerie and, indicate nel file. `pandas` `psycopg2` `requirements.txt` | Informazioni generali su AWS | 

## Risorse correlate
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentazione](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentazione](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Informazioni aggiuntive
<a name="import-psycopg2-library-lambda-additional"></a>

In questo modello, il AWS CDK modello fornisce uno AWS stack con tre risorse:
+ Un [ruolo AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) per le funzioni Lambda.
+ Una funzione Lambda con un runtime Python. La funzione viene distribuita dal pacchetto di distribuzione. `Constructs/lambda/lambda_deploy.zip`
+ Una funzione Lambda con un runtime Python. La funzione viene distribuita dal Dockerfile nella cartella `Constructs`

Lo script per entrambe le funzioni Lambda verifica se le `psycopg2` librerie `pandas` and sono state importate correttamente:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

Il pacchetto `lambda_deploy.zip` di distribuzione è creato con lo script `Constructs/lambda/build.sh` bash. Questo script crea una cartella, copia lo script Lambda, installa le `psycopg2` librerie `pandas` and e genera il file.zip. Per generare tu stesso il file.zip, esegui questo script bash e ridistribuisci lo stack. AWS CDK 

Il Dockerfile inizia con l'immagine di base AWS fornita per Lambda con un runtime Python. Il Dockerfile installa le `psycopg2` librerie `pandas` and sopra l'immagine predefinita.

# Integra Amazon API Gateway con Amazon SQS per gestire REST asincrono APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero e Gustavo Martim, Amazon Web Services*

## Riepilogo
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Quando si distribuisce REST APIs, a volte è necessario esporre una coda di messaggi che le applicazioni client possono pubblicare. Ad esempio, potreste avere problemi con la latenza di terze parti APIs e i ritardi nelle risposte, oppure potreste voler evitare i tempi di risposta delle query del database o evitare il ridimensionamento del server quando il numero di richieste simultanee è elevato. APIs In questi scenari, le applicazioni client che pubblicano nella coda devono solo sapere che l'API ha ricevuto i dati, non cosa accade dopo la ricezione dei dati.

Questo modello crea un endpoint API REST utilizzando [Amazon API Gateway](https://aws.amazon.com/api-gateway/) per inviare un messaggio ad [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/). Crea un' easy-to-implementintegrazione tra i due servizi che evita l'accesso diretto alla coda SQS.

## Prerequisiti e limitazioni
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ [Un account attivo AWS](https://portal.aws.amazon.com/billing/signup/iam)

## Architecture
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Architettura per l'integrazione di API Gateway con Amazon SQS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


Il diagramma illustra questi passaggi:

1. Richiedi un endpoint dell'API POST REST utilizzando uno strumento come Postman, un'altra API o altre tecnologie.

1. API Gateway pubblica un messaggio, che viene ricevuto nel corpo della richiesta, sulla coda.

1. Amazon SQS riceve il messaggio e invia una risposta ad API Gateway con un codice di successo o di errore.

## Tools (Strumenti)
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-tools"></a>
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [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.   

## Epiche
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Crea una coda SQS
<a name="create-an-sqs-queue"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una coda. | Per creare una coda SQS che riceva i messaggi dall'API REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 

### Fornisci l'accesso ad Amazon SQS
<a name="provide-access-to-sqs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ruolo IAM. | Questo ruolo IAM offre alle risorse API Gateway l'accesso completo ad Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app, amministratore AWS | 

### Crea un'API REST
<a name="create-a-rest-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un'API REST. | Questa è l'API REST a cui vengono inviate le richieste HTTP.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 
| Connetti API Gateway ad Amazon SQS. | Questo passaggio consente al messaggio di fluire dall'interno del corpo della richiesta HTTP ad Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 

### Prova l'API REST
<a name="test-the-rest-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova l'API REST. | Esegui un test per verificare la configurazione mancante:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 
| Modifica l'integrazione dell'API per inoltrare correttamente la richiesta ad Amazon SQS. | Completa la configurazione per correggere l'errore di integrazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 
| Testa e convalida il messaggio in Amazon SQS. | Esegui un test per confermare che il test è stato completato con successo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 
| Prova API Gateway con un carattere speciale. | Esegui un test che includa caratteri speciali (come &) che non sono accettabili in un messaggio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Questo perché i caratteri speciali non sono supportati per impostazione predefinita nel corpo del messaggio. Nel passaggio successivo, configurerai API Gateway per supportare i caratteri speciali. Per ulteriori informazioni sulle conversioni dei tipi di contenuto, consulta la [documentazione di API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Sviluppatore di app | 
| Modifica la configurazione dell'API per supportare i caratteri speciali. | Modifica la configurazione per accettare caratteri speciali nel messaggio:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Il nuovo messaggio deve includere il carattere speciale. | Sviluppatore di app | 

### Implementa l'API REST
<a name="deploy-the-rest-api"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'API. |  Per distribuire l'API REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 
| Esegui il test con uno strumento esterno. | Esegui un test con uno strumento esterno per confermare che il messaggio sia stato ricevuto correttamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Sviluppatore di app | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare l'API. | Nella [console API Gateway](https://console.aws.amazon.com/apigateway/), scegli l'API che hai creato, quindi scegli **Elimina**. | Sviluppatore di app | 
| Elimina il ruolo IAM. | Sulla [console IAM](https://console.aws.amazon.com/iam/), nel riquadro **Ruoli**, seleziona **AWSGatewayRoleForSQS**, quindi scegli **Elimina**. | Sviluppatore di app | 
| Elimina la coda SQS. | **Sulla [console Amazon SQS](https://console.aws.amazon.com/sqs/), nel riquadro Code, scegli la **coda** SQS che hai creato, quindi scegli Elimina.** | Sviluppatore di app | 

## Risorse correlate
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (documentazione API Gateway)
+ [Conversioni dei tipi di contenuto in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (documentazione API Gateway)
+ [variabili \$1util (documentazione](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) API Gateway)
+ [Come posso integrare un'API REST di API Gateway con Amazon SQS e risolvere gli errori più comuni?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (AWS Re:post articolo)

# Elabora gli eventi in modo asincrono con Amazon API Gateway e AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed e Michael Wallner, Amazon Web Services*

## Riepilogo
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) è un servizio completamente gestito che gli sviluppatori possono utilizzare per creare, pubblicare, mantenere, monitorare e proteggere APIs su qualsiasi scala. Gestisce le attività legate all'accettazione e all'elaborazione di fino a centinaia di migliaia di chiamate API simultanee.

Una quota di servizio importante di API Gateway è il timeout di integrazione. Il timeout è il tempo massimo in cui un servizio di backend deve restituire una risposta prima che l'API REST restituisca un errore. Il limite rigido di 29 secondi è generalmente accettabile per i carichi di lavoro sincroni. Tuttavia, tale limite rappresenta una sfida per gli sviluppatori che desiderano utilizzare API Gateway con carichi di lavoro asincroni.

Questo modello mostra un'architettura di esempio per elaborare gli eventi in modo asincrono utilizzando API Gateway e. AWS Lambda L'architettura supporta l'esecuzione di processi di elaborazione della durata fino a 15 minuti e utilizza un'API REST di base come interfaccia.

[Projen](https://pypi.org/project/projen/) [viene utilizzato per configurare l'ambiente di sviluppo locale e per distribuire l'architettura di esempio su un target Account AWS, in combinazione con [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) e Node.js.](https://nodejs.org/en/download/) Projen configura automaticamente un ambiente virtuale [Python](https://www.python.org/downloads/) [con](https://pre-commit.com/) pre-commit e gli strumenti utilizzati per il controllo della qualità del codice, la scansione di sicurezza e il test delle unità. [Per ulteriori informazioni, consulta la sezione Strumenti.](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools)

## Prerequisiti e limitazioni
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ I seguenti strumenti installati sulla workstation:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit versione 2.85.0](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
  + [Docker versione 20.10.21](https://docs.docker.com/get-docker/)
  + [Node.js versione 18.13.0](https://nodejs.org/en/download/)
  + [Versione del progetto 0.71.111](https://pypi.org/project/projen/)
  + [Python versione 3.9.16](https://www.python.org/downloads/)

**Limitazioni**
+ La durata massima di un processo è limitata dalla durata massima delle funzioni Lambda (15 minuti).
+ Il numero massimo di richieste di lavoro simultanee è limitato dalla concorrenza riservata della funzione Lambda.

## Architecture
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-architecture"></a>

Il diagramma seguente mostra l'interazione dell'API jobs con le funzioni Lambda di elaborazione degli eventi e gestione degli errori, con gli eventi archiviati in un archivio di eventi Amazon. EventBridge 

![\[Cloud AWS architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Un tipico flusso di lavoro include i seguenti passaggi:

1. Ci si autentica con AWS Identity and Access Management (IAM) e si ottengono le credenziali di sicurezza.

1. Si invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, specificando i parametri del processo nel corpo della richiesta.

1. L'API jobs, che è un'API REST di API Gateway, ti restituisce una risposta HTTP che contiene l'identificatore del lavoro.

1. L'API jobs richiama in modo asincrono la funzione Lambda di elaborazione degli eventi.

1. La funzione di elaborazione degli eventi elabora l'evento e quindi inserisce i risultati del lavoro nella tabella dei job Amazon DynamoDB.

1. Invia una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs, con l'identificatore del lavoro del passaggio 3 as. `{jobId}`

1. L'API jobs interroga la tabella `jobs` DynamoDB per recuperare i risultati del lavoro.

1. L'API jobs restituisce una risposta HTTP che contiene i risultati del lavoro.

1. Se l'elaborazione dell'evento non riesce, la funzione di elaborazione degli eventi invia l'evento alla funzione di gestione degli errori.

1. La funzione di gestione degli errori inserisce i parametri del lavoro nella tabella DynamoDB`jobs`.

1. È possibile recuperare i parametri del processo inviando una `GET` richiesta HTTP all'endpoint dell'API jobs. `/jobs/{jobId}`

1. Se la gestione degli errori fallisce, la funzione di gestione degli errori invia l'evento a un archivio di eventi. EventBridge 

   È possibile riprodurre gli eventi archiviati utilizzando. EventBridge

## Tools (Strumenti)
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)è un framework di sviluppo software che consente di definire e fornire l' Cloud AWS infrastruttura nel codice.
+ [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.
+ [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 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri. Account AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

**Altri strumenti**
+ [autopep8](https://github.com/hhatto/autopep8) formatta automaticamente il codice Python in base alla guida di stile Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scansiona il codice Python per trovare problemi di sicurezza comuni.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) è un controllore e generatore di commit Git. `CHANGELOG`
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) è un linter AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) è uno strumento statico di analisi del codice che verifica eventuali configurazioni errate di sicurezza e conformità dell'infrastruttura come codice (IaC).
+ [jq](https://stedolan.github.io/jq/download/) è uno strumento a riga di comando per l'analisi di JSON.
+ [Postman](https://www.postman.com/) è una piattaforma API.
+ [pre-commit](https://pre-commit.com/) è un gestore di hook Git.
+ [Projen](https://github.com/projen/projen) è un generatore di progetti.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) è un framework Python per scrivere test piccoli e leggibili.

**Archivio di codice**

Questo codice di architettura di esempio è disponibile nell'archivio GitHub [Asynchronous Event Processing with API Gateway e Lambda](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Best practice
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Questa architettura di esempio non include il monitoraggio dell'infrastruttura distribuita. Se il tuo caso d'uso richiede il monitoraggio, valuta la possibilità di aggiungere [CDK Monitoring Constructs o un'altra soluzione di monitoraggio](https://constructs.dev/packages/cdk-monitoring-constructs).
+ Questa architettura di esempio utilizza [le autorizzazioni IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) per controllare l'accesso all'API jobs. Chiunque sia autorizzato a presumere che `JobsAPIInvokeRole` sarà in grado di richiamare l'API jobs. Pertanto, il meccanismo di controllo degli accessi è binario. Se il tuo caso d'uso richiede un modello di autorizzazione più complesso, valuta l'utilizzo di un [meccanismo di controllo degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diverso.
+ Quando un utente invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, i dati di input vengono convalidati a due livelli diversi:
  + Amazon API Gateway è responsabile della prima [convalida della richiesta](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La funzione di elaborazione degli eventi esegue la seconda richiesta.

    Non viene eseguita alcuna convalida quando l'utente effettua una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs. Se il tuo caso d'uso richiede un'ulteriore convalida dell'input e un maggiore livello di sicurezza, valuta [l'utilizzo di AWS WAF per proteggere](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) la tua API.

## Epiche
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository localmente, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps ingegnere | 
| Configura il progetto. | [Cambia la directory nella radice del repository e configura l'ambiente virtuale Python e tutti gli strumenti usando Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps ingegnere | 
| Installa i ganci di pre-commit. | Per installare gli hook di pre-commit, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps ingegnere | 

### Implementa l'architettura di esempio
<a name="deploy-the-example-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Per eseguire il bootstrap AWS CDK in tuo Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implementa l'architettura di esempio. | Per implementare l'architettura di esempio nella tua Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testa l'architettura
<a name="test-the-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa i prerequisiti del test. | [Installa sulla tua workstation the [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) e jq.](https://jqlang.github.io/jq/)L'uso di [Postman](https://www.postman.com/downloads/) per testare questa architettura di esempio è consigliato ma non obbligatorio. Se scegli uno strumento di test delle API alternativo, assicurati che supporti [l'autenticazione AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) e fai riferimento agli endpoint API esposti che possono essere ispezionati [esportando](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) l'API REST. | DevOps ingegnere | 
| Supponiamo il`JobsAPIInvokeRole`. | [Supponiamo](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` che sia stato stampato come output del comando deploy:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configura Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Prova l'architettura di esempio. | Per testare l'architettura di esempio, [invia le richieste](https://learning.postman.com/docs/sending-requests/requests/#next-steps) all'API jobs. Per ulteriori informazioni, consulta la [documentazione di Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingegnere | 

## risoluzione dei problemi
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La distruzione e la successiva ridistribuzione dell'architettura di esempio non riescono perché il [gruppo di log di Amazon CloudWatch Logs esiste](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` già. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Risorse correlate
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Modello di mappatura API Gateway e riferimento alla variabile di registrazione degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Imposta la chiamata asincrona della funzione Lambda di backend](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Elabora gli eventi in modo asincrono con Amazon API Gateway e Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini e Michael Wallner, Amazon Web Services*

## Riepilogo
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) è un servizio completamente gestito che gli sviluppatori possono utilizzare per creare, pubblicare, mantenere, monitorare e proteggere APIs su qualsiasi scala. Gestisce le attività legate all'accettazione e all'elaborazione di fino a centinaia di migliaia di chiamate API simultanee.

Una quota di servizio importante di API Gateway è il timeout di integrazione. Il timeout è il tempo massimo in cui un servizio di backend deve restituire una risposta prima che l'API REST restituisca un errore. Il limite rigido di 29 secondi è generalmente accettabile per i carichi di lavoro sincroni. Tuttavia, tale limite rappresenta una sfida per gli sviluppatori che desiderano utilizzare API Gateway con carichi di lavoro asincroni.

Questo modello mostra un'architettura di esempio per l'elaborazione asincrona degli eventi utilizzando API Gateway, Amazon DynamoDB Streams e. AWS Lambda L'architettura supporta l'esecuzione di processi di elaborazione parallela con gli stessi parametri di input e utilizza un'API REST di base come interfaccia. In questo esempio, l'utilizzo di Lambda come backend limita la durata dei processi a 15 minuti. È possibile evitare questo limite utilizzando un servizio alternativo per elaborare gli eventi in arrivo (ad esempio,). AWS Fargate

[Projen](https://pypi.org/project/projen/) [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Projen configura automaticamente un ambiente virtuale [Python](https://www.python.org/downloads/) [con](https://pre-commit.com/) pre-commit e gli strumenti utilizzati per il controllo della qualità del codice, la scansione di sicurezza e il test delle unità. [Per ulteriori informazioni, consulta la sezione Strumenti.](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools)

## Prerequisiti e limitazioni
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ I seguenti strumenti installati sulla workstation:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versione 2.85.0 o successiva
  + [Docker versione 20.10.21 o successiva](https://docs.docker.com/get-docker/)
  + [Node.js versione 18](https://nodejs.org/en/download/) o successiva
  + Versione [Projen](https://pypi.org/project/projen/) 0.71.111 o successiva
  + [Python](https://www.python.org/downloads/) versione 3.9.16 o successiva

**Limitazioni**
+ Il numero massimo consigliato di lettori per DynamoDB Streams è due per evitare la limitazione.
+ La durata massima di un processo è limitata dalla durata massima delle funzioni Lambda (15 minuti).
+ Il numero massimo di richieste di lavoro simultanee è limitato dalla concorrenza riservata delle funzioni Lambda.

## Architecture
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Architettura**

Il diagramma seguente mostra l'interazione dell'API dei job con DynamoDB Streams e le funzioni Lambda di elaborazione degli eventi e gestione degli errori, con gli eventi archiviati in un archivio di eventi Amazon. EventBridge 

![\[Diagramma dell'architettura e del processo, con i passaggi elencati dopo il diagramma.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.png)


Un tipico flusso di lavoro include i seguenti passaggi:

1. Ci si autentica con AWS Identity and Access Management (IAM) e si ottengono le credenziali di sicurezza.

1. Si invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, specificando i parametri del processo nel corpo della richiesta.

1. L'API jobs ti restituisce una risposta HTTP che contiene l'identificatore del lavoro.

1. L'API jobs inserisce i parametri del processo nella tabella `jobs_table` Amazon DynamoDB.

1. Il flusso `jobs_table` DynamoDB della tabella DynamoDB richiama le funzioni Lambda di elaborazione degli eventi.

1. Le funzioni Lambda per l'elaborazione degli eventi elaborano l'evento e quindi inseriscono i risultati del lavoro nella tabella DynamoDB. `jobs_table` [Per garantire risultati coerenti, le funzioni di elaborazione degli eventi implementano un meccanismo di blocco ottimistico.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)

1. Si invia una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs, con l'identificatore del lavoro del passaggio 3 as. `{jobId}`

1. L'API jobs interroga la tabella `jobs_table` DynamoDB per recuperare i risultati del lavoro.

1. L'API jobs restituisce una risposta HTTP che contiene i risultati del lavoro.

1. Se l'elaborazione dell'evento non riesce, la mappatura dei sorgenti della funzione di elaborazione degli eventi invia l'evento all'argomento Amazon Simple Notification Service (Amazon SNS) sulla gestione degli errori.

1. L'argomento SNS sulla gestione degli errori invia l'evento in modo asincrono alla funzione di gestione degli errori.

1. La funzione di gestione degli errori inserisce i parametri del lavoro nella tabella DynamoDB`jobs_table`.

   È possibile recuperare i parametri del processo inviando una `GET` richiesta HTTP all'endpoint dell'API jobs. `/jobs/{jobId}`

1. Se la gestione degli errori fallisce, la funzione di gestione degli errori invia l'evento a un archivio Amazon EventBridge .

   Puoi riprodurre gli eventi archiviati utilizzando. EventBridge

## Tools (Strumenti)
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che ti aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [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 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni AWS Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri account AWS.
+ [AWS 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 calcolo che utilizzi.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.

**Altri strumenti**
+ [autopep8](https://github.com/hhatto/autopep8) formatta automaticamente il codice Python in base alla guida di stile Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scansiona il codice Python per trovare problemi di sicurezza comuni.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) è un controllore e generatore di commit Git. `CHANGELOG`
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) è un linter AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) è uno strumento statico di analisi del codice che verifica eventuali configurazioni errate di sicurezza e conformità dell'infrastruttura come codice (IaC).
+ [jq](https://stedolan.github.io/jq/download/) è uno strumento a riga di comando per l'analisi di JSON.
+ [Postman](https://www.postman.com/) è una piattaforma API.
+ [pre-commit](https://pre-commit.com/) è un gestore di hook Git.
+ [Projen](https://github.com/projen/projen) è un generatore di progetti.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) è un framework Python per scrivere test piccoli e leggibili.

**Archivio di codice**

Questo codice di architettura di esempio è disponibile nel repository GitHub [Asynchronous Processing with API Gateway e DynamoDB Streams](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk).

## Best practice
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-best-practices"></a>
+ Questa architettura di esempio non include il monitoraggio dell'infrastruttura distribuita. Se il tuo caso d'uso richiede il monitoraggio, valuta la possibilità di aggiungere [CDK Monitoring Constructs o un'altra soluzione di monitoraggio](https://constructs.dev/packages/cdk-monitoring-constructs).
+ Questa architettura di esempio utilizza [le autorizzazioni IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) per controllare l'accesso all'API jobs. Chiunque sia autorizzato a presumere che `JobsAPIInvokeRole` sarà in grado di richiamare l'API jobs. Pertanto, il meccanismo di controllo degli accessi è binario. Se il tuo caso d'uso richiede un modello di autorizzazione più complesso, valuta l'utilizzo di un [meccanismo di controllo degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diverso.
+ Quando un utente invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, i dati di input vengono convalidati a due livelli diversi:
  + API Gateway è responsabile della prima [convalida della richiesta](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La funzione di elaborazione degli eventi esegue la seconda richiesta.

    Non viene eseguita alcuna convalida quando l'utente effettua una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs. Se il tuo caso d'uso richiede un'ulteriore convalida degli input e un maggiore livello di sicurezza, valuta [l'utilizzo AWS WAF per proteggere](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) la tua API.
+ Per evitare il throttling, la documentazione di [DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) scoraggia gli utenti dal leggere con più di due consumatori dello stesso shard dello stesso stream. Per ridimensionare il numero di consumatori, consigliamo di utilizzare [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ In questo esempio è stato utilizzato [il blocco ottimistico](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) per garantire aggiornamenti coerenti degli elementi nella tabella DynamoDB`jobs_table`. A seconda del requisito del caso d'uso, potrebbe essere necessario implementare meccanismi di blocco più affidabili, come il blocco pessimistico.

## Epiche
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository localmente, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git</pre> | DevOps ingegnere | 
| Configura il progetto. | [Cambia la directory nella radice del repository e configura l'ambiente virtuale Python e tutti gli strumenti usando Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk<br />npx projen</pre> | DevOps ingegnere | 
| Installa i ganci di pre-commit. | Per installare gli hook di pre-commit, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | DevOps ingegnere | 

### Implementa l'architettura di esempio
<a name="deploy-the-example-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Per eseguire il bootstrap [AWS CDK](https://aws.amazon.com/cdk/)in tuo Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implementa l'architettura di esempio. | Per implementare l'architettura di esempio nella tua Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testa l'architettura
<a name="test-the-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa i prerequisiti del test. | [Installa sulla tua workstation the [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) e jq.](https://jqlang.github.io/jq/)L'uso di [Postman](https://www.postman.com/downloads/) per testare questa architettura di esempio è consigliato ma non obbligatorio. Se scegli uno strumento di test delle API alternativo, assicurati che supporti [l'autenticazione AWS Signature versione 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) e fai riferimento agli endpoint API esposti che possono essere ispezionati [esportando l'](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html)API REST. | DevOps ingegnere | 
| Supponiamo il`JobsAPIInvokeRole`. | [Supponiamo](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` che sia stato stampato come output del `deploy` comando:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configura Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Prova l'architettura di esempio. | Per testare l'architettura di esempio, invia le richieste all'API jobs. Per ulteriori informazioni, consulta la [documentazione di Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingegnere | 

## risoluzione dei problemi
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La distruzione e la successiva ridistribuzione dell'architettura di esempio non riescono perché il [gruppo di log di Amazon CloudWatch Logs esiste](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` già. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Risorse correlate
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [Modello di mappatura API Gateway e riferimento alla variabile di registrazione degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Modifica l'acquisizione dei dati per DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Blocco ottimistico con numero di versione](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Utilizzo di Kinesis Data Streams per acquisire le modifiche a DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# Elabora gli eventi in modo asincrono con Amazon API Gateway, Amazon SQS e AWS Fargate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini e Michael Wallner, Amazon Web Services*

## Riepilogo
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) è un servizio completamente gestito che gli sviluppatori possono utilizzare per creare, pubblicare, mantenere, monitorare e proteggere APIs su qualsiasi scala. Gestisce le attività necessarie per accettare ed elaborare fino a centinaia di migliaia di chiamate API simultanee.

Una quota di servizio importante di API Gateway è il timeout di integrazione. Il timeout è il tempo massimo in cui un servizio di backend deve restituire una risposta prima che l'API REST restituisca un errore. Il limite rigido di 29 secondi è generalmente accettabile per i carichi di lavoro sincroni. Tuttavia, tale limite rappresenta una sfida per gli sviluppatori che desiderano utilizzare API Gateway con carichi di lavoro asincroni.

Questo modello mostra un'architettura di esempio per elaborare gli eventi in modo asincrono utilizzando API Gateway, Amazon Simple Queue Service (Amazon SQS) e. AWS Fargate L'architettura supporta l'esecuzione di processi di elaborazione senza restrizioni di durata e utilizza un'API REST di base come interfaccia.

[Projen](https://pypi.org/project/projen/) [viene utilizzato per configurare l'ambiente di sviluppo locale e per distribuire l'architettura di esempio su una destinazione Account AWS, in combinazione con [Docker](https://docs.docker.com/get-docker/) e Node.js. [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)](https://nodejs.org/en/download/) Projen configura automaticamente un ambiente virtuale [Python](https://www.python.org/downloads/) [con](https://pre-commit.com/) pre-commit e gli strumenti utilizzati per il controllo della qualità del codice, la scansione di sicurezza e il test delle unità. [Per ulteriori informazioni, consulta la sezione Strumenti.](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools)

## Prerequisiti e limitazioni
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ I seguenti strumenti installati sulla workstation:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versione 2.85.0 o successiva
  + [Docker versione 20.10.21 o successiva](https://docs.docker.com/get-docker/)
  + [Node.js versione 18](https://nodejs.org/en/download/) o successiva
  + Versione [Projen](https://pypi.org/project/projen/) 0.71.111 o successiva
  + [Python](https://www.python.org/downloads/) versione 3.9.16 o successiva

**Limitazioni**
+ I lavori simultanei sono limitati a 500 attività al minuto, che è il numero massimo di attività che Fargate può fornire.

## Architecture
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-architecture"></a>

Il diagramma seguente mostra l'interazione dell'API jobs con la tabella `jobs` Amazon DynamoDB, il servizio Fargate di elaborazione degli eventi e la funzione di gestione degli errori. AWS Lambda Gli eventi vengono archiviati in un archivio di EventBridge eventi Amazon.

![\[Diagramma di architettura con descrizione che segue il diagramma.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Un tipico flusso di lavoro include i seguenti passaggi:

1. Ci si autentica con AWS Identity and Access Management (IAM) e si ottengono le credenziali di sicurezza.

1. Si invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, specificando i parametri del processo nel corpo della richiesta.

1. L'API jobs, che è un'API REST di API Gateway, ti restituisce una risposta HTTP che contiene l'identificatore del lavoro.

1. L'API jobs invia un messaggio alla coda SQS.

1. Fargate estrae il messaggio dalla coda SQS, elabora l'evento e quindi inserisce i risultati del lavoro nella tabella DynamoDB. `jobs`

1. Si invia una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs, con l'identificatore del lavoro del passaggio 3 as. `{jobId}`

1. L'API jobs interroga la tabella `jobs` DynamoDB per recuperare i risultati del lavoro.

1. L'API jobs restituisce una risposta HTTP che contiene i risultati del lavoro.

1. Se l'elaborazione dell'evento non riesce, la coda SQS invia l'evento alla coda di lettere morte (DLQ).

1. Un EventBridge evento avvia la funzione di gestione degli errori.

1. La funzione di gestione degli errori inserisce i parametri del lavoro nella tabella DynamoDB`jobs`.

1. È possibile recuperare i parametri del processo inviando una `GET` richiesta HTTP all'endpoint dell'API jobs. `/jobs/{jobId}`

1. Se la gestione degli errori fallisce, la funzione di gestione degli errori invia l'evento a un archivio. EventBridge 

   È possibile riprodurre gli eventi archiviati utilizzando. EventBridge

## Tools (Strumenti)
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)è un framework di sviluppo software che consente di definire e fornire l' Cloud AWS infrastruttura nel codice.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)ti aiuta a eseguire contenitori senza dover gestire server o istanze Amazon Elastic Compute Cloud EC2 (Amazon). Viene utilizzato insieme ad Amazon Elastic Container Service (Amazon ECS).
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri. Account AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [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**
+ [autopep8](https://github.com/hhatto/autopep8) formatta automaticamente il codice Python in base alla guida di stile Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scansiona il codice Python per trovare problemi di sicurezza comuni.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) è un controllore e generatore di commit Git. `CHANGELOG`
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) è un linter AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) è uno strumento statico di analisi del codice che verifica eventuali configurazioni errate di sicurezza e conformità dell'infrastruttura come codice (IaC).
+ [jq](https://stedolan.github.io/jq/download/) è uno strumento a riga di comando per l'analisi di JSON.
+ [Postman](https://www.postman.com/) è una piattaforma API.
+ [pre-commit](https://pre-commit.com/) è un gestore di hook Git.
+ [Projen](https://github.com/projen/projen) è un generatore di progetti.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) è un framework Python per scrivere test piccoli e leggibili.

**Archivio di codice**

Questo codice di architettura di esempio è disponibile nell'archivio GitHub [Asynchronous Processing with API Gateway e](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk) SQS.

## Best practice
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Questa architettura di esempio non include il monitoraggio dell'infrastruttura distribuita. Se il tuo caso d'uso richiede il monitoraggio, valuta la possibilità di aggiungere [CDK Monitoring Constructs o un'altra soluzione di monitoraggio](https://constructs.dev/packages/cdk-monitoring-constructs).
+ Questa architettura di esempio utilizza [le autorizzazioni IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) per controllare l'accesso all'API jobs. Chiunque sia autorizzato a presumere che `JobsAPIInvokeRole` sarà in grado di richiamare l'API jobs. Pertanto, il meccanismo di controllo degli accessi è binario. Se il tuo caso d'uso richiede un modello di autorizzazione più complesso, valuta l'utilizzo di un [meccanismo di controllo degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diverso.
+ Quando un utente invia una `POST` richiesta HTTP all'endpoint dell'API `/jobs` jobs, i dati di input vengono convalidati a due livelli diversi:
  + API Gateway è responsabile della prima [convalida della richiesta](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La funzione di elaborazione degli eventi esegue la seconda richiesta.

    Non viene eseguita alcuna convalida quando l'utente effettua una `GET` richiesta HTTP all'endpoint dell'API `/jobs/{jobId}` jobs. Se il tuo caso d'uso richiede un'ulteriore convalida degli input e un maggiore livello di sicurezza, valuta [l'utilizzo AWS WAF per proteggere](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) la tua API.

## Epiche
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-epics"></a>

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare il repository localmente, esegui il seguente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | DevOps ingegnere | 
| Configura il progetto. | [Cambia la directory nella radice del repository e configura l'ambiente virtuale Python e tutti gli strumenti usando Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps ingegnere | 
| Installa i ganci di pre-commit. | Per installare gli hook di pre-commit, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps ingegnere | 

### Implementa l'architettura di esempio
<a name="deploy-the-example-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Per eseguire il bootstrap [AWS CDK](https://aws.amazon.com/cdk/)in tuo Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implementa l'architettura di esempio. | Per implementare l'architettura di esempio nella tua Account AWS, esegui il seguente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testa l'architettura
<a name="test-the-architecture"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa i prerequisiti del test. | [Installa sulla tua workstation the [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) e jq.](https://jqlang.github.io/jq/)L'uso di [Postman](https://www.postman.com/downloads/) per testare questa architettura di esempio è consigliato ma non obbligatorio. Se scegli uno strumento di test delle API alternativo, assicurati che supporti [l'autenticazione AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) e fai riferimento agli endpoint API esposti che possono essere ispezionati [esportando](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) l'API REST. | DevOps ingegnere | 
| Supponiamo il`JobsAPIInvokeRole`. | [Supponiamo](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` che sia stato stampato come output del `deploy` comando:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configura Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Prova l'architettura di esempio. | Per testare l'architettura di esempio, invia le richieste all'API jobs. Per ulteriori informazioni, consulta la [documentazione di Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingegnere | 

## risoluzione dei problemi
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La distruzione e la successiva ridistribuzione dell'architettura di esempio non riescono perché il [gruppo di log di Amazon CloudWatch Logs esiste](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` già. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| La distruzione e la successiva ridistribuzione dell'architettura di esempio non riescono perché il gruppo di [log CloudWatch Logs esiste già.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/ecs/EventProcessingServiceLogs` | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Risorse correlate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [Modello di mappatura API Gateway e riferimento alla variabile di registrazione degli accessi](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Come posso integrare un'API REST di API Gateway con Amazon SQS e risolvere gli errori più comuni?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Esegui le attività di AWS Systems Manager Automation in modo sincrono da AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El Khoury, Amazon Web Services*

## Riepilogo
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Questo modello spiega come eseguire l'integrazione con. AWS Step Functions AWS Systems Manager Utilizza le integrazioni dei servizi AWS SDK per chiamare l'**startAutomationExecution**API Systems Manager con un token di attività da un flusso di lavoro di una macchina a stati e si interrompe fino a quando il token non restituisce una chiamata riuscita o non riuscita. Per dimostrare l'integrazione, questo modello implementa un wrapper di documenti di automazione (runbook) attorno al documento or e lo utilizza per chiamare `AWS-RunShellScript` o in modo `AWS-RunPowerShellScript` sincrono. `.waitForTaskToken` `AWS-RunShellScript` `AWS-RunPowerShellScript` Per ulteriori informazioni sulle integrazioni dei servizi AWS SDK in Step Functions, consulta la Guida per gli [AWS Step Functions sviluppatori](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** è un servizio di flusso di lavoro visivo a basso codice che puoi utilizzare per creare applicazioni distribuite, automatizzare i processi IT e aziendali e creare pipeline di dati e apprendimento automatico utilizzando i servizi. AWS I flussi di lavoro gestiscono gli errori, i nuovi tentativi, la parallelizzazione, le integrazioni dei servizi e l'osservabilità in modo da poterti concentrare su una logica aziendale di maggior valore.

L'automazione, una funzionalità di AWS Systems Manager, semplifica le attività comuni di manutenzione, distribuzione e riparazione per Servizi AWS Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift e Amazon Simple Storage Service (Amazon S3). L'automazione ti offre un controllo granulare sulla concomitanza delle tue automazioni. Ad esempio, è possibile specificare quante risorse indirizzare contemporaneamente e quanti errori possono verificarsi prima che un'automazione venga interrotta.

Per i dettagli di implementazione, inclusi i passaggi del runbook, i parametri e gli esempi, consulta la sezione [Informazioni aggiuntive](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Prerequisiti e limitazioni
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Prerequisiti**
+ Un account attivo AWS 
+ AWS Identity and Access Management Autorizzazioni (IAM) per accedere a Step Functions and Systems Manager
+ Un' EC2 istanza con Systems Manager Agent (SSM Agent) [installato](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) sull'istanza
+ [Un profilo di istanza IAM per Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) collegato all'istanza in cui intendi eseguire il runbook
+ Un ruolo Step Functions con le seguenti autorizzazioni IAM (che seguono il principio del privilegio minimo):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versioni del prodotto**
+ Schema del documento SSM versione 0.3 o successiva
+ SSM Agent versione 2.3.672.0 o successiva

## Architecture
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Stack tecnologico Target**
+ AWS Step Functions
+ Automazione di AWS Systems Manager 

**Architettura di destinazione**

![\[Architettura per l'esecuzione sincrona delle attività di automazione di Systems Manager da Step Functions\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automazione e scalabilità**
+ Questo modello fornisce un AWS CloudFormation modello che è possibile utilizzare per distribuire i runbook su più istanze. (Vedi l'archivio di [implementazione di GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Tools (Strumenti)
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita in tutte le regioni 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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)consente di gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala.

**Codice**

Il codice per questo modello è disponibile nell'archivio di [implementazione di GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epiche
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Crea runbook
<a name="create-runbooks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica il CloudFormation modello. | Scarica il `ssm-automation-documents.cfn.json` modello dalla `cloudformation ` cartella del GitHub repository. | AWS DevOps | 
| Crea runbook. | Accedi a Console di gestione AWS, apri la [CloudFormation console](https://console.aws.amazon.com/cloudformation/) e distribuisci il modello. Per ulteriori informazioni sulla distribuzione dei CloudFormation modelli, consulta [Creazione di uno stack sulla CloudFormation console nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html). CloudFormation  Il CloudFormation modello distribuisce tre risorse:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Crea un esempio di macchina a stati
<a name="create-a-sample-state-machine"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una macchina a stati di test.  | Segui le istruzioni contenute nella [Guida per gli AWS Step Functions sviluppatori](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) per creare ed eseguire una macchina a stati. Per la definizione, utilizzate il codice seguente. Assicurati di aggiornare il `InstanceIds` valore con l'ID di un'istanza valida abilitata per Systems Manager nel tuo account.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Questo codice richiama il runbook per eseguire due comandi che dimostrano la `waitForTaskToken` chiamata a Systems Manager Automation.Il valore del `shell` parametro (`Shell`o`PowerShell`) determina se il documento di automazione viene eseguito `AWS-RunShellScript` o`AWS-RunPowerShellScript`.L'attività scrive «Questo è un waitForTask token di automazione in esecuzione di test» nel `/home/ssm-user/automation.log` file, quindi rimane inattiva per 100 secondi prima di rispondere con il token dell'attività e rilasciare l'attività successiva del flusso di lavoro.Se invece vuoi chiamare il `SfnRunCommandByTargets` runbook, sostituisci la `Parameters` sezione del codice precedente con la seguente:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Aggiorna il ruolo IAM per la macchina a stati. | Il passaggio precedente crea automaticamente un ruolo IAM dedicato per la macchina a stati. Tuttavia, non concede le autorizzazioni per chiamare il runbook. Aggiorna il ruolo aggiungendo le seguenti autorizzazioni:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Convalida le chiamate sincrone. | Esegui la macchina a stati per convalidare la chiamata sincrona tra Step Functions e Systems Manager Automation. Per un esempio di output, vedere la sezione [Informazioni aggiuntive](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Risorse correlate
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Guida introduttiva a AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guida per AWS Step Functions sviluppatori*)
+ [Attendi una richiamata con il task token](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*Guida per AWS Step Functions gli sviluppatori*, modelli di integrazione dei servizi)
+ [chiamate API send\$1task\$1success e send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) [(documentazione Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) 
+ [AWS Systems Manager Automazione (guida AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) *per l'utente)*

## Informazioni aggiuntive
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Dettagli di implementazione**

Questo modello fornisce un CloudFormation modello che implementa due runbook di Systems Manager:
+ `SfnRunCommandByInstanceIds`esegue il `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or utilizzando instance. IDs
+ `SfnRunCommandByTargets`esegue il `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or utilizzando target.

Ogni runbook implementa quattro passaggi per eseguire una chiamata sincrona quando si utilizza l'`.waitForTaskToken`opzione in Step Functions.


| 
| 
| Fase | Azione | Description | 
| --- |--- |--- |
| **1** | `Branch` | Controlla il valore del `shell` parametro (`Shell`o`PowerShell`) per decidere se eseguire per Linux o `AWS-RunShellScript` `AWS-RunPowerShellScript` per Windows. | 
| **2** | `RunCommand_Shell` o `RunCommand_PowerShell` | Accetta diversi input ed esegue il `RunPowerShellScript` comando `RunShellScript` or. Per ulteriori informazioni, consulta la scheda **Dettagli** per il documento `RunCommand_Shell` o `RunCommand_PowerShell` Automation nella console Systems Manager. | 
| **3** | `SendTaskFailure` | Viene eseguito quando il passaggio 2 viene interrotto o annullato. Richiama l'API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) di Step Functions, che accetta tre parametri come input: il token passato dalla macchina a stati, l'errore di errore e una descrizione della causa dell'errore. | 
| **4** | `SendTaskSuccess` | Viene eseguito quando il passaggio 2 ha esito positivo. Chiama l'API Step Functions [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html), che accetta il token passato dalla macchina a stati come input. | 

**Parametri del runbook**

`SfnRunCommandByInstanceIds`runbook:


| 
| 
| Nome del parametro | Tipo | Facoltativo o richiesto | Description | 
| --- |--- |--- |--- |
| `shell` | Stringa | Richiesto | La shell delle istanze per decidere se eseguire `AWS-RunShellScript` per Linux o `AWS-RunPowerShellScript` per Windows. | 
| `deliveryTimeout` | Numero intero | Facoltativo | Il tempo, in secondi, di attesa per l'invio di un comando all'agente SSM su un'istanza. Questo parametro ha un valore minimo di 30 (0,5 minuti) e un valore massimo di 2592000 (720 ore). | 
| `executionTimeout` | Stringa | Facoltativo | Il tempo, in secondi, necessario per il completamento di un comando prima che venga considerato non riuscito. Il valore predefinito è 3600 (1 ora). Il valore massimo è 172800 (48 ore). | 
| `workingDirectory` | Stringa | Facoltativo | Il percorso alla directory di lavoro nell'istanza. | 
| `Commands` | StringList | Richiesto | Lo script o il comando di shell da eseguire. | 
| `InstanceIds` | StringList | Richiesto | Le IDs istanze in cui si desidera eseguire il comando. | 
| `taskToken` | Stringa | Richiesto | Il token di attività da utilizzare per le risposte di callback. | 

`SfnRunCommandByTargets`runbook:


| 
| 
| Name | Tipo | Facoltativo o richiesto | Description | 
| --- |--- |--- |--- |
| `shell` | Stringa | Richiesto | La shell delle istanze per decidere se eseguire `AWS-RunShellScript` per Linux o `AWS-RunPowerShellScript` per Windows. | 
| `deliveryTimeout` | Numero intero | Facoltativo | Il tempo, in secondi, di attesa per l'invio di un comando all'agente SSM su un'istanza. Questo parametro ha un valore minimo di 30 (0,5 minuti) e un valore massimo di 2592000 (720 ore). | 
| `executionTimeout` | Numero intero | Facoltativo | Il tempo, in secondi, necessario per il completamento di un comando prima che venga considerato non riuscito. Il valore predefinito è 3600 (1 ora). Il valore massimo è 172800 (48 ore). | 
| `workingDirectory` | Stringa | Facoltativo | Il percorso alla directory di lavoro nell'istanza. | 
| `Commands` | StringList | Richiesto | Lo script o il comando di shell da eseguire. | 
| `Targets` | MapList | Richiesto | Una matrice di criteri di ricerca che identifica le istanze utilizzando coppie chiave-valore specificate dall'utente. Ad esempio: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | Stringa | Richiesto | Il token di attività da utilizzare per le risposte di callback. | 

**Esempio di output**

La tabella seguente fornisce un esempio di output della funzione step. Mostra che il tempo di esecuzione totale è superiore a 100 secondi tra il passaggio 5 (`TaskSubmitted`) e il passaggio 6 (`TaskSucceeded`). Ciò dimostra che la funzione step ha atteso il completamento del `sleep 100` comando prima di passare all'attività successiva del flusso di lavoro.


| 
| 
| ID | Tipo | Fase | Risorsa | Tempo trascorso (ms) | Time stamp | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 marzo 2022 14:50:34.303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 marzo 2022 14:50:34.343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 marzo 2022 14:50:34.343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 marzo 2022 14:50:34.457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 marzo 2022 14:50:34.960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 marzo 2022 14:52:18.138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 marzo 2022 02:52:18.163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 marzo 2022 14:52:18.200 | 

# Esegui letture parallele di oggetti S3 usando Python in una funzione AWS Lambda
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Riepilogo
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Puoi utilizzare questo modello per recuperare e riepilogare un elenco di documenti dai bucket Amazon Simple Storage Service (Amazon S3) in tempo reale. Il modello fornisce codice di esempio per oggetti di lettura parallela dai bucket S3 su Amazon Web Services ()AWS. Il modello mostra come eseguire in modo efficiente attività I/O associate con AWS Lambda funzioni utilizzando Python.

Una società finanziaria ha utilizzato questo modello in una soluzione interattiva per approvare o rifiutare manualmente le transazioni finanziarie correlate in tempo reale. I documenti relativi alle transazioni finanziarie sono stati archiviati in un bucket S3 relativo al mercato. Un operatore ha selezionato un elenco di documenti dal bucket S3, ha analizzato il valore totale delle transazioni calcolate dalla soluzione e ha deciso di approvare o rifiutare il batch selezionato.

Le attività legate all'I/O supportano più thread. [In questo codice di esempio, concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)viene utilizzato con un massimo di 30 thread simultanei, anche se le funzioni Lambda supportano fino a 1.024 thread (uno di questi thread è il processo principale). Questo limite è dovuto al fatto che troppi thread creano problemi di latenza dovuti al cambio di contesto e all'utilizzo delle risorse di elaborazione. È inoltre necessario aumentare il numero massimo di connessioni al pool in `botocore` modo che tutti i thread possano eseguire il download dell'oggetto S3 contemporaneamente.

Il codice di esempio utilizza un oggetto da 8,3 KB, con dati JSON, in un bucket S3. L'oggetto viene letto più volte. Dopo che la funzione Lambda ha letto l'oggetto, i dati JSON vengono decodificati in un oggetto Python. Nel dicembre 2024, il risultato dopo l'esecuzione di questo esempio è stato di 1.000 letture elaborate in 2,3 secondi e 10.000 letture elaborate in 27 secondi utilizzando una funzione Lambda configurata con 2.304 MB di memoria. AWS Lambda supporta configurazioni di memoria da 128 MB a 10.240 MB (10 GB), tuttavia l'aumento della memoria Lambda oltre 2.304 MB non ha contribuito a ridurre il tempo di esecuzione di questa particolare attività legata all'I/O.

Lo strumento [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) è stato utilizzato per testare diverse configurazioni di memoria Lambda e verificare il rapporto performance-to-cost migliore per l'attività. Per i risultati dei test, consulta la sezione Informazioni [aggiuntive](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Prerequisiti e limitazioni
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Competenza nello sviluppo di Python

**Limitazioni**
+ Una funzione Lambda può avere al massimo [1.024 processi o thread di esecuzione](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution).
+  Account AWS I nuovi hanno un limite di memoria Lambda di 3.008 MB. Regola lo strumento AWS Lambda Power Tuning di conseguenza. Per ulteriori informazioni, consulta la sezione [Risoluzione dei problemi](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 ha un limite di [5.500 GET/HEAD richieste al secondo per](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) prefisso partizionato.

**Versioni del prodotto**
+ Python 3.9 o versioni successive
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) versione 2
+ AWS Lambda Power Tuning 4.3.6 (opzionale)

## Architecture
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Stack tecnologico Target**
+ AWS Lambda
+ Simple Storage Service (Amazon S3)
+ AWS Step Functions (se è AWS Lambda installato Power Tuning)

**Architettura di destinazione**

Il diagramma seguente mostra una funzione Lambda che legge gli oggetti da un bucket S3 in parallelo. Il diagramma presenta anche un flusso di lavoro Step Functions per lo strumento AWS Lambda Power Tuning per ottimizzare la memoria delle funzioni Lambda. Questa messa a punto aiuta a raggiungere un buon equilibrio tra costi e prestazioni.

![\[Diagramma che mostra la funzione Lambda, il bucket S3 e AWS Step Functions.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automazione e scalabilità**

Le funzioni Lambda si scalano rapidamente quando necessario. Per evitare errori 503 Slow Down da Amazon S3 in caso di forte domanda, consigliamo di porre alcuni limiti alla scalabilità.

## Tools (Strumenti)
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) è un framework di sviluppo software che consente di definire e fornire Cloud AWS l'infrastruttura in codice. L'infrastruttura di esempio è stata creata per essere implementata con. AWS CDK
+ [AWS Command Line InterfaceAWS 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. In questo modello, la AWS CLI versione 2 viene utilizzata per caricare un file JSON di esempio.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Simple Storage Service Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di storage di oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione serverless che ti aiuta a combinare AWS Lambda funzioni e altri servizi AWS per creare applicazioni aziendali critiche.

**Altri strumenti**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico. Il [riutilizzo dei thread di lavoro inattivi è stato introdotto](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) nella versione 3.8 di Python e il codice della funzione Lambda in questo modello è stato creato per Python versione 3.9 e successive.

**Archivio di codice**

Il codice per questo pattern è disponibile nel [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub repository.

## Best practice
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Questo AWS CDK costrutto si basa sulle autorizzazioni utente Account AWS dell'utente per implementare l'infrastruttura. [Se prevedi di utilizzare AWS CDK Pipelines o distribuzioni tra account, consulta i sintetizzatori Stack.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Questa applicazione di esempio non ha i log di accesso abilitati nel bucket S3. È consigliabile abilitare i log di accesso nel codice di produzione.

## Epiche
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Prepara l'ambiente di sviluppo
<a name="prepare-the-development-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Controlla la versione installata di Python. | Questo codice è stato testato specificamente su Python 3.9 e Python 3.13 e dovrebbe funzionare su tutte le versioni tra queste versioni. Per verificare la tua versione di Python, esegui `python3 -V` nel tuo terminale e installa una versione più recente, se necessario.Per verificare che i moduli richiesti siano installati, esegui. `python3 -c "import pip, venv"` Nessun messaggio di errore indica che i moduli sono installati correttamente e che sei pronto per eseguire questo esempio.  | Architetto del cloud | 
| Installa AWS CDK. | Per installare il, AWS CDK se non è già installato, segui le istruzioni in [Guida introduttiva a AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Per confermare che la AWS CDK versione installata è 2.0 o successiva, esegui`cdk –version`. | Architetto del cloud | 
| Avvia il tuo ambiente. | Per avviare il tuo ambiente, se non l'hai già fatto, segui le istruzioni riportate in [Bootstrap your environment per l'utilizzo](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html) con. AWS CDK | Architetto del cloud | 

### Clona il repository di esempio
<a name="clone-the-example-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Per clonare l'ultima versione del repository, esegui il seguente comando:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Architetto del cloud | 
| Cambia la directory di lavoro nel repository clonato. | Esegui il comando seguente:<pre>cd aws-lambda-parallel-download</pre> | Architetto del cloud | 
| Crea l'ambiente virtuale Python. | Per creare un ambiente virtuale Python, esegui il seguente comando:<pre>python3 -m venv .venv</pre> | Architetto cloud | 
| Attiva l'ambiente virtuale. | Per attivare l'ambiente virtuale, esegui il seguente comando:<pre>source .venv/bin/activate</pre> | Architetto del cloud | 
| Installa le dipendenze. | Per installare le dipendenze Python, esegui il comando: `pip`<pre>pip install -r requirements.txt</pre> | Architetto del cloud | 
| Sfoglia il codice. | (Facoltativo) Il codice di esempio che scarica un oggetto dal bucket S3 si trova in. `resources/parallel.py`Il codice dell'infrastruttura si trova nella cartella`parallel_download`. | Architetto del cloud | 

### Implementa e testa l'app
<a name="deploy-and-test-the-app"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuire l'app. | Esegui `cdk deploy`.Annota gli AWS CDK output:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Architetto del cloud | 
| Carica un file JSON di esempio. | Il repository contiene un file JSON di esempio di circa 9 KB. Per caricare il file nel bucket S3 dello stack creato, esegui il comando seguente:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>Sostituisci `<ParallelDownloadStack.SampleS3BucketName>` con il valore corrispondente dall'output. AWS CDK  | Architetto del cloud | 
| Esegui l'app. | Per eseguire l'app, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Architetto del cloud | 
| Aggiungi il numero di download. | (Facoltativo) Per eseguire 1.500 chiamate get object, utilizzate il seguente codice JSON in **Event JSON del parametro**: `Test`<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Architetto del cloud | 

### Opzionale: esegui AWS Lambda Power Tuning
<a name="optional-run-lamlong-power-tuning"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui lo strumento AWS Lambda Power Tuning. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Alla fine dell'esecuzione, il risultato sarà visualizzato nella scheda **Esecuzione input e output**. | Architetto del cloud | 
| Visualizza i risultati del AWS Lambda Power Tuning in un grafico. | Nella scheda **Execution input and output**, copiate il link della `visualization` proprietà e incollatelo in una nuova scheda del browser. | Architetto del cloud | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi gli oggetti dal bucket S3. | Prima di distruggere le risorse distribuite, rimuovi tutti gli oggetti dal bucket S3:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Ricordati di sostituirlo `<ParallelDownloadStack.SampleS3BucketName>` con il valore delle uscite. AWS CDK  | Architetto del cloud | 
| Distruggi le risorse. | Per distruggere tutte le risorse create per questo programma pilota, esegui il seguente comando:<pre>cdk destroy</pre> | Architetto del cloud | 

## risoluzione dei problemi
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | Per i nuovi account, potresti non essere in grado di configurare più di 3.008 MB nelle tue funzioni Lambda. Per testare l'utilizzo AWS Lambda di Power Tuning, aggiungi la seguente proprietà all'input JSON quando avvii l'esecuzione di Step Functions:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Risorse correlate
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python — concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Quote Lambda: configurazione, distribuzione ed esecuzione delle funzioni](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Lavorare con il AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Funzioni di profilazione con AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Informazioni aggiuntive
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Codice**

Il seguente frammento di codice esegue l'elaborazione I/O parallela:

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

`ThreadPoolExecutor`Riutilizza i thread quando diventano disponibili.

**Test e risultati**

Questi test sono stati condotti nel dicembre 2024.

Il primo test ha elaborato 2.500 letture di oggetti, con il seguente risultato.

![\[Il tempo di invocazione diminuisce e il costo di invocazione aumenta con l'aumentare della memoria.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


A partire da 3.009 MB, il livello di tempo di elaborazione è rimasto pressoché invariato per ogni aumento di memoria, ma il costo è aumentato all'aumentare delle dimensioni della memoria.

Un altro test ha analizzato l'intervallo tra 1.536 MB e 3.072 MB di memoria, utilizzando valori multipli di 256 MB ed elaborando 10.000 letture di oggetti, con i seguenti risultati.

![\[Riduzione della differenza tra la diminuzione del tempo di invocazione e l'aumento dei costi di invocazione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


Il performance-to-cost rapporto migliore è stato ottenuto con la configurazione Lambda da 2.304 MB di memoria.

A titolo di confronto, un processo sequenziale di 2.500 letture di oggetti ha richiesto 47 secondi. Il processo parallelo che utilizza la configurazione Lambda da 2.304 MB ha richiesto 7 secondi, ovvero l'85% in meno.

![\[Grafico che mostra la diminuzione del tempo quando si passa dall'elaborazione sequenziale a quella parallela.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Invia dati di telemetria da AWS Lambda a OpenSearch per analisi e visualizzazione in tempo reale
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar e David Kilzer, Amazon Web Services*

## Riepilogo
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Le applicazioni moderne stanno diventando sempre più distribuite e basate sugli eventi, il che rafforza la necessità di monitoraggio e osservabilità in tempo reale. AWS Lambda è un servizio di elaborazione serverless che svolge un ruolo cruciale nella creazione di architetture scalabili e basate sugli eventi. Tuttavia, il monitoraggio e la risoluzione dei problemi delle funzioni Lambda possono essere difficili se ci si affida esclusivamente ad Amazon CloudWatch Logs, che può introdurre latenza e periodi di conservazione limitati.

Per affrontare questa sfida, AWS ha introdotto l'API Lambda Telemetry, che consente alle funzioni Lambda di inviare dati di telemetria direttamente a strumenti di monitoraggio e osservabilità di terze parti. Questa API supporta lo streaming in tempo reale di log, metriche e tracce e fornisce una visione completa e tempestiva delle prestazioni e dello stato delle funzioni Lambda.

Questo modello spiega come integrare l'API Lambda Telemetry con [OpenSearch](https://opensearch.org/docs/latest/), un motore di ricerca e analisi distribuito open source. OpenSearch offre una piattaforma potente e scalabile per l'acquisizione, l'archiviazione e l'analisi di grandi volumi di dati, che la rende la scelta ideale per i dati di telemetria Lambda. In particolare, questo modello dimostra come inviare i log da una funzione Lambda scritta in Python direttamente a un cluster OpenSearch utilizzando un'estensione Lambda fornita da. AWS Questa soluzione è flessibile e personalizzabile, quindi puoi creare la tua estensione Lambda o modificare il codice sorgente di esempio per modificare il formato di output come desideri.

Il modello spiega come impostare e configurare l'integrazione dell'API Lambda Telemetry e include le migliori pratiche per la sicurezza OpenSearch, l'ottimizzazione dei costi e la scalabilità. L'obiettivo è aiutarti a ottenere informazioni più approfondite sulle tue funzioni Lambda e migliorare l'osservabilità complessiva delle tue applicazioni serverless.


| 
| 
| Nota: questo modello si concentra sull'integrazione dell'API di telemetria Lambda con managed. OpenSearch Tuttavia, i principi e le tecniche discussi sono applicabili anche all'autogestione e a Elasticsearch. OpenSearch  | 
| --- |

## Prerequisiti e limitazioni
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Prima di iniziare il processo di integrazione, assicurati di avere i seguenti prerequisiti:

**Account AWS**: Un attivo Account AWS con le autorizzazioni appropriate per creare e gestire le seguenti risorse: AWS 
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Service (se utilizzi un OpenSearch cluster gestito)

**OpenSearch cluster**:
+ È possibile utilizzare un OpenSearch cluster autogestito esistente o un servizio gestito come OpenSearch Service.
+ Se utilizzi OpenSearch Service, configura il OpenSearch cluster seguendo le istruzioni in [Getting started with Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) nella documentazione del OpenSearch Servizio.
+ Assicurati che il OpenSearch cluster sia accessibile dalla tua funzione Lambda e sia configurato con le impostazioni di sicurezza necessarie, come le politiche di accesso, la crittografia e l'autenticazione.
+ Configura il OpenSearch cluster con le mappature degli indici e le impostazioni necessarie per importare i dati di telemetria Lambda. Per ulteriori informazioni, consulta [Caricamento di dati di streaming in Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) nella documentazione del OpenSearch servizio.

**Connettività di rete**:
+ Assicurati che la tua funzione Lambda disponga della connettività di rete necessaria per accedere al OpenSearch cluster. Per indicazioni su come configurare le impostazioni del cloud privato virtuale (VPC), consulta [Avvio dei domini Amazon OpenSearch Service all'interno di un VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) nella documentazione del servizio. OpenSearch 

Ruoli e **politiche IAM**:
+ Crea un ruolo IAM con le autorizzazioni necessarie affinché la tua funzione Lambda possa accedere al cluster e accedere OpenSearch alle tue credenziali archiviate in. Gestione dei segreti AWS
+ Allega le policy IAM appropriate al ruolo, ad esempio la `AWSLambdaBasicExecutionRole` policy e le eventuali autorizzazioni aggiuntive necessarie per interagire con. OpenSearch
+ Verifica che le autorizzazioni IAM concesse alla tua funzione Lambda consentano di scrivere OpenSearch dati nel cluster. Per informazioni sulla gestione delle autorizzazioni IAM, consulta [Definizione delle autorizzazioni della funzione Lambda con un ruolo di esecuzione](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) nella documentazione Lambda.

**Conoscenza del linguaggio di programmazione:**
+ Avrai bisogno di una conoscenza di base di Python (o del linguaggio di programmazione di tua scelta) per comprendere e modificare il codice di esempio per la funzione Lambda e l'estensione Lambda.

**Ambiente di sviluppo:**
+ Configura un ambiente di sviluppo locale con gli strumenti e le dipendenze necessari per creare e distribuire funzioni ed estensioni Lambda. 

**AWS CLI oppure: Console di gestione AWS**
+ Installa e configura il [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) o usalo Console di gestione AWS con le credenziali appropriate per interagire con quello richiesto. Servizi AWS

**Monitoraggio e registrazione**:
+ Acquisisci familiarità con le migliori pratiche di monitoraggio e registrazione su AWS servizi come Amazon CloudWatch e AWS CloudTrail per scopi di monitoraggio e controllo.
+ Controlla CloudWatch i log per la tua funzione Lambda per identificare eventuali errori o eccezioni relativi all'integrazione dell'API Lambda Telemetry. Per una guida alla risoluzione dei problemi, consulta la documentazione dell'[API Lambda Telemetry](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Architecture
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Questo modello utilizza OpenSearch Service per archiviare registri e dati di telemetria generati dalle funzioni Lambda. Questo approccio consente di trasmettere rapidamente i log direttamente al OpenSearch cluster, riducendo la latenza e i costi associati all'utilizzo di Logs come intermediario. CloudWatch 


| 
| 
| [Il codice di estensione Lambda può inviare telemetria a OpenSearch Service, utilizzando direttamente l' OpenSearch API o utilizzando una libreria client. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) L'estensione Lambda può utilizzare le operazioni di massa supportate dall' OpenSearch API per raggruppare gli eventi di telemetria in batch e inviarli a OpenSearch Service in un'unica richiesta. | 
| --- |

Il seguente diagramma del flusso di lavoro illustra il flusso di lavoro di registro per le funzioni Lambda quando si utilizza un OpenSearch cluster come endpoint.

![\[Flusso di lavoro per l'invio di dati di telemetria a un cluster. OpenSearch\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


L'architettura include i seguenti componenti:
+ Funzione Lambda: la funzione serverless che genera log e dati di telemetria durante l'esecuzione.
+ Estensione Lambda: un'estensione basata su Python che utilizza l'API Lambda Telemetry per l'integrazione diretta con il cluster. OpenSearch Questa estensione viene eseguita insieme alla funzione Lambda nello stesso ambiente di esecuzione.
+ API di telemetria Lambda: l'API che consente alle estensioni Lambda di inviare dati di telemetria, inclusi log, metriche e tracce, direttamente a strumenti di monitoraggio e osservabilità di terze parti.
+ Cluster Amazon OpenSearch Service: un OpenSearch cluster gestito ospitato su AWS. Questo cluster è responsabile dell'acquisizione, dell'archiviazione e dell'indicizzazione dei dati di registro trasmessi dalla funzione Lambda tramite l'estensione Lambda.

Il flusso di lavoro prevede i seguenti passaggi:

1. La funzione Lambda viene chiamata e genera log e dati di telemetria durante la sua esecuzione.

1. L'estensione Lambda funziona insieme alla funzione per acquisire i log e i dati di telemetria utilizzando l'API Lambda Telemetry.

1. L'estensione Lambda stabilisce una connessione sicura con il cluster di OpenSearch servizi e trasmette i dati di registro in tempo reale.

1. Il cluster di OpenSearch servizi inserisce, indicizza e archivia i dati di registro per renderli disponibili per la ricerca, l'analisi e la visualizzazione tramite l'uso di strumenti come Kibana o altre applicazioni compatibili.

Evitando CloudWatch i log e inviando i dati di log direttamente al cluster, questa soluzione offre diversi vantaggi: OpenSearch 
+ Streaming e analisi dei log in tempo reale, che consentono una risoluzione dei problemi più rapida e una migliore osservabilità.
+ Latenza ridotta e potenziali limitazioni di conservazione associate CloudWatch ai log.
+ Flessibilità di personalizzare l'estensione Lambda o creare un'estensione personalizzata per formati di output specifici o elaborazioni aggiuntive.
+ Integrazione con le funzionalità di ricerca, analisi e visualizzazione di OpenSearch Service per l'analisi e il monitoraggio dei log.

La sezione [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) fornisce step-by-step istruzioni per configurare l'estensione Lambda, configurare la funzione Lambda e integrare con il cluster di servizi. OpenSearch [Per considerazioni sulla sicurezza, strategie di ottimizzazione dei costi e suggerimenti per il monitoraggio e la risoluzione dei problemi della soluzione, consulta la sezione Best practice.](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices)

## Tools (Strumenti)
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**Servizi AWS**
+ [AWS Lambda](https://aws.amazon.com/lambda/) è un servizio di elaborazione che consente di eseguire del codice senza la necessità di effettuare il provisioning o la gestione dei server. Lambda esegue il codice solo quando è necessario e si dimensiona automaticamente, da poche richieste al giorno a migliaia al secondo.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) è un servizio completamente gestito fornito da AWS che semplifica la distribuzione, il funzionamento e la scalabilità OpenSearch dei cluster nel cloud.
+ [Le estensioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) estendono la funzionalità delle funzioni Lambda eseguendo codice personalizzato insieme a esse. Puoi utilizzare le estensioni Lambda per integrare Lambda con vari strumenti di monitoraggio, osservabilità, sicurezza e governance.
+ AWS Lambda L'[API di telemetria](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) ti consente di utilizzare le estensioni per acquisire dati avanzati di monitoraggio e osservabilità direttamente da Lambda e inviarli a una destinazione di tua scelta.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)ti aiuta a modellare e configurare AWS le tue risorse in modo da dedicare meno tempo alla gestione di tali risorse e più tempo a concentrarti sulle tue applicazioni.

**Archivi di codice**
+ [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) include demo e progetti di AWS esempio di AWS partner per aiutarti a iniziare a creare le tue estensioni.
+ [Example Lambda Telemetry Integrations for fornisce OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) un'estensione Lambda di esempio che dimostra come inviare i log da una funzione Lambda a un cluster. OpenSearch 

**Altri strumenti**
+ [OpenSearch](https://opensearch.org/faq/)è un motore di ricerca e analisi distribuito open source che fornisce una potente piattaforma per l'acquisizione, l'archiviazione e l'analisi di grandi volumi di dati.
+ Kibana è uno strumento di visualizzazione ed esplorazione dei dati open source che puoi utilizzare con. OpenSearch Nota che l'implementazione della visualizzazione e dell'analisi esula dall'ambito di questo modello. Per ulteriori informazioni, consulta la [documentazione di Kibana](https://www.elastic.co/guide/en/kibana/current/index.html) e altre risorse.

## Best practice
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Quando integri l'API di telemetria Lambda con OpenSearch, prendi in considerazione le seguenti best practice.

**Sicurezza e controllo degli accessi**
+ **Comunicazione sicura**: crittografa tutte le comunicazioni tra le funzioni Lambda e OpenSearch il cluster utilizzando HTTPS. Configura le SSL/TLS impostazioni necessarie nell'estensione e OpenSearch nella configurazione Lambda.
+ **Autorizzazioni IAM:**
  + Le estensioni vengono eseguite nello stesso ambiente di esecuzione della funzione Lambda, quindi ereditano lo stesso livello di accesso a risorse come il file system, la rete e le variabili di ambiente.
  + Concedi le autorizzazioni IAM minime necessarie alle tue funzioni Lambda per accedere all'API Lambda Telemetry e scrivere dati nel cluster. OpenSearch Utilizza il [principio del privilegio minimo per limitare l'ambito delle](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) autorizzazioni.
+ **OpenSearch controllo degli accessi**: implementa un controllo granulare degli accessi nel OpenSearch cluster per limitare l'accesso ai dati sensibili. Utilizza le funzionalità di sicurezza integrate, come l'autenticazione degli utenti, il controllo degli accessi basato sui ruoli e le autorizzazioni a livello di indice, in. OpenSearch
+ **Estensioni affidabili: installa sempre le estensioni** solo da una fonte attendibile. Utilizza strumenti Infrastructure as Code (IaC) CloudFormation per semplificare il processo di associazione della stessa configurazione di estensione, incluse le autorizzazioni IAM, a più funzioni Lambda. Gli strumenti IAc forniscono anche un registro di controllo delle estensioni e delle versioni utilizzate in precedenza.
+ **Gestione dei dati sensibili**: quando crei estensioni, evita di registrare dati sensibili. Pulisci i payload e i metadati prima di registrarli o renderli persistenti per scopi di controllo.

**Ottimizzazione dei costi**
+ **Monitoraggio e avviso: configura** meccanismi di monitoraggio e avviso per tenere traccia del volume di dati inviati dalle tue funzioni OpenSearch Lambda. Questo ti aiuterà a identificare e risolvere eventuali sforamenti dei costi.
+ **Conservazione dei dati**: valuta attentamente il periodo di conservazione dei dati appropriato per i tuoi dati di telemetria Lambda in. OpenSearch Periodi di conservazione più lunghi possono aumentare i costi di archiviazione, quindi bilancia le esigenze di osservabilità con l'ottimizzazione dei costi.
+ **Compressione e indicizzazione**: abilita la compressione dei dati e ottimizza la tua strategia di OpenSearch indicizzazione per ridurre l'ingombro di archiviazione dei dati di telemetria Lambda.
+ **Riduzione della dipendenza** da CloudWatch: integrando direttamente l'API di telemetria Lambda con OpenSearch, è possibile ridurre potenzialmente la dipendenza dai CloudWatch log, con conseguenti risparmi sui costi. Questo perché l'API Lambda Telemetry consente di inviare i log direttamente a OpenSearch, evitando così la necessità di archiviare ed elaborare i dati. CloudWatch

**Scalabilità e affidabilità**
+ Elaborazione **asincrona: utilizza modelli di elaborazione** asincroni, come Amazon Simple Queue Service (Amazon SQS) o Amazon Kinesis, per disaccoppiare l'esecuzione della funzione Lambda dall'ingestione dei dati. OpenSearch Questo aiuta a mantenere la reattività delle funzioni Lambda e migliora l'affidabilità complessiva del sistema.
+ **OpenSearch scalabilità del cluster**: monitora le prestazioni e l'utilizzo delle risorse del OpenSearch cluster e ridimensionalo verso l'alto o verso il basso secondo necessità per gestire il volume crescente di dati di telemetria Lambda.
+ **Failover e disaster recovery**: implementa una solida strategia di disaster recovery per il OpenSearch cluster, che include backup regolari e la capacità di ripristinare rapidamente i dati in caso di guasto.

**Osservabilità e monitoraggio**
+ **Dashboard e visualizzazioni**: utilizza Kibana o altri strumenti di dashboard per creare dashboard e visualizzazioni personalizzate che forniscono informazioni sulle prestazioni e sullo stato delle funzioni Lambda in base ai dati di telemetria inclusi. OpenSearch
+ Avvisi **e notifiche: configura avvisi** e notifiche per monitorare in modo proattivo anomalie, errori o problemi di prestazioni nelle funzioni Lambda. Integra questi avvisi e notifiche con i processi di gestione degli incidenti esistenti.
+ **Tracciamento e correlazione**: assicurati che i dati di telemetria Lambda includano informazioni di tracciamento pertinenti, come richieste IDs o correlazioni, per consentire end-to-end l'osservabilità e la risoluzione dei problemi tra le applicazioni IDs serverless distribuite.

Seguendo queste best practice, puoi assicurarti che l'integrazione dell'API Lambda Telemetry con OpenSearch sia sicura, economica e scalabile e fornisca un'osservabilità completa per le tue applicazioni serverless.

## Epiche
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Crea e distribuisci il livello di estensione Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica il codice sorgente. | Scarica le estensioni di esempio dal repository [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions). | Sviluppatore di app, architetto cloud | 
| Accedi alla cartella `python-example-telemetry-opensearch-extension`. | L'archivio delle [AWS Lambda estensioni](https://github.com/aws-samples/aws-lambda-extensions) che hai scaricato contiene numerosi esempi per diversi casi d'uso e runtime linguistici. Vai alla cartella [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) per usare l'estensione OpenSearch Python, a cui invia i log. OpenSearch | Sviluppatore di app, architetto cloud | 
| Aggiungi le autorizzazioni per eseguire l'endpoint di estensione. | Esegui il comando seguente per rendere eseguibile l'endpoint dell'estensione:<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Sviluppatore di app, architetto cloud | 
| Installa le dipendenze dell'estensione localmente. | Esegui il seguente comando per installare le dipendenze locali per il codice Python:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Queste dipendenze verranno montate insieme al codice di estensione. | Sviluppatore di app, architetto cloud | 
| Crea un pacchetto.zip per l'estensione per distribuirla come livello. | Il file con estensione zip deve contenere una directory principale denominata`extensions/`, in cui si trova l'eseguibile dell'estensione, e un'altra directory principale chiamata`python-example-telemetry-opensearch-extension/`, in cui si trovano la logica di base dell'estensione e le sue dipendenze.Crea il pacchetto.zip per l'estensione:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Sviluppatore di app, architetto cloud | 
| Implementa l'estensione come livello Lambda. | Pubblicate il layer utilizzando il file di estensione .zip e il seguente comando:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Sviluppatore di app, architetto cloud | 

### Integra l'estensione nella tua funzione
<a name="integrate-the-extension-into-your-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi il livello alla tua funzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)[Per ulteriori informazioni sull'aggiunta di un layer alla funzione Lambda, consulta la documentazione Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html) | Sviluppatore di app, architetto cloud | 
| Imposta le variabili di ambiente per la funzione. | Nella pagina della funzione, scegliete la scheda **Configurazione** e aggiungete le seguenti variabili di ambiente alla funzione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Sviluppatore di app, architetto cloud | 

### Aggiungi istruzioni di registrazione e verifica la tua funzione
<a name="add-logging-statements-and-test-your-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungi istruzioni di registrazione alla tua funzione. | Aggiungi istruzioni di registrazione alla tua funzione utilizzando uno dei [meccanismi di registrazione integrati](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) o il modulo di registrazione preferito. Ecco alcuni esempi di registrazione dei messaggi in Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | Sviluppatore di app, architetto cloud | 
| Prova la tua funzione . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Dovresti vedere **Esecuzione della funzione: riuscita** se tutto funziona correttamente. | Sviluppatore di app, architetto cloud | 

### Visualizza i tuoi dati di accesso OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Interroga i tuoi indici. | In OpenSearch, esegui il comando seguente per interrogare i tuoi indici:<pre>SELECT * FROM index-name</pre>I log dovrebbero essere visualizzati nei risultati della query. | Architetto del cloud | 

## risoluzione dei problemi
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Problemi di connettività | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Errori di inserimento dei dati | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Risorse correlate
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Esempi di integrazioni di telemetria Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) per (repository) OpenSearch GitHub 
+ [Potenzia le funzioni Lambda utilizzando le estensioni Lambda (documentazione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html))
+ [API di telemetria Lambda (documentazione](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) Lambda)
+ [Presentazione dell'API di AWS Lambda telemetria (post sul blog)](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/)AWS 
+ [Integrazione dell' AWS Lambda API di telemetria con Prometheus](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch) e (post sul blog) OpenSearch AWS 

## Informazioni aggiuntive
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Modifica della struttura dei log**

Per impostazione predefinita, l'estensione invia i log come documento annidato a OpenSearch . Ciò consente di eseguire interrogazioni annidate per recuperare i valori delle singole colonne.

Se l'output di registro predefinito non soddisfa le tue esigenze specifiche, puoi personalizzarlo modificando il codice sorgente dell'estensione Lambda fornita da. AWS AWS incoraggia i clienti ad adattare l'output alle proprie esigenze aziendali. Per modificare l'output del registro, individua la `dispatch_to_opensearch` funzione nel `telemetry_dispatcher.py` file all'interno del codice sorgente dell'estensione e apporta le modifiche necessarie.

# Configura un router cellulare serverless per un'architettura basata su celle
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq e Ioannis Lioupras, Amazon Web Services*

## Riepilogo
<a name="serverless-cell-router-architecture-summary"></a>

In quanto punto di accesso a un sistema globale di applicazioni basate su celle, il router cellulare è responsabile dell'assegnazione efficiente degli utenti alle celle appropriate e della fornitura degli endpoint agli utenti. Il router cellulare gestisce funzioni come la memorizzazione delle user-to-cell mappature, il monitoraggio della capacità delle celle e la richiesta di nuove celle quando necessario. È importante mantenere la funzionalità del router cellulare durante potenziali interruzioni.

Il framework di progettazione cell-router in questo modello si concentra su resilienza, scalabilità e ottimizzazione complessiva delle prestazioni. Il modello utilizza il routing statico, in cui i client memorizzano nella cache gli endpoint al momento dell'accesso iniziale e comunicano direttamente con le celle. Questo disaccoppiamento migliora la resilienza del sistema contribuendo a garantire la funzionalità ininterrotta dell'applicazione basata su celle in caso di problemi tra cellulare e router.

Questo modello AWS CloudFormation utilizza un modello per implementare l'architettura. Per informazioni dettagliate su ciò che viene distribuito dal modello o per distribuire la stessa configurazione utilizzando il Console di gestione AWS, consulta la sezione Informazioni [aggiuntive](#serverless-cell-router-architecture-additional).

**Importante**  
La dimostrazione, il codice e il CloudFormation modello presentati in questo modello hanno solo scopo esplicativo. Il materiale fornito ha il solo scopo di illustrare il modello di progettazione e di facilitarne la comprensione. La demo e il codice non sono pronti per la produzione e non devono essere utilizzati per attività di produzione dal vivo. Qualsiasi tentativo di utilizzare il codice o la demo in un ambiente di produzione è fortemente sconsigliato ed è a rischio dell'utente. Consigliamo di consultare i professionisti appropriati e di eseguire test approfonditi prima di implementare questo modello o uno qualsiasi dei suoi componenti in un ambiente di produzione.

## Prerequisiti e limitazioni
<a name="serverless-cell-router-architecture-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo
+ L'ultima versione di [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenziali AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) con le autorizzazioni necessarie per creare lo CloudFormation stack, AWS Lambda le funzioni e le risorse correlate

**Versioni del prodotto**
+ Python 3.12

## Architecture
<a name="serverless-cell-router-architecture-architecture"></a>

Il diagramma seguente mostra un design di alto livello del router cellulare.

![\[Il processo in cinque fasi del router cellulare.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


Il diagramma illustra il seguente flusso di lavoro:

1. L'utente contatta Amazon API Gateway, che funge da interfaccia per gli endpoint API cell-router.

1. Amazon Cognito gestisce l'autenticazione e l'autorizzazione.

1. Il AWS Step Functions flusso di lavoro è composto dai seguenti componenti:
   + **Orchestrator** ‒ Gli `Orchestrator` usi AWS Step Functions per creare un flusso di lavoro o una macchina a stati. Il flusso di lavoro viene attivato dall'API del router cellulare. `Orchestrator`Esegue le funzioni Lambda in base al percorso della risorsa.
   + **Dispatcher** ‒ La funzione `Dispatcher` Lambda identifica e assegna una cella statica per ogni nuovo utente registrato. La funzione cerca la cella con il minor numero di utenti, la assegna all'utente e restituisce gli endpoint.
   + **Mapper** ‒ L'`Mapper`operazione gestisce le user-to-cell mappature all'interno del database `RoutingDB` Amazon DynamoDB creato dal modello. CloudFormation Quando viene attivata, la `Mapper` funzione fornisce agli utenti già assegnati i propri endpoint.
   + **Scaler** ‒ La `Scaler` funzione tiene traccia dell'occupazione delle celle e della capacità disponibile. Se necessario, la `Scaler` funzione può inviare una richiesta tramite Amazon Simple Queue Service (Amazon SQS) al livello Provision and Deploy per richiedere nuove celle.
   + **Validator** ‒ La `Validator` funzione convalida gli endpoint delle celle e rileva eventuali problemi.

1. `RoutingDB`Memorizza le informazioni e gli attributi delle celle (endpoint API, stato Regione AWS, metriche).

1. Quando la capacità disponibile delle celle supera una soglia, il router cellulare richiede servizi di provisioning e distribuzione tramite Amazon SQS per creare nuove celle.

Quando vengono create nuove celle, `RoutingDB` viene aggiornato dal livello Provision and Deploy. Tuttavia, tale processo non rientra nell'ambito di questo modello. Per una panoramica dei presupposti di progettazione dell'architettura basata su celle e dettagli sul design cell-router utilizzato in questo modello, vedere la sezione Informazioni [aggiuntive](#serverless-cell-router-architecture-additional).

## Tools (Strumenti)
<a name="serverless-cell-router-architecture-tools"></a>

**Servizi AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [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 attraverso Account AWS e. Regioni AWS
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [Amazon 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.
+ [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**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Il codice per questo pattern è disponibile nel repository GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/). 

## Best practice
<a name="serverless-cell-router-architecture-best-practices"></a>

Per le migliori pratiche per la creazione di architetture basate su celle, consulta la seguente guida Well-Architected AWS :
+ [Ridurre l'ambito di impatto con l'architettura basata su celle](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Well-Architected Framework Reliability Pillar REL1: 0-BP04 Utilizza architetture bulkhead per limitare l'ambito dell'impatto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Epiche
<a name="serverless-cell-router-architecture-epics"></a>

### Prepara i file sorgente
<a name="prepare-source-files"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository di codice di esempio. | Per clonare il Serverless-Cell-Router GitHub repository sul tuo computer, usa il seguente comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Developer | 
| Imposta credenziali AWS CLI temporanee. | Configura il AWS CLI con le credenziali per il tuo. Account AWS Questa procedura dettagliata utilizza credenziali temporanee fornite dalla riga di **comando di AWS IAM Identity Center o dall'opzione di accesso programmatico**. In questo modo vengono impostate le variabili `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, e di `AWS_SESSION_TOKEN` AWS ambiente con le credenziali appropriate da utilizzare con. AWS CLI | Developer | 
| Crea un bucket S3. | Crea un bucket S3 che verrà utilizzato per archiviare e accedere alle funzioni Serverless-Cell-Router Lambda per la distribuzione tramite il modello. CloudFormation Per creare il bucket S3, usa il seguente comando: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Developer | 
| Crea file.zip. | [Crea un file.zip per ogni funzione Lambda che si trova nella directory Functions.](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions) Questi file.zip verranno utilizzati per distribuire le funzioni Lambda. Su un Mac, usa i seguenti comandi: `zip`<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Developer | 
| Copia i file.zip nel bucket S3. | Per copiare tutti i file.zip della funzione Lambda nel bucket S3, usa i seguenti comandi:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Developer | 

### Crea lo stack CloudFormation
<a name="create-the-cfn-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa il CloudFormation modello. | Per distribuire il CloudFormation modello, esegui il comando seguente: AWS CLI <pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Developer | 
| Verifica lo stato di avanzamento. | Accedi a Console di gestione AWS, apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformation/]()e controlla lo stato di avanzamento dello sviluppo dello stack. Quando lo stato è`CREATE_COMPLETE`, lo stack è stato distribuito correttamente. | Developer | 

### Valuta e verifica
<a name="assess-and-verify"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Assegna celle all'utente. | Per avviare il`Orchestrator`, esegui il seguente comando curl:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>`Orchestrator`Attiva l'esecuzione della funzione. `Dispatcher` A sua volta, verifica l'esistenza dell'utente. `Dispatcher` Se l'utente viene trovato, `Dispatcher` restituisce l'ID della cella e l'endpoint URLs associati. Se l'utente non viene trovato, gli `Dispatcher` assegna una cella e invia l'ID della cella alla `Scaler` funzione per la valutazione della capacità residua della cella assegnata.La risposta della `Scaler` funzione è la seguente:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 
| Recupera le celle utente. | Per utilizzare la funzione `Orchestrator` per eseguire la `Mapper` funzione, esegui il comando seguente:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>`Orchestrator`Cerca la cella assegnata all'utente e restituisce l'ID della cella e URLs nella seguente risposta:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina le risorse. | Per evitare di incorrere in costi aggiuntivi sul tuo account, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Sviluppatore di app | 

## Risorse correlate
<a name="serverless-cell-router-architecture-resources"></a>

**Riferimenti**
+ [Stabilità statica con le zone di disponibilità](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Limiti dell'isolamento dei guasti di AWS: stabilità statica](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: architettura basata su celle per fornire una maggiore disponibilità su Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6 RZMFic Iknq? controlli = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Informazioni aggiuntive
<a name="serverless-cell-router-architecture-additional"></a>

**Premesse di progettazione dell'architettura basata su celle**

Sebbene questo modello si concentri sul router cellulare, è importante comprendere l'intero ambiente. L'ambiente è strutturato in tre livelli distinti:
+ Il livello di routing, o Thin layer, che contiene il router cellulare
+ Lo strato cellulare, che comprende varie celle
+ Il livello Provision and Deploy, che effettua il provisioning delle celle e distribuisce l'applicazione

Ogni livello mantiene la funzionalità anche in caso di alterazioni che interessano altri livelli. Account AWS fungono da limite di isolamento dei guasti.

Il diagramma seguente mostra i livelli ad alto livello. Il livello Cell e il livello Provision and Deploy non rientrano nell'ambito di questo modello.

![\[Il livello Routing, il livello Cell con più account di celle e il livello Provision and Deploy.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Per ulteriori informazioni sull'architettura basata su celle, vedere [Riduzione dell'ambito di impatto con l'architettura basata su celle: routing delle celle](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Modello di progettazione Cell-router**

Il router cellulare è un componente condiviso tra le celle. Per mitigare i potenziali impatti, è importante che il livello di routing utilizzi un design semplicistico e scalabile orizzontalmente che sia il più sottile possibile. Il livello di routing, che funge da punto di ingresso del sistema, è costituito solo dai componenti necessari per assegnare in modo efficiente gli utenti alle celle appropriate. I componenti di questo livello non si occupano della gestione o della creazione di celle.

Questo modello utilizza il routing statico, il che significa che il client memorizza nella cache gli endpoint all'accesso iniziale e successivamente stabilisce una comunicazione diretta con la cella. Vengono avviate interazioni periodiche tra il client e il router cellulare per confermare lo stato corrente o recuperare eventuali aggiornamenti. Questo disaccoppiamento intenzionale consente operazioni ininterrotte per gli utenti esistenti in caso di inattività del router e fornisce funzionalità e resilienza continue all'interno del sistema.

In questo modello, il router cellulare supporta le seguenti funzionalità:
+ Recupero dei dati delle celle dal database delle celle nel livello Provision and Deploy e archiviazione o aggiornamento del database locale.
+ Assegnazione di una cella a ogni nuovo utente registrato dell'applicazione utilizzando l'algoritmo di assegnazione delle celle.
+ Memorizzazione della user-to-cells mappatura nel database locale.
+ Verifica della capacità delle celle durante l'assegnazione dell'utente e trasmissione di un evento per il distributore automatico al livello Provision and Deploy per creare celle.
+ Utilizzo dell'algoritmo dei criteri di creazione delle celle per fornire questa funzionalità.
+ Rispondere alle richieste degli utenti appena registrati fornendo le URLs celle statiche. Queste URLs verranno memorizzate nella cache del client con un time to live (TTL).
+ Rispondere alle richieste degli utenti esistenti di un URL non valido fornendo un URL nuovo o aggiornato.

Per comprendere meglio il router cellulare dimostrativo configurato dal CloudFormation modello, esamina i seguenti componenti e passaggi:

1. Configura e configura il pool di utenti di Amazon Cognito.

1. Configura e configura l'API API Gateway per il router cellulare.

1. Crea una tabella DynamoDB.

1. Crea e configura una coda SQS.

1. Implementa il. `Orchestrator`

1. Implementa le funzioni Lambda:`Dispatcher`,,`Scaler`,`Mapper`. `Validator`

1. Valuta e verifica.

Il presupposto è che il livello Provision and Deploy sia già stabilito. I dettagli di implementazione non rientrano nell'ambito di questo artefatto.

Poiché questi componenti sono impostati e configurati da un CloudFormation modello, i passaggi seguenti vengono presentati a un livello descrittivo e di alto livello. Il presupposto è che l'utente disponga delle AWS competenze necessarie per completare l'installazione e la configurazione.

*1. Imposta e configura il pool di utenti di Amazon Cognito*

Accedi a e apri Console di gestione AWS la console Amazon Cognito all'indirizzo. [https://console.aws.amazon.com/cognito/]() Configura e configura un pool di utenti Amazon Cognito denominato`CellRouterPool`, con integrazione di app, interfaccia utente ospitata e le autorizzazioni necessarie.

*2. Configurare e configurare l'API API Gateway per il router cellulare*

Apri la console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway/](). Configura e configura un'API denominata`CellRouter`, utilizzando un autorizzatore Amazon Cognito integrato con il pool di utenti di Amazon Cognito. `CellRouterPool` Implementa i seguenti elementi:
+ `CellRouter`Risorse API, inclusi `POST` i metodi
+ Integrazione con il flusso di lavoro Step Functions implementato nella fase 5
+ Autorizzazione tramite l'autorizzatore Amazon Cognito
+ Mappature delle richieste di integrazione e delle risposte
+ Assegnazione delle autorizzazioni necessarie

*3. Creare una tabella DynamoDB*

Apri la console DynamoDB [https://console.aws.amazon.com/dynamodb/]()all'indirizzo e crea una tabella DynamoDB standard chiamata con la seguente configurazione: `tbl_router`
+ **Chiave di partizione ‒** `marketId`
+ **Chiave di ordinamento ‒** `cellId`
+ **Modalità di capacità** ‒ Fornito
+ **Point-in-time recovery (PITR) ‒ Disattivato**

Nella scheda **Indici**, crea un indice secondario globale chiamato. `marketId-currentCapacity-index` La funzione `Scaler` Lambda utilizzerà l'indice per condurre ricerche efficienti per la cella con il minor numero di utenti assegnati.

Crea la struttura della tabella con i seguenti attributi:
+ `marketId`‒ Europa
+ `cellId`‒ cell-0002
+ `currentCapacity`‒ 2
+ `endPoint_1`‒ <your endpoint for the first Region>
+ `endPoint_2`‒ <your endpoint for the second Region>
+ `IsHealthy`‒ Vero
+ `maxCapacity`‒ 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`‒ <your email address>

*4. Creare e configurare una coda SQS*

**Apri la console Amazon SQS all'indirizzo [https://console.aws.amazon.com/sqs/]()e crea una coda SQS standard chiamata crittografia a chiave Amazon SQS configurata con `CellProvisioning` Amazon SQS.**

*5. Implementa l'Orchestrator*

Sviluppa un flusso di lavoro Step Functions che funga da flusso di lavoro `Orchestrator` per il router. Il flusso di lavoro è richiamabile tramite l'API del router cellulare. Il flusso di lavoro esegue le funzioni Lambda designate in base al percorso della risorsa. Integra la funzione step con l'API Gateway API per il router `CellRouter` cellulare e configura le autorizzazioni necessarie per richiamare le funzioni Lambda.

Il diagramma seguente mostra il flusso di lavoro. Lo stato di scelta richiama una delle funzioni Lambda. Se la funzione Lambda ha esito positivo, il flusso di lavoro termina. Se la funzione Lambda fallisce, viene chiamato lo stato fail.

![\[Un diagramma del flusso di lavoro con le quattro funzioni e che termina con uno stato di errore.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implementa le funzioni Lambda*

Implementa le `Validator` funzioni `Dispatcher` `Mapper``Scaler`,, e. Quando imposti e configuri ciascuna funzione nella dimostrazione, definisci un ruolo per la funzione e assegna le autorizzazioni necessarie per eseguire le operazioni richieste sulla tabella DynamoDB. `tbl_router` Inoltre, integra ogni funzione nel flusso di lavoro. `Orchestrator`

*Funzione Dispatcher*

La `Dispatcher` funzione è responsabile dell'identificazione e dell'assegnazione di una singola cella statica per ogni nuovo utente registrato. Quando un nuovo utente si registra con l'applicazione globale, la richiesta viene inviata alla `Dispatcher` funzione. La funzione elabora la richiesta utilizzando criteri di valutazione predefiniti come i seguenti:

1. **Regione** ‒ Seleziona la cella nel mercato in cui si trova l'utente. Ad esempio, se l'utente accede all'applicazione globale dall'Europa, seleziona una cella che utilizza Regioni AWS in Europa.

1. **Prossimità o latenza** ‒ Seleziona la cella più vicina all'utente Ad esempio, se l'utente accede all'applicazione dall'Olanda, la funzione considera una cella che utilizza Francoforte e l'Irlanda. La decisione relativa alla cella più vicina si basa su metriche come la latenza tra la posizione dell'utente e le regioni della cella. Per questo modello di esempio, le informazioni vengono alimentate staticamente dal livello Provision and Deploy.

1. **Health** ‒ La `Dispatcher` funzione verifica se la cella selezionata è integra in base allo stato della cella fornito (Healthy = true o false).

1. **Capacità** ‒ La distribuzione degli utenti si basa sul *numero minimo di utenti in una logica cellulare*, quindi l'utente viene assegnato alla cella con il minor numero di utenti.

**Nota**  
Questi criteri vengono presentati solo per spiegare questo modello di esempio. Per un'implementazione di un router cellulare nella vita reale, è possibile definire criteri più raffinati e utilizzare criteri basati su casi.

`Orchestrator`Richiama la funzione Dispatcher per assegnare gli utenti alle celle. In questa funzione demo, il valore di mercato è un parametro statico definito come. `europe`

La `Dispatcher` funzione valuta se una cella è già assegnata all'utente. Se la cella è già assegnata, la `Dispatcher` funzione restituisce gli estremi della cella. Se all'utente non è assegnata alcuna cella, la funzione cerca la cella con il minor numero di utenti, la assegna all'utente e restituisce gli endpoint. L'efficienza della query di ricerca delle celle è ottimizzata utilizzando l'indice secondario globale.

*Funzione Mapper*

La `Mapper` funzione sovrintende alla memorizzazione e alla manutenzione delle user-to-cell mappature nel database. Una singola cella viene assegnata a ciascun utente registrato. Ogni cella ne ha due distinte URLs, una per ogni regione AWS. Fungendo da endpoint API ospitati su API Gateway, URLs funzionano come punti in entrata verso l'applicazione globale.

Quando la `Mapper` funzione riceve una richiesta dall'applicazione client, esegue una query sulla `tbl_router` tabella DynamoDB per recuperare user-to-cell la mappatura associata all'ID e-mail fornito. Se trova una cella assegnata, la `Mapper` funzione fornisce prontamente le due della cella. URLs La `Mapper` funzione monitora inoltre attivamente le modifiche alla cella URLs e avvia notifiche o aggiornamenti alle impostazioni dell'utente.

*Funzione Scaler*

La `Scaler` funzione gestisce la capacità residua della cella. Per ogni nuova richiesta di registrazione utente, la `Scaler` funzione valuta la capacità disponibile della cella assegnata dalla `Dispatcher` funzione all'utente. Se la cella ha raggiunto il limite predeterminato in base ai criteri di valutazione specificati, la funzione avvia una richiesta tramite una coda Amazon SQS al livello Provision and Deploy, richiedendo il provisioning e l'implementazione di nuove celle. Il ridimensionamento delle celle può essere eseguito in base a una serie di criteri di valutazione come i seguenti:

1. **Numero massimo di utenti** ‒ Ogni cella può avere un numero massimo di utenti 500.

1. **Capacità buffer** ‒ La capacità buffer di ogni cella è del 20 percento, il che significa che ogni cella può essere assegnata a 400 utenti in qualsiasi momento. Il restante 20% della capacità buffer è riservato a casi d'uso futuri e alla gestione di scenari imprevisti (ad esempio, quando i servizi di creazione e provisioning delle celle non sono disponibili).

1. **Creazione di celle** ‒ Non appena una cella esistente raggiunge il 70 percento della capacità, viene attivata una richiesta per creare una cella aggiuntiva.

**Nota**  
Questi criteri vengono presentati solo per spiegare questo modello di esempio. Per un'implementazione di un router cellulare nella vita reale, è possibile definire criteri più raffinati e utilizzare criteri basati su casi.

Il `Scaler` codice dimostrativo viene eseguito da `Orchestrator` after che assegna `Dispatcher` correttamente una cella all'utente appena registrato. Al ricevimento dell'ID della cella da`Dispatcher`, valuta se la cella designata ha una capacità adeguata per ospitare utenti aggiuntivi, sulla base di criteri di valutazione predefiniti. `Scaler` Se la capacità della cella è insufficiente, la `Scaler` funzione invia un messaggio al servizio Amazon SQS. Questo messaggio viene recuperato dal servizio all'interno del livello Provision and Deploy, avviando il provisioning di una nuova cella.

**Funzione di validazione**

La `Validator` funzione identifica e risolve i problemi relativi all'accesso alle celle. Quando un utente accede all'applicazione globale, l'applicazione recupera le celle URLs dalle impostazioni del profilo utente e indirizza le richieste degli utenti a una delle due regioni assegnate all'interno della cella. Se URLs sono inaccessibili, l'applicazione può inviare una richiesta URL di convalida al router cellulare. Il `Orchestrator` cell-router richiama il. `Validator` `Validator`Avvia il processo di convalida. La convalida può includere, tra gli altri controlli, quanto segue:
+ Cella con riferimenti incrociati URLs nella richiesta e URLs memorizzata nel database per identificare ed elaborare potenziali aggiornamenti
+ Esecuzione di un controllo approfondito dello stato (ad esempio, una `HTTP GET` richiesta all'endpoint della cella)

In conclusione, la `Validator` funzione fornisce risposte alle richieste delle applicazioni dei clienti, fornendo lo stato di convalida e le eventuali misure correttive necessarie.

`Validator`È progettato per migliorare l'esperienza dell'utente. Prendiamo in considerazione uno scenario in cui alcuni utenti incontrano difficoltà ad accedere all'applicazione globale perché un incidente causa la temporanea indisponibilità delle celle. Invece di presentare errori generici, la `Validator` funzione può fornire istruzioni per la correzione. Questi passaggi potrebbero includere le seguenti azioni:
+ Informare gli utenti sull'incidente.
+ Fornisci un tempo di attesa approssimativo prima della disponibilità del servizio.
+ Fornisci un numero di contatto dell'assistenza per ottenere ulteriori informazioni.

Il codice demo della `Validator` funzione verifica che la cella fornita dall'utente URLs nella richiesta corrisponda ai record memorizzati nella `tbl_router` tabella. La `Validator` funzione verifica anche se le cellule sono sane.

# Configura l'accesso privato a un bucket Amazon S3 tramite un endpoint VPC
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama e Joaquin Rinaudo, Amazon Web Services*

## Riepilogo
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

In Amazon Simple Storage Service (Amazon S3), le impostazioni URLs predefinite consentono di condividere file di dimensioni arbitrarie con utenti target. Per impostazione predefinita, le versioni predefinite di Amazon S3 URLs sono accessibili da Internet entro una finestra temporale di scadenza, il che le rende comode da usare. Tuttavia, gli ambienti aziendali spesso richiedono l'accesso ad Amazon S3 preimpostato URLs per essere limitato a una sola rete privata.

Questo modello presenta una soluzione serverless per interagire in modo sicuro con gli oggetti S3 utilizzando dati predefiniti da una rete privata senza attraversamento di Internet URLs . Nell'architettura, gli utenti accedono a un Application Load Balancer tramite un nome di dominio interno. Il traffico viene instradato internamente tramite Amazon API Gateway e un endpoint di cloud privato virtuale (VPC) per il bucket S3. La AWS Lambda funzione genera predefiniti URLs per il download di file tramite l'endpoint VPC privato, che aiuta a migliorare la sicurezza e la privacy dei dati sensibili.

## Prerequisiti e limitazioni
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Prerequisiti**
+ Un VPC che include una sottorete distribuita in e connessa alla rete aziendale (ad esempio, tramite). Account AWS AWS Direct Connect

**Limitazioni**
+ Il bucket S3 deve avere lo stesso nome del dominio, quindi ti consigliamo di controllare le regole di denominazione dei bucket [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
+ Questa architettura di esempio non include funzionalità di monitoraggio per l'infrastruttura distribuita. Se il tuo caso d'uso richiede il monitoraggio, prendi in considerazione l'aggiunta di [servizi AWS di monitoraggio](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Questa architettura di esempio non include la convalida dell'input. Se il tuo caso d'uso richiede la convalida degli input e un maggiore livello di sicurezza, prendi in considerazione [l'utilizzo AWS WAF per proteggere la tua API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Questa architettura di esempio non include la registrazione degli accessi con Application Load Balancer. Se il tuo caso d'uso richiede la registrazione degli accessi, valuta la possibilità di abilitare i log di accesso [del Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versioni**
+ Python versione 3.11 o successiva
+ Terraform versione 1.6 o successiva

## Architecture
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Stack tecnologico Target**

I seguenti servizi AWS vengono utilizzati nello stack tecnologico di destinazione:
+ **Amazon S3** è il servizio di storage principale utilizzato per caricare, scaricare e archiviare file in modo sicuro.
+ **Amazon API Gateway** espone risorse ed endpoint per l'interazione con il bucket S3. Questo servizio svolge un ruolo nella generazione di dati predefiniti per il download o il caricamento. URLs 
+ **AWS Lambda**genera predefiniti URLs per il download di file da Amazon S3. La funzione Lambda viene chiamata da API Gateway.
+ **Amazon VPC** distribuisce risorse all'interno di un VPC per garantire l'isolamento della rete. Il VPC include sottoreti e tabelle di routing per controllare il flusso di traffico.
+ **Application Load Balancer** indirizza il traffico in entrata verso API Gateway o verso l'endpoint VPC del bucket S3. Consente agli utenti della rete aziendale di accedere alle risorse internamente.
+ L'**endpoint VPC per Amazon S3** consente la comunicazione diretta e privata tra le risorse nel VPC e Amazon S3 senza attraversare la rete Internet pubblica.
+ **AWS Identity and Access Management (**IAM) controlla l'accesso alle risorse. AWS Le autorizzazioni sono impostate per garantire interazioni sicure con l'API e altri servizi.

**Architettura Target**

![\[Configurazione dell'accesso privato a un bucket S3 tramite un endpoint VPC\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


Il diagramma illustra quanto segue:

1. Gli utenti della rete aziendale possono accedere all'Application Load Balancer tramite un nome di dominio interno. Partiamo dal presupposto che esista una connessione tra la rete aziendale e la sottorete intranet in Account AWS (ad esempio, tramite una connessione). Direct Connect 

1. L'Application Load Balancer indirizza il traffico in entrata verso API Gateway per generare dati predefiniti URLs per il download o il caricamento su Amazon S3 o verso l'endpoint VPC del bucket S3. In entrambi gli scenari, le richieste vengono instradate internamente e non devono attraversare Internet.

1. API Gateway espone risorse ed endpoint per interagire con il bucket S3. In questo esempio, forniamo un endpoint per scaricare file dal bucket S3, ma questo potrebbe essere esteso per fornire anche funzionalità di caricamento.

1. La funzione Lambda genera l'URL predefinito per scaricare un file da Amazon S3 utilizzando il nome di dominio dell'Application Load Balancer anziché il dominio pubblico Amazon S3.

1. L'utente riceve l'URL predefinito e lo utilizza per scaricare il file da Amazon S3 utilizzando Application Load Balancer. Il load balancer include un percorso predefinito per inviare il traffico non destinato all'API verso l'endpoint VPC del bucket S3.

1. L'endpoint VPC indirizza l'URL predefinito con il nome di dominio personalizzato al bucket S3. Il bucket S3 deve avere lo stesso nome del dominio.

**Automazione e scalabilità**

Questo modello utilizza Terraform per distribuire l'infrastruttura dal repository di codice in un. Account AWS

## Tools (Strumenti)
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**Strumenti**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.
+ [Terraform](https://www.terraform.io/) è uno strumento Infrastructure as Code (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire con i AWS servizi tramite comandi nella shell della riga di comando.

**Archivio di codice**

[Il codice per questo pattern è disponibile in un GitHub repository all'indirizzo https://github.com/aws-samples/ private-s3-vpce.](https://github.com/aws-samples/private-s3-vpce)

## Best practice
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

L'architettura di esempio per questo pattern utilizza le [autorizzazioni IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) per controllare l'accesso all'API. Chiunque disponga di credenziali IAM valide può chiamare l'API. Se il tuo caso d'uso richiede un modello di autorizzazione più complesso, potresti voler [utilizzare un meccanismo di controllo degli accessi diverso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Epiche
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Implementa la soluzione in un Account AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Ottenere AWS le credenziali. | Controlla AWS le tue credenziali e il tuo accesso al tuo account. Per istruzioni, consulta [Impostazioni dei file di configurazione e credenziali](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) nella AWS CLI documentazione. | AWS DevOps, Informazioni generali su AWS | 
| Clonare il repository. | Clona il GitHub repository fornito con questo modello:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, Informazioni generali su AWS | 
| Configura le variabili. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Informazioni generali su AWS | 
| Implementa una soluzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Informazioni generali su AWS | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file di test. | Carica un file su Amazon S3 per creare uno scenario di test per il download del file. Puoi utilizzare la [console Amazon S3](https://console.aws.amazon.com/s3/) o il seguente AWS CLI comando:<pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, Informazioni generali su AWS | 
| Prova la funzionalità degli URL predefiniti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Informazioni generali su AWS | 
| Elimina. | Assicurati di rimuovere le risorse quando non sono più necessarie:<pre>terraform destroy</pre> | AWS DevOps, Informazioni generali su AWS | 

## risoluzione dei problemi
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| I nomi delle chiavi degli oggetti S3 con caratteri speciali come i segni numerici (\$1) interrompono i parametri URL e generano errori. | Codifica correttamente i parametri URL e assicurati che il nome della chiave dell'oggetto S3 segua le linee guida di [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Risorse correlate
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Condivisione di oggetti con predefiniti URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Controllo dell'accesso dagli endpoint VPC con policy bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Application Load Balancer:
+ [Hosting di siti Web statici HTTPS interni con ALB, S3 e PrivateLink (AWS post](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) del blog)

# Risolvi i problemi relativi agli stati AWS Step Functions utilizzando Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar e Sangam Kushwaha, Amazon Web Services*

## Riepilogo
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions le funzionalità di gestione degli errori possono aiutarti a individuare un errore che si verifica durante uno stato di un [flusso di lavoro](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), ma può comunque essere difficile individuare la causa principale di un errore ed eseguirne il debug. Questo modello affronta questa sfida e mostra come Amazon Bedrock può aiutarti a risolvere gli errori che si verificano durante gli stati di Step Functions. 

Step Functions fornisce l'orchestrazione del flusso di lavoro, semplificando l'automazione dei processi per gli sviluppatori. Step Functions offre anche funzionalità di gestione degli errori che offrono i seguenti vantaggi:
+ Gli sviluppatori possono creare applicazioni più resilienti che non falliscono completamente quando qualcosa va storto.
+ I flussi di lavoro possono includere la logica condizionale per gestire diversi tipi di errori in modo diverso.
+ Il sistema può riprovare automaticamente le operazioni non riuscite, magari con un backoff esponenziale.
+ È possibile definire percorsi di esecuzione alternativi per gli scenari di errore, consentendo al flusso di lavoro di adattarsi e continuare l'elaborazione.

Quando si verifica un errore in un flusso di lavoro Step Functions, questo modello mostra come inviare il messaggio di errore e il contesto a un modello base (FM) come Claude 3 supportato da Step Functions. L'FM può analizzare l'errore, classificarlo e suggerire potenziali passaggi di correzione.

## Prerequisiti e limitazioni
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Conoscenza di base [AWS Step Functions e flussi di lavoro](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ Connettività dell'[API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html) Amazon Bedrock

**Limitazioni**
+ Puoi utilizzare l'approccio di questo modello per vari Servizi AWS scopi. Tuttavia, i risultati potrebbero variare in base al prompt creato e successivamente valutato da AWS Lambda Amazon Bedrock.
+ Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, consulta [i servizi AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="troubleshooting-states-in-aws-step-functions-architecture"></a>

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

![\[Flusso di lavoro per la gestione e la notifica degli errori tramite Step Functions, Amazon Bedrock e Amazon SNS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


Il diagramma mostra il flusso di lavoro automatizzato per la gestione e la notifica degli errori in una macchina a stati Step Functions:

1. Lo sviluppatore avvia l'esecuzione di una macchina a stati.

1. La macchina a stati Step Functions inizia a elaborare i suoi stati. I risultati possibili sono due:
   + (a) Se tutti gli stati vengono eseguiti correttamente, il flusso di lavoro passa direttamente ad Amazon SNS per una notifica di successo via e-mail.
   + (b) Se uno stato fallisce, il flusso di lavoro passa alla funzione Lambda per la gestione degli errori.

1. In caso di errore, si verifica quanto segue:
   + (a) Viene attivata la funzione Lambda (gestore degli errori). La funzione Lambda estrae il messaggio di errore dai dati dell'evento che la macchina a stati Step Functions le ha passato. Quindi la funzione Lambda prepara un prompt basato su questo messaggio di errore e lo invia ad Amazon Bedrock. Il prompt richiede soluzioni e suggerimenti relativi all'errore specifico riscontrato.
   + (b) Amazon Bedrock, che ospita il modello di intelligenza artificiale generativa, elabora la richiesta di input. (Questo modello utilizza il modello di base Anthropic Claude 3 (FM), uno dei tanti supportati da FMs Amazon Bedrock.) Il modello di intelligenza artificiale analizza il contesto dell'errore. Quindi il modello genera una risposta che può includere spiegazioni del motivo per cui si è verificato l'errore, potenziali soluzioni per risolverlo e suggerimenti per evitare di ripetere gli stessi errori in futuro.

     Amazon Bedrock restituisce la risposta generata dall'intelligenza artificiale alla funzione Lambda. La funzione Lambda elabora la risposta, potenzialmente formattandola o estraendo informazioni chiave. Quindi la funzione Lambda invia la risposta all'output della macchina a stati.

1. Dopo la gestione degli errori o l'esecuzione corretta, il flusso di lavoro si conclude attivando Amazon SNS per l'invio di una notifica e-mail.

## Tools (Strumenti)
<a name="troubleshooting-states-in-aws-step-functions-tools"></a>

**Servizi AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) è un servizio completamente gestito che rende disponibili per l'uso modelli di base ad alte prestazioni (FMs) delle principali startup di intelligenza artificiale e di Amazon tramite un'API unificata.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Simple 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 Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione senza server che ti aiuta a combinare AWS Lambda funzioni e altro per creare applicazioni aziendali critiche. Servizi AWS 

## Best practice
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Poiché Amazon Bedrock è un modello di intelligenza artificiale generativo che apprende dai dati addestrati, utilizza tali dati anche per addestrare e generare contesto. Come best practice, nascondi tutte le informazioni private che potrebbero causare problemi di fuga di dati. 
+ Sebbene l'intelligenza artificiale generativa possa fornire informazioni preziose, le decisioni critiche relative alla gestione degli errori dovrebbero comunque coinvolgere la supervisione umana, specialmente negli ambienti di produzione.

## Epiche
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Crea una macchina a stati per il tuo flusso di lavoro
<a name="create-a-state-machine-for-your-workflow"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una macchina a stati. | Per creare una macchina a stati adatta al tuo flusso di lavoro, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Creazione di una funzione Lambda
<a name="create-a-lam-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creazione di una funzione Lambda.  | Per creare una funzione Lambda, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Imposta la logica richiesta nel codice Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integrazione di Step Functions con Lambda
<a name="integrate-sfn-with-lam"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura Lambda per gestire gli errori in Step Functions. | Per configurare Step Functions in modo da gestire gli errori senza interrompere il flusso di lavoro, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Risoluzione dei problemi
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Lambda non può accedere all'API Amazon Bedrock (non autorizzata a eseguire) | Questo errore si verifica quando il ruolo Lambda non dispone dell'autorizzazione per accedere all'API Amazon Bedrock. Per risolvere questo problema, aggiungi la `AmazonBedrockFullAccess` policy per il ruolo Lambda. Per ulteriori informazioni, consulta [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)la *AWS Managed Policy Reference Guide*. | 
| Errore di timeout Lambda | A volte possono essere necessari più di 30 secondi per generare una risposta e inviarla indietro, a seconda della richiesta. Per risolvere questo problema, aumenta il tempo di configurazione. *Per ulteriori informazioni, consulta [Configura il timeout della funzione Lambda](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) nella Guida per gli AWS Lambda sviluppatori.* | 

## Risorse correlate
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Accesso all'API Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Crea la tua prima funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Sviluppo di flussi di lavoro con Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Altri modelli
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Accedi, esegui query e unisciti a tabelle Amazon DynamoDB utilizzando Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Automatizza le CodeGuru revisioni Amazon per le applicazioni AWS CDK Python utilizzando Actions GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatizza la valutazione delle risorse AWS](automate-aws-resource-assessment.md)
+ [Automatizza la distribuzione di applicazioni annidate utilizzando AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatizza l'implementazione dei Catena di approvvigionamento di AWS data lake in una configurazione multi-repository utilizzando GitHub Actions, Artifactory e Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatizza la replica delle istanze Amazon RDS su Account AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Archivia automaticamente gli elementi su Amazon S3 utilizzando DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Rileva automaticamente le modifiche e avvia diverse CodePipeline pipeline per un monorepo in CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Crea un'architettura serverless multi-tenant in Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Crea un visualizzatore di file mainframe avanzato nel cloud AWS](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Calcola il valore a rischio (VaR) utilizzando i servizi AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Copia i prodotti AWS Service Catalog su diversi account AWS e regioni AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Crea automaticamente pipeline CI dinamiche per progetti Java e Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Scomponi i monoliti in microservizi utilizzando CQRS e l'event sourcing](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Implementa un'applicazione a pagina singola basata su React su Amazon S3 e CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Implementa un'API Amazon API Gateway su un sito Web interno utilizzando endpoint privati e un Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Implementa e gestisci un data lake serverless sul cloud AWS utilizzando l'infrastruttura come codice](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Implementa uno use case RAG AWS utilizzando Terraform e Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Sviluppa un assistente basato su chat completamente automatizzato utilizzando gli agenti e le knowledge base di Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Sviluppa assistenti avanzati basati sull'intelligenza artificiale generativa utilizzando RAG e suggerimenti ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Genera dinamicamente una policy IAM con IAM Access Analyzer utilizzando Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Incorpora i componenti visivi di Amazon Quick Sight nelle applicazioni Web utilizzando Amazon Cognito e l'automazione IAc](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Assicurati che la registrazione di Amazon EMR su Amazon S3 sia abilitata al momento del lancio](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Stima del costo di una tabella DynamoDB per la capacità su richiesta](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Genera consigli personalizzati e riclassificati con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Genera dati di test utilizzando un job AWS Glue e Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [SHA1 Implementa l'hashing per i dati PII durante la migrazione da SQL Server a PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implementa il modello di saga serverless utilizzando AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [Migliora le prestazioni operative abilitando Amazon DevOps Guru su più regioni AWS, account e OUs con AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Avvia un CodeBuild progetto su più account AWS utilizzando Step Functions e una funzione proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Esegui la migrazione dei carichi di lavoro Apache Cassandra su Amazon Keyspaces utilizzando AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Monitora l'uso di un'Amazon Machine Image condivisa su più Account AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Ottimizza le implementazioni serverless multi-account utilizzando i flussi di lavoro e Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Orchestra una pipeline ETL con convalida, trasformazione e partizionamento utilizzando AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Interroga le tabelle Amazon DynamoDB con SQL utilizzando Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Esegui carichi di lavoro pianificati e basati su eventi su larga scala con AWS Fargate](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Invia attributi personalizzati ad Amazon Cognito e inseriscili in token](send-custom-attributes-cognito.md)
+ [Distribuisci contenuti statici in un bucket Amazon S3 tramite un VPC utilizzando Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Semplifica lo sviluppo e la distribuzione di bot Amazon Lex utilizzando un flusso di lavoro automatizzato](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Struttura un progetto Python in architettura esagonale utilizzando AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Traduci il linguaggio naturale in query DSL for OpenSearch ed Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Scarica i dati da un cluster Amazon Redshift tra più account su Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.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)

# Rete
<a name="networking-pattern-list"></a>

**Topics**
+ [Automatizza la configurazione del peering interregionale con AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Centralizza la connettività di rete utilizzando AWS Transit Gateway](centralize-network-connectivity-using-aws-transit-gateway.md)
+ [Configurare la crittografia HTTPS per Oracle JD Edwards EnterpriseOne su Oracle WebLogic utilizzando un Application Load Balancer](configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.md)
+ [Connect ai dati e ai piani di controllo dell'Application Migration Service tramite una rete privata](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Crea oggetti Infoblox utilizzando risorse CloudFormation personalizzate AWS e Amazon SNS](create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.md)
+ [Crea un'architettura IPAM gerarchica e multiregionale utilizzando Terraform AWS](multi-region-ipam-architecture.md)
+ [Personalizza CloudWatch gli avvisi Amazon per AWS Network Firewall](customize-amazon-cloudwatch-alerts-for-aws-network-firewall.md)
+ [Distribuisci risorse in una AWS Wavelength zona utilizzando Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Esegui la migrazione di record DNS in blocco verso una zona ospitata privata di Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Modifica le intestazioni HTTP durante la migrazione da F5 a un Application Load Balancer su AWS](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Crea un rapporto sui risultati di Network Access Analyzer per l'accesso a Internet in entrata in più Account AWS](create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.md)
+ [Configura la risoluzione DNS per reti ibride in un ambiente multi-account AWS](set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.md)
+ [Verificare che i sistemi di bilanciamento del carico ELB richiedano la terminazione TLS](verify-that-elb-load-balancers-require-tls-termination.md)
+ [Visualizza i log e i parametri di AWS Network Firewall utilizzando Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)
+ [Altri modelli](networking-more-patterns-pattern-list.md)

# Automatizza la configurazione del peering interregionale con AWS Transit Gateway
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway"></a>

*Ram Kandaswamy, Amazon Web Services*

## Riepilogo
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-summary"></a>

AWS Transit Gateway collega cloud privati virtuali (VPCs) e reti locali tramite un hub centrale. Il traffico Transit Gateway rimane sempre sulla dorsale globale di Amazon Web Services (AWS) e non attraversa la rete Internet pubblica, il che riduce i vettori di minaccia, come gli exploit comuni e gli attacchi Distributed Denial of Service (S). DDo

Se devi comunicare tra due o più regioni AWS, puoi utilizzare il peering di Transit Gateway inter-regionale per stabilire connessioni peering tra gateway di transito in diverse regioni. Tuttavia, la configurazione manuale del peering interregionale con Transit Gateway può essere un processo che richiede molto tempo e prevede più passaggi. Questo modello fornisce un processo automatizzato per rimuovere questi passaggi manuali utilizzando il codice per eseguire il peering. Puoi utilizzare questo approccio se devi configurare ripetutamente diverse regioni e account AWS durante una configurazione di un'organizzazione multiregionale.

Questo modello utilizza uno CloudFormation stack AWS che include il flusso di lavoro AWS Step Functions, le funzioni AWS Lambda, i ruoli AWS Identity and Access Management (IAM) e i gruppi di log in Amazon CloudWatch Logs. È quindi possibile avviare un'esecuzione di Step Functions e creare la connessione peering interregionale per i gateway di transito. Per configurare manualmente il peering interregionale, consulta [Peer in VPCs diverse regioni AWS utilizzando AWS Transit Gateway](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/peer-vpcs-different-regions-transit-gateway.html).

## Prerequisiti e limitazioni
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un bucket Amazon Simple Storage Service (Amazon S3) esistente.
+ Gateway di transito, creati e configurati nella regione richiedente e nelle regioni accettanti. La regione *richiedente* è il luogo in cui viene originata una richiesta di peering e le regioni accettanti *accettano* la richiesta di peering. Per ulteriori informazioni su questo argomento, consulta [Creazione e accettazione di una connessione peering VPC](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html) nella documentazione di Amazon VPC.
+ VPCs, installato e configurato nelle regioni accettante e richiedente. Per i passaggi per creare un VPC, consulta [Creare il VPC da Get Started with Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc) [nella documentazione di Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html).
+ È VPCs necessario utilizzare il tag e il valore. `addToTransitGateway` `true`
+ Gruppi di sicurezza e liste di controllo degli accessi alla rete (ACLs) per te VPCs, configurati in base alle tue esigenze. Per ulteriori informazioni su questo argomento, consulta [Gruppi di sicurezza per il tuo VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) e la tua [rete ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) nella documentazione di Amazon VPC.

 

**Regioni e limitazioni AWS**
+ Solo alcune regioni AWS supportano il peering interregionale. Per un elenco completo delle regioni che supportano il peering interregionale, consulta [AWS](https://aws.amazon.com/transit-gateway/faqs/) Transit Gateway. FAQs
+ Nel codice di esempio allegato, si presume che la regione richiedente sia e si presume che lo sia `us-east-2` la regione accettante. `us-west-2` Se vuoi configurare regioni diverse, devi modificare questi valori in tutti i file Python. Per implementare una configurazione più complessa che coinvolga più di due regioni, puoi modificare la Step Function per passare le Regions come parametro alla funzione Lambda ed eseguire la funzione per ogni combinazione.

## Architecture
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-architecture"></a>

![\[La macchina a stati Step Functions utilizza la funzione Lambda per creare una connessione peering per i gateway di transito.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/d58f0586-659d-4111-b3a8-2fe23d578fef.png)


 

Il diagramma mostra un flusso di lavoro con i seguenti passaggi:

1. L'utente crea uno CloudFormation stack AWS.

1. AWS CloudFormation crea una macchina a stati Step Functions che utilizza una funzione Lambda. Per ulteriori informazioni su questo argomento, consulta [Creazione di una macchina a stati Step Functions che utilizza Lambda nella documentazione](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) di AWS Step Functions.

1. Step Functions richiama una funzione Lambda per il peering. 

1. La funzione Lambda crea una connessione peering tra i gateway di transito.

1. Step Functions richiama una funzione Lambda per le modifiche alla tabella delle rotte.

1. La funzione Lambda modifica le tabelle delle rotte aggiungendo il blocco Classless Inter-Domain Routing (CIDR) di. VPCs

**Flusso di lavoro Step Functions**

![\[Flusso di lavoro Step Functions per richiamare la funzione Lambda per modificare le tabelle di routing per il peering del gateway di transito.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/2f235f47-5d68-492c-b954-7dc170939cae.png)


 

Il diagramma mostra il seguente flusso di lavoro Step Functions:

1. Il flusso di lavoro Step Functions richiama la funzione Lambda per il peering del gateway di transito. 

1. È prevista una chiamata con timer di attesa di un minuto.

1. Lo stato di peering viene recuperato e inviato al blocco delle condizioni. Il blocco è responsabile del looping. 

1. Se la condizione di successo non viene soddisfatta, il flusso di lavoro viene codificato per entrare nella fase del timer. 

1. Se viene soddisfatta la condizione di successo, viene chiamata una funzione Lambda per modificare le tabelle delle rotte. Dopo questa chiamata, il flusso di lavoro Step Functions termina.

## Tools (Strumenti)
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation è un servizio che ti aiuta a modellare e configurare le tue risorse AWS.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) — CloudWatch Logs ti aiuta a centralizzare i log di tutti i tuoi sistemi, applicazioni e servizi AWS che utilizzi.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): IAM è un servizio Web per controllare in modo sicuro l'accesso ai servizi AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): Lambda esegue il codice su un'infrastruttura di calcolo ad alta disponibilità ed esegue tutta l'amministrazione delle risorse di calcolo.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) — Step Functions semplifica il coordinamento dei componenti delle applicazioni distribuite come una serie di passaggi in un flusso di lavoro visivo. 

## Epiche
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-epics"></a>

### Automatizza il peering
<a name="automate-peering"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Carica i file allegati nel tuo bucket S3. | Accedi alla Console di gestione AWS, apri la console Amazon S3, quindi carica `get-transit-gateway-peering-status.zip` i file e i file (allegati) nel `modify-transit-gateway-routes.zip` tuo bucket S3. `peer-transit-gateway.zip` | Informazioni generali su AWS | 
| Crea lo CloudFormation stack AWS. | Esegui il seguente comando per creare uno CloudFormation stack AWS utilizzando il `transit-gateway-peering.json` file (allegato):`aws cloudformation create-stack --stack-name myteststack --template-body file://sampletemplate.json`Lo CloudFormation stack AWS crea il flusso di lavoro Step Functions, le funzioni Lambda, i ruoli IAM CloudWatch e i gruppi di log.Assicurati che il CloudFormation modello AWS si riferisca al bucket S3 che contiene i file che hai caricato in precedenza.Puoi anche creare uno stack utilizzando la CloudFormation console AWS. Per ulteriori informazioni su questo argomento, consulta [Creazione di uno stack sulla CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) nella CloudFormation documentazione AWS. | DevOps ingegnere | 
| Inizia una nuova esecuzione in Step Functions. | Apri la console Step Functions e avvia una nuova esecuzione. Step Functions richiama la funzione Lambda e crea la connessione peering per i gateway di transito. Non è necessario un file JSON di input. Verifica che sia disponibile un allegato e che il tipo di connessione sia **Peering**.Per ulteriori informazioni su questo argomento, consulta [Start a new execution](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html#start-new-execution) from [Getting started with AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html) nella documentazione di AWS Steps Functions. | DevOps ingegnere, General AWS | 
| Verifica i percorsi nelle tabelle dei percorsi.  | Il peering interregionale viene stabilito tra i gateway di transito. Le tabelle delle rotte vengono aggiornate con l'intervallo di blocchi CIDR della regione peer VPC. IPv4  Apri la console Amazon VPC e scegli la scheda **Associazioni** nella tabella delle rotte che corrisponde all'allegato del gateway di transito. Verifica l'intervallo di blocchi VPC CIDR delle regioni peerizzate. Per passaggi e istruzioni dettagliati, consulta [Associare una tabella di routing del gateway di transito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#associate-tgw-route-table) nella documentazione di Amazon VPC. | Amministratore di rete | 

## Risorse correlate
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-resources"></a>
+ [Esecuzioni in Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-state-machine-executions.html)
+ [Allegati di peering Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)
+ [Effettua il VPCs peering in diverse regioni AWS utilizzando AWS Transit Gateway](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/peer-vpcs-different-regions-transit-gateway.html)
+ [Interconnessione VPCs tra regioni AWS tramite AWS Transit Gateway - Demo](https://www.youtube.com/watch?v=cj1rQqLxXU8) (video)

## Allegati
<a name="attachments-b678bb87-c7b9-4f7b-b26e-eaac650e5d1b"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/attachments/attachment.zip)

# Centralizza la connettività di rete utilizzando AWS Transit Gateway
<a name="centralize-network-connectivity-using-aws-transit-gateway"></a>

*Mydhili Palagummi e Nikhil Marrapu, Amazon Web Services*

## Riepilogo
<a name="centralize-network-connectivity-using-aws-transit-gateway-summary"></a>

Questo modello descrive la configurazione più semplice in cui AWS Transit Gateway può essere utilizzato per connettere una rete locale a cloud privati virtuali (VPCs) in più account AWS all'interno di una regione AWS. Utilizzando questa configurazione, puoi stabilire una rete ibrida che collega più reti VPC in una regione e una rete locale. Ciò si ottiene utilizzando un gateway di transito e una connessione di rete privata virtuale (VPN) alla rete locale. 

## Prerequisiti e limitazioni
<a name="centralize-network-connectivity-using-aws-transit-gateway-prereqs"></a>

**Prerequisiti**
+ Un account per i servizi di rete di hosting, gestito come account membro di un'organizzazione in AWS Organizations
+ VPCs in più account AWS, senza sovrapposizione di blocchi Classless Inter-Domain Routing (CIDR)

**Limitazioni**

Questo modello non supporta l'isolamento del traffico tra determinate reti o tra quelle locali. VPCs Tutte le reti collegate al gateway di transito saranno in grado di raggiungersi. Per isolare il traffico, è necessario utilizzare tabelle di routing personalizzate sul gateway di transito. Questo modello collega solo la rete locale VPCs e quella locale utilizzando un'unica tabella di routing del gateway di transito predefinita, che è la configurazione più semplice.

## Architecture
<a name="centralize-network-connectivity-using-aws-transit-gateway-architecture"></a>

**Stack tecnologico Target**
+ AWS Transit Gateway
+  Site-to-SiteVPN AWS
+ VPC
+ AWS Resource Access Manager (AWS RAM)

 

**Architettura Target**

![\[AWS Transit Gateway collega la rete locale VPCs a più account AWS all'interno di una regione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e23f5faf-e75e-42a3-80e3-142516a2db4e/images/1ecf7e04-bbf8-4304-88c8-6aceb7271d1e.jpeg)


## Tools (Strumenti)
<a name="centralize-network-connectivity-using-aws-transit-gateway-tools"></a>

**Servizi AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) ti aiuta a condividere in modo sicuro le tue risorse tra gli account AWS, le unità organizzative o l'intera organizzazione di AWS Organizations.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) è un hub centrale che collega cloud privati virtuali (VPCs) e reti locali.

## Epiche
<a name="centralize-network-connectivity-using-aws-transit-gateway-epics"></a>

### Crea un gateway di transito nell'account dei servizi di rete
<a name="create-a-transit-gateway-in-the-network-services-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un gateway di transito. | Nell'account AWS in cui desideri ospitare i servizi di rete, crea un gateway di transito nella regione AWS di destinazione. Per istruzioni, consulta [Creare un gateway di transito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw). Tenere presente quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/centralize-network-connectivity-using-aws-transit-gateway.html) | Amministratore di rete | 

### Connect il gateway di transito alla rete locale
<a name="connect-the-transit-gateway-to-your-on-premises-network"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un dispositivo gateway per il cliente per la connessione VPN. | Il dispositivo gateway del cliente è collegato sul lato locale della connessione Site-to-Site VPN tra il gateway di transito e la rete locale. Per ulteriori informazioni, consulta [Il tuo dispositivo gateway per i clienti](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) nella documentazione di AWS Site-to-Site VPN. Identifica o avvia un dispositivo cliente locale supportato e annota il suo indirizzo IP pubblico. La configurazione della VPN viene completata più avanti in questa epopea.  | Amministratore di rete | 
| Nell'account dei servizi di rete, crea un allegato VPN al gateway di transito. | Per configurare una connessione, crea un allegato VPN per il gateway di transito. Per istruzioni, consulta gli [allegati della VPN del gateway Transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html). | Amministratore di rete | 
| Configura la VPN sul dispositivo gateway del cliente nella tua rete locale.  | Scarica il file di configurazione per la connessione Site-to-Site VPN associata al gateway di transito e configura le impostazioni VPN sul dispositivo gateway del cliente. Per istruzioni, consulta [Scaricare il file di configurazione](https://docs.aws.amazon.com/vpn/latest/s2svpn/SetUpVPNConnections.html#vpn-download-config). | Amministratore di rete | 

### Condividi il gateway di transito nell'account dei servizi di rete con altri account AWS o con la tua organizzazione
<a name="share-the-transit-gateway-in-the-network-services-account-to-other-aws-accounts-or-your-organization"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Nell'account di gestione AWS Organizations, attiva la condivisione. | Per condividere il gateway di transito con la tua organizzazione o con determinate unità organizzative, attiva la condivisione in AWS Organizations. Altrimenti, dovrai condividere il gateway di transito per ogni account singolarmente. Per istruzioni, consulta [Abilitare la condivisione delle risorse all'interno di AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs). | Amministratore di sistema AWS | 
| Crea la condivisione di risorse del gateway di transito nell'account dei servizi di rete. | Per consentire VPCs ad altri account AWS all'interno dell'organizzazione di connettersi al gateway di transito, nell'account dei servizi di rete, utilizza la console RAM AWS per condividere la risorsa del gateway di transito. Per istruzioni, consulta [Creare una condivisione di risorse](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create). | Amministratore di sistema AWS | 

### Connect VPCs al gateway di transito
<a name="connect-vpcs-to-the-transit-gateway"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea allegati VPC in singoli account.  | Negli account con cui è stato condiviso il gateway di transito, crea allegati VPC del gateway di transito. Per istruzioni, consulta [Creare un collegamento gateway di transito a un VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment). | Amministratore di rete | 
| Accetta le richieste di allegati VPC. | Nell'account dei servizi di rete, accetta le richieste di allegati VPC del gateway di transito. Per istruzioni, consulta [Accettare un allegato condiviso](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#tgw-accept-shared-attachment). | Amministratore di rete | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura i percorsi in un account individuale VPCs. | In ogni singolo account VPC, aggiungi percorsi alla rete locale e ad altre reti VPC, utilizzando il gateway di transito come destinazione. Per istruzioni, consulta [Aggiungere e rimuovere percorsi da una tabella di rotte](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes). | Amministratore di rete | 
| Configura i percorsi nella tabella delle rotte del gateway di transito. | Le rotte da VPCs e la connessione VPN devono essere propagate e devono apparire nella tabella delle rotte di default del gateway di transito. Se necessario, crea eventuali route statiche (un esempio sono le route statiche per la connessione VPN statica) nella tabella delle rotte di default del gateway di transito. Per istruzioni, consulta [Creare una route statica](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-create-static-route). | Amministratore di rete | 
| Aggiungi le regole del gruppo di sicurezza e dell'elenco di controllo degli accessi alla rete (ACL). | Per le EC2 istanze e le altre risorse nel VPC, assicurati che le regole del gruppo di sicurezza e le regole ACL di rete consentano il traffico VPCs tra e la rete locale. Per istruzioni, consulta [Controllare il traffico verso le risorse utilizzando i gruppi di sicurezza](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules) e [Aggiungere ed eliminare regole](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#Rules) da un ACL. | Amministratore di rete | 

### Verifica la connettività
<a name="test-connectivity"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica la connettività tra VPCs. | Assicurati che l'ACL di rete e i gruppi di sicurezza consentano il traffico ICMP (Internet Control Message Protocol), quindi esegui il ping dalle istanze in un VPC a un altro VPC anch'esso connesso al gateway di transito. | Amministratore di rete | 
| Verifica la connettività tra VPCs e la rete locale. | Assicurati che le regole ACL di rete, le regole dei gruppi di sicurezza e tutti i firewall consentano il traffico ICMP, quindi esegui il ping tra la rete locale e le istanze della. EC2 VPCs La comunicazione di rete deve essere avviata innanzitutto dalla rete locale per portare la connessione VPN allo stato. `UP` | Amministratore di rete | 

## Risorse correlate
<a name="centralize-network-connectivity-using-aws-transit-gateway-resources"></a>
+ [Creazione di un'infrastruttura di rete AWS multi-VPC scalabile e sicura (white paper AWS](https://d1.awsstatic.com/whitepapers/building-a-scalable-and-secure-multi-vpc-aws-network-infrastructure.pdf))
+ [Utilizzo di risorse condivise](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html) (documentazione RAM AWS)
+ [Utilizzo dei gateway di transito](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html) (documentazione AWS Transit Gateway)

# Configurare la crittografia HTTPS per Oracle JD Edwards EnterpriseOne su Oracle WebLogic utilizzando un Application Load Balancer
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Riepilogo
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-summary"></a>

Questo modello spiega come configurare la crittografia HTTPS per l'offload SSL in Oracle JD Edwards sui carichi di lavoro Oracle. EnterpriseOne WebLogic Questo approccio crittografa il traffico tra il browser dell'utente e un sistema di bilanciamento del carico per rimuovere il carico di crittografia dai server. EnterpriseOne 

Molti utenti scalano orizzontalmente il livello della macchina virtuale EnterpriseOne JAVA (JVM) utilizzando un Application Load [Balancer di AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html).Il load balancer funge da unico punto di contatto per i client e distribuisce il traffico in entrata su più canali. JVMs Facoltativamente, il load balancer può distribuire il traffico su più zone di disponibilità e aumentare la disponibilità di. EnterpriseOne

Il processo descritto in questo schema configura la crittografia tra il browser e il sistema di bilanciamento del carico anziché crittografare il traffico tra il sistema di bilanciamento del carico e il. EnterpriseOne JVMs *Questo approccio è denominato offloading SSL.* L'offload del processo di decrittografia SSL dal server EnterpriseOne Web o dell'applicazione all'Application Load Balancer riduce il carico sul lato dell'applicazione. Dopo la terminazione SSL presso il sistema di bilanciamento del carico, il traffico non crittografato viene indirizzato all'applicazione su AWS.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) è una soluzione ERP (Enterprise Resource Planning) per organizzazioni che producono, costruiscono, distribuiscono, forniscono assistenza o gestiscono prodotti o risorse fisiche. JD Edwards EnterpriseOne supporta vari hardware, sistemi operativi e piattaforme di database.

## Prerequisiti e limitazioni
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un ruolo AWS Identity and Access Management (IAM) che dispone delle autorizzazioni per effettuare chiamate di servizio AWS e gestire le risorse AWS
+ Un certificato SSL

**Versioni del prodotto**
+ Questo modello è stato testato con Oracle WebLogic 12c, ma è possibile utilizzare anche altre versioni.

## Architecture
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-architecture"></a>

Esistono diversi approcci per eseguire l'offload SSL. Questo modello utilizza un Application Load Balancer e Oracle HTTP Server (OHS), come illustrato nel diagramma seguente.

![\[Offloading SSL con un sistema di bilanciamento del carico e OHS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/2ae2d0eb-b9f3-41f8-ad86-9af3aade7072.png)


Il diagramma seguente mostra il layout JVM di JD Edwards EnterpriseOne, Application Load Balancer e Java Application Server (JAS).

![\[EnterpriseOne, load balancer e layout JAS JVM\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/72ea35b0-2907-48b3-aeb7-0c5d9a3b831b.png)


## Tools (Strumenti)
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-tools"></a>

**Servizi AWS**
+ Gli [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuiscono il traffico delle applicazioni in entrata su più destinazioni, come Amazon Elastic Compute Cloud ( EC2 istanze Amazon), in più zone di disponibilità.
+ [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.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) è un servizio Web DNS altamente scalabile e disponibile.

## Best practice
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-best-practices"></a>
+ [Per le best practice ACM, consulta la documentazione ACM.](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html)

## Epiche
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-epics"></a>

### Configurazione WebLogic e OHS
<a name="set-up-weblogic-and-ohs"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa e configura i componenti Oracle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, amministratore WebLogic  | 
| Abilita il WebLogic plugin a livello di dominio. | Il WebLogic plugin è necessario per il bilanciamento del carico. Per abilitare il plugin:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, amministratore WebLogic  | 
| Modifica il file di configurazione. | Il `mod_wl_ohs.conf` file configura le richieste proxy da OHS a. WebLogic[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)<pre><VirtualHost *:8000><br /><Location /jde><br />WLSRequest On<br />SetHandler weblogic-handler<br />WebLogicHost localhost<br />WebLogicPort 8000<br />WLProxySSL On<br />WLProxySSLPassThrough On<br /></Location><br /></VirtualHost></pre> | JDE CNC, amministratore WebLogic  | 
| Avviare OHS utilizzando Enterprise Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, amministratore WebLogic  | 

### Configurazione dell'Application Load Balancer
<a name="configure-the-application-load-balancer"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura un gruppo target. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Per istruzioni dettagliate, consulta la documentazione di [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html). | Amministratore AWS | 
| Configura il sistema di bilanciamento del carico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | Amministratore AWS | 
| Aggiungi un record Route 53 (DNS). | (Facoltativo) Puoi aggiungere un record DNS Amazon Route 53 per il sottodominio. Questo record indicherebbe il tuo Application Load Balancer. Per istruzioni, consulta la [documentazione di Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). | Amministratore AWS | 

## risoluzione dei problemi
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il server HTTP non viene visualizzato. | Se il **server HTTP** non viene visualizzato nell'elenco di **Target Navigation** sulla console di Enterprise Manager, attenersi alla seguente procedura:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Una volta creata l'istanza e attivate le modifiche, potrai vedere il server HTTP nel pannello **Target Navigation**. | 

## Risorse correlate
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-resources"></a>

**Documentazione AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Utilizzo delle zone ospitate pubbliche](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html)
+ [Utilizzo delle zone ospitate private](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)

**Documentazione Oracle:**
+ [Panoramica del plug-in proxy di Oracle WebLogic Server](https://docs.oracle.com/middleware/1221/webtier/develop-plugin/overview.htm#PLGWL391)
+ [Installazione WebLogic del server utilizzando l'Infrastructure Installer](https://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/12_2_1/02-01-004-InstallWLSInfrastructure/installweblogicinfrastructure.html)
+ [Installazione e configurazione di Oracle HTTP Server](https://docs.oracle.com/middleware/1221/core/install-ohs/toc.htm)

# Connect ai dati e ai piani di controllo dell'Application Migration Service tramite una rete privata
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network"></a>

*Dipin Jain e Mike Kuznetsov, Amazon Web Services*

## Riepilogo
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-summary"></a>

Questo modello spiega come è possibile connettersi a un piano AWS Application Migration Service dati e a un piano di controllo su una rete privata e protetta utilizzando gli endpoint VPC dell'interfaccia.

Application Migration Service è una soluzione altamente automatizzata lift-and-shift (rehost) che semplifica, accelera e riduce i costi di migrazione delle applicazioni verso. AWS Consente alle aziende di reospitare un gran numero di server fisici, virtuali o cloud senza problemi di compatibilità, interruzioni delle prestazioni o lunghi intervalli di tempo. Il servizio di migrazione delle applicazioni è disponibile presso. Console di gestione AWS Ciò consente una perfetta integrazione con altri Servizi AWS AWS CloudTrail, come Amazon CloudWatch e AWS Identity and Access Management (IAM).

È possibile connettersi da un data center di origine a un piano dati, ovvero a una sottorete che funge da area di staging per la replica dei dati nel VPC di destinazione, tramite una connessione privata utilizzando i servizi o il peering VPC in Application Migration Site-to-Site VPN Service. AWS Direct ConnectÈ inoltre possibile utilizzare l'[interfaccia VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) powered by AWS PrivateLink per connettersi a un piano di controllo dell'Application Migration Service su una rete privata. 

## Prerequisiti e limitazioni
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-prereqs"></a>

**Prerequisiti**
+ **Subnet dell'area di staging**: prima di configurare Application Migration Service, create una sottorete da utilizzare come area di staging per i dati replicati dai server di origine AWS (ovvero, un piano dati). È necessario specificare questa sottorete nel [modello Replication Settings quando si accede per la prima volta alla console di Application](https://docs.aws.amazon.com/mgn/latest/ug/template-vs-server.html) Migration Service. È possibile sovrascrivere questa sottorete per server di origine specifici nel modello Replication Settings. Sebbene sia possibile utilizzare una sottorete esistente nel sistema Account AWS, si consiglia di creare una nuova sottorete dedicata a questo scopo.
+ **Requisiti di rete: i** server di replica avviati da Application Migration Service nella sottorete dell'area di staging devono essere in grado di inviare dati all'endpoint dell'API Application Migration Service all'indirizzo`https://mgn.<region>.amazonaws.com/`, dov'è il codice su cui si `<region>` sta eseguendo la replica (ad esempio,). Regione AWS `https://mgn.us-east-1.amazonaws.com` Il servizio Amazon Simple Storage Service (Amazon S3) Simple Storage URLs Service (Amazon S3) è necessario per scaricare il software Application Migration Service.
  + Il programma di installazione di AWS Replication Agent dovrebbe avere accesso all'URL del bucket Amazon Simple Storage Service (Amazon S3) del Regione AWS bucket utilizzato con Application Migration Service.
  + La sottorete dell'area di staging dovrebbe avere accesso ad Amazon S3.
  + I server di origine su cui è installato il AWS Replication Agent devono essere in grado di inviare dati ai server di replica nella sottorete dell'area di staging e all'endpoint dell'API Application Migration Service all'indirizzo. `https://mgn.<region>.amazonaws.com/`

La tabella seguente elenca le porte richieste.


| 
| 
| Origine | Destinazione | Porta | Per ulteriori informazioni, consultare la pagina | 
| --- |--- |--- |--- |
| Centro dati di origine | Servizio Amazon S3 URLs | 443 (TCP) | [Comunicazione tramite porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Centro dati di origine | Regione AWS-indirizzo di console specifico per Application Migration Service | 443 (TCP) | [Comunicazione tra i server di origine e Application Migration Service tramite la porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Source-Manager-TCP-443) | 
| Centro dati di origine | Sottorete dell'area di staging | 1500 (TCP) | [Comunicazione tra i server di origine e la sottorete dell'area di staging tramite la porta TCP 1500](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-1500) | 
| Sottorete dell'area di staging | Regione AWS-indirizzo di console specifico per Application Migration Service | 443 (TCP) | [Comunicazione tra la sottorete dell'area di staging e Application Migration Service tramite la porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-443-Staging) | 
| Area di staging (sottorete) | Servizio Amazon S3 URLs | 443 (TCP) | [Comunicazione tramite porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Area di staging (sottorete) | Endpoint Amazon Elastic Compute Cloud (Amazon EC2) della sottorete Regione AWS | 443 (TCP) | [Comunicazione tramite la porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 

**Limitazioni di **

Il servizio di migrazione delle applicazioni non è attualmente disponibile in tutti Regioni AWS i sistemi operativi.
+ [Supportato Regioni AWS](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)
+ [Sistemi operativi supportati](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

## Architecture
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-architecture"></a>

Il diagramma seguente illustra l'architettura di rete per una migrazione tipica. Per ulteriori informazioni su questa architettura, vedere la [documentazione di Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/Network-Settings-Video.html) e il video sull'architettura del servizio [Application Migration Service e sull'architettura di rete](https://youtu.be/ao8geVzmmRo).

![\[Architettura di rete per Application Migration Service per una migrazione tipica\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/546598b2-8026-4849-a441-eaa2bc2bf6bb.png)


La seguente visualizzazione dettagliata mostra la configurazione degli endpoint VPC dell'interfaccia nell'area di staging VPC per connettere Amazon S3 e Application Migration Service.

![\[Architettura di rete per Application Migration Service per una migrazione tipica - visualizzazione dettagliata\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/bd0dfd42-4ab0-466f-b696-804dedcf4513.png)


## Tools (Strumenti)
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)semplifica, accelera e riduce i costi di rehosting delle applicazioni su. AWS
+ [Gli endpoint VPC di interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) consentono di connettersi a servizi alimentati da AWS PrivateLink senza richiedere un gateway Internet, un dispositivo NAT, una connessione VPN o una connessione. AWS Direct Connect Le istanze nel VPC non richiedono indirizzi IP pubblici per comunicare con le risorse nel servizio. Il traffico tra il VPC e gli altri servizi rimane all’interno della rete Amazon.

## Epiche
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-epics"></a>

### Crea endpoint per Application Migration Service EC2, Amazon e Amazon S3
<a name="create-endpoints-for-mgn-ec2-and-s3"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare l'endpoint di interfaccia per Application Migration Service. | Il data center di origine e l'area di staging (VPC) si connettono privatamente al piano di controllo dell'Application Migration Service tramite l'endpoint di interfaccia creato nell'area di staging di destinazione (VPC). Per creare l'endpoint:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Per ulteriori informazioni, consulta [Accedere e Servizio AWS utilizzare un endpoint VPC di interfaccia nella documentazione di Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html). | Responsabile della migrazione | 
| Configura l'endpoint di interfaccia per Amazon EC2. | L'area di staging VPC si connette privatamente all'API EC2 Amazon tramite l'endpoint di interfaccia creato nell'area di staging di destinazione VPC. Per creare l'endpoint, segui le istruzioni fornite nella storia precedente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html) | Responsabile della migrazione | 
| Configura l'endpoint di interfaccia per Amazon S3. | Il data center di origine e l'area di staging (VPC) si connettono privatamente all'API Amazon S3 tramite l'endpoint di interfaccia creato nel VPC dell'area di staging di destinazione. Per creare l'endpoint, segui le istruzioni fornite nella prima storia.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Si utilizza un endpoint di interfaccia perché le connessioni degli endpoint gateway non possono essere estese al di fuori di un VPC. [(Per i dettagli, consulta la AWS PrivateLink documentazione.)](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html) | Responsabile della migrazione | 
| Configura l'endpoint Amazon S3 Gateway. | Durante la fase di configurazione, il server di replica deve connettersi a un bucket S3 per scaricare gli aggiornamenti software del AWS Replication Server. *Tuttavia, gli endpoint dell'interfaccia Amazon S3 non supportano nomi DNS privati e non è possibile fornire un nome DNS di endpoint Amazon S3 a un server di replica.* Per mitigare questo problema, crei un endpoint gateway Amazon S3 nel VPC a cui appartiene la sottorete dell'area di staging e aggiorna le tabelle di routing della sottorete di staging con le route pertinenti. [Per ulteriori informazioni, consulta Creare un endpoint gateway nella documentazione.](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3) AWS PrivateLink  | Amministratore cloud | 
| Configura il DNS locale per risolvere i nomi DNS privati per gli endpoint. | Gli endpoint di interfaccia per Application Migration Service e Amazon EC2 dispongono di nomi DNS privati che possono essere risolti nel VPC. Tuttavia, devi anche configurare i server locali per risolvere i nomi DNS privati per questi endpoint di interfaccia.Esistono diversi modi per configurare questi server. In questo modello, abbiamo testato questa funzionalità inoltrando le query DNS locali all'endpoint in Amazon Route 53 Resolver entrata nell'area di staging VPC. Per ulteriori informazioni, consulta [Risoluzione delle query DNS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html) tra e la rete nella documentazione di Route 53. VPCs  | Ingegnere della migrazione | 

### Connettersi al piano di controllo dell'Application Migration Service tramite un collegamento privato
<a name="connect-to-the-mgn-control-plane-over-a-private-link"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installare AWS Replication Agent utilizzando AWS PrivateLink. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Ecco un esempio per Linux:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Dopo aver stabilito la connessione con Application Migration Service e installato AWS Replication Agent, segui le istruzioni nella [documentazione di Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html) per migrare i server di origine al VPC e alla sottorete di destinazione. | Tecnico di migrazione | 

## Risorse correlate
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-resources"></a>

**Documentazione del servizio di migrazione delle applicazioni**
+ [Concetti](https://docs.aws.amazon.com/mgn/latest/ug/CloudEndure-Concepts.html)
+ [Workflow di migrazione](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html)
+ [Guida rapida di avvio](https://docs.aws.amazon.com/mgn/latest/ug/quick-start-guide-gs.html)
+ [DOMANDE FREQUENTI](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html)
+ [Risoluzione dei problemi](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html)

**Altre risorse**
+ [Rehosting delle applicazioni in un'architettura multi-account utilizzando gli endpoint dell'interfaccia VPC (guida Prescriptive Guidance](https://docs.aws.amazon.com/prescriptive-guidance/latest/rehost-multi-account-architecture-interface-endpoints/)) AWS AWS 
+ [AWS Application Migration Service — Un'introduzione tecnica](https://www.aws.training/Details/eLearning?id=71732) (procedura dettagliata di formazione e certificazione)AWS 
+ [AWS Application Migration Service architettura e architettura di rete (video](https://youtu.be/ao8geVzmmRo))

## Informazioni aggiuntive
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-additional"></a>

**Risoluzione dei problemi relativi** alle **installazioni *AWS *di Replication Agent sui server Linux**

Se ricevi un errore **gcc** su un server Amazon Linux, configura l'archivio dei pacchetti e usa il seguente comando:

```
## sudo yum groupinstall "Development Tools"
```

# Crea oggetti Infoblox utilizzando risorse CloudFormation personalizzate AWS e Amazon SNS
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns"></a>

*Tim Sutton, Amazon Web Services*

## Riepilogo
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-summary"></a>

**Avviso**: non AWS Cloud9 è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Infoblox Domain Name System (DNS), Dynamic Host Configuration Protocol (DHCP) e gestione degli indirizzi IP ([Infoblox DDI](https://www.infoblox.com/products/ddi/)) consentono di centralizzare e controllare in modo efficiente un ambiente ibrido complesso. Con Infoblox DDI, è possibile scoprire e registrare tutte le risorse di rete in un database autorevole di gestione degli indirizzi IP (IPAM), oltre a gestire il DNS in locale e sul cloud Amazon Web Services (AWS) utilizzando le stesse appliance.

Questo modello descrive come utilizzare una risorsa CloudFormation personalizzata AWS per creare oggetti Infoblox (ad esempio record DNS o oggetti IPAM) chiamando l'API WAPI di Infoblox. [Per ulteriori informazioni sulla WAPI di Infoblox, consulta la documentazione WAPI nella documentazione di Infoblox.](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf)

Utilizzando l'approccio di questo modello, puoi ottenere una visione unificata dei record DNS e delle configurazioni IPAM per i tuoi ambienti AWS e locali, oltre a rimuovere i processi manuali che creano record e forniscono le tue reti. È possibile utilizzare l'approccio di questo pattern per i seguenti casi d'uso:
+ Aggiungere un record A dopo aver creato un'istanza Amazon Elastic Compute Cloud (Amazon EC2) 
+ Aggiungere un record CNAME dopo aver creato un Application Load Balancer
+ Aggiungere un oggetto di rete dopo aver creato un cloud privato virtuale (VPC)
+ Fornire l'intervallo di rete successivo e utilizzare tale intervallo per creare sottoreti

È inoltre possibile estendere questo modello e utilizzare altre funzionalità del dispositivo Infoblox, come l'aggiunta di diversi tipi di record DNS o la configurazione di Infoblox vDiscovery. 

Il modello utilizza un hub-and-spoke design in cui l'hub richiede la connettività all'appliance Infoblox sul cloud AWS o in locale e utilizza AWS Lambda per chiamare l'API Infoblox. Lo spoke si trova nello stesso account o in un altro account della stessa organizzazione in AWS Organizations e richiama la funzione Lambda utilizzando una risorsa CloudFormation personalizzata AWS.

## Prerequisiti e limitazioni
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-prereqs"></a>

**Prerequisiti**
+ Un'appliance o una griglia Infoblox esistente, installata sul cloud AWS, in locale o entrambi, e configurata con un utente amministratore in grado di amministrare azioni IPAM e DNS. Per ulteriori informazioni a riguardo, consulta Informazioni sugli account di [amministrazione nella documentazione di](https://docs.infoblox.com/display/nios86/About+Admin+Accounts) Infoblox. 
+ Una zona autorevole DNS esistente a cui si desidera aggiungere record sull'appliance Infoblox. Per ulteriori informazioni su questo argomento, vedere [Configurazione](https://docs.infoblox.com/display/nios86/Configuring+Authoritative+Zones) delle zone autoritative nella documentazione di Infoblox.  
+ Due account AWS attivi in AWS Organizations. Un account è l'account hub e l'altro account è l'account spoke.
+ Gli account hub and spoke devono trovarsi nella stessa regione AWS. 
+ Il VPC dell'account hub deve connettersi all'appliance Infoblox, ad esempio utilizzando AWS Transit Gateway o il peering VPC.
+ [AWS Serverless Application Model (AWS SAM), installato e configurato](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) localmente con AWS Cloud9 o AWS. CloudShell
+ I `ClientTest.yaml` file `Infoblox-Hub.zip` and (allegati), scaricati nell'ambiente locale che contiene AWS SAM.

**Limitazioni**
+ Il token di servizio della risorsa CloudFormation personalizzata AWS deve provenire dalla stessa regione in cui viene creato lo stack. Ti consigliamo di utilizzare un account hub in ogni regione, anziché creare un argomento Amazon Simple Notification Service (Amazon SNS) in una regione e richiamare la funzione Lambda in un'altra regione.

**Versioni del prodotto**
+ Infoblox WAPI versione 2.7

## Architecture
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-architecture"></a>

I seguenti diagrammi mostrano il flusso di lavoro di questo modello. 

![\[Creazione di oggetti Infoblox utilizzando risorse CloudFormation personalizzate AWS e Amazon SNS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/8d609d3f-6f5e-4084-849f-ca191db8055e/images/3594a064-e103-4211-84b7-da67c41ebb15.png)


Il diagramma mostra i seguenti componenti per la soluzione di questo pattern:

1. Le risorse CloudFormation personalizzate AWS ti consentono di scrivere logiche di provisioning personalizzate nei modelli che AWS CloudFormation esegue quando crei, aggiorni o elimini stack. Quando crei uno stack, AWS CloudFormation invia una `create` richiesta a un argomento SNS monitorato da un'applicazione in esecuzione su un' EC2 istanza.

1. La notifica Amazon SNS proveniente dalla risorsa CloudFormation personalizzata AWS è crittografata tramite una chiave AWS Key Management Service (AWS KMS) specifica e l'accesso è limitato agli account dell'organizzazione in Organizations. L'argomento SNS avvia la risorsa Lambda che chiama l'API WAPI di Infoblox.

1. Amazon SNS richiama le seguenti funzioni Lambda che utilizzano l'URL WAPI Infoblox, il nome utente e la password AWS Secrets Manager Amazon Resource Names () come variabili di ambiente: ARNs 
   + `dnsapi.lambda_handler`— Riceve `DNSName` i `DNSType` `DNSValue` valori e dalla risorsa CloudFormation personalizzata AWS e li utilizza per creare record DNS A e CNAMES.
   + `ipaddr.lambda_handler`— Riceve i `Network Name` valori `VPCCIDR``Type`,`SubnetPrefix`, e dalla risorsa CloudFormation personalizzata AWS e li utilizza per aggiungere i dati di rete al database IPAM di Infoblox o fornire alla risorsa personalizzata la prossima rete disponibile che può essere utilizzata per creare nuove sottoreti.
   + `describeprefixes.lambda_handler`— Richiama l'API `describe_managed_prefix_lists` AWS utilizzando il `"com.amazonaws."+Region+".s3"` filtro per recuperare i dati richiesti. `prefix ID`
**Importante**  
Queste funzioni Lambda sono scritte in Python e sono simili tra loro ma chiamano in modo diverso. APIs

1. È possibile implementare la griglia Infoblox come appliance di rete fisiche, virtuali o basate sul cloud.  Può essere distribuito in locale o come appliance virtuale utilizzando una serie di hypervisor, tra cui VMware ESXi Microsoft Hyper-V, Linux KVM e Xen. Puoi anche distribuire la griglia Infoblox sul cloud AWS con un'Amazon Machine Image (AMI).

1. Il diagramma mostra una soluzione ibrida per la griglia Infoblox che fornisce DNS e IPAM alle risorse sul cloud AWS e in locale.

**Stack tecnologico**
+ AWS CloudFormation
+ IAM
+ AWS KMS
+ AWS Lambda
+ AWS SAM
+ AWS Secrets Manager
+ Amazon SNS
+ Amazon VPC 

## Tools (Strumenti)
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-tools"></a>
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) è un servizio di gestione degli account che ti aiuta a consolidare più account AWS in un'organizzazione da creare e gestire centralmente.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) ti aiuta a sostituire le credenziali codificate nel codice, comprese le password, con una chiamata API a Secrets Manager per recuperare il segreto a livello di codice.
+ [AWS Serverless Application Model (AWS SAM) Serverless Application Model (AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) SAM) è un framework open source che ti aiuta a creare applicazioni serverless nel cloud AWS.
+ [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 Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS.

**Codice**

Puoi utilizzare il CloudFormation modello AWS di `ClientTest.yaml` esempio (allegato) per testare l'hub Infoblox. Puoi personalizzare il CloudFormation modello AWS per includere le risorse personalizzate dalla tabella seguente.


|  | 
| --- |
| Crea un record A utilizzando la risorsa personalizzata Infoblox Spoke | Valori restituiti: `infobloxref `— Riferimenti InfobloxRisorsa di esempio:

```
ARECORDCustomResource:

  Type: "Custom::InfobloxAPI"

  Properties:

    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxDNSFunction

    DNSName: 'arecordtest.company.com'

    DNSType: 'ARecord' 

    DNSValue: '10.0.0.1'
``` | 
| --- |--- |
| Crea un record CNAME utilizzando la risorsa personalizzata Infoblox spoke | **Valori restituiti:** `infobloxref `— Riferimenti InfobloxRisorsa di **esempio**:<pre>CNAMECustomResource:<br /><br />  Type: "Custom::InfobloxAPI"<br /><br />  Properties:<br /><br />    ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfoblox    <br /><br />    DNSFunction<br /><br />    DNSName: 'cnametest.company.com'<br /><br />    DNSType: 'cname' <br /><br />    DNSValue: 'aws.amazon.com'</pre> | 
| Crea un oggetto di rete utilizzando la risorsa personalizzata Infoblox spoke | **Valori restituiti:**`infobloxref `— Riferimenti Infoblox`network`— Intervallo di rete (uguale a) `VPCCIDR`**Risorsa di esempio:**<pre>VPCCustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: VPC<br /><br />    NetworkName: My-VPC</pre> | 
| Recupera la prossima sottorete disponibile utilizzando la risorsa personalizzata Infoblox spoke | **Valori restituiti:**`infobloxref`— Riferimenti Infoblox`network `— L'intervallo di rete della sottorete**Risorsa di esempio:**<pre>Subnet1CustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  DependsOn: VPCCustomResource<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: Subnet<br /><br />    SubnetPrefix: !Ref SubnetPrefix<br /><br />NetworkName: My-Subnet</pre> | 

## Epiche
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-epics"></a>

### Crea e configura il VPC dell'account hub
<a name="create-and-configure-the-hub-accountrsquor-s-vpc"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare un VPC con una connessione all'appliance Infoblox. | Accedi alla Console di gestione AWS per il tuo account hub e crea un VPC seguendo i passaggi della distribuzione di riferimento Amazon [VPC sulla distribuzione di riferimento AWS Cloud Quick Start da AWS Quick Starts](https://aws-quickstart.github.io/quickstart-aws-vpc/).Il VPC deve disporre di connettività HTTPS all'appliance Infoblox e si consiglia di utilizzare una sottorete privata per questa connessione. | Amministratore di rete, amministratore di sistema | 
| (Facoltativo) Crea gli endpoint VPC per le sottoreti private.  | Gli endpoint VPC forniscono connettività ai servizi pubblici per le sottoreti private. Sono richiesti i seguenti endpoint:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html)Per ulteriori informazioni sulla creazione di endpoint per sottoreti private, consulta [Endpoint VPC nella documentazione di Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html). | Amministratore di rete, amministratore di sistema | 

### Implementa l'hub Infoblox
<a name="deploy-the-infoblox-hub"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il modello AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html) | Sviluppatore, amministratore di sistema | 
| Implementa il modello AWS SAM. | Il `sam deploy` comando prende i parametri richiesti e li salva nel `samconfig.toml` file, archivia il CloudFormation modello AWS e le funzioni Lambda in un bucket S3, quindi distribuisce il CloudFormation modello AWS nell'account dell'hub.  Il seguente codice di esempio mostra come distribuire il modello AWS SAM:<pre>$ sam deploy --guided<br /><br />Configuring SAM deploy<br />======================<br />        Looking for config file [samconfig.toml] :  Found<br />        Reading default arguments  :  Success<br />        Setting default arguments for 'sam deploy'<br />        =========================================<br />        Stack Name [Infoblox-Hub]:<br />        AWS Region [eu-west-1]:<br />        Parameter InfobloxUsername:<br />        Parameter InfobloxPassword:<br />        Parameter InfobloxIPAddress [xxx.xxx.xx.xxx]:<br />        Parameter AWSOrganisationID [o-xxxxxxxxx]:<br />        Parameter VPCID [vpc-xxxxxxxxx]:<br />        Parameter VPCCIDR [xxx.xxx.xxx.xxx/16]:<br />        Parameter VPCSubnetID1 [subnet-xxx]:<br />        Parameter VPCSubnetID2 [subnet-xxx]:<br />        Parameter VPCSubnetID3 [subnet-xxx]:<br />        Parameter VPCSubnetID4 []: <br />        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy<br />        Confirm changes before deploy [Y/n]: y<br />        #SAM needs permission to be able to create roles to connect to the resources in your template<br />Allow SAM CLI IAM role creation [Y/n]: n<br />Capabilities [['CAPABILITY_NAMED_IAM']]:<br />        Save arguments to configuration file [Y/n]: y<br />        SAM configuration file [samconfig.toml]:<br />        SAM configuration environment [default]: </pre>È necessario utilizzare l'`--guided`opzione ogni volta perché le credenziali di accesso di Infoblox non sono memorizzate nel file. `samconfig.toml` | Sviluppatore, amministratore di sistema | 

## Risorse correlate
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-resources"></a>
+ [Guida introduttiva all' WAPIs utilizzo di Postman](https://blogs.infoblox.com/community/getting-started-with-wapis-using-postman/) (Infoblox Blog)
+ [Provisioning di VNIOS per AWS utilizzando il modello BYOL](https://docs.infoblox.com/display/NAIG/Provisioning+vNIOS+for+AWS+Using+the+BYOL+Model) (documentazione Infoblox)
+ [quickstart-aws-vpc](https://github.com/aws-quickstart/quickstart-aws-vpc)(GitHub repo)
+ [describe\$1managed\$1prefix\$1lists (documentazione](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_managed_prefix_lists) dell'SDK AWS per Python)

## Allegati
<a name="attachments-8d609d3f-6f5e-4084-849f-ca191db8055e"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/8d609d3f-6f5e-4084-849f-ca191db8055e/attachments/attachment.zip)

# Crea un'architettura IPAM gerarchica e multiregionale utilizzando Terraform AWS
<a name="multi-region-ipam-architecture"></a>

*Donny Schreiber, Amazon Web Services*

## Riepilogo
<a name="multi-region-ipam-architecture-summary"></a>

*La gestione degli indirizzi IP (IPAM)* è un componente fondamentale della gestione della rete e diventa sempre più complessa man mano che le organizzazioni scalano la propria infrastruttura cloud. Senza un IPAM adeguato, le organizzazioni rischiano conflitti di indirizzi IP, spreco di spazio di indirizzamento e risoluzione di problemi complessi che possono portare a interruzioni e tempi di inattività delle applicazioni. Questo modello dimostra come implementare una soluzione IPAM completa per ambienti aziendali utilizzando Terraform. AWS HashiCorp [Aiuta le organizzazioni a creare un'architettura IPAM gerarchica e multiregionale che facilita la gestione centralizzata degli indirizzi IP in tutta l'organizzazione. Account AWSAWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organization-structure)

Questo modello ti aiuta a implementare [Amazon VPC IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) con una sofisticata gerarchia di pool a quattro livelli: pool di primo livello, pool regionali, pool di unità aziendali e pool specifici per ambiente. Questa struttura supporta una corretta governance degli indirizzi IP, consentendo al contempo la delega della gestione degli IP ai team appropriati all'interno dell'organizzazione. La soluzione utilizza AWS Resource Access Manager (AWS RAM) per condividere senza problemi i pool di IP Address Manager in tutta l'organizzazione. AWS RAM centralizza e standardizza le specifiche IPAM, su cui i team possono basarsi per tutti gli account gestiti.

Questo modello può aiutarti a raggiungere i seguenti obiettivi:
+ Automatizza l'allocazione degli indirizzi IP tra Regioni AWS unità aziendali e ambienti.
+ Applica le politiche di rete organizzative attraverso la convalida programmatica.
+ Scala l'infrastruttura di rete in modo efficiente man mano che i requisiti aziendali si evolvono.
+ Riduci il sovraccarico operativo attraverso la gestione centralizzata degli spazi degli indirizzi IP.
+ Accelera le implementazioni dei carichi di lavoro nativi sul cloud con l'allocazione self-service della gamma CIDR.
+ Previeni i conflitti di indirizzo attraverso controlli e convalide basati su policy.

## Prerequisiti e limitazioni
<a name="multi-region-ipam-architecture-prereqs"></a>

**Prerequisiti**
+ Uno o più Account AWS, gestiti come organizzazione in. AWS Organizations
+ Un hub di rete o un account di gestione della rete che fungerà da amministratore delegato di IP Address Manager.
+ AWS Command Line Interface (AWS CLI), [installato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurato](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ [Terraform versione 1.5.0 o successiva, installata.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ AWS [Provider per Terraform, configurato.](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ Autorizzazioni per gestire [IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html) e [cloud privati virtuali (VPCs)](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html), configurati in AWS Identity and Access Management (IAM). [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam.html)

**Limitazioni**
+ IP Address Manager è soggetto a [quote di servizio](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html). La quota di servizio predefinita per i pool è 50 per ambito. L'esecuzione di questa distribuzione per 6 regioni, 2 unità aziendali e 4 ambienti creerebbe 67 pool. Pertanto, potrebbe essere necessario aumentare la quota.
+ La modifica o l'eliminazione dei pool di IP Address Manager dopo l'allocazione delle risorse può causare problemi di dipendenza. È necessario [rilasciare l'allocazione](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) prima di poter eliminare il pool.
+ In IP Address Manager, il [monitoraggio delle risorse](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) può subire un leggero ritardo nel riflettere le modifiche alle risorse. Questo ritardo può essere di circa 20 minuti.
+ IP Address Manager non può applicare automaticamente l'unicità dell'indirizzo IP in diversi ambiti.
+ [I tag personalizzati devono rispettare le migliori pratiche di etichettatura.AWS](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html) Ad esempio, ogni chiave deve essere unica e non può iniziare con. `aws:`
+ Esistono [considerazioni e limitazioni](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org-considerations.html) quando si integra IP Address Manager con account esterni all'organizzazione.

## Architecture
<a name="multi-region-ipam-architecture-architecture"></a>

**Architettura Target**

*Configurazione e gerarchia dei pool di IP Address Manager*

Il diagramma seguente mostra i costrutti logici dell'architettura di destinazione. Un *ambito* è il contenitore di livello più alto in IP Address Manager. Ogni ambito rappresenta lo spazio degli indirizzi IP per una singola rete. I *pool* sono raccolte di intervalli di indirizzi IP contigui (o intervalli CIDR) all'interno dell'ambito. I pool consentono di organizzare gli indirizzi IP in base alle esigenze di routing e sicurezza. Questo diagramma mostra quattro livelli gerarchici di pool: un pool di primo livello, pool regionali, pool di unità aziendali e pool di ambienti.

![\[Un ambito privato e quattro livelli di pool in una singola regione AWS in un account di rete.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/1e23b2a7-a274-4a19-9097-61d8a31dfbf8.png)


Questa soluzione stabilisce una chiara gerarchia di pool di IP Address Manager:

1. Il pool di primo livello comprende l'intero spazio di indirizzi IP dell'organizzazione, ad esempio. `10.176.0.0/12`

1. I pool regionali sono destinati ad allocazioni specifiche della regione, ad esempio per. `10.176.0.0/15` `us-east-1`

1. I pool di unità aziendali sono allocazioni specifiche del dominio all'interno di ciascuno di essi. Regione AWS Ad esempio, l'unità operativa finanziaria della regione potrebbe avere. `us-east-1` `10.176.0.0/16`

1. I pool di ambienti sono allocazioni specifiche per diversi ambienti. Ad esempio, l'unità operativa finanziaria della `us-east-1` regione potrebbe disporre di un ambiente `10.176.0.0/18` di produzione.

Questa topologia di distribuzione distribuisce geograficamente le risorse di IP Address Manager mantenendo il controllo centralizzato. Le sue caratteristiche sono le seguenti:
+ IP Address Manager viene distribuito in un unico sistema primario Regione AWS.
+ Le regioni aggiuntive vengono registrate come [aree operative](https://docs.aws.amazon.com/vpc/latest/ipam/mod-ipam-region.html), in cui IP Address Manager può gestire le risorse.
+ Ogni regione operativa riceve un pool di indirizzi dedicato dal pool di livello superiore.
+ Le risorse in tutte le regioni operative sono gestite centralmente tramite IP Address Manager nella regione principale.
+ Ogni pool regionale ha una proprietà locale legata alla relativa regione per aiutarti ad allocare correttamente le risorse.

*Convalida avanzata dell'intervallo CIDR*

Questa soluzione è progettata per impedire l'implementazione di configurazioni non valide. Quando si distribuiscono i pool tramite Terraform, durante la fase del piano Terraform viene convalidato quanto segue:
+ Verifica che tutti gli intervalli CIDR dell'ambiente siano contenuti negli intervalli CIDR dell'unità aziendale principale
+ Conferma che tutti gli intervalli CIDR delle unità aziendali sono contenuti negli intervalli CIDR regionali principali
+ Verifica che tutti gli intervalli CIDR regionali siano contenuti negli intervalli CIDR di primo livello
+ Verifica la presenza di intervalli CIDR sovrapposti all'interno dello stesso livello gerarchico
+ Convalida la corretta mappatura degli ambienti nelle rispettive unità aziendali

*Allocazione dell'intervallo CIDR*

Il diagramma seguente mostra un esempio di come gli sviluppatori o gli amministratori possono creare nuovi indirizzi IP VPCs e allocarli dai livelli del pool.

![\[Un ambito privato e quattro livelli di pool in una singola regione AWS in un account di rete.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/7c3de2e3-e71b-4fc0-abcd-7e88cfab5c87.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Tramite il Console di gestione AWS AWS CLI, o tramite infrastructure as code (IaC), uno sviluppatore o un amministratore richiede il successivo intervallo CIDR disponibile nel pool di `AY3` ambienti.

1. IP Address Manager alloca il successivo intervallo CIDR disponibile in quel pool al `AY3-4` VPC. Questo intervallo CIDR non può più essere utilizzato.

**Automazione e scalabilità**

Questa soluzione è progettata per la scalabilità come segue:
+ **Espansione regionale**: aggiungi nuove regioni estendendo la configurazione Terraform con ulteriori voci del pool regionale.
+ **Crescita delle unità aziendali**: supporta nuove unità aziendali aggiungendole alla mappa di configurazione della BU.
+ **Flessibilità dell'ambiente**: configura diversi tipi di ambiente, come lo sviluppo o la produzione, in base alle esigenze organizzative.
+ **Supporto per più account**: condividi i pool tra tutti gli account dell'organizzazione tramite AWS RAM.
+ Provisioning **VPC automatizzato: integrazione con i flussi di lavoro di provisioning** VPC per automatizzare l'allocazione degli intervalli CIDR.

La struttura gerarchica consente inoltre diverse scale di delega e controllo, come le seguenti:
+ Gli amministratori di rete potrebbero gestire i pool di primo livello e quelli regionali.
+ I team IT delle unità aziendali potrebbero aver delegato il controllo dei rispettivi pool.
+ I team applicativi potrebbero utilizzare gli indirizzi IP dei pool di ambienti designati.

**Nota**  
Puoi anche integrare questa soluzione con [AWS Control Tower Account Factory for Terraform (AFT).](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) Per ulteriori informazioni, vedere *Integrazione con AFT* nella sezione [Informazioni aggiuntive](#multi-region-ipam-architecture-additional) di questo modello.

## Tools (Strumenti)
<a name="multi-region-ipam-architecture-tools"></a>

**Servizi AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ti CloudWatch aiuta a monitorare i parametri delle tue AWS risorse e delle applicazioni su cui esegui AWS in tempo reale.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che ti aiuta a interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che consente di consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) ti aiuta a condividere in modo sicuro le tue risorse Account AWS per ridurre il sovraccarico operativo e fornire visibilità e verificabilità.
+ [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. [IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) è una funzionalità di Amazon VPC. Ti aiuta a pianificare, tracciare e monitorare gli indirizzi IP per i tuoi AWS carichi di lavoro.

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

**Archivio di codici**

Il codice per questo modello è disponibile nel [Sample Terraform Implementation for Hierarchical IPAM](https://github.com/aws-samples/sample-amazon-vpc-ipam-terraform) sul repository on. AWS** GitHub** La struttura del repository include:
+ **Modulo root**: orchestrazione della distribuzione e variabili di input.
+ **Modulo IPAM**: implementazione principale dell'architettura descritta in questo modello.
+ **Modulo Tags**: etichettatura standardizzata per tutte le risorse.

## Best practice
<a name="multi-region-ipam-architecture-best-practices"></a>

Considerate le seguenti best practice per la pianificazione della rete:
+ **Pianifica prima**: pianifica accuratamente lo spazio degli indirizzi IP prima dell'implementazione. Per ulteriori informazioni, consulta [Piano per il provisioning degli indirizzi IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html).
+ **Evita la sovrapposizione degli intervalli CIDR: assicurati che gli intervalli** CIDR di ogni livello non si sovrappongano.
+ **Riserva spazio nel buffer**: alloca sempre intervalli CIDR più ampi di quelli immediatamente necessari per far fronte alla crescita.
+ **Documenta l'allocazione degli indirizzi IP**: conserva la documentazione della tua strategia di allocazione degli indirizzi IP.

Considerate le seguenti best practice di implementazione:
+ **Inizia con la non produzione**: esegui prima l'implementazione in ambienti non di produzione.
+ **Usa la gestione dello stato di Terraform**: implementa l'archiviazione e il blocco dello stato remoti. Per ulteriori informazioni, consulta [Archiviazione e blocco dello stato](https://developer.hashicorp.com/terraform/language/state/backends) nella documentazione di Terraform.
+ **Implementa il controllo della versione**: controlla la versione di tutto il codice Terraform.
+ ** CI/CD Implementazione dell'integrazione**: utilizza pipeline di integrazione continua e distribuzione continua (CI/CD) per implementazioni ripetibili.

Considerate le seguenti best practice operative:
+ **Abilita l'importazione automatica**: configura un pool di IP Address Manager per scoprire e importare automaticamente le risorse esistenti. Segui le istruzioni in [Modifica un pool IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) per attivare l'importazione automatica.
+ **Monitora l'utilizzo degli indirizzi IP**: imposta allarmi per le soglie di utilizzo degli indirizzi IP. Per ulteriori informazioni, consulta [Monitorare l'IPAM con Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html).
+ **Verifica periodica**: verifica periodicamente l'utilizzo e la conformità degli indirizzi IP. Per ulteriori informazioni, consulta [Monitoraggio dell'utilizzo degli indirizzi IP in IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tracking-ip-addresses-ipam.html).
+ **Pulisci le allocazioni inutilizzate: rilascia le allocazioni degli** indirizzi IP quando le risorse vengono disattivate. [Per ulteriori informazioni, consulta Deprovisioning from a pool. CIDRs ](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html)

Considerate le seguenti best practice di sicurezza:
+ **Implementa il privilegio minimo**: utilizza i ruoli IAM con le autorizzazioni minime richieste. Per ulteriori informazioni, consulta le [best practice di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) e la [gestione delle identità e degli accessi in](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html) IPAM.
+ **Utilizza le politiche di controllo dei servizi**: implementa le politiche di controllo dei servizi (SCPs) per applicare l'utilizzo di IP Address Manager nella tua organizzazione. Per ulteriori informazioni, consulta Implementare [l'uso di IPAM per la creazione di VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) con. SCPs
+ **Controlla la condivisione delle risorse**: gestisci con attenzione l'ambito della condivisione delle risorse di IP Address Manager in. AWS RAM Per ulteriori informazioni, consulta [Condividere un pool IPAM utilizzando AWS RAM](https://docs.aws.amazon.com/vpc/latest/ipam/share-pool-ipam.html).
+ **Applica i tag**: implementa i tag obbligatori per tutte le risorse relative a IP Address Manager. [Per ulteriori informazioni, consulta *Strategia di tagging* nella sezione Informazioni aggiuntive.](#multi-region-ipam-architecture-additional)

## Epiche
<a name="multi-region-ipam-architecture-epics"></a>

### Configura un account amministratore delegato per IP Address Manager
<a name="set-up-a-delegated-administrator-account-for-ip-address-manager"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Abilita AWS Organizations le funzionalità. | Assicurati che tutte AWS Organizations le funzionalità siano abilitate. Per istruzioni, vedi [Abilitazione di tutte le funzionalità per un'organizzazione AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) nella AWS Organizations documentazione. | Amministratore AWS | 
| Abilita la condivisione delle risorse in AWS RAM. | Utilizzando AWS CLI, inserisci il seguente comando per abilitare la condivisione AWS RAM delle risorse per la tua organizzazione:<pre>aws ram enable-sharing-with-aws-organization</pre>Per ulteriori informazioni, consulta [Abilitare la condivisione delle risorse AWS Organizations nella](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs) AWS RAM documentazione. | Amministratore AWS | 
| Designare un amministratore per IP Address Manager. | Dall'account di gestione dell'organizzazione, utilizzando AWS CLI, immettete il seguente comando, `123456789012` dov'è l'ID dell'account che amministrerà IP Address Manager:<pre>aws ec2 enable-ipam-organization-admin-account \<br />    --delegated-admin-account-id 123456789012</pre>In genere, un account di rete o di hub di rete viene utilizzato come amministratore delegato per IP Address Manager.Per ulteriori informazioni, vedere [Integrazione di IPAM con gli account di un' AWS organizzazione](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html) nella documentazione di IP Address Manager. | Amministratore AWS | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Definire l'architettura di rete. | Definite e documentate l'architettura di rete, compresi gli intervalli CIDR per regioni, unità aziendali e ambienti. Per ulteriori informazioni, consulta [Piano per il provisioning degli indirizzi IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html) nella documentazione di IP Address Manager. | Ingegnere di rete | 
| Clonare il repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | DevOps ingegnere | 
| Configura le variabili. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Ingegnere di rete, Terraform | 
| Implementa le risorse di IP Address Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Terraform | 
| Convalida la distribuzione. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | General AWS, ingegnere di rete | 

### Crea VPCs e configura il monitoraggio
<a name="create-vpcs-and-set-up-monitoring"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un VPC. | Segui i passaggi in [Creare un VPC nella documentazione](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) di Amazon VPC. Quando raggiungi la fase di scelta di un intervallo CIDR per il VPC, alloca il successivo disponibile da uno dei tuoi pool regionali, aziendali e ambientali. | General AWS, amministratore di rete, ingegnere di rete | 
| Convalida l'allocazione dell'intervallo CIDR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | General AWS, amministratore di rete, ingegnere di rete | 
| Monitora il gestore degli indirizzi IP. | Configura il monitoraggio e gli allarmi relativi all'allocazione delle risorse di IP Address Manager. Per ulteriori informazioni e istruzioni, consulta [Monitoraggio dell'IPAM con Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html) e [Monitoraggio dell'utilizzo del CIDR per risorsa](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) nella documentazione di IP Address Manager. | Informazioni generali su AWS | 
| Imponi l'uso di IP Address Manager. | Crea una policy di controllo dei servizi (SCP) AWS Organizations che richieda ai membri dell'organizzazione di utilizzare IP Address Manager quando creano un VPC. Per istruzioni, consulta [Implementare l'uso di IPAM per la creazione di VPC SCPs nella documentazione di](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) IP Address Manager. | AWS generale, amministratore AWS | 

## risoluzione dei problemi
<a name="multi-region-ipam-architecture-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Terraform fallisce con la risorsa IP Address Manager non trovata | Assicurati che l'account amministratore di IP Address Manager sia delegato correttamente e che il tuo AWS provider sia autenticato su quell'account. | 
| L'allocazione dell'intervallo CIDR non riesce | Verifica che l'intervallo CIDR richiesto rientri nell'intervallo disponibile del pool di IP Address Manager e non si sovrapponga alle allocazioni esistenti. | 
| AWS RAM problemi di condivisione | Verifica che la condivisione delle risorse sia abilitata per la tua AWS organizzazione. Verifica che nella condivisione venga utilizzato il principale corretto, l'organizzazione Amazon Resource Name (ARN). AWS RAM  | 
| Errori di convalida della gerarchia del pool | Assicurati che gli intervalli CIDR del pool secondario siano contenuti correttamente negli intervalli CIDR del pool principale e non si sovrappongano ai pool di pari livello. | 
| Il limite di quota di IP Address Manager è stato superato | Richiedere un aumento della quota per i pool di IP Address Manager. Per ulteriori informazioni, consulta [Richiesta di un aumento delle quote nella ](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)Guida per l’utente di Service Quotas**. | 

## Risorse correlate
<a name="multi-region-ipam-architecture-resources"></a>

**Servizio AWS documentazione**
+ [Documentazione di Amazon VPC IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+ [AWS Resource Access Manager documentazione](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)
+ [AWS Organizations documentazione](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

**AWS post sul blog**
+ [Gestione di pool di IP in tutte VPCs le regioni utilizzando Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/networking-and-content-delivery/managing-ip-pools-across-vpcs-and-regions-using-amazon-vpc-ip-address-manager/)
+ [Gestione e controllo degli indirizzi di rete su larga scala con Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/aws/network-address-management-and-auditing-at-scale-with-amazon-vpc-ip-address-manager/)

**Video e tutorial**
+ [AWS re:Invent 2022: best practice per la progettazione di Amazon VPC e IPAM (0) NET31](https://www.youtube.com/watch?v=XrEHsy_8RYs)
+ [AWS re:Invent 2022: progettazione VPC avanzata e nuove funzionalità (01) NET4](https://www.youtube.com/watch?v=tbXTVpwx87o)

## Informazioni aggiuntive
<a name="multi-region-ipam-architecture-additional"></a>

**Integrazione con AFT**

Puoi integrare questa soluzione con AWS Control Tower Account Factory for Terraform (AFT) per assicurarti che gli account appena assegnati ricevano automaticamente le configurazioni di rete corrette. Implementando questa soluzione IPAM nell'account dell'hub di rete, i nuovi account creati tramite AFT possono fare riferimento ai pool di IP Address Manager condivisi durante la creazione. VPCs

Il seguente esempio di codice dimostra l'integrazione AFT nella personalizzazione di un account utilizzando Parameter Store: AWS Systems Manager 

```
# Get the IP Address Manager pool ID from Parameter Store
data "aws_ssm_parameter" "dev_ipam_pool_id" {
  name = "/org/network/ipam/finance/dev/pool-id"
}

# Create a VPC using the IP Address Manager pool
resource "aws_vpc" "this" {
  ipv4_ipam_pool_id   = data.aws_ssm_parameter.dev_ipam_pool_id.value
  ipv4_netmask_length = 24
  
  tags = {
    Name = "aft-account-vpc"
  }
}
```

**Strategia di assegnazione tag**

La soluzione implementa una strategia di tagging completa per facilitare la gestione delle risorse. Il seguente esempio di codice ne illustra l'utilizzo:

```
# Example tag configuration
module "tags" {
  source = "./modules/tags"
  
  # Required tags
  product_name  = "enterprise-network"
  feature_name  = "ipam"
  org_id        = "finance"
  business_unit = "network-operations"
  owner         = "network-team"
  environment   = "prod"
  repo          = "https://github.com/myorg/ipam-terraform"
  branch        = "main"
  cost_center   = "123456"
  dr_tier       = "tier1"
  
  # Optional tags
  optional_tags = {
    "project"    = "network-modernization"
    "stack_role" = "infrastructure"
  }
}
```

Questi tag vengono applicati automaticamente a tutte le risorse di IP Address Manager. Ciò facilita la governance, l'allocazione dei costi e la gestione delle risorse coerenti.

# Personalizza CloudWatch gli avvisi Amazon per AWS Network Firewall
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall"></a>

*Jason Owens, Amazon Web Services*

## Riepilogo
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-summary"></a>

Il modello ti aiuta a personalizzare gli CloudWatch avvisi Amazon generati da AWS Network Firewall. Puoi utilizzare regole predefinite o creare regole personalizzate che determinano il messaggio, i metadati e la gravità degli avvisi. Puoi quindi agire in base a questi avvisi o automatizzare le risposte di altri servizi Amazon, come Amazon. EventBridge

In questo modello, si generano regole firewall compatibili con Suricata. [Suricata](https://suricata.io/) è un motore di rilevamento delle minacce open source. Per prima cosa devi creare regole semplici e poi testarle per confermare che CloudWatch gli avvisi vengano generati e registrati. Dopo aver testato con successo le regole, le modifichi per definire messaggi, metadati e livelli di severità personalizzati, quindi esegui nuovamente il test per confermare gli aggiornamenti.

## Prerequisiti e limitazioni
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-prereqs"></a>

**Prerequisiti**
+ Un attivo. Account AWS
+ AWS Command Line Interface (AWS CLI) installato e configurato sulla tua workstation Linux, macOS o Windows. Per ulteriori informazioni, consulta [Installare o aggiornare la versione più recente della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ AWS Network Firewall installato e configurato per utilizzare CloudWatch Logs. Per ulteriori informazioni, vedere [Registrazione del traffico di rete](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html) da. AWS Network Firewall
+ Un'istanza Amazon Elastic Compute Cloud (Amazon EC2) in una sottorete privata di un cloud privato virtuale (VPC) protetto da Network Firewall.

**Versioni del prodotto**
+ Per la versione 1 di AWS CLI, usa 1.18.180 o successiva. Per la versione 2 di AWS CLI, usa 2.1.2 o successiva.
+ Il file classification.config della versione 5.0.2 di Suricata. [Per una copia di questo file di configurazione, vedere la sezione Informazioni aggiuntive.](#customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional)

## Architecture
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-architecture"></a>

![\[Una richiesta di EC2 istanza genera un avviso in Network Firewall, che inoltra l'avviso a CloudWatch\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/da6087a9-e942-4cfe-85e3-3b08de6f3ba5/images/778d85cd-bc87-4ed0-a161-d35eb5daa694.png)


Il diagramma dell'architettura mostra il seguente flusso di lavoro:

1. [Un' EC2 istanza Amazon in una sottorete privata effettua una richiesta utilizzando [curl](https://curl.se/) o Wget.](https://www.gnu.org/software/wget/)

1. Network Firewall elabora il traffico e genera un avviso.

1. Network Firewall invia gli avvisi registrati ai CloudWatch registri.

## Tools (Strumenti)
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-tools"></a>

**Servizi AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ti CloudWatch aiuta a monitorare i parametri delle tue AWS risorse e delle applicazioni su cui esegui AWS in tempo reale.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ti aiuta a centralizzare i log di tutti i tuoi sistemi e applicazioni, Servizi AWS così puoi monitorarli e archiviarli in modo sicuro.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che ti aiuta a interagire Servizi AWS tramite comandi nella shell della riga di comando.
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html)è un firewall di rete a stato gestito e un servizio di rilevamento e prevenzione delle intrusioni per cloud privati virtuali () in. VPCs Cloud AWS 

**Altri strumenti**
+ [curl](https://curl.se/) è uno strumento e una libreria a riga di comando open source.
+ [GNU Wget è uno strumento da](https://www.gnu.org/software/wget/) riga di comando gratuito.

## Epiche
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-epics"></a>

### Crea le regole del firewall e il gruppo di regole
<a name="create-the-firewall-rules-and-rule-group"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare regole. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS, amministratore di rete | 
| Crea il gruppo di regole. | Nel AWS CLI, immettere il seguente comando. Questo crea il gruppo di regole.<pre>❯ aws network-firewall create-rule-group \<br />        --rule-group-name custom --type STATEFUL \<br />        --capacity 10 --rules file://custom.rules \<br />        --tags Key=environment,Value=development</pre>Di seguito è riportato un esempio di output. Prendi nota di`RuleGroupArn`, che ti servirà in un passaggio successivo.<pre>{<br />    "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }</pre> | Amministratore di sistema AWS | 

### Aggiorna la politica del firewall
<a name="update-the-firewall-policy"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Ottieni l'ARN della politica del firewall. | Nel AWS CLI, immettere il seguente comando. Ciò restituisce l'Amazon Resource Name (ARN) della policy del firewall. Registra l'ARN per utilizzarlo più avanti in questo schema.<pre>❯ aws network-firewall describe-firewall \<br />    --firewall-name aws-network-firewall-anfw \<br />    --query 'Firewall.FirewallPolicyArn'</pre>Di seguito è riportato un esempio di ARN restituito da questo comando.<pre>"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"</pre> | Amministratore di sistema AWS | 
| Aggiorna la politica del firewall. | In un editor di testo, copia o incolla il seguente codice. Sostituiscilo `<RuleGroupArn>` con il valore che hai registrato nell'epopea precedente. Salva il file con nome `firewall-policy-anfw.json`.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "<RuleGroupArn>"<br />        }<br />    ]<br />}</pre>Inserisci il seguente comando in. AWS CLI Questo comando richiede un [token di aggiornamento](https://docs.aws.amazon.com/cli/latest/reference/network-firewall/update-firewall-policy.html) per aggiungere le nuove regole. Il token viene utilizzato per confermare che la politica non è cambiata dall'ultima volta che l'hai recuperata.<pre>UPDATETOKEN=(`aws network-firewall describe-firewall-policy \<br />              --firewall-policy-name firewall-policy-anfw \<br />              --output text --query UpdateToken`)<br /> <br /> aws network-firewall update-firewall-policy \<br /> --update-token $UPDATETOKEN \<br /> --firewall-policy-name firewall-policy-anfw \<br /> --firewall-policy file://firewall-policy-anfw.json</pre> | Amministratore di sistema AWS | 
| Conferma gli aggiornamenti delle policy. | (Facoltativo) Se desideri confermare che le regole sono state aggiunte e visualizzare il formato della politica, inserisci il seguente comando in AWS CLI.<pre>❯ aws network-firewall describe-firewall-policy \<br />  --firewall-policy-name firewall-policy-anfw \<br />  --query FirewallPolicy</pre>Di seguito è riportato un esempio di output.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"<br />        }<br />    ]<br />}</pre> | Amministratore di sistema AWS | 

### Verifica la funzionalità degli avvisi
<a name="test-alert-functionality"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Genera avvisi per i test. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS | 
| Verifica che gli avvisi siano registrati. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS | 

### Aggiorna le regole e il gruppo di regole del firewall
<a name="update-the-firewall-rules-and-rule-group"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna le regole del firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS | 
| Aggiorna il gruppo di regole. | In AWS CLI, esegui i seguenti comandi. Usa l'ARN della tua politica firewall. Questi comandi ottengono un token di aggiornamento e aggiornano il gruppo di regole con le modifiche alle regole.<pre>❯ UPDATETOKEN=(`aws network-firewall \<br />                describe-rule-group \<br />--rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \<br />--output text --query UpdateToken`)</pre><pre> ❯ aws network-firewall update-rule-group \<br />  --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \<br />--rules file://custom.rules \<br />--update-token $UPDATETOKEN</pre>Di seguito è riportato un esempio di output.<pre>{<br />    "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }<br />}</pre> | Amministratore di sistema AWS | 

### Prova la funzionalità di avviso aggiornata
<a name="test-the-updated-alert-functionality"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Genera un avviso per il test. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS | 
| Convalida l'avviso modificato. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Amministratore di sistema AWS | 

## Risorse correlate
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-resources"></a>

**Riferimenti**
+ [Invia avvisi da AWS Network Firewall un canale Slack](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/send-alerts-from-aws-network-firewall-to-a-slack-channel.html) (AWS Prescriptive Guidance)
+ [Proseguire la prevenzione delle minacce AWS con Suricata (post sul blog](https://aws.amazon.com/blogs/opensource/scaling-threat-prevention-on-aws-with-suricata/))AWS 
+ [Modelli di implementazione per AWS Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/) (AWS post sul blog)
+ [Suricata meta keyworks (documentazione](https://suricata.readthedocs.io/en/suricata-6.0.1/rules/meta.html) Suricata)

**Tutorial e video**
+ [AWS Network Firewall officina](https://networkfirewall.workshop.aws/)

## Informazioni aggiuntive
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional"></a>

Di seguito è riportato il file di configurazione della classificazione di Suricata 5.0.2. Queste classificazioni vengono utilizzate durante la creazione delle regole del firewall.

```
# config classification:shortname,short description,priority
 
config classification: not-suspicious,Not Suspicious Traffic,3
config classification: unknown,Unknown Traffic,3
config classification: bad-unknown,Potentially Bad Traffic, 2
config classification: attempted-recon,Attempted Information Leak,2
config classification: successful-recon-limited,Information Leak,2
config classification: successful-recon-largescale,Large Scale Information Leak,2
config classification: attempted-dos,Attempted Denial of Service,2
config classification: successful-dos,Denial of Service,2
config classification: attempted-user,Attempted User Privilege Gain,1
config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1
config classification: successful-user,Successful User Privilege Gain,1
config classification: attempted-admin,Attempted Administrator Privilege Gain,1
config classification: successful-admin,Successful Administrator Privilege Gain,1
 
# NEW CLASSIFICATIONS
config classification: rpc-portmap-decode,Decode of an RPC Query,2
config classification: shellcode-detect,Executable code was detected,1
config classification: string-detect,A suspicious string was detected,3
config classification: suspicious-filename-detect,A suspicious filename was detected,2
config classification: suspicious-login,An attempted login using a suspicious username was detected,2
config classification: system-call-detect,A system call was detected,2
config classification: tcp-connection,A TCP connection was detected,4
config classification: trojan-activity,A Network Trojan was detected, 1
config classification: unusual-client-port-connection,A client was using an unusual port,2
config classification: network-scan,Detection of a Network Scan,3
config classification: denial-of-service,Detection of a Denial of Service Attack,2
config classification: non-standard-protocol,Detection of a non-standard protocol or event,2
config classification: protocol-command-decode,Generic Protocol Command Decode,3
config classification: web-application-activity,access to a potentially vulnerable web application,2
config classification: web-application-attack,Web Application Attack,1
config classification: misc-activity,Misc activity,3
config classification: misc-attack,Misc Attack,2
config classification: icmp-event,Generic ICMP event,3
config classification: inappropriate-content,Inappropriate Content was Detected,1
config classification: policy-violation,Potential Corporate Privacy Violation,1
config classification: default-login-attempt,Attempt to login by a default username and password,2
 
# Update
config classification: targeted-activity,Targeted Malicious Activity was Detected,1
config classification: exploit-kit,Exploit Kit Activity Detected,1
config classification: external-ip-check,Device Retrieving External IP Address Detected,2
config classification: domain-c2,Domain Observed Used for C2 Detected,1
config classification: pup-activity,Possibly Unwanted Program Detected,2
config classification: credential-theft,Successful Credential Theft Detected,1
config classification: social-engineering,Possible Social Engineering Attempted,2
config classification: coin-mining,Crypto Currency Mining Activity Detected,2
config classification: command-and-control,Malware Command and Control Activity Detected,1
```

# Distribuisci risorse in una AWS Wavelength zona utilizzando Terraform
<a name="deploy-resources-wavelength-zone-using-terraform"></a>

*Zahoor Chaudhrey e Luca Iannario, Amazon Web Services*

## Riepilogo
<a name="deploy-resources-wavelength-zone-using-terraform-summary"></a>

[AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)ti aiuta a creare un'infrastruttura ottimizzata per le applicazioni Multi-Access Edge Computing (MEC). Le *Wavelength* Zones AWS sono implementazioni di infrastrutture che AWS incorporano servizi di elaborazione e archiviazione nelle reti 5G dei provider di servizi di comunicazione (CSP). Il traffico delle applicazioni proveniente dai dispositivi 5G raggiunge i server delle applicazioni in esecuzione nelle Wavelength Zones senza uscire dalla rete di telecomunicazioni. Quanto segue facilita la connettività di rete tramite Wavelength:
+ **Cloud privati virtuali (VPCs)**: VPCs Account AWS possono estendersi fino a coprire più zone di disponibilità, incluse le Wavelength Zone. Le istanze di Amazon Elastic Compute Cloud (Amazon EC2) e i servizi correlati vengono visualizzati come parte del tuo VPC regionale. VPCs vengono creati e gestiti in [Amazon Virtual Private Cloud (Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)).
+ **Carrier gateway**: un carrier gateway consente la connettività dalla sottorete nella Wavelength Zone alla rete CSP, a Internet o tramite la rete Regione AWS del CSP. Il carrier gateway serve a due scopi. Consente il traffico in entrata da una rete CSP in una posizione specifica e consente il traffico in uscita verso la rete di telecomunicazioni e Internet.

Questo pattern e il codice Terraform associato ti aiutano ad avviare risorse, come EC2 istanze Amazon, volumi Amazon Elastic Block Store (Amazon EBS), sottoreti e un carrier gateway VPCs, in una Wavelength Zone.

## Prerequisiti e limitazioni
<a name="deploy-resources-wavelength-zone-using-terraform-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un ambiente di sviluppo integrato (IDE)
+ [Attiva la](https://docs.aws.amazon.com/wavelength/latest/developerguide/get-started-wavelength.html#enable-zone-group) Wavelength Zone di destinazione
+ AWS Command Line Interface [(AWS CLI), [installato e configurato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Terraform versione 1.8.4 o successiva, [installata](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) (documentazione Terraform)
+ [Terraform AWS Provider versione 5.32.1 o successiva, configurata (documentazione Terraform)](https://hashicorp.github.io/terraform-provider-aws/)
+ Git, [installato](https://github.com/git-guides/install-git) (GitHub)
+ [Autorizzazioni](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) per creare risorse Amazon VPC, Wavelength e Amazon EC2 

**Limitazioni**

Non tutti Regioni AWS supportano le Wavelength Zones. Per ulteriori informazioni, consulta [Available Wavelength Zones nella documentazione di Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/available-wavelength-zones.html).

## Architecture
<a name="deploy-resources-wavelength-zone-using-terraform-architecture"></a>

Il diagramma seguente mostra come creare una sottorete e AWS risorse in una Wavelength Zone. VPCs che contengono una sottorete in una Wavelength Zone possono connettersi a un gateway carrier. Un carrier gateway consente di connettersi alle seguenti risorse:
+ Dispositivi 4G/LTE e 5G sulla rete del gestore di telecomunicazioni.
+ Accesso wireless fisso per partner Wavelength Zone selezionati. [Per ulteriori informazioni, vedere Accesso multiplo. AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/multi-access.html)
+ Traffico in uscita verso risorse Internet pubbliche.

![\[Un carrier gateway collega le risorse AWS nella Wavelength Zone alla rete CSP.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/8c507de1-208c-4563-bb58-52388ab2fa6d/images/a4cc0699-0cbc-4f15-ab14-3ae569ced7f4.png)


## Tools (Strumenti)
<a name="deploy-resources-wavelength-zone-using-terraform-tools"></a>

**Servizi AWS**
+ [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.
+ [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)estende Cloud AWS l'infrastruttura alle reti 5G dei provider di telecomunicazioni. Questo ti aiuta a creare applicazioni che offrono latenze estremamente basse ai dispositivi mobili e agli utenti finali.

**Altri strumenti**
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo modello è disponibile nel repository GitHub [Creating AWS Wavelength Infrastructure using Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure). Il codice Terraform implementa la seguente infrastruttura e risorse:
+ Un VPC
+ Una zona di Wavelength
+ Una sottorete pubica nella Wavelength Zone
+ Un carrier gateway nella Wavelength Zone
+ Un' EC2 istanza Amazon nella Wavelength Zone

## Best practice
<a name="deploy-resources-wavelength-zone-using-terraform-best-practices"></a>
+ Prima della distribuzione, conferma di utilizzare le versioni più recenti di Terraform e di. AWS CLI
+ Utilizza una pipeline di integrazione e distribuzione continua (CI/CD) per implementare IaC. Per ulteriori informazioni, consulta [Best practice per la gestione dei file Terraform State](https://aws.amazon.com/blogs/devops/best-practices-for-managing-terraform-state-files-in-aws-ci-cd-pipeline/) in CI/CD Pipeline on Blogs. AWS AWS 

## Epiche
<a name="deploy-resources-wavelength-zone-using-terraform-epics"></a>

### Fornisci l'infrastruttura
<a name="provision-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Inserisci il seguente comando per clonare l'[AWS Wavelength infrastruttura di creazione utilizzando il repository Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure) nel tuo ambiente.`git clone git@github.com:aws-samples/terraform-wavelength-infrastructure.git` | DevOps ingegnere | 
| Aggiorna le variabili. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingegnere, Terraform | 
| Inizializza la configurazione. | Immettete il seguente comando per inizializzare la directory di lavoro.<pre>terraform init</pre> | DevOps ingegnere, Terraform | 
| Visualizza l'anteprima del piano Terraform. | Immettete il seguente comando per confrontare lo stato di destinazione con lo stato attuale del vostro AWS ambiente. Questo comando genera un'anteprima delle risorse che verranno configurate.<pre>terraform plan</pre> | DevOps ingegnere, Terraform | 
| Verifica e distribuisci. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingegnere, Terraform | 

### Convalida e ripulisci
<a name="validate-and-clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica l'implementazione dell'infrastruttura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | AWS DevOps, DevOps ingegnere | 
| (Facoltativo) Pulisci l'infrastruttura. | Se devi eliminare tutte le risorse fornite da Terraform, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingegnere, Terraform | 

## risoluzione dei problemi
<a name="deploy-resources-wavelength-zone-using-terraform-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Connettività alle EC2 istanze Amazon in. Regione AWS | Vedi [Risoluzione dei problemi di connessione alla tua istanza Linux o [Risoluzione dei problemi di connessione](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html) alla tua istanza Windows](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html). | 
| Connettività alle EC2 istanze Amazon nella Wavelength Zone. | Vedi [Risoluzione dei problemi di connettività SSH o RDP per le mie EC2 istanze avviate in](https://repost.aws/knowledge-center/ec2-wavelength-zone-connection-errors) una Wavelength Zone. | 
| Capacità nella Wavelength Zone. | Vedi [Quote e considerazioni per Wavelength Zones](https://docs.aws.amazon.com/wavelength/latest/developerguide/wavelength-quotas.html). | 
| Connettività mobile o gestionale dalla rete del gestore a. Regione AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | 

## Risorse correlate
<a name="deploy-resources-wavelength-zone-using-terraform-resources"></a>
+ [Che cos'è AWS Wavelength?](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)
+ [Come AWS Wavelength funziona](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html)
+ [Resilienza in AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/disaster-recovery-resiliency.html)

# Esegui la migrazione di record DNS in blocco verso una zona ospitata privata di Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Riepilogo
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Gli ingegneri di rete e gli amministratori del cloud hanno bisogno di un modo semplice ed efficiente per aggiungere record DNS (Domain Name System) alle zone private ospitate in Amazon Route 53. L'utilizzo di un approccio manuale per copiare le voci da un foglio di lavoro di Microsoft Excel nelle posizioni appropriate nella console Route 53 è noioso e soggetto a errori. Questo modello descrive un approccio automatizzato che riduce il tempo e lo sforzo necessari per aggiungere più record. Fornisce inoltre una serie di passaggi ripetibili per la creazione di più zone ospitate.

Questo modello utilizza Amazon Simple Storage Service (Amazon S3) per archiviare i record. Per lavorare con i dati in modo efficiente, il pattern utilizza il formato JSON per la sua semplicità e la sua capacità di supportare un dizionario Python `dict` (tipo di dati).

**Nota**  
Se riesci a generare un file di zona dal tuo sistema, prendi in considerazione l'utilizzo della [funzione di importazione Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html).

## Prerequisiti e limitazioni
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Prerequisiti**
+ Un foglio di lavoro Excel che contiene i record delle zone ospitate private
+ [Familiarità con diversi tipi di record DNS come A record, Name Authority Pointer (NAPTR) e record SRV (vedi Tipi di record DNS supportati)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)
+ Familiarità con il linguaggio Python e le sue librerie

**Limitazioni**
+ Il modello non fornisce una copertura estesa per tutti gli scenari di utilizzo. Ad esempio, la chiamata [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) non utilizza tutte le proprietà disponibili dell'API.
+ Nel foglio di lavoro di Excel, si presume che il valore di ogni riga sia univoco. È previsto che nella stessa riga compaiano più valori per ogni nome di dominio completo (FQDN). Se ciò non è vero, è necessario modificare il codice fornito in questo modello per eseguire la concatenazione necessaria.
+ Il modello utilizza l'SDK AWS per Python (Boto3) per chiamare direttamente il servizio Route 53. Puoi migliorare il codice per utilizzare un CloudFormation wrapper AWS per i `update_stack` comandi `create_stack` and e utilizzare i valori JSON per popolare le risorse del modello.

## Architecture
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Stack tecnologico**
+ Zone ospitate private Route 53 per il routing del traffico
+ Amazon S3 per l'archiviazione del file JSON di output

![\[Flusso di lavoro per la migrazione di record DNS in blocco verso una zona ospitata privata Route 53.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


*Il flusso di lavoro consiste nei seguenti passaggi, come illustrato nel diagramma precedente e discusso nella sezione Epics:*

1. Carica un foglio di lavoro Excel contenente le informazioni sul set di record in un bucket S3.

1. Crea ed esegui uno script Python che converta i dati di Excel in formato JSON.

1. Leggi i record dal bucket S3 e pulisci i dati.

1. Crea set di record nella tua zona ospitata privata.

## Tools (Strumenti)
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) — Amazon Route 53 è un servizio Web DNS altamente disponibile e scalabile che gestisce la registrazione del dominio, il routing DNS e il controllo dello stato.
+ [Amazon S3 — Amazon Simple](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) Storage Service (Amazon S3) è un servizio di storage di oggetti. È possibile utilizzare Amazon S3 per memorizzare e recuperare qualsiasi volume di dati, in qualunque momento e da qualunque luogo tramite il Web.

## Epiche
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Prepara i dati per l'automazione
<a name="prepare-data-for-automation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un file Excel per i tuoi archivi. | Usa i record che hai esportato dal sistema corrente per creare un foglio di lavoro Excel contenente le colonne richieste per un record, ad esempio nome di dominio completo (FQDN), tipo di record, Time to Live (TTL) e valore. Per i record NAPTR e SRV, il valore è una combinazione di più proprietà, quindi usa il metodo di Excel per combinare queste proprietà. `concat`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Ingegnere dei dati, competenze in Excel | 
| Verifica l'ambiente di lavoro. | Nel tuo IDE, crea un file Python per convertire il foglio di lavoro di input di Excel in formato JSON. (Invece di un IDE, puoi anche usare un SageMaker notebook Amazon per lavorare con il codice Python.)Verifica che la versione di Python che stai utilizzando sia la versione 3.7 o successiva.<pre> python3 --version</pre>Installa il pacchetto **pandas**.<pre> pip3 install pandas --user</pre> | Informazioni generali su AWS | 
| Converti i dati del foglio di lavoro Excel in JSON. | Crea un file Python che contenga il seguente codice da convertire da Excel a JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>dove `Book1` è il nome del foglio di lavoro di Excel ed `my.json` è il nome del file JSON di output. | Ingegnere dei dati, competenze in Python | 
| Carica il file JSON in un bucket S3. | Caricare il file `my.json` in un bucket S3. Per ulteriori informazioni, consulta [Creazione di un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) nella documentazione di Amazon S3. | Sviluppatore di app | 
| FqdnName | RecordType | Valore | TTL | 
| qualcosa.example.org | A | 1.1.1.1 | 900 | 

### Inserisci record
<a name="insert-records"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una zona ospitata privata. | Usa l'[API create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) e il seguente codice di esempio Python per creare una zona ospitata privata. Sostituisci i parametri e con i tuoi valori`hostedZoneName`. `vpcRegion` `vpcId`<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>Puoi anche utilizzare uno strumento di infrastruttura come codice (IaC) come AWS CloudFormation per sostituire questi passaggi con un modello che crea uno stack con le risorse e le proprietà appropriate. | Architetto cloud, amministratore di rete, competenze in Python | 
| Recupera i dettagli come dizionario da Amazon S3. | Usa il codice seguente per leggere dal bucket S3 e ottenere i valori JSON come dizionario Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>dove `json_content` contiene il dizionario Python. | Sviluppatore di app, competenze in Python | 
| Pulisci i valori dei dati per spazi e caratteri Unicode. | Come misura di sicurezza per garantire la correttezza dei dati, utilizzate il codice seguente per eseguire un'operazione di cancellazione dei valori inseriti. `json_content` Questo codice rimuove i caratteri di spazio all'inizio e alla fine di ogni stringa. Utilizza anche il `replace` metodo per rimuovere gli spazi rigidi (non interrotti) (i `\xa0` caratteri).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Sviluppatore di app, competenze in Python | 
| Inserisci record. | Utilizzate il codice seguente come parte del `for` ciclo precedente.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>`xxxxxxx`Dov'è l'ID della zona ospitata del primo passaggio di questa epopea. | Sviluppatore di app, competenze in Python | 

## Risorse correlate
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Riferimenti**
+ [Creazione di record importando un file di zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentazione di Amazon Route 53)
+ [metodo create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentazione Boto3)
+ [metodo change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) (documentazione Boto3)

**Tutorial e video**
+ [Il tutorial su Python (documentazione](https://docs.python.org/3/tutorial/) Python)
+ [Progettazione DNS con Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube video, *AWS Online Tech Talks*)

# Modifica le intestazioni HTTP durante la migrazione da F5 a un Application Load Balancer su AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Riepilogo
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Quando esegui la migrazione di un'applicazione che utilizza un Load balancer F5 su Amazon Web Services (AWS) e desideri utilizzare un Application Load Balancer su AWS, la migrazione delle regole F5 per le modifiche agli header è un problema comune. Un Application Load Balancer non supporta le modifiche agli header, ma puoi usare Amazon CloudFront come rete per la distribuzione di contenuti (CDN) e Lambda @Edge per modificare le intestazioni.

Questo modello descrive le integrazioni richieste e fornisce codice di esempio per la modifica dell'intestazione utilizzando AWS e CloudFront Lambda @Edge.

## Prerequisiti e limitazioni
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Prerequisiti**
+ Un'applicazione locale che utilizza un sistema di bilanciamento del carico F5 con una configurazione che sostituisce il valore dell'intestazione HTTP utilizzando. `if, else` Per ulteriori informazioni su questa configurazione, vedete [HTTP: :header](https://clouddocs.f5.com/api/irules/HTTP__header.html) nella documentazione del prodotto F5. 

**Limitazioni**
+ Questo modello si applica alla personalizzazione dell'intestazione del bilanciamento del carico F5. Per altri sistemi di bilanciamento del carico di terze parti, consulta la documentazione del sistema di bilanciamento del carico per informazioni di supporto.
+ Le funzioni Lambda utilizzate per Lambda @Edge devono trovarsi nella regione Stati Uniti orientali (Virginia settentrionale).

## Architecture
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

Il diagramma seguente mostra l'architettura su AWS, incluso il flusso di integrazione tra la CDN e altri componenti AWS.

![\[Architettura per la modifica dell'intestazione utilizzando Amazon CloudFront e Lambda @Edge\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Tools (Strumenti)
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Servizi AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─ Un Application Load Balancer è un servizio di bilanciamento del carico AWS completamente gestito che funziona al settimo livello del modello Open Systems Interconnection (OSI). Bilancia il traffico su più destinazioni e supporta richieste di routing avanzate basate su intestazioni e metodi HTTP, stringhe di query e routing basato su host o percorsi.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html): Amazon CloudFront è un servizio web che velocizza la distribuzione di contenuti web statici e dinamici, come .html, .css, .js e file di immagine, ai tuoi utenti. CloudFront distribuisce i tuoi contenuti attraverso una rete mondiale di data center denominati edge location per una latenza inferiore e prestazioni migliorate.
+ [Lambda @Edge ─](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) Lambda @Edge è un'estensione di AWS Lambda che consente di eseguire funzioni per personalizzare i contenuti distribuiti. CloudFront Puoi creare funzioni nella regione Stati Uniti orientali (Virginia settentrionale) e quindi associare la funzione a una CloudFront distribuzione per replicare automaticamente il codice in tutto il mondo, senza dover fornire o gestire server. Ciò riduce la latenza e migliora l'esperienza utente.

**Codice**

Il codice di esempio seguente fornisce un modello per modificare le intestazioni di risposta. CloudFront Segui le istruzioni nella sezione *Epics* per distribuire il codice.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Epiche
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Crea una distribuzione CDN
<a name="create-a-cdn-distribution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una distribuzione CloudFront web.  | In questo passaggio, crei una CloudFront distribuzione per indicare da CloudFront dove desideri che vengano distribuiti i contenuti e i dettagli su come monitorare e gestire la distribuzione dei contenuti.Per creare una distribuzione utilizzando la console, accedi alla Console di gestione AWS, apri la [CloudFront console](https://console.aws.amazon.com/cloudfront/v3/home) e segui i passaggi indicati nella [CloudFront documentazione](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Amministratore del cloud | 

### Crea e distribuisci la funzione Lambda @Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea e distribuisci una funzione Lambda @Edge. | È possibile creare una funzione Lambda @Edge utilizzando un blueprint per modificare CloudFront le intestazioni di risposta. (Sono disponibili altri BluePrint per diversi casi d'uso; per ulteriori informazioni, consulta le funzioni di [esempio di Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) CloudFront nella documentazione.) Per creare una funzione Lambda @Edge:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Amministratore AWS | 
| Implementa la funzione Lambda @Edge. | Segui le istruzioni nel [passaggio 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) del *Tutorial: Creazione di una semplice funzione Lambda @Edge* nella CloudFront documentazione di Amazon per configurare il CloudFront trigger e distribuire la funzione. | Amministratore AWS | 

## Risorse correlate
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront documentazione**
+ [Comportamento di richiesta e risposta per origini personalizzate](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Lavorare con le distribuzioni](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Funzioni di esempio Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Personalizzazione all'edge con Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutorial: creazione di una semplice funzione Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)

# Crea un rapporto sui risultati di Network Access Analyzer per l'accesso a Internet in entrata in più Account AWS
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts"></a>

*Mike Virgilio, Amazon Web Services*

## Riepilogo
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-summary"></a>

L'accesso involontario alle AWS risorse via Internet in entrata può comportare rischi per il perimetro dei dati di un'organizzazione. [Network Access Analyzer](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html) è una funzionalità di Amazon Virtual Private Cloud (Amazon VPC) che ti aiuta a identificare accessi di rete non intenzionali alle tue risorse su Amazon Web Services ().AWS Puoi utilizzare Network Access Analyzer per specificare i requisiti di accesso alla rete e identificare potenziali percorsi di rete che non soddisfano i requisiti specificati. È possibile utilizzare Network Access Analyzer per effettuare le seguenti operazioni:

1. Identifica AWS le risorse accessibili a Internet tramite gateway Internet.

1. Verifica che i tuoi cloud privati virtuali (VPCs) siano segmentati in modo appropriato, ad esempio isolando gli ambienti di produzione e sviluppo e separando i carichi di lavoro transazionali.

Network Access Analyzer analizza le condizioni di raggiungibilità della rete e non solo un singolo componente end-to-end. Per determinare se una risorsa è accessibile a Internet, Network Access Analyzer valuta il gateway Internet, le tabelle di routing VPC, gli elenchi di controllo degli accessi alla rete (ACLs), gli indirizzi IP pubblici su interfacce di rete elastiche e i gruppi di sicurezza. Se qualcuno di questi componenti impedisce l'accesso a Internet, Network Access Analyzer non genera alcun risultato. Ad esempio, se un'istanza Amazon Elastic Compute Cloud (Amazon EC2) ha un gruppo di sicurezza aperto che consente il traffico proveniente da `0/0` una sottorete privata che non è instradabile da alcun gateway Internet, Network Access Analyzer non genererebbe alcun risultato. Ciò fornisce risultati ad alta fedeltà che consentono di identificare le risorse realmente accessibili da Internet.

Quando si esegue Network Access Analyzer, si utilizzano [Network Access Scopes per specificare i requisiti di accesso](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#concepts) alla rete. Questa soluzione identifica i percorsi di rete tra un gateway Internet e un'interfaccia di rete elastica. In questo modello, la soluzione viene distribuita in modo centralizzato Account AWS all'interno dell'organizzazione, gestita da AWS Organizations e analizza tutti gli account, in qualsiasi momento Regione AWS, dell'organizzazione.

Questa soluzione è stata progettata tenendo presente quanto segue:
+ I AWS CloudFormation modelli riducono lo sforzo richiesto per distribuire le AWS risorse secondo questo schema.
+ È possibile modificare i parametri nei CloudFormation modelli e nello script **naa-script.sh** al momento della distribuzione per personalizzarli in base all'ambiente.
+ Lo scripting di Bash fornisce e analizza automaticamente gli ambiti di accesso alla rete per più account, in parallelo.
+ Uno script Python elabora i risultati, estrae i dati e quindi consolida i risultati. È possibile scegliere di esaminare il rapporto consolidato dei risultati di Network Access Analyzer in formato CSV o in formato. AWS Security Hub CSPM Un esempio del rapporto CSV è disponibile nella sezione [Informazioni aggiuntive](#create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional) di questo modello.
+ È possibile correggere i risultati oppure escluderli dalle analisi future aggiungendoli al **file naa-exclusions.csv**.

## Prerequisiti e limitazioni
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-prereqs"></a>

**Prerequisiti**
+ E Account AWS per ospitare servizi e strumenti di sicurezza, gestiti come account membro di un'organizzazione in. AWS Organizations In questo schema, questo account viene definito account di sicurezza.
+ Nell'account di sicurezza, è necessario disporre di una sottorete privata con accesso a Internet in uscita. Per istruzioni, consulta [Creare una sottorete](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) nella documentazione di Amazon VPC. È possibile stabilire l'accesso a Internet utilizzando un [gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) o un endpoint [VPC di interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).
+ Accesso all'account di AWS Organizations gestione o a un account con autorizzazioni di amministratore delegate per. CloudFormation Per istruzioni, consulta [Registrare un amministratore delegato nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). CloudFormation 
+ Abilita l'accesso affidabile tra AWS Organizations e CloudFormation. Per istruzioni, consulta [Abilita l'accesso affidabile con AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) nella CloudFormation documentazione.
+ Se stai caricando i risultati su Security Hub CSPM, Security Hub CSPM deve essere abilitato nell'account e nel luogo in cui viene fornita l' Regione AWS istanza Amazon. EC2 Per ulteriori informazioni, consulta [Configurazione AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html).

**Limitazioni**
+ I percorsi di rete tra account non vengono attualmente analizzati a causa delle limitazioni della funzionalità Network Access Analyzer.
+ L'obiettivo Account AWS deve essere gestito come organizzazione in. AWS Organizations**Se non lo utilizzi AWS Organizations, puoi aggiornare il CloudFormation modello **naa-execrole.yaml** e lo script naa-script.sh per il tuo ambiente.** Fornisci invece un elenco delle regioni Account AWS IDs e delle regioni in cui desideri eseguire lo script.
+ Il CloudFormation modello è progettato per distribuire l' EC2 istanza Amazon in una sottorete privata con accesso a Internet in uscita. L' AWS Systems Manager agente (agente SSM) richiede l'accesso in uscita per raggiungere l'endpoint del servizio Systems Manager ed è necessario l'accesso in uscita per clonare l'archivio del codice e installare le dipendenze. [Se desideri utilizzare una sottorete pubblica, devi modificare il modello **naa-resources.yaml** per associare un indirizzo IP elastico all'istanza Amazon.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) EC2 

## Architecture
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-architecture"></a>

**Architettura di Target**

*Opzione 1: accedere ai risultati in un bucket Amazon S3*

![\[Diagramma dell'architettura di accesso al report dei risultati di Network Access Analyzer in un bucket Amazon S3\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/d0b08437-e5b0-47a1-abdd-040c67b5da8f.png)


Il diagramma mostra il seguente processo:

1. Se esegui manualmente la soluzione, l'utente si autentica sull' EC2 istanza Amazon utilizzando Session Manager e quindi esegue lo script **naa-script.sh**. Questo script di shell esegue i passaggi da 2 a 7.

   Se esegui automaticamente la soluzione, lo script **naa-script.sh** si avvia automaticamente in base alla pianificazione definita nell'espressione cron. Questo script di shell esegue i passaggi da 2 a 7. Per ulteriori informazioni, vedere *Automazione e scalabilità* alla fine di questa sezione.

1. L' EC2 istanza Amazon scarica il file **naa-exception.csv** più recente dal bucket Amazon S3. Questo file viene utilizzato più avanti nel processo quando lo script Python elabora le esclusioni.

1. L' EC2 istanza Amazon assume il ruolo `NAAEC2Role` AWS Identity and Access Management (IAM), che concede le autorizzazioni per accedere al bucket Amazon S3 e per assumere i ruoli `NAAExecRole` IAM negli altri account dell'organizzazione.

1. L' EC2 istanza Amazon assume il ruolo `NAAExecRole` IAM nell'account di gestione dell'organizzazione e genera un elenco degli account dell'organizzazione.

1. L' EC2 istanza Amazon assume il ruolo `NAAExecRole` IAM negli account dei membri dell'organizzazione (chiamati account di *carico di lavoro nel diagramma dell'architettura) ed esegue una valutazione della sicurezza in ogni account*. I risultati vengono archiviati come file JSON sull' EC2 istanza Amazon.

1. L' EC2 istanza Amazon utilizza uno script Python per elaborare i file JSON, estrarre i campi di dati e creare un report CSV.

1. L' EC2 istanza Amazon carica il file CSV nel bucket Amazon S3.

1. Una EventBridge regola Amazon rileva il caricamento del file e utilizza un argomento Amazon SNS per inviare un'e-mail che notifica all'utente che il rapporto è completo.

1. L'utente scarica il file CSV dal bucket Amazon S3. L'utente importa i risultati nel modello Excel e li esamina.

*Opzione 2: Accedi ai risultati in AWS Security Hub CSPM*

![\[Diagramma dell'architettura di accesso ai risultati di Network Access Analyzer tramite AWS Security Hub\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/9cb4f059-dfb6-4a33-9f8d-159fe5df0d64.png)


Il diagramma mostra il seguente processo:

1. Se esegui manualmente la soluzione, l'utente si autentica sull' EC2 istanza Amazon utilizzando Session Manager e quindi esegue lo script **naa-script.sh**. Questo script di shell esegue i passaggi da 2 a 7.

   Se esegui automaticamente la soluzione, lo script **naa-script.sh** si avvia automaticamente in base alla pianificazione definita nell'espressione cron. Questo script di shell esegue i passaggi da 2 a 7. Per ulteriori informazioni, vedere *Automazione e scalabilità* alla fine di questa sezione.

1. L' EC2 istanza Amazon scarica il file **naa-exception.csv** più recente dal bucket Amazon S3. Questo file viene utilizzato più avanti nel processo quando lo script Python elabora le esclusioni.

1. L' EC2 istanza Amazon assume il ruolo `NAAEC2Role` IAM, che concede le autorizzazioni per accedere al bucket Amazon S3 e per assumere i ruoli `NAAExecRole` IAM negli altri account dell'organizzazione.

1. L' EC2 istanza Amazon assume il ruolo `NAAExecRole` IAM nell'account di gestione dell'organizzazione e genera un elenco degli account dell'organizzazione.

1. L' EC2 istanza Amazon assume il ruolo `NAAExecRole` IAM negli account dei membri dell'organizzazione (chiamati account di *carico di lavoro nel diagramma dell'architettura) ed esegue una valutazione della sicurezza in ogni account*. I risultati vengono archiviati come file JSON sull' EC2 istanza Amazon.

1. L' EC2 istanza Amazon utilizza uno script Python per elaborare i file JSON ed estrarre i campi di dati per l'importazione in Security Hub CSPM.

1. L' EC2 istanza Amazon importa i risultati di Network Access Analyzer in Security Hub CSPM.

1. Una EventBridge regola Amazon rileva l'importazione e utilizza un argomento Amazon SNS per inviare un'e-mail che notifica all'utente che il processo è completo.

1. L'utente visualizza i risultati in Security Hub CSPM.

**Automazione e scalabilità**

È possibile pianificare questa soluzione per eseguire automaticamente lo script **naa-script.sh** secondo una pianificazione personalizzata. Per impostare una pianificazione personalizzata, nel modello ** CloudFormation naa-resources.yaml**, modifica il parametro. `CronScheduleExpression` Ad esempio, il valore predefinito di `0 0 * * 0` esegue la soluzione a mezzanotte di ogni domenica. Il valore di `0 0 * 1-12 0` eseguirebbe la soluzione a mezzanotte della prima domenica di ogni mese. Per ulteriori informazioni sull'uso delle espressioni cron, vedere [Cron e rate expression nella documentazione di](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) Systems Manager.

Se desideri modificare la pianificazione dopo che lo `NAA-Resources` stack è stato distribuito, puoi modificare manualmente la pianificazione cron in. `/etc/cron.d/naa-schedule`

## Tools (Strumenti)
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-tools"></a>

**Servizi AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) fornisce capacità di elaborazione scalabile in. Cloud AWS Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)è un servizio di gestione degli account che ti aiuta a consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fornisce una visione completa dello stato di sicurezza in 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.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)ti aiuta a gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala. Questo modello utilizza Session Manager, una funzionalità di Systems Manager.

**Archivio di codice**

Il codice di questo pattern è disponibile nel repository GitHub [Network Access Analyzer Multi-Account Analysis](https://github.com/aws-samples/network-access-analyzer-multi-account-analysis). L'archivio del codice contiene i seguenti file:
+ **naa-script.sh** — Questo script bash viene utilizzato per avviare un'analisi di più Network Access Analyzer Account AWS, in parallelo. Come definito nel CloudFormation modello **naa-resources.yaml**, questo script viene distribuito automaticamente nella cartella sull'istanza Amazon. `/usr/local/naa` EC2 
+ **naa-resources.yaml**: utilizzi questo modello per creare uno stack nell'account di sicurezza dell'organizzazione. CloudFormation Questo modello distribuisce tutte le risorse necessarie per questo account per supportare la soluzione. **Questo stack deve essere distribuito prima del modello naa-execrole.yaml.**
**Nota**  
Se questo stack viene eliminato e ridistribuito, è necessario ricostruire il set di stack per ricostruire le dipendenze tra account tra i `NAAExecRole` ruoli IAM.
+ **naa-execrole.yaml**: utilizzi questo CloudFormation modello per creare un set di stack che distribuisce il ruolo IAM in tutti gli account dell'organizzazione, incluso l'account di gestione. `NAAExecRole`
+ **naa-processfindings.py** — Lo script **naa-script.sh** chiama automaticamente questo script Python per elaborare gli output JSON di Network Access Analyzer, escludere eventuali risorse note valide nel file **naa-exclusions.csv** e quindi generare un file CSV dei risultati consolidati o importare i risultati in Security Hub CSPM.

## Epiche
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-epics"></a>

### Preparati per l'implementazione
<a name="prepare-for-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del codice. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Esamina i modelli. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Crea gli CloudFormation stack
<a name="create-the-cfnshort-stacks"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Fornisci risorse nell'account di sicurezza. | Utilizzando il modello **naa-resources.yaml**, crei uno CloudFormation stack che distribuisce tutte le risorse richieste nell'account di sicurezza. [Per istruzioni, consulta Creazione di uno stack nella documentazione.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) CloudFormation Tieni presente quanto segue durante la distribuzione di questo modello:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Fornisci il ruolo IAM negli account dei membri. | Nell'account di AWS Organizations gestione o in un account con autorizzazioni di amministratore delegato per CloudFormation, utilizza il modello **naa-execrole.yaml** per creare un set di stack. CloudFormation Il set di stack implementa il ruolo IAM in tutti gli account membri dell'organizzazione. `NAAExecRole` Per istruzioni, consulta [Creare un set di stack con autorizzazioni gestite dal servizio](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html#stacksets-orgs-associate-stackset-with-org) nella documentazione. CloudFormation Tieni presente quanto segue durante la distribuzione di questo modello:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Fornisci il ruolo IAM nell'account di gestione. | Utilizzando il modello **naa-execrole.yaml**, crei uno CloudFormation stack che distribuisce il ruolo IAM nell'account di gestione dell'`NAAExecRole`organizzazione. Lo stack set creato in precedenza non distribuisce il ruolo IAM nell'account di gestione. Per istruzioni, consulta [Creazione di uno stack nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html). CloudFormation Tieni presente quanto segue durante la distribuzione di questo modello:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Esegui l'analisi
<a name="perform-the-analysis"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Personalizza lo script della shell. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Analizza gli account target. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opzione 1: recupera i risultati dal bucket Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opzione 2: rivedi i risultati in Security Hub CSPM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Correggi ed escludi i risultati
<a name="remediate-and-exclude-findings"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Correggere i risultati. | Correggi i risultati che desideri correggere. Per ulteriori informazioni e best practice su come creare un perimetro attorno a AWS identità, risorse e reti, consulta [Building a data perimeter on (Whitepaper](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html)). AWSAWS  | AWS DevOps | 
| Escludi risorse con percorsi di rete noti e validi. | Se Network Access Analyzer genera risultati relativi a risorse che dovrebbero essere accessibili da Internet, puoi aggiungere tali risorse a un elenco di esclusione. La prossima volta che Network Access Analyzer verrà eseguito, non genererà alcun risultato per quella risorsa.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Facoltativo) Aggiorna lo script naa-script.sh
<a name="optional-update-the-naa-script-sh-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiornare lo script naa-script.sh. | Se desideri aggiornare lo script **naa-script.sh** all'ultima versione del repository, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Facoltativo) Pulizia
<a name="optional-clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare tutte le risorse distribuite. | È possibile lasciare le risorse distribuite negli account.Se desideri eseguire il deprovisioning di tutte le risorse, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

## risoluzione dei problemi
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Impossibile connettersi all' EC2 istanza Amazon utilizzando Session Manager. | L'agente SSM deve essere in grado di comunicare con l'endpoint Systems Manager. Esegui questa operazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | 
| Quando distribuisci lo stack set, la CloudFormation console ti chiede di farlo. `Enable trusted access with AWS Organizations to use service-managed permissions` | Ciò indica che l'accesso affidabile non è stato abilitato tra e. AWS Organizations CloudFormation È necessario un accesso affidabile per distribuire il set di stack gestito dai servizi. Scegli il pulsante per abilitare l'accesso affidabile. Per ulteriori informazioni, consulta [Abilitare l'accesso affidabile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) nella CloudFormation documentazione. | 

## Risorse correlate
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-resources"></a>
+ [Novità: Amazon VPC Network Access Analyzer](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/) (AWS post di blog)
+ [AWS re:Inforce 2022 - Convalida controlli efficaci di accesso alla rete su AWS](https://youtu.be/aN2P2zeQek0) (02) (video) NIS2
+ [Demo - Analisi del percorso dei dati di accesso a Internet a livello di organizzazione mediante Network Access Analyzer](https://youtu.be/1IFNZWy4iy0) (video)

## Informazioni aggiuntive
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional"></a>

**Esempio di output da console**

L'esempio seguente mostra il risultato della generazione dell'elenco degli account di destinazione e dell'analisi degli account di destinazione.

```
[root@ip-10-10-43-82 naa]# ./naa-script.sh
download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv

AWS Management Account: <Management account ID>

AWS Accounts being processed...
<Account ID 1> <Account ID 2> <Account ID 3>

Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole
Processing account: <Account ID 1> / Region: us-east-1
Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 2> / Region: us-east-1
Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 3> / Region: us-east-1
Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope...
Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
```

**Esempi di report CSV**

Le immagini seguenti sono esempi dell'output CSV.

![\[Esempio 1 del rapporto CSV generato da questa soluzione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/55e02e61-054e-4da6-aaae-c9a8b6f4f272.png)


![\[Esempio 2 del report CSV generato da questa soluzione.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/95f980ad-92c1-4392-92d4-9c742755aab2.png)


# Configura la risoluzione DNS per reti ibride in un ambiente multi-account AWS
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment"></a>

*Anvesh Koganti, Amazon Web Services*

## Riepilogo
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-summary"></a>

Questo modello fornisce una soluzione completa per configurare la risoluzione DNS in ambienti di rete ibridi che includono più account Amazon Web Services (AWS). Consente la risoluzione DNS bidirezionale tra le reti locali e l'ambiente tramite gli endpoint. AWS Amazon Route 53 Resolver [Il modello presenta due soluzioni per abilitare la risoluzione DNS in un'architettura centralizzata e multi-account:](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html#multi-account-centralized)
+ La *configurazione di base* non utilizza i profili Route 53. Aiuta a ottimizzare i costi per implementazioni di piccole e medie dimensioni con complessità inferiore.
+ *La configurazione avanzata* utilizza i profili Route 53 per semplificare le operazioni. È ideale per implementazioni DNS più grandi o più complesse.

**Nota**  
Consulta la sezione *Limitazioni per le limitazioni* e le quote del servizio prima dell'implementazione. Prendi in considerazione fattori come le spese generali di gestione, i costi, la complessità operativa e l'esperienza del team quando prendi una decisione.

## Prerequisiti e limitazioni
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-prereqs"></a>

**Prerequisiti**
+ Un ambiente AWS multi-account con Amazon Virtual Private Cloud (Amazon VPC) distribuito su Shared Services e account di carico di lavoro (preferibilmente configurato tramite [AWS Control Tower AWS seguendo le best](https://docs.aws.amazon.com/controltower/latest/userguide/aws-multi-account-landing-zone.html) practice per la struttura degli account).
+ Connettività ibrida esistente (AWS Direct Connect o AWS Site-to-Site VPN) tra la rete locale e l'ambiente. AWS 
+ Peering Amazon VPC o Cloud AWS WAN per la AWS Transit Gateway connettività di rete Layer 3 tra. VPCs (Questa connettività è necessaria per il traffico delle applicazioni. Non è necessario per il funzionamento della risoluzione DNS. La risoluzione DNS funziona indipendentemente dalla connettività di rete tra.) VPCs
+ Server DNS in esecuzione nell'ambiente locale.

**Limitazioni**
+ Gli endpoint, le regole e i profili di Route 53 Resolver sono costrutti regionali e potrebbero richiedere la replica in più parti per le organizzazioni globali. Regioni AWS 
+ [Per un elenco completo delle quote di servizio per Route 53 Resolver, zone ospitate private e profili, consulta Quotas nella documentazione di Route 53.](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html)

## Architecture
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture"></a>

**Stack tecnologico Target**
+ Endpoint Route 53 in uscita e in entrata
+ Regole di Route 53 Resolver per l'inoltro condizionale
+ AWS Resource Access Manager (AWS RAM)
+ Zona ospitata privata Route 53

**Architettura Target**

**Endpoint in uscita e in entrata**

Il diagramma seguente mostra il flusso di risoluzione DNS da a on-premise. AWS Questa è la configurazione della connettività per le risoluzioni in uscita in cui il dominio è ospitato in locale. Di seguito è riportata una panoramica di alto livello del processo necessario per configurarlo. Per i dettagli, consulta la sezione [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Distribuisci gli endpoint Route 53 Resolver in uscita nel VPC di Shared Services.

1. Crea regole Route 53 Resolver (regole di inoltro) nell'account Shared Services per i domini ospitati in locale.

1. Condividi e associa le regole ad altri account che ospitano le risorse necessarie per risolvere i domini ospitati in locale. VPCs Questa operazione può essere eseguita in diversi modi a seconda del caso d'uso, come descritto più avanti in questa sezione.

![\[Flusso di risoluzione DNS dagli endpoint in entrata e in uscita da un AWS a un flusso di risoluzione DNS locale.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/d69d4cad-5e2c-4481-9370-2708e8a4f8c1.png)


Dopo aver configurato la connettività, i passaggi necessari per la risoluzione in uscita sono i seguenti:

1. L'istanza Amazon Elastic Compute Cloud (Amazon EC2) invia una richiesta di risoluzione DNS `db.onprem.example.com` al Route 53 Resolver del VPC all'indirizzo VPC\$12.

1. Route 53 Resolver controlla le regole del Resolver e inoltra la richiesta al server DNS locale utilizzando l'endpoint in uscita. IPs 

1. L'endpoint in uscita inoltra la richiesta al DNS locale. IPs Il traffico passa attraverso la connettività di rete ibrida stabilita tra il VPC di Shared Services e il data center locale.

1. Il server DNS locale risponde all'endpoint in uscita, che quindi inoltra la risposta al Route 53 Resolver del VPC. Il Resolver restituisce la risposta all'istanza. EC2 

Il diagramma seguente mostra il flusso di risoluzione DNS dall'ambiente locale a. AWS Questa è la configurazione della connettività per le risoluzioni in entrata su cui è ospitato il dominio. AWS Di seguito è riportata una panoramica di alto livello del processo necessario per configurarlo. Per i dettagli, consulta la sezione [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Distribuisci gli endpoint Resolver in ingresso nel VPC di Shared Services.

1. Crea zone private ospitate nell'account Shared Services (approccio centralizzato).

1. Associa le zone ospitate private al VPC di Shared Services. Condividi e associa queste zone a più account VPCs per la risoluzione VPC-to-VPC DNS. Questa operazione può essere eseguita in diversi modi a seconda del caso d'uso, come descritto più avanti in questa sezione.

![\[Endpoint in entrata e in uscita in un flusso di risoluzione DNS locale verso AWS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/a6f5348c-2041-453e-8939-2b4ee0b7ebd8.png)


Dopo aver configurato la connettività, i passaggi necessari per la risoluzione in entrata sono i seguenti:

1. La risorsa locale invia una richiesta di risoluzione DNS `ec2.prod.aws.example.com` al server DNS locale.

1. Il server DNS locale inoltra la richiesta all'endpoint Resolver in ingresso nel VPC di Shared Services tramite la connessione di rete ibrida.

1. L'endpoint Resolver in entrata cerca la richiesta nella zona ospitata privata associata con l'aiuto del Resolver VPC Route 53 e ottiene l'indirizzo IP appropriato.

1. Questi indirizzi IP vengono rispediti al server DNS locale, che restituisce la risposta alla risorsa locale.

Questa configurazione consente alle risorse locali di risolvere i nomi di dominio AWS privati instradando le query attraverso gli endpoint in entrata verso la zona ospitata privata appropriata. In questa architettura, le zone private ospitate sono centralizzate in un VPC di Shared Services, che consente la gestione centralizzata del DNS da parte di un singolo team. Queste zone possono essere associate a molte VPCs per risolvere il caso d'uso della risoluzione VPC-to-VPC DNS. In alternativa, potresti voler delegare la proprietà e la gestione del dominio DNS a ciascuna di esse. Account AWS In tal caso, ogni account gestisce le proprie zone ospitate private e associa ogni zona al VPC centrale di Shared Services per una risoluzione unificata con l'ambiente locale. Questo approccio decentralizzato non rientra nell'ambito di questo modello. Per ulteriori informazioni, consulta [Scalare la gestione DNS su più account e VPCs](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html) nel white paper *Hybrid Cloud DNS Options for Amazon VPC*.

Quando stabilisci i flussi di risoluzione DNS fondamentali utilizzando gli endpoint Resolver, devi determinare come gestire la condivisione e l'associazione delle regole Resolver e delle zone ospitate private tra le tue. Account AWSÈ possibile affrontare questo problema in due modi: tramite la condivisione autogestita utilizzando le regole del Resolver AWS RAM per condividere e le associazioni dirette di zone ospitate private, come dettagliato nella sezione *Configurazione di base*, o tramite i profili Route 53, come discusso nella sezione Configurazione *avanzata*. La scelta dipende dalle preferenze di gestione DNS e dai requisiti operativi dell'organizzazione. I seguenti diagrammi di architettura illustrano un ambiente scalabile che include più account VPCs su diversi account, che rappresenta una tipica implementazione aziendale.

**Configurazione di base**

Nella configurazione di base, l'implementazione per la risoluzione DNS ibrida in un AWS ambiente multi-account utilizza AWS RAM la condivisione delle regole di inoltro di Resolver e delle associazioni di zone ospitate private per gestire le query DNS tra locale e risorse. AWS Questo metodo utilizza endpoint Route 53 Resolver centralizzati in un VPC di Shared Services connesso alla rete locale per gestire in modo efficiente la risoluzione DNS in entrata e in uscita.
+ Per la risoluzione in uscita, le regole di inoltro Resolver vengono create nell'account Shared Services e quindi condivise con altri utenti tramite. Account AWS AWS RAM Questa condivisione è limitata agli account all'interno della stessa regione. Gli account di destinazione possono quindi associare queste regole alle proprie VPCs e abilitare le risorse di tali account VPCs per risolvere i nomi di dominio locali.
+ Per la risoluzione in entrata, le zone ospitate private vengono create nell'account Shared Services e associate al VPC di Shared Services. Queste zone possono quindi essere associate VPCs ad altri account utilizzando l'API Route 53 o AWS Command Line Interface ()AWS CLI. AWS SDKs Le risorse associate VPCs possono quindi risolvere i record DNS definiti nelle zone ospitate private, creando una vista DNS unificata in tutto l'ambiente. AWS 

Il diagramma seguente mostra i flussi di risoluzione DNS in questa configurazione di base.

![\[Utilizzo della configurazione di base per la risoluzione DNS ibrida in un ambiente AWS multi-account.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/258e4bcd-e9c6-43b5-bab8-856ca22206b9.png)


Questa configurazione funziona bene quando lavori con un'infrastruttura DNS su scala limitata. Tuttavia, può diventare difficile da gestire man mano che l'ambiente cresce. Il sovraccarico operativo legato alla gestione VPCs individuale della zona ospitata privata e delle regole del Resolver aumenta notevolmente con la scalabilità. Inoltre, le quote di servizio come il limite di associazione di 300 VPC per zona ospitata privata possono diventare fattori vincolanti nelle implementazioni su larga scala. La configurazione avanzata risolve queste sfide.

**Configurazione avanzata**

I profili Route 53 offrono una soluzione semplificata per la gestione della risoluzione DNS in reti ibride su più reti. Account AWS Invece di gestire le zone private ospitate e le regole Resolver singolarmente, è possibile raggruppare le configurazioni DNS in un unico contenitore che può essere facilmente condiviso e applicato su più VPCs account in una regione. Questa configurazione mantiene l'architettura degli endpoint Resolver centralizzata in un VPC di Shared Services semplificando al contempo in modo significativo la gestione delle configurazioni DNS.

Il diagramma seguente mostra i flussi di risoluzione DNS in una configurazione avanzata.

![\[Utilizzo della configurazione avanzata con Route 53 Profiles per la risoluzione DNS ibrida in un ambiente AWS con più account.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/55b9681d-ddb4-4a55-b4ec-fc9afa9870fa.png)


I profili Route 53 consentono di raggruppare associazioni di zone ospitate private, regole di inoltro Resolver e regole firewall DNS in un'unica unità condivisibile. È possibile creare profili nell'account Shared Services e condividerli con gli account dei membri utilizzando. AWS RAM Quando un profilo viene condiviso e applicato a Target VPCs, tutte le associazioni e le configurazioni necessarie vengono gestite automaticamente dal servizio. Ciò riduce in modo significativo il sovraccarico operativo della gestione DNS e offre un'eccellente scalabilità per ambienti in crescita.

**Automazione e scalabilità**

Utilizza strumenti Infrastructure as Code (IaC) come CloudFormation o Terraform per effettuare il provisioning e gestire automaticamente gli endpoint, le regole, le zone ospitate private e i profili di Route 53 Resolver. Integra la configurazione DNS con pipeline di integrazione continua e distribuzione continua (CI/CD) per coerenza, ripetibilità e aggiornamenti rapidi.

## Tools (Strumenti)
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-tools"></a>

**Servizi AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) consente di condividere in modo sicuro le risorse Account AWS per ridurre il sovraccarico operativo e fornire visibilità e verificabilità.
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)risponde in modo ricorsivo alle richieste DNS provenienti dalle AWS risorse ed è disponibile per impostazione predefinita in tutte. VPCs Puoi creare endpoint Resolver e regole di inoltro condizionale per risolvere i namespace DNS tra il tuo data center locale e il tuo. VPCs
+ La [zona ospitata privata di Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) è un contenitore che contiene informazioni su come desideri che Route 53 risponda alle query DNS per un dominio e i relativi sottodomini.
+ [I profili Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) consentono di applicare e gestire configurazioni Route 53 relative al DNS su molte VPCs e diverse configurazioni Account AWS in modo semplificato.

## Best practice
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-best-practices"></a>

Questa sezione fornisce alcune delle migliori pratiche per ottimizzare Route 53 Resolver. Queste rappresentano un sottoinsieme delle best practice di Route 53. Per un elenco completo, consulta [Best practice per Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html).

**Evita le configurazioni in loop con gli endpoint Resolver**
+ Progetta la tua architettura DNS per prevenire il routing ricorsivo pianificando attentamente le associazioni VPC. Quando un VPC ospita un endpoint in entrata, evita di associarlo a regole Resolver che potrebbero creare riferimenti circolari.
+ Utilizzalo AWS RAM in modo strategico quando condividi le risorse DNS tra account per mantenere percorsi di routing puliti.

Per ulteriori informazioni, consulta [Evita le configurazioni dei loop con gli endpoint Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoints.html) nella documentazione di Route 53.

**Scale gli endpoint di Resolver**
+ Per gli ambienti che richiedono un numero elevato di query al secondo (QPS), tieni presente che esiste un limite di 10.000 QPS per ENI in un endpoint. ENIs È possibile aggiungerne altri a un endpoint per scalare DNS QPS.
+  CloudWatch Forniture `InboundQueryVolume` e `OutboundQueryVolume` parametri di Amazon (consulta la [CloudWatch documentazione](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-resolver-with-cloudwatch.html)). Ti consigliamo di impostare regole di monitoraggio che ti avvisino se la soglia supera un determinato valore (ad esempio, l'80% di 10.000 QPS).
+ Configura regole stateful security group per gli endpoint Resolver per evitare che i limiti di tracciamento delle connessioni causino la limitazione delle query DNS durante il traffico ad alto volume. Per ulteriori informazioni su come funziona il tracciamento delle connessioni nei gruppi di sicurezza di [Amazon, consulta il monitoraggio delle connessioni dei gruppi di EC2 sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) Amazon nella EC2 documentazione di Amazon.

Per ulteriori informazioni, consulta [Resolver Endpoint Scaling](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-scaling.html) nella documentazione di Route 53.

**Fornisci un'elevata disponibilità per gli endpoint Resolver**
+ Crea endpoint in entrata con indirizzi IP in almeno due zone di disponibilità per la ridondanza.
+ Fornisci interfacce di rete aggiuntive per garantire la disponibilità durante la manutenzione o i picchi di traffico.

Per ulteriori informazioni, consulta [Alta disponibilità per gli endpoint Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-high-availability.html) nella documentazione di Route 53.

## Epiche
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics"></a>

### Implementa gli endpoint Route 53 Resolver
<a name="deploy-r53r-endpoints"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa un endpoint in entrata. | Route 53 Resolver utilizza l'endpoint in entrata per ricevere query DNS dai resolver DNS locali. Per istruzioni, consulta [Inoltro](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html) delle query DNS in entrata al tuo nella documentazione di Route 53. VPCs Prendi nota dell'indirizzo IP dell'endpoint in entrata. | Amministratore AWS, amministratore cloud | 
| Implementa un endpoint in uscita. | Route 53 Resolver utilizza l'endpoint in uscita per inviare query DNS ai resolver DNS locali. Per istruzioni, consulta [Inoltro delle query DNS in uscita alla rete nella documentazione](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-outbound-queries.html) di Route 53. Prendi nota dell'ID dell'endpoint di output. | Amministratore AWS, amministratore cloud | 

### Configura e condividi le zone private ospitate su Route 53
<a name="configure-and-share-r53-private-hosted-zones"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una zona ospitata privata per un dominio ospitato su AWS. | Questa zona contiene i record DNS per le risorse in un dominio AWS ospitato (ad esempio,`prod.aws.example.com`) che devono essere risolti dall'ambiente locale. Per istruzioni, consulta [Creazione di una zona ospitata privata nella documentazione](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) di Route 53.Quando crei una zona ospitata privata, devi associare un VPC alla zona ospitata di proprietà dello stesso account. A tale scopo, selezionare il VPC di Shared Services. | Amministratore AWS, amministratore cloud | 
| Configurazione di base: associa la zona ospitata privata VPCs ad altri account. | Se utilizzi la configurazione di base (vedi la sezione [Architettura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):Per consentire alle risorse dell'account membro di VPCs risolvere i record DNS in questa zona ospitata privata, devi VPCs associare la tua alla zona ospitata. È necessario autorizzare l'associazione e quindi crearla a livello di codice. Per istruzioni, consulta [Associare un Amazon VPC e una zona ospitata privata che hai creato con Account AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html) diversi nella documentazione di Route 53. | Amministratore AWS, amministratore cloud | 
| Configurazione avanzata: configura e condividi i profili Route 53. | Se utilizzi una configurazione avanzata (consulta la sezione [Architettura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)A seconda della struttura dell'organizzazione e dei requisiti DNS, potrebbe essere necessario creare e gestire più profili per account o carichi di lavoro diversi. | Amministratore AWS, amministratore cloud | 

### Configura e condividi le regole di inoltro di Route 53 Resolver
<a name="configure-and-share-r53r-forwarding-rules"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una regola di inoltro per un dominio ospitato in locale. | Questa regola indicherà a Route 53 Resolver di inoltrare qualsiasi query DNS per i domini locali (ad esempio) ai resolver DNS locali. `onprem.example.com` Per creare questa regola, sono necessari gli indirizzi IP dei resolver DNS locali e l'ID dell'endpoint in uscita. Per istruzioni, consulta [Creazione di regole di inoltro nella documentazione di Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-creating-rules.html). | Amministratore AWS, amministratore cloud | 
| Configurazione di base: condividi e associa la regola di inoltro VPCs a quella di altri account. | Se utilizzi la configurazione di base:Affinché la regola di inoltro abbia effetto, devi condividerla e associarla VPCs a quella di altri account. Route 53 Resolver prende quindi in considerazione la regola quando risolve un dominio. Per istruzioni, consulta [Condivisione delle regole del Resolver con altri utenti Account AWS e utilizzo di regole condivise e Associazione delle regole](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-sharing.html) [di inoltro a un VPC](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-associating-rules.html) nella documentazione di Route 53. | Amministratore AWS, amministratore cloud | 
| Configurazione avanzata: configura e condividi i profili Route 53. | Se utilizzi una configurazione avanzata:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)A seconda della struttura dell'organizzazione e dei requisiti DNS, potrebbe essere necessario creare e gestire più profili per account o carichi di lavoro diversi. | Amministratore AWS, amministratore cloud | 

### Configura i resolver DNS locali per l'integrazione AWS
<a name="configure-on-premises-dns-resolvers-for-aws-integration"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Configura l'inoltro condizionale nei resolver DNS locali. | Affinché le query DNS vengano inviate AWS dall'ambiente locale per la risoluzione, è necessario configurare l'inoltro condizionale nei resolver DNS locali in modo che puntino all'indirizzo IP dell'endpoint in entrata. Ciò indica ai resolver DNS di inoltrare tutte le query DNS per il dominio ospitato (ad esempio, for) all'indirizzo IP dell'endpoint in entrata per la AWS risoluzione da parte di Route 53 Resolver. `prod.aws.example.com`  | Amministratore di rete | 

### Verifica la risoluzione DNS in un ambiente ibrido end-to-end
<a name="verify-end-to-end-dns-resolution-in-a-hybrid-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Verifica la risoluzione DNS dall' AWS ambiente locale. | Da un'istanza in un VPC a cui è associata la regola di inoltro, esegui una query DNS per un dominio ospitato in locale (ad esempio, per). `db.onprem.example.com` | Amministratore di rete | 
| Verifica la risoluzione DNS dall'ambiente locale a. AWS | Da un server locale, esegui la risoluzione DNS per un dominio AWS ospitato (ad esempio, per). `ec2.prod.aws.example.com` | Amministratore di rete | 

## Risorse correlate
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-resources"></a>
+ [Opzioni DNS cloud ibrido per Amazon VPC (](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/hybrid-cloud-dns-options-for-vpc.html)white paper)AWS 
+ [Utilizzo di zone ospitate private](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (documentazione Route 53)
+ [Guida introduttiva a Route 53 Resolver (documentazione](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) Route 53)
+ [Semplifica la gestione DNS in un ambiente con più account con Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (post sul blog)AWS 
+ [Unifica la gestione DNS utilizzando profili Amazon Route 53 con più VPCs e Account AWS](https://aws.amazon.com/blogs/aws/unify-dns-management-using-amazon-route-53-profiles-with-multiple-vpcs-and-aws-accounts/) (AWS post di blog)
+ [Migrazione del tuo ambiente DNS multi-account ai profili Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/migrating-your-multi-account-dns-environment-to-amazon-route-53-profiles/) (AWS post del blog)
+ [Utilizzo dei profili Amazon Route 53 per AWS ambienti scalabili con più account](https://aws.amazon.com/blogs/networking-and-content-delivery/using-amazon-route-53-profiles-for-scalable-multi-account-aws-environments/) (AWS post sul blog)

 

# Verificare che i sistemi di bilanciamento del carico ELB richiedano la terminazione TLS
<a name="verify-that-elb-load-balancers-require-tls-termination"></a>

*Priyanka Chaudhary, Amazon Web Services*

## Riepilogo
<a name="verify-that-elb-load-balancers-require-tls-termination-summary"></a>

Sul cloud Amazon Web Services (AWS), Elastic Load Balancing (ELB) distribuisce automaticamente il traffico delle applicazioni in entrata su più destinazioni, come istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori, indirizzi IP e funzioni AWS Lambda. I sistemi di bilanciamento del carico utilizzano i listener per definire le porte e i protocolli utilizzati dal sistema di bilanciamento del carico per accettare il traffico dagli utenti. Gli Application Load Balancer prendono decisioni di routing a livello di applicazione e utilizzano i protocolli. HTTP/HTTPS I Classic Load Balancer prendono decisioni di routing a livello di trasporto, utilizzando i protocolli TCP o Secure Sockets Layer (SSL), o a livello di applicazione, utilizzando HTTP/HTTPS.

Questo modello fornisce un controllo di sicurezza che esamina diversi tipi di eventi per Application Load Balancers e Classic Load Balancers. Quando la funzione viene richiamata, AWS Lambda ispeziona l'evento e garantisce che il sistema di bilanciamento del carico sia conforme.

La funzione avvia un evento Amazon CloudWatch Events sulle seguenti chiamate API: [CreateLoadBalancer](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancer.html), [CreateLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerListeners.html), [DeleteLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DeleteLoadBalancerListeners.html), [CreateLoadBalancerPolicy](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerPolicy.html), [SetLoadBalancerPoliciesOfListener](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_SetLoadBalancerPoliciesOfListener.html), [CreateListener[DeleteListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DeleteListener.html)](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateListener.html), e [ModifyListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyListener.html). Quando l'evento rileva uno di questi APIs, chiama AWS Lambda, che esegue uno script Python. Lo script Python valuta se il listener contiene un certificato SSL e se la politica applicata utilizza Transport Layer Security (TLS). Se si determina che la politica SSL è diversa da TLS, la funzione invia una notifica Amazon Simple Notification Service (Amazon SNS) all'utente con le informazioni pertinenti. 

## Prerequisiti e limitazioni
<a name="verify-that-elb-load-balancers-require-tls-termination-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo

**Limitazioni**
+ Questo controllo di sicurezza non verifica la presenza di sistemi di bilanciamento del carico esistenti, a meno che non venga effettuato un aggiornamento dei listener del sistema di bilanciamento del carico.
+ Questo controllo di sicurezza è regionale. Devi distribuirlo in ogni regione AWS che desideri monitorare.

## Architecture
<a name="verify-that-elb-load-balancers-require-tls-termination-architecture"></a>

**Architettura Target**

![\[Garantire che i sistemi di bilanciamento del carico richiedano la terminazione TLS.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/da99cda2-ac34-4791-a2bd-d37264d8d3d9/images/af92b3c8-32bb-45eb-a2a8-d8276fb3e824.png)


**Automazione e scalabilità**
+ Se utilizzi [AWS Organizations](https://aws.amazon.com/organizations/), puoi utilizzare [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) per distribuire questo modello in più account che desideri monitorare.

## Tools (Strumenti)
<a name="verify-that-elb-load-balancers-require-tls-termination-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS ti CloudFormation aiuta a modellare e configurare le tue risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle per tutto il loro ciclo di vita. Puoi utilizzare un modello per descrivere le tue risorse e le loro dipendenze e lanciarle e configurarle insieme come uno stack, invece di gestire le risorse singolarmente.
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html): Amazon CloudWatch Events offre un flusso quasi in tempo reale di eventi di sistema che descrivono i cambiamenti nelle risorse AWS.
+ [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.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) — Amazon Simple Storage Service (Amazon S3) è un servizio di storage di oggetti altamente scalabile che può essere utilizzato per un'ampia gamma di soluzioni di storage, tra cui siti Web, applicazioni mobili, backup e data lake.
+ [Amazon SNS — Amazon Simple](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Notification Service (Amazon SNS) coordina e gestisce la consegna o l'invio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail. I sottoscrittori ricevono tutti gli stessi messaggi pubblicati sugli argomenti ai quali sono hanno effettuato la sottoscrizione.

**Codice**

Questo modello include i seguenti allegati:
+ `ELBRequirestlstermination.zip`— Il codice Lambda per il controllo di sicurezza.
+ `ELBRequirestlstermination.yml`— Il CloudFormation modello che configura l'evento e la funzione Lambda.

## Epiche
<a name="verify-that-elb-load-balancers-require-tls-termination-epics"></a>

### Configura il bucket S3
<a name="set-up-the-s3-bucket"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Definisci il bucket S3. | Sulla [console Amazon S3](https://console.aws.amazon.com/s3/), scegli o crea un bucket S3 per ospitare il file.zip con codice Lambda. Questo bucket S3 deve trovarsi nella stessa regione AWS del sistema di bilanciamento del carico che desideri valutare. Il nome di un bucket S3 è unico a livello globale e lo spazio dei nomi è condiviso da tutti gli account AWS. Il nome del bucket S3 non può includere barre iniziali. | Architetto del cloud | 
| Carica il codice Lambda. | Carica il codice Lambda (`ELBRequirestlstermination.zip`file) fornito nella sezione *Allegati nel bucket* S3. | Architetto del cloud | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia il CloudFormation modello AWS. | Apri la [ CloudFormation console AWS](https://console.aws.amazon.com/cloudformation/) nella stessa regione AWS del bucket S3 e distribuisci il modello allegato. `ELBRequirestlstermination.yml` Per ulteriori informazioni sulla distribuzione di CloudFormation modelli AWS, consulta [Creazione di uno stack sulla CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) nella CloudFormation documentazione. | Architetto del cloud | 
| Completa i parametri nel modello. | Quando avvii il modello, ti verranno richieste le seguenti informazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/verify-that-elb-load-balancers-require-tls-termination.html) | Architetto del cloud | 

### Confermare la sottoscrizione
<a name="confirm-the-subscription"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Confermare la sottoscrizione. | Quando il CloudFormation modello viene distribuito correttamente, invia un'e-mail di iscrizione all'indirizzo e-mail fornito. È necessario confermare questa sottoscrizione e-mail per iniziare a ricevere notifiche di violazione. | Architetto del cloud | 

## Risorse correlate
<a name="verify-that-elb-load-balancers-require-tls-termination-resources"></a>
+ [Creazione di uno stack sulla CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) ( CloudFormation documentazione AWS)
+ [Cos'è AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) (documentazione AWS Lambda)
+ [Cos'è un Classic Load Balancer?](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) (documentazione ELB)
+ [Cos’è un Application Load Balancer?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) (documentazione ELB)

## Allegati
<a name="attachments-da99cda2-ac34-4791-a2bd-d37264d8d3d9"></a>

[Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip](samples/p-attach/da99cda2-ac34-4791-a2bd-d37264d8d3d9/attachments/attachment.zip)

# Visualizza i log e i parametri di AWS Network Firewall utilizzando Splunk
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk"></a>

*Ivo Pinto, Amazon Web Services*

## Riepilogo
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-summary"></a>

Molte organizzazioni utilizzano [Splunk Enterprise](https://www.splunk.com/en_us/products/splunk-enterprise.html) come strumento centralizzato di aggregazione e visualizzazione per log e metriche provenienti da diverse fonti. Questo modello ti aiuta a configurare Splunk per recuperare i log e i parametri di [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) da [ CloudWatch Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) Logs utilizzando il componente aggiuntivo Splunk per AWS. 

A tal fine, crei un ruolo AWS Identity and Access Management (IAM) di sola lettura. Splunk Add-On for AWS utilizza questo ruolo per accedere. CloudWatch Puoi configurare il componente aggiuntivo Splunk per AWS da cui recuperare metriche e log. CloudWatch Infine, crei visualizzazioni in Splunk a partire dai dati e dalle metriche dei log recuperati.

## Prerequisiti e limitazioni
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-prereqs"></a>

**Prerequisiti**
+ [Un account Splunk](https://www.splunk.com/)
+ Un'istanza Splunk Enterprise, versione 8.2.2 o successiva 
+ Un account AWS attivo
+ Network Firewall, [configurato](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html) [e configurato](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) per inviare log a CloudWatch Logs

**Limitazioni**
+ Splunk Enterprise deve essere distribuito come cluster di istanze Amazon Elastic Compute Cloud (Amazon EC2) nel cloud AWS.
+ La raccolta di dati utilizzando un ruolo IAM scoperto automaticamente per Amazon EC2 non è supportata nelle regioni AWS Cina.

## Architecture
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-architecture"></a>

![\[Architettura di registrazione AWS Network Firewall e Splunk\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c6ce254a-841f-4bed-8f9f-b35e99f22e56/images/3dd420e9-70af-4a42-b24d-c54872c55e0b.png)


Il diagramma illustra quanto segue:

1. Network Firewall pubblica i log in Logs. CloudWatch 

1. Splunk Enterprise recupera metriche e log da. CloudWatch

Per compilare metriche e log di esempio in questa architettura, un carico di lavoro genera traffico che attraversa l'endpoint Network Firewall per andare a Internet. [Questo risultato è ottenuto mediante l'uso di tabelle di routing.](https://docs.aws.amazon.com/network-firewall/latest/developerguide/vpc-config.html#vpc-config-route-tables) Sebbene questo modello utilizzi una singola istanza Amazon EC2 come carico di lavoro, può essere applicato a qualsiasi architettura purché Network Firewall sia configurato per inviare log a Logs. CloudWatch 

Questa architettura utilizza anche un'istanza Splunk Enterprise in un altro cloud privato virtuale (VPC). Tuttavia, l'istanza Splunk può trovarsi in un'altra posizione, ad esempio nello stesso VPC del carico di lavoro, purché possa raggiungere il. CloudWatch APIs

## Tools (Strumenti)
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-tools"></a>

**Servizi AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ti aiuta a centralizzare i log di tutti i tuoi sistemi, applicazioni e servizi AWS in modo da poterli monitorare e archiviare in modo sicuro.
+ [Amazon Elastic Compute Cloud (Amazon EC2) Elastic Compute Cloud (Amazon EC2](https://docs.aws.amazon.com/ec2/)) fornisce capacità di calcolo scalabile nel cloud AWS. Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente.
+ [AWS Network Firewall è un firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) di rete a stato gestito e un servizio di rilevamento e prevenzione delle intrusioni VPCs nel cloud AWS.

**Altri strumenti**
+ [Splunk](https://www.splunk.com/) ti aiuta a monitorare, visualizzare e analizzare i dati di registro.

## Epiche
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-epics"></a>

### Creazione di un ruolo IAM
<a name="create-an-iam-role"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Creare la policy IAM. | Segui le istruzioni in [Creazione di policy using the JSON editor](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) per creare la policy IAM che garantisce l'accesso in sola lettura ai dati e alle metriche dei CloudWatch Logs. CloudWatch Incollare la seguente policy nell'editor JSON.<pre>{<br />    "Statement": [<br />        {<br />            "Action": [<br />                "cloudwatch:List*",<br />                "cloudwatch:Get*",<br />                "network-firewall:List*",<br />                "logs:Describe*",<br />                "logs:Get*",<br />                "logs:List*",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:TestMetricFilter",<br />                "logs:FilterLogEvents",<br />                "network-firewall:Describe*"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": "*"<br />        }<br />    ],<br />    "Version": "2012-10-17"<br />}</pre> | Amministratore AWS | 
| Crea un nuovo ruolo IAM. | Segui le istruzioni in [Creazione di un ruolo per delegare le autorizzazioni a un servizio AWS per](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) creare il ruolo IAM a cui il componente aggiuntivo Splunk per AWS utilizza per accedere. CloudWatch Per le **politiche di autorizzazione**, scegli la politica che hai creato in precedenza. | Amministratore AWS | 
| Assegna il ruolo IAM alle istanze EC2 nel cluster Splunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Amministratore AWS | 

### Installa il componente aggiuntivo Splunk per AWS
<a name="install-the-splunk-add-on-for-aws"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa il componente aggiuntivo . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Amministratore Splunk | 
| Configura le credenziali AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Per ulteriori informazioni, consulta [Trova un ruolo IAM all'interno dell'istanza della piattaforma Splunk nella documentazione](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Find_an_IAM_role_within_your_Splunk_platform_instance) Splunk. | Amministratore Splunk | 

### Configura l'accesso Splunk a CloudWatch
<a name="configure-splunk-access-to-cloudwatch"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare il recupero dei log del Network Firewall dai registri. CloudWatch  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Per impostazione predefinita, Splunk recupera i dati di registro ogni 10 minuti. **Questo è un parametro configurabile in Impostazioni avanzate.** Per ulteriori informazioni, consulta [Configurare un input di CloudWatch log utilizzando Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_Logs_input_using_Splunk_Web) nella documentazione di Splunk. | Amministratore Splunk | 
| Configura il recupero delle metriche del Network Firewall da. CloudWatch | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Per impostazione predefinita, Splunk recupera i dati metrici ogni 5 minuti. **Questo è un parametro configurabile in Impostazioni avanzate.** Per ulteriori informazioni, consulta [Configurare un CloudWatch input utilizzando Splunk Web nella documentazione](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_input_using_Splunk_Web) di Splunk. | Amministratore Splunk | 

### Crea visualizzazioni Splunk utilizzando le query
<a name="create-splunk-visualizations-by-using-queries"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Visualizza i principali indirizzi IP di origine. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Amministratore Splunk | 
| Visualizza le statistiche sui pacchetti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Amministratore Splunk | 
| Visualizza le porte di origine più utilizzate. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Amministratore Splunk | 

## Risorse correlate
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-resources"></a>

**Documentazione AWS**
+ [Creazione di un ruolo per delegare le autorizzazioni a un servizio AWS (documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) IAM)
+ [Creazione di politiche IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start) (documentazione IAM)
+ [Registrazione e monitoraggio in AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-monitoring.html) (documentazione Network Firewall)
+ [Configurazioni della tabella di routing per AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/route-tables.html) (documentazione Network Firewall)

**Post sul blog di AWS**
+ [Modelli di implementazione di AWS Network Firewall](https://aws.amazon.com/pt/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/)

**AWS Marketplace**
+ [Splunk Enterprise Amazon Machine Image (AMI)](https://aws.amazon.com/marketplace/pp/prodview-l6oos72bsyaks)

# Altri modelli
<a name="networking-more-patterns-pattern-list"></a>

**Topics**
+ [Accedi a un host bastion utilizzando Session Manager e Amazon EC2 Instance Connect](access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.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 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)
+ [Centralizza la risoluzione DNS utilizzando AWS Managed Microsoft AD e localmente Microsoft Active Directory](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Crea un portale per micro-frontend utilizzando Angular e AWS Amplify Module Federation](create-amplify-micro-frontend-portal.md)
+ [Implementa un'API Amazon API Gateway su un sito Web interno utilizzando endpoint privati e un Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Implementa controlli di accesso basati su attributi investigativi per sottoreti pubbliche utilizzando AWS Config](deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.md)
+ [Implementa controlli di accesso preventivi basati sugli attributi per le sottoreti pubbliche](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Abilita connessioni crittografate per le istanze DB PostgreSQL in Amazon RDS](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [Estendi VRFs ad AWS utilizzando AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.md)
+ [Esegui la migrazione di un carico di lavoro F5 BIG-IP su F5 BIG-IP VE su Cloud AWS](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.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)
+ [Conserva lo spazio IP instradabile nei progetti VPC multi-account per sottoreti non destinate ai carichi di lavoro](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Impedisci l'accesso a Internet a livello di account utilizzando una politica di controllo del servizio](prevent-internet-access-at-the-account-level-by-using-a-service-control-policy.md)
+ [Invia avvisi da AWS Network Firewall a un canale Slack](send-alerts-from-aws-network-firewall-to-a-slack-channel.md)
+ [Distribuisci contenuti statici in un bucket Amazon S3 tramite un VPC utilizzando Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Configura il disaster recovery per Oracle JD Edwards con EnterpriseOne AWS Elastic Disaster Recovery](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [Usa le query BMC Discovery per estrarre i dati di migrazione per la pianificazione della migrazione](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)
+ [Usa Network Firewall per acquisire i nomi di dominio DNS dall'Indicazione del nome del server per il traffico in uscita](use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.md)

# Distribuzione di contenuti
<a name="contentdelivery-pattern-list"></a>

**Topics**
+ [Invia AWS WAF i log a Splunk utilizzando AWS Firewall Manager Amazon Data Firehose](send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.md)
+ [Distribuisci contenuti statici in un bucket Amazon S3 tramite un VPC utilizzando Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Altri modelli](contentdelivery-more-patterns-pattern-list.md)

# Invia AWS WAF i log a Splunk utilizzando AWS Firewall Manager Amazon Data Firehose
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose"></a>

*Michael Friedenthal, Aman Kaur Gandhi e JJ Johnson, Amazon Web Services*

## Riepilogo
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-summary"></a>

Storicamente, esistevano due modi per spostare i dati in Splunk: un'architettura push o una pull. Un'*architettura pull* offre garanzie di consegna dei dati attraverso nuovi tentativi, ma richiede risorse dedicate in Splunk per raccogliere i dati. Le architetture pull di solito non sono in tempo reale a causa del polling. Un'*architettura push* in genere ha una latenza inferiore, è più scalabile e riduce la complessità e i costi operativi. Tuttavia, non garantisce la consegna e in genere richiede agenti.

L'integrazione di Splunk con Amazon Data Firehose fornisce dati di streaming in tempo reale a Splunk tramite un HTTP Event Collector (HEC). Questa integrazione offre i vantaggi delle architetture push e pull: garantisce la consegna dei dati tramite nuovi tentativi, è quasi in tempo reale, è a bassa latenza e bassa complessità. L'HEC invia dati in modo rapido ed efficiente tramite HTTP o HTTPS direttamente a Splunk. HECs sono basati su token, il che elimina la necessità di codificare le credenziali in un'applicazione o nei file di supporto.

In base a una AWS Firewall Manager policy, puoi configurare la registrazione per tutto il traffico ACL AWS WAF Web in tutti i tuoi account e quindi utilizzare un flusso di distribuzione Firehose per inviare i dati di registro a Splunk per il monitoraggio, la visualizzazione e l'analisi. Questa soluzione offre i seguenti vantaggi:
+ Gestione e registrazione centralizzate del traffico ACL AWS WAF Web in tutti gli account
+ Integrazione Splunk con un unico Account AWS
+ Scalabilità
+ Distribuzione quasi in tempo reale dei dati di registro
+ Ottimizzazione dei costi attraverso l'uso di una soluzione serverless, in modo da non dover pagare per le risorse inutilizzate.

## Prerequisiti e limitazioni
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS che fa parte di un'organizzazione in. AWS Organizations
+ È necessario disporre delle seguenti autorizzazioni per abilitare la registrazione con Firehose:
  + `iam:CreateServiceLinkedRole`
  + `firehose:ListDeliveryStreams`
  + `wafv2:PutLoggingConfiguration`
+ AWS WAF e il relativo sito web ACLs deve essere configurato. Per istruzioni, vedi [Guida introduttiva a AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html).
+ AWS Firewall Manager deve essere configurato. Per istruzioni, consulta i [AWS Firewall Manager prerequisiti](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html).
+ Le politiche di sicurezza di Firewall Manager per AWS WAF devono essere configurate. Per istruzioni, vedere [Guida introduttiva alle AWS Firewall ManagerAWS WAF politiche](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html).
+ Splunk deve essere configurato con un endpoint HTTP pubblico raggiungibile da Firehose.

**Limitazioni**
+  Account AWS Devono essere gestiti in un'unica organizzazione in. AWS Organizations
+ L'ACL Web deve trovarsi nella stessa regione del flusso di consegna. Se stai acquisendo log per Amazon CloudFront, crea il flusso di consegna Firehose nella regione Stati Uniti orientali (Virginia settentrionale),. `us-east-1`
+ Il componente aggiuntivo Splunk per Firehose è disponibile per le distribuzioni Splunk Cloud a pagamento, le implementazioni distribuite di Splunk Enterprise e le implementazioni Splunk Enterprise a istanza singola. Questo componente aggiuntivo non è supportato per le distribuzioni di prova gratuite di Splunk Cloud.

## Architecture
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-architecture"></a>

**Stack tecnologico Target**
+ Firewall Manager
+ Firehose
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF
+ Splunk

**Architettura di destinazione**

L'immagine seguente mostra come utilizzare Firewall Manager per registrare centralmente tutti i AWS WAF dati e inviarli a Splunk tramite Firehose.

![\[Diagramma dell'architettura che mostra l'invio di dati di log AWS WAF a Splunk tramite Amazon Data Firehose\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/3dfeaae0-985a-42b8-91c4-ece081f0b51b/images/669169b1-caa4-419b-9988-19806ded54eb.png)


1. Il AWS WAF Web ACLs invia i dati di registro del firewall a Firewall Manager.

1. Firewall Manager invia i dati di registro a Firehose.

1. Il flusso di distribuzione Firehose inoltra i dati di registro a Splunk e a un bucket S3. Il bucket S3 funge da backup in caso di errore nel flusso di distribuzione di Firehose.

**Automazione e scalabilità**

Questa soluzione è progettata per scalare e adattarsi a tutto il AWS WAF Web ALCs all'interno dell'organizzazione. È possibile configurare tutto il Web ACLs per utilizzare la stessa istanza di Firehose. Tuttavia, se desideri configurare e utilizzare più istanze di Firehose, puoi farlo.

## Tools (Strumenti)
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-tools"></a>

**Servizi AWS**
+ [AWS Firewall Manager](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)è un servizio di gestione della sicurezza che consente di configurare e gestire centralmente le regole del firewall tra gli account e le applicazioni in. AWS Organizations
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) ti aiuta a distribuire [dati di streaming](https://aws.amazon.com/streaming-data/) in tempo reale ad altri Servizi AWS endpoint HTTP personalizzati e endpoint HTTP di proprietà di fornitori di servizi terzi supportati, come Splunk.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)è un firewall per applicazioni Web che consente di monitorare le richieste HTTP e HTTPS inoltrate alle risorse protette delle applicazioni Web.

**Altri strumenti**
+ [Splunk](https://docs.splunk.com/Documentation) ti aiuta a monitorare, visualizzare e analizzare i dati di registro.

## Epiche
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-epics"></a>

### Configura Splunk
<a name="configure-splunk"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa l'app Splunk per AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Amministratore della sicurezza, amministratore Splunk | 
| Installa il componente aggiuntivo per. AWS WAF | Ripeti le istruzioni precedenti per installare il **componente aggiuntivo AWS Web Application Firewall per Splunk**. | Amministratore della sicurezza, amministratore Splunk | 
| Installa e configura il componente aggiuntivo Splunk per Firehose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Amministratore della sicurezza, amministratore Splunk | 

### Creare il flusso di distribuzione di Firehose
<a name="create-the-akf-delivery-stream"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Concedi a Firehose l'accesso a una destinazione Splunk. | Configura la politica di accesso che consente a Firehose di accedere a una destinazione Splunk e di eseguire il backup dei dati di registro su un bucket S3. Per ulteriori informazioni, consulta [Concedere a Firehose l'accesso a una destinazione Splunk](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-splunk). | Amministratore della sicurezza | 
| Crea un flusso di distribuzione Firehose. | Nello stesso account ACLs per cui gestisci il Web AWS WAF, crea un flusso di distribuzione in Firehose. Quando crei un flusso di distribuzione, devi avere un ruolo IAM. Firehose assume quel ruolo IAM e ottiene l'accesso al bucket S3 specificato. [Per istruzioni, consulta Creazione di un flusso di distribuzione.](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) Tenere presente quanto segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html)Ripeti questo processo per ogni token configurato nel raccoglitore di eventi HTTP. | Amministratore della sicurezza | 
| Testa il flusso di distribuzione. | Testa il flusso di consegna per verificare che sia configurato correttamente. Per istruzioni, consulta [Test using Splunk come destinazione nella documentazione](https://docs.aws.amazon.com/firehose/latest/dev/test-drive-firehose.html#test-drive-destination-splunk) di Firehose. | Amministratore della sicurezza | 

### Configurare Firewall Manager per registrare i dati
<a name="configure-firewall-manager-to-log-data"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configurare le politiche del Firewall Manager. | Le policy di Firewall Manager devono essere configurate per abilitare la registrazione e inoltrare i log al flusso di distribuzione Firehose corretto. Per ulteriori informazioni e istruzioni, vedere [Configurazione della registrazione](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) per una policy. AWS WAF  | Amministratore della sicurezza | 

## Risorse correlate
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-resources"></a>

**AWS resources**
+ [Registrazione del traffico ACL web (documentazione](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html))AWS WAF 
+ [Configurazione della registrazione per una AWS WAF politica](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) (documentazione)AWS WAF 
+ [Tutorial: invio di log di flusso VPC a Splunk utilizzando Amazon Data Firehose (documentazione Firehose](https://docs.aws.amazon.com/firehose/latest/dev/vpc-splunk-tutorial.html))
+ [In che modo posso inviare i log di flusso VPC a Splunk utilizzando Amazon Data Firehose?](https://aws.amazon.com/premiumsupport/knowledge-center/push-flow-logs-splunk-firehose/) (Centro di conoscenza)AWS 
+ [Potenzia l'inserimento dei dati in Splunk utilizzando Amazon Data Firehose](https://aws.amazon.com/blogs/big-data/power-data-ingestion-into-splunk-using-amazon-kinesis-data-firehose/) (post sul blog)AWS 

**Documentazione Splunk**
+ [Componente aggiuntivo Splunk per Amazon Data Firehose](https://docs.splunk.com/Documentation/AddOns/released/Firehose/About)

# Distribuisci contenuti statici in un bucket Amazon S3 tramite un VPC utilizzando Amazon CloudFront
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront"></a>

*Ángel Emmanuel Hernández Cebrian, Amazon Web Services*

## Riepilogo
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-summary"></a>

Quando offri contenuti statici ospitati su Amazon Web Services (AWS), l'approccio consigliato consiste nell'utilizzare un bucket Amazon Simple Storage Service (S3) come origine e utilizzare Amazon CloudFront per distribuire il contenuto. Questa soluzione offre due vantaggi principali: la comodità di memorizzare nella cache i contenuti statici nelle postazioni periferiche e la possibilità di definire [liste di controllo degli accessi Web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) (web ACLs) per la CloudFront distribuzione, che aiutano a proteggere le richieste ai contenuti con una configurazione e un sovraccarico amministrativo minimi.

Tuttavia, esiste una limitazione architetturale comune all'approccio standard consigliato. In alcuni ambienti, si desidera che le appliance firewall virtuali siano distribuite in un cloud privato virtuale (VPC) per ispezionare tutti i contenuti, inclusi i contenuti statici. L'approccio standard non indirizza il traffico attraverso il VPC per l'ispezione. Questo modello fornisce una soluzione architettonica alternativa. Continui a utilizzare una CloudFront distribuzione per fornire contenuti statici in un bucket S3, ma il traffico viene instradato attraverso il VPC utilizzando un Application Load Balancer. Una funzione AWS Lambda recupera e restituisce quindi il contenuto dal bucket S3.

## Prerequisiti e limitazioni
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Contenuto statico del sito Web ospitato in un bucket S3.

**Limitazioni**
+ Le risorse in questo modello devono trovarsi in una singola regione AWS, ma possono essere fornite in diversi account AWS.
+ I limiti si applicano alla dimensione massima di richiesta e risposta che la funzione Lambda può ricevere e inviare, rispettivamente. Per ulteriori informazioni, consulta *Limiti* nelle [funzioni Lambda come destinazioni](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentazione Elastic Load Balancing).
+ È importante trovare un buon equilibrio tra prestazioni, scalabilità, sicurezza ed economicità quando si utilizza questo approccio. Nonostante l'elevata scalabilità di Lambda, se il numero di chiamate Lambda simultanee supera la quota massima, alcune richieste vengono limitate. Per ulteriori informazioni, consulta Quote Lambda (documentazione Lambda). È inoltre necessario considerare i prezzi quando si utilizza Lambda. Per ridurre al minimo le chiamate Lambda, assicurati di definire correttamente la cache per la distribuzione. CloudFront Per ulteriori informazioni, consulta [Ottimizzazione della memorizzazione nella cache e](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) della disponibilità (documentazione). CloudFront 

## Architecture
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-architecture"></a>

**Stack tecnologico Target**
+ CloudFront
+ Amazon Virtual Private Cloud (Amazon VPC) (Amazon VPC)
+ Application Load Balancer
+ Lambda
+ Simple Storage Service (Amazon S3)

**Architettura di destinazione**

L'immagine seguente mostra l'architettura consigliata quando è necessario utilizzare CloudFront per servire contenuti statici da un bucket S3 tramite un VPC.

![\[Flusso di traffico attraverso gli Application Load Balancer nel VPC verso la funzione Lambda.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e0dd6928-4fe0-47ab-954f-9de5563349d8/images/b42c7dd9-4a72-4998-bf88-195c8f90ed3e.png)


1. Il client richiede l'URL di CloudFront distribuzione per inserire un particolare file del sito Web nel bucket S3.

1. CloudFront invia la richiesta ad AWS WAF. AWS WAF filtra la richiesta utilizzando il Web ACLs applicato alla CloudFront distribuzione. Se la richiesta viene ritenuta valida, il flusso continua. Se la richiesta viene ritenuta non valida, il client riceve un errore 403.

1. CloudFront controlla la sua cache interna. Se esiste una chiave valida corrispondente alla richiesta in entrata, il valore associato viene rispedito al client come risposta. In caso contrario, il flusso continua.

1. CloudFront inoltra la richiesta all'URL dell'Application Load Balancer specificato.

1. L'Application Load Balancer ha un listener associato a un gruppo target basato su una funzione Lambda. L'Application Load Balancer richiama la funzione Lambda.

1. La funzione Lambda si connette al bucket S3, esegue un'`GetObject`operazione su di esso e restituisce il contenuto come risposta.

**Automazione e scalabilità**

Per automatizzare la distribuzione di contenuti statici utilizzando questo approccio, crea CI/CD pipeline per aggiornare i bucket Amazon S3 che ospitano i siti Web.

La funzione Lambda si ridimensiona automaticamente per gestire le richieste concorrenti, entro le quote e le limitazioni del servizio. Per ulteriori informazioni, consulta [Scalabilità delle funzioni Lambda e](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) [quote Lambda (documentazione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)). Per gli altri servizi e funzionalità AWS, come CloudFront Application Load Balancer, AWS li ridimensiona automaticamente.

## Tools (Strumenti)
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-tools"></a>
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accelera la distribuzione dei tuoi contenuti web distribuendoli attraverso una rete mondiale di data center, che riduce la latenza e migliora le prestazioni.
+ [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. In questo modello, si utilizza un [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) fornito tramite Elastic Load Balancing per indirizzare il traffico verso la funzione Lambda.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS.

## Epiche
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-epics"></a>

### Utilizzalo CloudFront per servire contenuti statici da Amazon S3 tramite un VPC
<a name="use-cloudfront-to-serve-static-content-from-amazon-s3-through-a-vpc"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un VPC. | Crea un VPC per ospitare le risorse distribuite in questo modello, come l'Application Load Balancer e la funzione Lambda.  Per istruzioni, consulta [Creare un VPC (documentazione](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) Amazon VPC). | Architetto del cloud | 
| Crea un ACL web AWS WAF. | Crea un ACL web AWS WAF. Più avanti in questo schema, applicherai questo ACL web alla distribuzione. CloudFront Per istruzioni, consulta [Creazione di un ACL web (documentazione](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html) AWS WAF). | Architetto del cloud | 
| Creazione della funzione Lambda | Crea la funzione Lambda che serve il contenuto statico ospitato nel bucket S3 come sito Web. Utilizza il codice fornito nella sezione [Informazioni aggiuntive](#serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional) di questo modello. Personalizza il codice per identificare il bucket S3 di destinazione. | Informazioni generali su AWS | 
| Carica la funzione Lambda. | Immettete il seguente comando per caricare il codice della funzione Lambda in un archivio di file.zip in Lambda.<pre>aws lambda update-function-code \<br />--function-name  \ <br />--zip-file fileb://lambda-alb-s3-website.zip</pre> | Informazioni generali su AWS | 
| Crea un Application Load Balancer. | Crea un Application Load Balancer con accesso a Internet che punti alla funzione Lambda. Per istruzioni, consulta [Creare un gruppo target per la funzione Lambda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#register-lambda-function) (documentazione Elastic Load Balancing). Per una configurazione ad alta disponibilità, crea l'Application Load Balancer e collegalo a sottoreti private in diverse zone di disponibilità. | Architetto del cloud | 
| Crea una CloudFront distribuzione. | Crea una CloudFront distribuzione che punti all'Application Load Balancer che hai creato.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.html) | Architetto del cloud | 

## Risorse correlate
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-resources"></a>

**Documentazione AWS**
+ [Ottimizzazione della memorizzazione nella cache e della disponibilità (documentazione](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)) CloudFront 
+ [Lambda funge da obiettivi (documentazione](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) Elastic Load Balancing)
+ [Quote Lambda (documentazione](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) Lambda)

**Siti Web di servizi AWS**
+ [Application Load Balancer](https://aws.amazon.com/es/elasticloadbalancing/application-load-balancer/)
+ [Lambda](https://aws.amazon.com/en/lambda/)
+ [CloudFront](https://aws.amazon.com/en/cloudfront/)
+ [Amazon S3](https://aws.amazon.com/en/s3/)
+ [AWS WAF](https://aws.amazon.com/en/waf/)
+ [Amazon VPC](https://aws.amazon.com/en/vpc/)

## Informazioni aggiuntive
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional"></a>

**Codice**

Il seguente esempio di funzione Lambda è scritto in Node.js. Questa funzione Lambda funge da server Web che esegue un'`GetObject`operazione su un bucket S3 che contiene le risorse del sito Web. 

```
/**

 * This is an AWS Lambda function created for demonstration purposes.

 * It retrieves static assets from a defined Amazon S3 bucket.

 * To make the content available through a URL, use an Application Load Balancer with a Lambda integration.
 * 
 * Set the S3_BUCKET environment variable in the Lambda function definition.
 */

var AWS = require('aws-sdk');

exports.handler = function(event, context, callback) {

    var bucket = process.env.S3_BUCKET;    
    var key = event.path.replace('/', '');
    
    if (key == '') {
        key = 'index.html';
    }

    // Fetch from S3
    var s3 = new AWS.S3();
    return s3.getObject({Bucket: bucket, Key: key},
       function(err, data) {

            if (err) {
                return err;
            }

            var isBase64Encoded = false;
            var encoding = 'utf8';
            
            if (data.ContentType.indexOf('image/') > -1) {
                isBase64Encoded = true;
                encoding = 'base64'
            }
    
            var resp = {
                statusCode: 200,
                headers: {
                    'Content-Type': data.ContentType,
                },
                body: new Buffer(data.Body).toString(encoding),
                isBase64Encoded: isBase64Encoded
            };

            callback(null, resp);
        }
    );
};
```

# Altri modelli
<a name="contentdelivery-more-patterns-pattern-list"></a>

**Topics**
+ [Controlla una CloudFront distribuzione Amazon per la registrazione degli accessi, la versione HTTPS e TLS](check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.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)
+ [Implementa controlli di accesso preventivi basati sugli attributi per le sottoreti pubbliche](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Distribuisci risorse in una AWS Wavelength zona utilizzando Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Implementa le automazioni di sicurezza per la AWS WAF soluzione utilizzando Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Configura un router cellulare serverless per un'architettura basata su celle](serverless-cell-router-architecture.md)
+ [Usa Amazon Q Developer come assistente di programmazione per aumentare la tua produttività](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [Visualizza i log e i parametri di AWS Network Firewall utilizzando Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)