

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

# AL2 su Amazon EC2
<a name="ec2"></a>

**Nota**  
 AL2 non è più la versione corrente di Amazon Linux. AL2023 è il successore di. AL2 Per ulteriori informazioni, vedere [Confronto AL2 AL2023 e](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html) l'elenco delle [modifiche al Package AL2023 nella](https://docs.aws.amazon.com/linux/al2023/release-notes/compare-packages.html) [Guida per l'AL2023 utente](https://docs.aws.amazon.com/linux/al2023/ug/). 

 

**Topics**
+ [Avvia un'istanza Amazon EC2 con AMI AL2](#launch-ec2-instance)
+ [Trova l' AL2 AMI più recente utilizzando Systems Manager](#find-latest-al2-using-systems-manager)
+ [Connect a un'istanza Amazon EC2](#connect-to-amazon-linux-limits-ec2)
+ [AL2 modalità di avvio AMI](#default-boot-mode-al2)
+ [Archivio dei pacchetti](#package-repository)
+ [Utilizzo di cloud-init su AL2](amazon-linux-cloud-init.md)
+ [Configura le istanze AL2](configure-ec2-instance.md)
+ [Kernel forniti dall'utente](UserProvidedKernels.md)
+ [AL2 Notifiche di rilascio AMI](linux-ami-notifications.md)
+ [Configura la connessione desktop MATE AL2](amazon-linux-ami-mate.md)
+ [AL2 Tutorial](al2-tutorials.md)

## Avvia un'istanza Amazon EC2 con AMI AL2
<a name="launch-ec2-instance"></a>

Puoi avviare un'istanza Amazon EC2 con l'AMI AL2 . Per ulteriori informazioni, consulta [Fase 1: Avvio di un'istanza](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance).

## Trova l' AL2 AMI più recente utilizzando Systems Manager
<a name="find-latest-al2-using-systems-manager"></a>

Amazon EC2 fornisce parametri AWS Systems Manager pubblici per il pubblico AMIs gestiti da AWS cui è possibile utilizzare all'avvio delle istanze. Ad esempio, il parametro fornito da EC2 `/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-default-hvm-x86_64-gp2` è disponibile in tutte le regioni e punta sempre alla versione più recente dell' AL2 AMI in una determinata regione.

Per trovare l' AL2023 AMI più recente utilizzata AWS Systems Manager, consulta la [Guida introduttiva AL2023](https://docs.aws.amazon.com/linux/al2023/ug/get-started.html).

I parametri pubblici dell'AMI Amazon EC2 sono disponibili nel percorso seguente:

`/aws/service/ami-amazon-linux-latest`

Puoi visualizzare un elenco di tutti gli Amazon Linux AMIs nella AWS regione corrente eseguendo il AWS CLI comando seguente.

```
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest --query "Parameters[].Name"
```

**Per avviare un’istanza mediante un parametro pubblico**  
L'esempio seguente utilizza il parametro pubblico fornito da EC2 per avviare un'`m5.xlarge`istanza utilizzando l'AMI AL2 più recente.

Per specificare il parametro nel comando, utilizzare la sintassi seguente: `resolve:ssm:public-parameter`, dove `resolve:ssm` è il prefisso standard e `public-parameter` è il percorso e il nome del parametro pubblico.

In questo esempio, i parametri `--count` e `--security-group` non sono inclusi. Per `--count`, il valore predefinito è 1. Se disponibili, un VPC predefinito e un gruppo di sicurezza predefinito vengono utilizzati.

```
aws ec2 run-instances 
    --image-id resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-default-hvm-x86_64-gp2 
    --instance-type m5.xlarge 
    --key-name MyKeyPair
```

Per ulteriori informazioni, consulta [Using public parameters nella Guida](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html) per l'*AWS Systems Manager utente*.

**Comprendere i nomi AMI di Amazon Linux 2**  
I nomi AMI di Amazon Linux 2 utilizzano il seguente schema di denominazione:

`amzn2-ami-[minimal-][kernel-{5.10,default,4.14}]-hvm-{x86_64,aarch64}-{ebs,gp2}`
+ **Minimal** AMIs viene fornito con un set ridotto al minimo di pacchetti preinstallati per ridurre le dimensioni dell'immagine.
+ **Kernel-version** determina la versione del kernel preinstallata sulla rispettiva AMI:
  + `kernel-5.10`seleziona la versione 5.10 del kernel Linux. *Questa è la versione del kernel consigliata per. AL2*
  + `kernel-default`seleziona il kernel predefinito consigliato per. AL2 È un alias per kernel-5.10.
  + `kernel-4.14`seleziona la versione 4.14 del kernel Linux. *Viene fornito solo per la compatibilità con le versioni AMI precedenti. Non utilizzare questa versione per il lancio di nuove istanze. Aspettatevi che questo AMI non sia più supportato.*
  + Esiste un set speciale di nomi AMI senza riferimento a un kernel specifico. Si AMIs tratta di un alias per kernel-4.14. *Questi AMIs sono forniti solo per la compatibilità con le versioni AMI precedenti. Non utilizzare questo nome AMI per il lancio di nuove istanze. Aspettatevi che il kernel li AMIs aggiorni.*
+ **x86\$164/aarch64** determina la piattaforma CPU su cui eseguire l'AMI. Seleziona x86\$164 per le istanze EC2 basate su Intel e AMD. Seleziona aarch64 per le istanze Graviton EC2.
+ **ebs/gp2** determina il tipo di volume EBS utilizzato per servire il rispettivo AMI. Vedi Tipi di volume [EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html) per riferimento. *Seleziona sempre gp2.*

## Connect a un'istanza Amazon EC2
<a name="connect-to-amazon-linux-limits-ec2"></a>

Esistono diversi modi per connettersi alla tua istanza Amazon Linux, tra cui SSH ed EC2 Instance Connect. AWS Systems Manager Session Manager Per ulteriori informazioni, consulta [Connect to your Linux istance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) nella *Amazon EC2 User* Guide.

**Utenti SSH e **sudo****  
Amazon Linux non consente la shell `root` sicura remota (SSH) per impostazione predefinita. Inoltre, l'autenticazione tramite password è disabilitata per prevenire attacchi di forza bruta. Per abilitare i login SSH a un'istanza Amazon Linux, devi fornire la coppia di chiavi all'istanza all'avvio. Per consentire l'accesso SSH, devi anche impostare il gruppo di sicurezza utilizzato per avviare l'istanza. Per impostazione predefinita, l'unico account che può accedere in remoto tramite SSH è. `ec2-user` Anche questo account dispone **sudo** di privilegi. Se abiliti l'`root`accesso remoto, tieni presente che è meno sicuro che affidarsi a coppie di chiavi e a un utente secondario.

## AL2 modalità di avvio AMI
<a name="default-boot-mode-al2"></a>

AL2 AMIs non hanno un set di parametri per la modalità di avvio. Le istanze avviate da AL2 AMIs seguono il valore della modalità di avvio predefinito del tipo di istanza. Per ulteriori informazioni, consulta le [modalità di avvio](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html) nella Guida per l'*utente di Amazon EC2*.

## Archivio dei pacchetti
<a name="package-repository"></a>

Queste informazioni si applicano a. AL2 Per informazioni su AL2023, consulta [Gestire pacchetti e aggiornamenti del sistema operativo AL2023 nella](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guida per l'utente di Amazon Linux 2023*. 

AL2 e AL1 sono progettati per essere utilizzati con repository di pacchetti online ospitati in ogni regione Amazon EC2. AWS Gli archivi sono disponibili in tutte le regioni ed è possibile accedervi tramite gli strumenti di aggiornamento **yum**. L'hosting degli archivi in ogni regione consente di distribuire gli aggiornamenti rapidamente e senza costi di trasferimento dei dati.

**Importante**  
L'ultima versione di AL1 ha raggiunto l'EOL il 31 dicembre 2023 e non riceverà aggiornamenti di sicurezza o correzioni di bug a partire dal 1° gennaio 2024. Per ulteriori informazioni, consulta [AMI Amazon Linux end-of-life](https://aws.amazon.com//blogs/aws/update-on-amazon-linux-ami-end-of-life/).

Se non hai bisogno di conservare dati o personalizzazioni per le tue istanze, puoi avviare nuove istanze utilizzando l'AMI corrente. AL2 Se hai bisogno di conservare dati o personalizzazioni per le tue istanze, puoi gestire tali istanze tramite gli archivi di pacchetti Amazon Linux. Questi archivi contengono tutti i pacchetti aggiornati. Puoi scegliere di applicare questi aggiornamenti alle istanze in esecuzione. Le versioni precedenti dell'AMI e dei pacchetti di aggiornamento continuano a essere disponibili per l'uso, anche se vengono rilasciate nuove versioni.

**Nota**  
Per aggiornare e installare pacchetti senza accesso a Internet su un'istanza Amazon EC2, vedi [Come posso aggiornare yum o installare pacchetti senza accesso a Internet sulle mie istanze Amazon EC2](https://repost.aws/knowledge-center/ec2-al1-al2-update-yum-without-internet) in esecuzione, oppure? AL1 AL2 AL2023

Per installare i pacchetti, utilizza il comando seguente:

```
[ec2-user ~]$ sudo yum install package
```

Se riscontri che Amazon Linux non include un'applicazione necessaria, installa l'applicazione direttamente nell'istanza Amazon Linux. Amazon Linux utilizza RPMs e yum per la gestione dei pacchetti e questo è probabilmente il modo più diretto per installare nuove applicazioni. Ti consigliamo come prima cosa di controllare se un'applicazione è disponibile nel nostro archivio Amazon Linux centrale perché numerose applicazioni vengono rese disponibili in tale posizione. Da lì, puoi aggiungere queste applicazioni alla tua istanza Amazon Linux.

Per caricare le applicazioni in un'istanza Amazon Linux in esecuzione, utilizzare **scp** o **sftp** e quindi configurare l'applicazione accedendo all'istanza. Le applicazioni possono essere caricate anche durante l'avvio dell'istanza tramite l'operazione **PACKAGE\$1SETUP** dal pacchetto cloud-init predefinito. Per ulteriori informazioni, consulta [Utilizzo di cloud-init su AL2](amazon-linux-cloud-init.md). 

### Aggiornamenti di sicurezza
<a name="security-updates"></a>

Gli aggiornamenti di sicurezza vengono forniti utilizzando gli archivi dei pacchetti. Sia gli aggiornamenti di sicurezza che gli avvisi di sicurezza AMI aggiornati sono pubblicati in [Amazon Linux Security Center](https://alas.aws.amazon.com). Per ulteriori informazioni sulle policy di sicurezza AWS o per segnalare un problema di sicurezza, consulta [Sicurezza di AWS Cloud](https://aws.amazon.com/security/).

AL1 e AL2 sono configurati per scaricare e installare aggiornamenti di sicurezza critici o importanti al momento del lancio. Gli aggiornamenti del kernel non sono inclusi in questa configurazione.

Nel AL2023, questa configurazione è cambiata rispetto a AL1 e AL2. Per ulteriori informazioni sugli aggiornamenti di sicurezza per AL2023, consulta [Aggiornamenti e funzionalità di sicurezza](https://docs.aws.amazon.com/linux/al2023/ug/security-features.html) nella *Guida per l'utente di Amazon Linux 2023*.

Consigliamo di eseguire gli aggiornamenti necessari in base alle proprie esigenze dopo l'avvio. Ad esempio, potresti voler applicare tutti gli aggiornamenti (non solo gli aggiornamenti di sicurezza) al momento del lancio oppure valutare ogni aggiornamento e applicare solo quelli applicabili al tuo sistema. Questa impostazione viene controllata tramite la seguente cloud-init impostazione: `repo_upgrade` Il seguente frammento di codice della configurazione cloud-init illustra come puoi modificare le impostazioni nel testo dei dati utente che passi all'inizializzazione dell'istanza:

```
#cloud-config
repo_upgrade: security
```

 I valori possibili di `repo_upgrade` sono indicati di seguito: 

`critical`  
Applica gli aggiornamenti di sicurezza critici in sospeso.

`important`  
Applica gli aggiornamenti di sicurezza critici e importanti in sospeso.

`medium`  
Applica gli aggiornamenti di sicurezza critici, importanti e di media gravità in sospeso.

`low`  
Applica tutti gli aggiornamenti di sicurezza in sospeso, inclusi gli aggiornamenti di sicurezza di bassa gravità.

`security`  
Applica gli aggiornamenti in evidenza o aggiornati contrassegnati da Amazon come aggiornamenti della sicurezza.

`bugfix`  
Applica gli aggiornamenti contrassegnati da Amazon come correzioni di bug. Le correzioni di bug sono set più grandi di aggiornamenti, contenenti aggiornamenti della sicurezza e correzioni di numerosi altri bug secondari.

`all`  
Applica tutti gli aggiornamenti disponibili applicabili, indipendentemente dalla relativa classificazione.

`none`  
Non applica alcun aggiornamento all'istanza all'avvio.

**Nota**  
Amazon Linux non contrassegna alcun aggiornamento come`bugfix`. Per applicare aggiornamenti non relativi alla sicurezza da Amazon Linux, usa`repo_upgrade: all`.

L'impostazione di default per `repo_upgrade` è security. Ciò significa che se non specifichi un valore diverso nei dati utente, per impostazione predefinita Amazon Linux esegue l'aggiornamento della sicurezza all'avvio per qualsiasi pacchetto attualmente installato. Amazon Linux ti notifica anche di eventuali aggiornamenti ai pacchetti installati elencando il numero di aggiornamenti disponibili al momento dell'accesso utilizzando il file `/etc/motd`. Per installare questi aggiornamenti, è necessario eseguire **sudo yum upgrade** sull'istanza. 

### Configurazione dell'archivio
<a name="repository-config"></a>

For AL1 and AL2, AMIs sono un'istantanea dei pacchetti disponibili al momento della creazione dell'AMI, ad eccezione degli aggiornamenti di sicurezza. Tutti i pacchetti non presenti nell'AMI originale, ma installati in fase di esecuzione, saranno la versione più recente disponibile. Per ottenere i pacchetti più recenti disponibili per AL2, esegui**yum update -y**.

**Suggerimento per la risoluzione dei problemi:**  
Se si `cannot allocate memory` verifica un errore durante l'esecuzione **yum update** su tipi di istanze nano, ad esempio`t3.nano`, potrebbe essere necessario allocare lo spazio di swap per abilitare l'aggiornamento.

Infatti AL2023, la configurazione del repository è cambiata rispetto a e. AL1 AL2 Per ulteriori informazioni sul AL2023 repository, vedere [Gestione dei pacchetti e degli aggiornamenti del sistema operativo](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html).

Le versioni precedenti AL2023 erano configurate per fornire un flusso continuo di aggiornamenti da passare da una versione secondaria di Amazon Linux alla versione successiva, denominate anche *release periodiche*. Come best practice, ti consigliamo di aggiornare l'AMI all'ultima AMI disponibile anziché lanciare vecchi AMIs e applicare gli aggiornamenti.

Gli aggiornamenti sul posto non sono supportati tra le principali versioni di Amazon Linux, ad esempio from AL1 to AL2 o from AL2 to. AL2023 Per ulteriori informazioni, consulta [Disponibilità Amazon Linux](what-is-amazon-linux.md#amazon-linux-availability).

# Utilizzo di cloud-init su AL2
<a name="amazon-linux-cloud-init"></a>

Il pacchetto cloud-init è un'applicazione open source sviluppata da Canonical, che viene utilizzata per il bootstrap delle le immagini Linux in un ambiente di cloud computing, ad esempio Amazon EC2. Amazon Linux include una versione personalizzata di cloud-init. Ciò consente di specificare le azioni da eseguire sull'istanza al momento dell'avvio. Puoi passare le operazioni desiderate al pacchetto cloud-init tramite i campi di dati utente all'avvio di un'istanza. Ciò significa che puoi utilizzare Common AMIs per molti casi d'uso e configurarli dinamicamente all'avvio. Amazon Linux utilizza inoltre cloud-init per eseguire la configurazione iniziale dell'account ec2-user.

 Per ulteriori informazioni, consulta la [documentazione cloud-init](http://cloudinit.readthedocs.org/en/latest/). 

Amazon Linux utilizza le operazioni del pacchetto cloud-init disponibili in `/etc/cloud/cloud.cfg.d` e `/etc/cloud/cloud.cfg`. Puoi creare file di operazioni cloud-init personalizzati in `/etc/cloud/cloud.cfg.d`. Tutti i file presenti in questa directory vengono letti da cloud-init. Vengono letti in ordine alfabetico e i file più recenti sovrascrivono i valori dei file meno recenti.

Il pacchetto cloud-init esegue le seguenti attività di configurazione comuni e molte altre in fase di avvio:
+ Impostare la lingua locale di default.
+ Impostare il nome host.
+ Analizzare e gestire i dati utente.
+ Generare chiavi SSH private host.
+ Aggiungere le chiavi SSH pubbliche di un utente a `.ssh/authorized_keys` per semplificare le procedure di login e amministrazione.
+ Preparare gli archivi per la gestione dei pacchetti.
+ Gestire le operazioni dei pacchetti definite nei dati utente.
+ Esegui gli script utente presenti nei dati utente.
+ Montare i volumi di instance store, se applicabile.
  + Per impostazione di default, il volume di instance store `ephemeral0` viene montato in `/media/ephemeral0`, se presente, e include un file system valido. In caso contrario, non viene montato.
  + Per impostazione di default, vengono montati i volumi di swap associati all'istanza (solo per i tipi di istanza `m1.small` e `c1.medium`).
  + Puoi sostituire il montaggio del volume di instance store di default con la seguente direttiva cloud-init:

    ```
    #cloud-config
    mounts:
    - [ ephemeral0 ]
    ```

    Per un maggiore controllo sui montaggi, consulta la sezione relativa al modulo [Mounts](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#mounts) nella documentazione di cloud-init.
  + I volumi di instance store che supportano TRIM non vengono formattati quando viene avviata un'istanza. Pertanto, devi eseguire la partizione e la formattazione di tali volumi prima di poterli montare. Per ulteriori informazioni, consulta [Instance Store Volume TRIM Support](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport). Puoi utilizzare il modulo `disk_setup` per eseguire la partizione e la formattazione dei volumi di instance store all'avvio. Per ulteriori informazioni, consulta la sezione relativa al modulo [Disk Setup](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#disk-setup) nella documentazione di cloud-init.

## Formati di dati utente supportati
<a name="supported-user-data-formats"></a>

Il pacchetto cloud-init supporta la gestione dei dati utente in una varietà di formati:
+ Gzip
  + Se i dati utente sono compressi con gzip, cloud-init li decomprime e li gestisce in modo appropriato.
+ MIME multipart
  + L'utilizzo di un file in formato MIME multipart ti consente di specificare più di un tipo di dati. Ad esempio, puoi specificare sia uno script di dati utente che un tipo di configurazione cloud. Ogni parte di un file in formato multipart può essere gestita da cloud-init se è uno dei formati supportati.
+ Decodifica Base64
  +  Se i dati utente sono codificati in base 64, cloud-init determina se è in grado di comprendere i dati decodificati come uno dei tipi supportati. Se è in grado di interpretare i dati decodificati, decodificherà i dati e li gestirà in modo appropriato. In caso contrario, restituirà i dati Base64 invariati.
+ Script di dati utente
  + Inizia per `#!` o `Content-Type: text/x-shellscript`.
  + Lo script viene eseguito da `/etc/init.d/cloud-init-user-scripts` durante il primo ciclo di avvio. Ciò si verifica in una fase avanzata del processo di avvio, ovvero dopo l'esecuzione delle operazioni di configurazione iniziale.
+ File di inclusione
  + Inizia per `#include` o `Content-Type: text/x-include-url`.
  + Questo contenuto è un file di inclusione. Il file contiene un elenco di, uno per riga. URLs Ciascuno di essi URLs viene letto e il relativo contenuto viene passato attraverso lo stesso insieme di regole. Il contenuto letto dall'URL può essere compresso con gzip o in testo MIME-multi-part semplice.
+ Dati di configurazione del cloud
  + Inizia per `#cloud-config` o `Content-Type: text/cloud-config`.
  + Questo contenuto è costituito da dati di configurazione cloud.
+ Upstart job (non supportato su) AL2
  + Inizia per `#upstart-job` o `Content-Type: text/upstart-job`.
  + Questo contenuto è archiviato in un file in `/etc/init` e upstart lo utilizza come fa con altri lavori upstart.
+ Cloud Boothook
  + Inizia per `#cloud-boothook` o `Content-Type: text/cloud-boothook`.
  + Questo contenuto fa riferimento ai dati boothook. Viene memorizzato in un file in `/var/lib/cloud` e quindi eseguito immediatamente.
  +  Si tratta dell'*hook* meno recente disponibile. Non è disponibile alcun meccanismo per eseguirlo solo una volta. Il boothook deve gestire questa situazione in autonomia. Viene fornito con l'ID istanza nella variabile di ambiente `INSTANCE_ID`. Usa questa variabile per fornire un once-per-instance set di dati boothook.

# Configura le istanze AL2
<a name="configure-ec2-instance"></a>

Dopo aver avviato e effettuato correttamente l'accesso all' AL2 istanza, è possibile apportare modifiche all'istanza. Sono disponibili numerosi modi con cui puoi configurare un'istanza in base alle specifiche esigenze di un'applicazione. Di seguito sono riportate alcune attività comuni per iniziare a utilizzare le istanze.

**Topics**
+ [Scenari di configurazione comuni](#instance-configuration-scenarios)
+ [Gestisci il software sulla tua istanza AL2](managing-software.md)
+ [Controllo dello stato del processore per la tua istanza Amazon EC2 AL2](processor_state_control.md)
+ [Scheduler I/O per AL2](io-scheduler.md)
+ [Cambia il nome host della tua istanza AL2](set-hostname.md)
+ [Configura il DNS dinamico sulla tua istanza AL2](dynamic-dns.md)
+ [Configura la tua interfaccia di rete usando ec2-net-utils per AL2](ec2-net-utils.md)

## Scenari di configurazione comuni
<a name="instance-configuration-scenarios"></a>

La distribuzione di base di Amazon Linux contiene pacchetti software e utilità necessari per le operazioni di base del server. Tuttavia, numerosi altri pacchetti software sono disponibili in svariati archivi software, mentre nel codice sorgente sono disponibili molti altri pacchetti pronti per lo sviluppo. Per ulteriori informazioni sull'installazione e sullo sviluppo di software da questa posizioni, consulta [Gestisci il software sulla tua istanza AL2](managing-software.md).

Le istanze Amazon Linux sono preconfigurate con un `ec2-user`, ma puoi decidere di aggiungere altri utenti che non dispongono dei privilegi avanzati. Per ulteriori informazioni sull'aggiunta e la rimozione di utenti, consulta [Manage users on your Linux instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html) nella *Amazon EC2 User* Guide.

Se disponi di una rete con un nome di dominio registrato, puoi modificare il nome host di un'istanza in modo da identificarla come appartenente a tale dominio. Puoi inoltre modificare il prompt di sistema in modo da visualizzare un nome più significativo senza modificare le impostazioni del nome host. Per ulteriori informazioni, consulta [Cambia il nome host della tua istanza AL2](set-hostname.md). Puoi configurare un'istanza per l'uso di un provider di servizi DNS dinamico. Per ulteriori informazioni, consulta [Configura il DNS dinamico sulla tua istanza AL2](dynamic-dns.md).

Quando avvii un'istanza in Amazon EC2, hai la possibilità di trasferire all'istanza i dati utente che possono essere utilizzati per eseguire attività di configurazione di routine e anche per l'esecuzione di script all'avvio dell'istanza. Puoi trasferire due tipi di dati utente a Amazon EC2, ovvero le direttive cloud-init e gli script di shell. Per ulteriori informazioni, consulta [Esegui comandi sulla tua Linux istanza all'avvio](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) nella Guida per l'*utente di Amazon EC2*.

# Gestisci il software sulla tua istanza AL2
<a name="managing-software"></a>

La distribuzione di base di Amazon Linux contiene pacchetti software e utilità necessari per le operazioni di base del server.

Queste informazioni si applicano a AL2. Per informazioni su AL2023, consulta [Gestire pacchetti e aggiornamenti del sistema operativo AL2023 nella](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guida per l'utente di Amazon Linux 2023*.

È importante tenere aggiornati i software. Molti pacchetti in una distribuzione Linux vengono aggiornati di frequente per correggere bug, aggiungere caratteristiche e proteggere il sistema da exploit a livello di sicurezza. Per ulteriori informazioni, consulta [Aggiorna il software dell'istanza sulla tua istanza AL2](install-updates.md).

Per impostazione predefinita, AL2 le istanze vengono avviate con i seguenti repository abilitati:
+ `amzn2-core`
+ `amzn2extra-docker`

Sebbene in questi repository siano disponibili molti pacchetti aggiornati da AWS, è possibile che un pacchetto da installare sia contenuto in un altro repository. Per ulteriori informazioni, consulta [Aggiungi repository su un'istanza AL2](add-repositories.md). Per semplificare la ricerca e l'installazione di pacchetti negli archivi abilitati, consulta [Trova e installa pacchetti software su un' AL2 istanza](find-install-software.md).

Non tutti i software sono disponibili nei pacchetti software memorizzati negli archivi. Alcuni archivi devono essere compilati su un'istanza dal relativo codice sorgente. Per ulteriori informazioni, consulta [Preparati a compilare il software su un'istanza AL2](compile-software.md).

AL2 le istanze gestiscono il proprio software utilizzando il gestore di pacchetti yum. Il programma di gestione di pacchetti YUM consente di installare, rimuovere e aggiornare il software, nonché gestire tutte le dipendenze per ogni pacchetto.

**Topics**
+ [Aggiorna il software dell'istanza sulla tua istanza AL2](install-updates.md)
+ [Aggiungi repository su un'istanza AL2](add-repositories.md)
+ [Trova e installa pacchetti software su un' AL2 istanza](find-install-software.md)
+ [Preparati a compilare il software su un'istanza AL2](compile-software.md)

# Aggiorna il software dell'istanza sulla tua istanza AL2
<a name="install-updates"></a>

È importante tenere aggiornati i software. I pacchetti in una distribuzione Linux vengono aggiornati di frequente per correggere bug, aggiungere funzionalità e proteggere il sistema da exploit a livello di sicurezza. Quando stabilisci una connessione a un'istanza Amazon Linux dopo averla avviata per la prima volta, è possibile che venga visualizzato un messaggio in cui ti viene richiesto di aggiornare i pacchetti software per motivi di sicurezza. Questa sezione mostra come aggiornare l'intero sistema o solo un pacchetto.

Queste informazioni si applicano a AL2. Per informazioni su AL2023, consulta [Gestire pacchetti e aggiornamenti del sistema operativo AL2023 nella](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) *Guida per l'utente di Amazon Linux 2023*.

Per informazioni sulle modifiche e gli aggiornamenti di AL2, consulta le [note di AL2 rilascio](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html).

Per informazioni sulle modifiche e gli aggiornamenti di AL2023, consulta le [note di AL2023 rilascio](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html).

**Importante**  
Se hai avviato un'istanza EC2 che utilizza un'AMI Amazon Linux 2 in una sottorete IPv6 -only, devi connetterti all'istanza ed eseguirla. `sudo amazon-linux-https disable` Ciò consente all' AL2 istanza di connettersi al yum repository in S3 IPv6 tramite il servizio di patch http.

**Per aggiornare tutti i pacchetti su un'istanza AL2**

1. (Opzionale) Avviare una sessione con il comando **screen** nella finestra della shell. A volte si possono verificare interruzioni di rete che possono comportare l'interruzione della connessione SSH all'istanza. Se si verifica questa situazione durante un aggiornamento software particolarmente lungo, l'istanza rimane in uno stato non definito, anche se ripristinabile. La sessione avviata con il comando **screen** ti permette di continuare l'esecuzione dell'aggiornamento anche se la connessione viene interrotta. Potrai infatti ristabilire la connessione alla sessione in un secondo momento senza problemi.

   1. Eseguire il comando **screen** per avviare la sessione.

      ```
      [ec2-user ~]$ screen
      ```

   1. Se la connessione alla sessione viene interrotta, rieseguire l'accesso all'istanza e visualizzare l'elenco delle schermate disponibili.

      ```
      [ec2-user ~]$ screen -ls
      There is a screen on:
      	17793.pts-0.ip-12-34-56-78	(Detached)
      1 Socket in /var/run/screen/S-ec2-user.
      ```

   1. Riconnettersi alla schermata utilizzando il comando **screen -r** e l'ID di processo del comando precedente.

      ```
      [ec2-user ~]$ screen -r 17793
      ```

   1. Dopo aver utilizzato il comando **screen**, utilizzare il comando **exit** per chiudere la sessione.

      ```
      [ec2-user ~]$ exit
      [screen is terminating]
      ```

1. Esegui il comando **yum update**. Puoi decidere di aggiungere il flag `--security` per applicare solo gli aggiornamenti di sicurezza.

   ```
   [ec2-user ~]$ sudo yum update
   ```

1. Verifica i pacchetti elencati, digita **y** e premi Invio per accettare gli aggiornamenti. L'aggiornamento di tutti i pacchetti in un sistema può richiedere alcuni minuti. L'output **yum** riporta lo stato dell'aggiornamento durante la sua esecuzione.

1. (Facoltativo) [Riavviate l'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) per assicurarvi di utilizzare i pacchetti e le librerie più recenti dell'aggiornamento; gli aggiornamenti del kernel non vengono caricati finché non si verifica un riavvio. Anche gli aggiornamenti applicati a qualsiasi libreria `glibc` devono essere seguiti da un riavvio. Per gli aggiornamenti dei pacchetti che controllano i servizi, può essere sufficiente riavviare i servizi per rendere disponibili gli aggiornamenti. Tuttavia, il riavvio del sistema garantisce il completamento di tutti i precedenti aggiornamenti di librerie e pacchetti.

**Per aggiornare un singolo pacchetto su un'istanza AL2**

Utilizzare questa procedura per aggiornare un singolo pacchetto e le relative dipendente, ma non l'intero sistema.

1. Esegui il comando **yum update** con il nome del pacchetto da aggiornare.

   ```
   [ec2-user ~]$ sudo yum update openssl
   ```

1. Verifica le informazioni sul pacchetto visualizzate, digita **y** e premi Invio per accettare uno o più aggiornamenti. A volte nell'elenco potrebbero venire elencati più pacchetti se sono presenti dipendenze di pacchetti che devono essere risolte. L'output **yum** riporta lo stato dell'aggiornamento durante la sua esecuzione.

1. (Facoltativo) [Riavviate l'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) per assicurarvi di utilizzare i pacchetti e le librerie più recenti dell'aggiornamento; gli aggiornamenti del kernel non vengono caricati finché non si verifica un riavvio. Anche gli aggiornamenti applicati a qualsiasi libreria `glibc` devono essere seguiti da un riavvio. Per gli aggiornamenti dei pacchetti che controllano i servizi, può essere sufficiente riavviare i servizi per rendere disponibili gli aggiornamenti. Tuttavia, il riavvio del sistema garantisce il completamento di tutti i precedenti aggiornamenti di librerie e pacchetti.

# Aggiungi repository su un'istanza AL2
<a name="add-repositories"></a>

Queste informazioni si applicano a. AL2 Per informazioni in merito AL2023, consulta [Aggiornamenti deterministici tramite repository con versioni nella](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html) Guida per AL2023 l'utente di *Amazon Linux 2023*.

Per impostazione predefinita, le AL2 istanze vengono avviate con i seguenti repository abilitati:
+ `amzn2-core`
+ `amzn2extra-docker`

Questi repository cotengono molti pacchetti che vengono aggiornati da Amazon Web Services; potrebbe essere presente un pacchetto che vuoi installare ma contenuto in un altro repository.

Per installare un pacchetto da un archivio diverso con **yum**, è necessario aggiungere le informazioni relative all'archivio nel file `/etc/yum.conf` o nel relativo file `repository.repo` all'interno della directory `/etc/yum.repos.d`. Puoi eseguire questa operazione manualmente, ma per la maggior parte degli archivi yum è disponibile il file `repository.repo` corrispondente nel relativo URL.

**Per determinare gli archivi yum già installati**  
Generare l'elenco degli archivi yum installati con il seguente comando:

```
[ec2-user ~]$ yum repolist all
```

Nell'output risultante sono elencati gli archivi installati assieme al relativo stato. Per gli archivi abilitati viene visualizzato il numero di pacchetti in essi contenuti.

**Per aggiungere un archivio yum a /etc/yum.repos.d**

1. Cerca la posizione del file `.repo`. Ciò può dipendere dall'archivio che desideri aggiungere. In questo esempio, il file `.repo` è disponibile in `https://www.example.com/repository.repo`.

1. Aggiungi il repository con il comando **yum-config-manager**.

   ```
   [ec2-user ~]$ sudo yum-config-manager --add-repo https://www.example.com/repository.repo
   Loaded plugins: priorities, update-motd, upgrade-helper
   adding repo from: https://www.example.com/repository.repo
   grabbing file https://www.example.com/repository.repo to /etc/yum.repos.d/repository.repo
   repository.repo                                      | 4.0 kB     00:00
   repo saved to /etc/yum.repos.d/repository.repo
   ```

Dopo aver installato un archivio, devi abilitarlo come descritto nella procedura seguente.

**Per abilitare un archivio yum in /etc/yum.repos.d**  
Utilizzare il comando **yum-config-manager** con il contrassegno `--enable repository`. Il comando seguente abilita l'archivio EPEL (Extra Packages for Enterprise Linux) dal progetto Fedora. Per impostazione predefinita, questo archivio è presente in `/etc/yum.repos.d` nelle istanze di AMI Amazon Linux ma non è abilitato.

```
[ec2-user ~]$ sudo yum-config-manager --enable epel
```

[Per ulteriori informazioni e per scaricare la versione più recente di questo pacchetto, consultate https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

# Trova e installa pacchetti software su un' AL2 istanza
<a name="find-install-software"></a>

Puoi utilizzare uno strumento di gestione dei pacchetti per trovare e installare pacchetti software. In Amazon Linux 2, lo strumento di gestione dei pacchetti software predefinito èYUM. In AL2023, lo strumento di gestione dei pacchetti software predefinito èDNF. Per ulteriori informazioni, consulta [lo strumento di gestione dei pacchetti](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html) nella *Guida per l'utente di Amazon Linux 2023*.

## Trova pacchetti software su un' AL2 istanza
<a name="find-software"></a>

Puoi utilizzare il comando **yum search** per cercare le descrizioni dei pacchetti disponibili negli archivi configurati. Ciò risulta particolarmente utile se non conosci il nome preciso del pacchetto che vuoi installare. Devi semplicemente aggiungere la ricerca per parola chiave alla fine del comando. Per ricerche di più parole, racchiudi la query di ricerca tra virgolette.

```
[ec2-user ~]$ yum search "find"
```

Di seguito è riportato un output di esempio.

```
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
============================== N/S matched: find ===============================
findutils.x86_64 : The GNU versions of find utilities (find and xargs)
gedit-plugin-findinfiles.x86_64 : gedit findinfiles plugin
ocaml-findlib-devel.x86_64 : Development files for ocaml-findlib
perl-File-Find-Rule.noarch : Perl module implementing an alternative interface to File::Find
robotfindskitten.x86_64 : A game/zen simulation. You are robot. Your job is to find kitten.
mlocate.x86_64 : An utility for finding files by name
ocaml-findlib.x86_64 : Objective CAML package manager and build helper
perl-Devel-Cycle.noarch : Find memory cycles in objects
perl-Devel-EnforceEncapsulation.noarch : Find access violations to blessed objects
perl-File-Find-Rule-Perl.noarch : Common rules for searching for Perl things
perl-File-HomeDir.noarch : Find your home and other directories on any platform
perl-IPC-Cmd.noarch : Finding and running system commands made easy
perl-Perl-MinimumVersion.noarch : Find a minimum required version of perl for Perl code
texlive-xesearch.noarch : A string finder for XeTeX
valgrind.x86_64 : Tool for finding memory management bugs in programs
valgrind.i686 : Tool for finding memory management bugs in programs
```

Le query di ricerca di più parole racchiuse tra virgolette restituiscono solo i risultati che corrispondono esattamente alla query. Se il pacchetto previsto non viene visualizzato, semplifica la ricerca usando un'unica parola chiave e quindi riesamina i risultati. Come parole chiave puoi anche usare sinonimi per ampliare la ricerca.

Per ulteriori informazioni sui pacchetti per AL2, consulta quanto segue:
+ [AL2 Libreria Extras](al2-extras.md)
+ [Archivio dei pacchetti](ec2.md#package-repository)

## Installare pacchetti software su un' AL2 istanza
<a name="install-software"></a>

In AL2, lo strumento di gestione dei pacchetti yum cerca diversi pacchetti software in tutti gli archivi abilitati e gestisce eventuali dipendenze nel processo di installazione del software. Per informazioni sull'installazione di pacchetti software in AL2023, consulta [Gestione dei pacchetti e degli aggiornamenti del sistema operativo](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html) nella *Guida per l'utente di Amazon Linux 2023*.

**Per installare un pacchetto da un repository**  
Usa il **yum install *package*** comando, sostituendolo *package* con il nome del software da installare. Ad esempio, per installare il browser Web basato sul testo **links**, immetti il comando seguente.

```
[ec2-user ~]$ sudo yum install links
```

**Per installare i file dei pacchetti RPM scaricati**  
Puoi utilizzare **yum install** anche per installare i file dei pacchetti RPM scaricati da Internet. A tale scopo, devi aggiungere il nome del percorso di un file RPM al comando di installazione invece del nome del pacchetto di un repository.

```
[ec2-user ~]$ sudo yum install my-package.rpm
```

**Per elencare i pacchetti installati**  
Per visualizzare un elenco dei pacchetti installati nell'istanza, utilizzare il comando seguente.

```
[ec2-user ~]$ yum list installed
```

# Preparati a compilare il software su un'istanza AL2
<a name="compile-software"></a>

In Internet è disponibile il software open source non precompilato e pronto per il download da un repository di pacchetti. Potresti tuttavia trovare un pacchetto software che devi compilare personalmente dal relativo codice sorgente. Affinché il tuo sistema sia in grado di compilare software in AL2 Amazon Linux, devi installare diversi strumenti di sviluppo, come **make****gcc**, e**autoconf**.

Dal momento che la compilazione del software non è un'attività richiesta da ogni istanza di Amazon EC2, questi strumenti non vengono installati per impostazione predefinita, ma sono disponibili in un gruppo di pacchetti denominato "Development Tools" (Strumenti di sviluppo), che può essere facilmente aggiunto a un'istanza con il comando **yum groupinstall**.

```
[ec2-user ~]$ sudo yum groupinstall "Development Tools"
```

I pacchetti di codice sorgente del software sono spesso disponibili per il download (da siti Web come [https://github.com/](https://github.com/)e [http://sourceforge.net/](https://sourceforge.net/)) come file di archivio compresso, chiamato tarball. In genere i file tarball sono associati all'estensione `.tar.gz`. Puoi decomprimere questi archivi tramite il comando **tar**.

```
[ec2-user ~]$ tar -xzf software.tar.gz
```

Dopo aver decompresso ed estratto il pacchetto di codice sorgente, devi cercare un file `README` o `INSTALL` nella directory del codice sorgente contenente ulteriori istruzioni relative alla compilazione e all'installazione del codice sorgente. 

**Per recuperare il codice sorgente per i pacchetti Amazon Linux**  
Amazon Web Services fornisce il codice sorgente per i pacchetti mantenuti. Puoi scaricare il codice sorgente per qualsiasi pacchetto installato tramite il comando **yumdownloader --source**.

Eseguite il **yumdownloader --source *package*** comando per scaricare il codice sorgente di. *package* Ad esempio, per scaricare il codice sorgente del pacchetto `htop`, immetti il seguente comando.

```
[ec2-user ~]$ yumdownloader --source htop

Loaded plugins: priorities, update-motd, upgrade-helper
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
amzn-main-source                                                                                              | 1.9 kB  00:00:00     
amzn-updates-source                                                                                           | 1.9 kB  00:00:00     
(1/2): amzn-updates-source/latest/primary_db                                                                  |  52 kB  00:00:00     
(2/2): amzn-main-source/latest/primary_db                                                                     | 734 kB  00:00:00     
htop-1.0.1-2.3.amzn1.src.rpm
```

La posizione del file RPM sorgente è la directory da cui hai eseguito il comando.

# Controllo dello stato del processore per la tua istanza Amazon EC2 AL2
<a name="processor_state_control"></a>

Gli stati C-state controllano i livelli di sospensione in cui può entrare un core quando è inattivo. Gli stati C-state sono numerati a partire da C0 (lo stato più superficiale in cui il core è completamente attivo ed esegue le istruzioni) fino a C6 (lo stato inattivo più profondo in cui un core è spento).

Gli stati P-state controllano le prestazioni desiderate (in frequenza CPU) da un core. Gli stati P-state sono numerati a partire da P0 (l'impostazione sulle prestazioni più elevate in cui è permesso al core di utilizzare la tecnologia Intel Turbo Boost per aumentare la frequenza, se possibile) e vanno da P1 (lo stato P-state che richiede la frequenza di base massima) a P15 (la frequenza più bassa possibile).

Potresti modificare le impostazioni degli stati C-state o P-state per aumentare la consistenza delle prestazioni del processore, ridurre la latenza oppure ottimizzare l'istanza per un carico di lavoro specifico. Le impostazioni predefinite degli stati C-state e P-state forniscono le prestazioni massime, ottimali per la maggior parte dei carichi di lavoro. Tuttavia, se l'applicazione traesse vantaggio dalla latenza ridotta al costo di frequenze single-core o dual-core più elevate o da prestazioni coerenti a frequenze più basse anziché frequenze Turbo Boost intermittenti, consigliamo di prendere in considerazione le impostazioni degli stati C-state o P-state disponibili per queste istanze.

*Per informazioni sui tipi di istanze Amazon EC2 che consentono al sistema operativo di controllare gli stati C e P del processore, consulta [Controllo dello stato del processore per l'istanza Amazon EC2 nella Guida per l'utente di Amazon EC2](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/processor_state_control.html).*

Le sezioni seguenti descrivono le diverse configurazioni di stato del processore e come monitorare gli effetti della configurazione. Queste procedure sono state scritte e si applicano ad Amazon Linux; tuttavia, potrebbero funzionare anche per altre distribuzioni Linux con una versione del kernel Linux 3.9 o successiva.

**Nota**  
Gli esempi presenti in questa pagina utilizzano quanto segue:  
L'utilità **turbostat** per visualizzare la frequenza del processore e le informazioni sullo stato C. L'utilità **turbostat** è disponibile per impostazione predefinita su Amazon Linux.
Il comando **stress** per simulare un carico di lavoro. Per installare **stress**, per prima cosa abilitare il repository EPEL eseguendo **sudo amazon-linux-extras install epel**, poi eseguire **sudo yum install -y stress**.
Se l'output non visualizza le informazioni sullo stato C, includere l'opzione **--debug** nel comando (**sudo turbostat --debug stress *<options>***).

**Topics**
+ [Prestazioni massime con la massima frequenza Turbo Boost](#turbo-perf)
+ [Prestazioni elevate e bassa latenza tramite limitazione degli stati C-state più profondi](#c-states)
+ [Prestazioni di base con la variabilità minore](#baseline-perf)

## Prestazioni massime con la massima frequenza Turbo Boost
<a name="turbo-perf"></a>

Questa è la configurazione di controllo degli stati del processore predefinita per AMI Amazon Linux ed è consigliata per la maggior parte dei carichi di lavoro. Questa configurazione offre le prestazioni più elevate con minore variabilità. Permettendo ai core non attivi di entrare in stati di sospensione più profondi fornisce la capacità aggiuntiva termica richiesta per processi single-core o dual-core per raggiungere il massimo potenziale Turbo Boost.

Il seguente esempio mostra un'istanza `c4.8xlarge` con due core attivamente in funzione che raggiungono la frequenza massima Turbo Boost del processore.

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30680] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.54 3.44 2.90   0   9.18   0.00  85.28   0.00   0.00   0.00   0.00   0.00  94.04 32.70 54.18  0.00
 0   0   0   0.12 3.26 2.90   0   3.61   0.00  96.27   0.00   0.00   0.00   0.00   0.00  48.12 18.88 26.02  0.00
 0   0  18   0.12 3.26 2.90   0   3.61
 0   1   1   0.12 3.26 2.90   0   4.11   0.00  95.77   0.00
 0   1  19   0.13 3.27 2.90   0   4.11
 0   2   2   0.13 3.28 2.90   0   4.45   0.00  95.42   0.00
 0   2  20   0.11 3.27 2.90   0   4.47
 0   3   3   0.05 3.42 2.90   0  99.91   0.00   0.05   0.00
 0   3  21  97.84 3.45 2.90   0   2.11
...
 1   1  10   0.06 3.33 2.90   0  99.88   0.01   0.06   0.00
 1   1  28  97.61 3.44 2.90   0   2.32
...
10.002556 sec
```

In questo esempio, v CPUs 21 e 28 funzionano alla frequenza Turbo Boost massima perché gli altri core sono entrati in stato di `C6` sospensione per risparmiare energia e fornire spazio di alimentazione e calore ai core funzionanti. Le v CPUs 3 e 10 (ognuna delle quali condivide un core del processore con le v CPUs 21 e 28) sono nello `C1` stato in attesa di istruzioni.

Nell'esempio seguente, tutti i 18 core stanno lavorando attivamente, quindi non c'è spazio per il Turbo Boost massimo, ma funzionano tutti alla velocità «Turbo Boost all-core» di 3.2 GHz.

```
[ec2-user ~]$ sudo turbostat stress -c 36 -t 10
stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30685] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
            99.27 3.20 2.90   0   0.26   0.00   0.47   0.00   0.00   0.00   0.00   0.00 228.59 31.33 199.26  0.00
 0   0   0  99.08 3.20 2.90   0   0.27   0.01   0.64   0.00   0.00   0.00   0.00   0.00 114.69 18.55 99.32  0.00
 0   0  18  98.74 3.20 2.90   0   0.62
 0   1   1  99.14 3.20 2.90   0   0.09   0.00   0.76   0.00
 0   1  19  98.75 3.20 2.90   0   0.49
 0   2   2  99.07 3.20 2.90   0   0.10   0.02   0.81   0.00
 0   2  20  98.73 3.20 2.90   0   0.44
 0   3   3  99.02 3.20 2.90   0   0.24   0.00   0.74   0.00
 0   3  21  99.13 3.20 2.90   0   0.13
 0   4   4  99.26 3.20 2.90   0   0.09   0.00   0.65   0.00
 0   4  22  98.68 3.20 2.90   0   0.67
 0   5   5  99.19 3.20 2.90   0   0.08   0.00   0.73   0.00
 0   5  23  98.58 3.20 2.90   0   0.69
 0   6   6  99.01 3.20 2.90   0   0.11   0.00   0.89   0.00
 0   6  24  98.72 3.20 2.90   0   0.39
...
```

## Prestazioni elevate e bassa latenza tramite limitazione degli stati C-state più profondi
<a name="c-states"></a>

Gli stati C-state controllano i livelli di sospensione in cui potrebbe entrare un core quando è inattivo. Potresti voler controllare gli stati C-state per ottimizzare la latenza rispetto alle prestazioni del sistema. Inserire i core nello stato di sospensione richiedete del tempo. Sebbene un core sospeso consenta maggiore capacità aggiuntiva per un altro core per raggiungere una frequenza più elevata, è necessario del tempo affinché il core sospeso torni attivo e in funzione. Ad esempio, se un core assegnato per gestire le interruzioni di un pacchetto di rete è sospeso, potrebbe verificarsi un ritardo nel lavoro su tale interruzione. Puoi configurare il sistema in modo da non utilizzare gli stati C-states più profondi, riducendo non solo la latenza di reazione del processore, ma anche la capacità aggiuntiva disponibile per altri core per Turbo Boost.

Uno scenario comune per la disabilitazione degli stati di sospensione più profondi è un'applicazione di database Redis, la quale archivia il database nella memoria di sistema per il tempo di risposta alle query più rapido possibile.

**Per limitare gli stati di sonno più profondi, attiva AL2**

1. Aprire il file `/etc/default/grub` con un editor a scelta.

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. Modificare la riga `GRUB_CMDLINE_LINUX_DEFAULT` e aggiungere le opzioni `intel_idle.max_cstate=1` e `processor.max_cstate=1` per impostare `C1` come lo stato C più profondo per i core inattivi.

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   L'opzione `intel_idle.max_cstate=1` configura il limite dello stato C per le istanze basate su Intel e l'opzione `processor.max_cstate=1` configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

1. Salvare il file e uscire dall'editor.

1.  Eseguire il comando riportato di seguito per ricreare la configurazione di avvio.

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. Riavviare l'istanza per abilitare la nuova opzione del kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

**Limitazione degli stati di sospensione più profondi in Amazon Linux AMI**

1. Aprire il file `/boot/grub/grub.conf` con un editor a scelta.

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. Modificare la riga `kernel` della prima voce e aggiungere le opzioni `intel_idle.max_cstate=1` e `processor.max_cstate=1` per impostare `C1` come lo stato C più profondo per i core inattivi.

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1  processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   L'opzione `intel_idle.max_cstate=1` configura il limite dello stato C per le istanze basate su Intel e l'opzione `processor.max_cstate=1` configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

1. Salvare il file e uscire dall'editor.

1. Riavviare l'istanza per abilitare la nuova opzione del kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

Il seguente esempio mostra un'istanza `c4.8xlarge` con due core attivamente in funzione alla frequenza del core "all core Turbo Boost".

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5322] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.56 3.20 2.90   0  94.44   0.00   0.00   0.00   0.00   0.00   0.00   0.00 131.90 31.11 199.47  0.00
 0   0   0   0.03 2.08 2.90   0  99.97   0.00   0.00   0.00   0.00   0.00   0.00   0.00  67.23 17.11 99.76  0.00
 0   0  18   0.01 1.93 2.90   0  99.99
 0   1   1   0.02 1.96 2.90   0  99.98   0.00   0.00   0.00
 0   1  19  99.70 3.20 2.90   0   0.30
...
 1   1  10   0.02 1.97 2.90   0  99.98   0.00   0.00   0.00
 1   1  28  99.67 3.20 2.90   0   0.33
 1   2  11   0.04 2.63 2.90   0  99.96   0.00   0.00   0.00
 1   2  29   0.02 2.11 2.90   0  99.98
...
```

In questo esempio, i core per le versioni CPUs 19 e 28 funzionano a 3.2 GHz e gli altri core sono `C1` nello stato C, in attesa di istruzioni. Sebbene i core in funzione non raggiungano la frequenza Turbo Boost massima, i core inattivi saranno molto più rapidi nella risposta a nuove richieste rispetto a quanto lo sarebbero nello stato C-state più profondo `C6`.

## Prestazioni di base con la variabilità minore
<a name="baseline-perf"></a>

Puoi ridurre la variabilità della frequenza del processore con gli stati P-state. Gli stati P-state controllano le prestazioni desiderate (in frequenza CPU) da un core. La maggior parte dei carichi di lavoro ottiene prestazioni migliori in P0, richiedendo Turbo Boost. Tuttavia, potresti voler ottimizzare il sistema per prestazioni coerenti anziché prestazioni intermittenti che possono verificarsi quando sono abilitate le frequenze Turbo Boost. 

I carichi di lavoro Intel Advanced Vector Extensions (AVX o AVX2) possono funzionare bene a frequenze più basse e le istruzioni AVX possono consumare più energia. L'esecuzione del processore a una frequenza più bassa, disabilitando Turbo Boost, può ridurre la quantità di potenza e mantenere la velocità più coerente. Per ulteriori informazioni sull'ottimizzazione della configurazione dell'istanza e sul carico di lavoro per AVX, consulta il [sito web Intel](https://www.intel.com/content/www/us/en/developer/articles/technical/the-intel-advanced-vector-extensions-512-feature-on-intel-xeon-scalable.html?wapkw=advanced%20vector%20extensions).

I driver inattivi della CPU controllano lo stato P. Le nuove generazioni di CPU richiedono driver inattivi della CPU aggiornati che corrispondono al livello del kernel come segue:
+ Versioni del kernel Linux 6.1 e successive: supporta Intel Granite Rapids (ad esempio, R8i)
+ Versioni del kernel Linux 5.10 e successive: supporta AMD Milan (ad esempio, M6a)
+ Versioni del kernel Linux 5.6 e successive: supporta Intel Icelake (ad esempio, M6i)

Per verificare se il kernel del sistema in esecuzione riconosce la CPU, esegui il comando seguente.

```
if [ -d /sys/devices/system/cpu/cpu0/cpuidle ]; then echo "C-state control enabled"; else echo "Kernel cpuidle driver does not recognize this CPU generation"; fi
```

Se l'output di questo comando indica una mancanza di supporto, consigliamo di aggiornare il kernel.

Questa sezione descrive come limitare gli stati di sospensione più profondi e come disabilitare Turbo Boost (richiedendo lo stato P-state `P1`) per fornire bassa latenza e la minima variabilità di velocità del processore per questi tipi di carichi di lavoro.

**Per limitare gli stati di sonno più profondi e disattivare Turbo Boost su AL2**

1. Aprire il file `/etc/default/grub` con un editor a scelta.

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. Modificare la riga `GRUB_CMDLINE_LINUX_DEFAULT` e aggiungere le opzioni `intel_idle.max_cstate=1` e `processor.max_cstate=1` per impostare `C1` come lo stato C più profondo per i core inattivi.

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   L'opzione `intel_idle.max_cstate=1` configura il limite dello stato C per le istanze basate su Intel e l'opzione `processor.max_cstate=1` configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

1. Salvare il file e uscire dall'editor.

1.  Eseguire il comando riportato di seguito per ricreare la configurazione di avvio.

   ```
   [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. Riavviare l'istanza per abilitare la nuova opzione del kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Quando occorre la bassa variabilità di velocità del processore fornita dallo stato P-state `P1`, esegui il comando seguente per disabilitare Turbo Boost.

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. Una volta terminato il carico di lavoro, puoi riabilitare Turbo Boost con il comando seguente.

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

**Limitazione degli stati di sospensione più profondi e disabilitazione di Turbo Boost in Amazon Linux AMI**

1. Aprire il file `/boot/grub/grub.conf` con un editor a scelta.

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. Modificare la riga `kernel` della prima voce e aggiungere le opzioni `intel_idle.max_cstate=1` e `processor.max_cstate=1` per impostare `C1` come lo stato C più profondo per i core inattivi.

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   L'opzione `intel_idle.max_cstate=1` configura il limite dello stato C per le istanze basate su Intel e l'opzione `processor.max_cstate=1` configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

1. Salvare il file e uscire dall'editor.

1. Riavviare l'istanza per abilitare la nuova opzione del kernel.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Quando occorre la bassa variabilità di velocità del processore fornita dallo stato P-state `P1`, esegui il comando seguente per disabilitare Turbo Boost.

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. Una volta terminato il carico di lavoro, puoi riabilitare Turbo Boost con il comando seguente.

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

L'esempio seguente mostra un'`c4.8xlarge`istanza con due v che lavora CPUs attivamente alla frequenza di base di base, senza Turbo Boost.

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5389] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.59 2.90 2.90   0  94.41   0.00   0.00   0.00   0.00   0.00   0.00   0.00 128.48 33.54 200.00  0.00
 0   0   0   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00   0.00   0.00   0.00   0.00  65.33 19.02 100.00  0.00
 0   0  18   0.04 2.90 2.90   0  99.96
 0   1   1   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   1  19   0.04 2.90 2.90   0  99.96
 0   2   2   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00
 0   2  20   0.04 2.90 2.90   0  99.96
 0   3   3   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   3  21  99.95 2.90 2.90   0   0.05
...
 1   1  28  99.92 2.90 2.90   0   0.08
 1   2  11   0.06 2.90 2.90   0  99.94   0.00   0.00   0.00
 1   2  29   0.05 2.90 2.90   0  99.95
```

I core per le versioni CPUs 21 e 28 funzionano attivamente alla velocità di base del processore di 2,9 e anche tutti i core inattivi funzionano alla velocità di base nello stato C GHz, pronti ad accettare le istruzioni. `C1`

# Scheduler I/O per AL2
<a name="io-scheduler"></a>

Le I/O scheduler is a part of the Linux operating system that sorts and merges I/O richieste e determina l'ordine in cui vengono elaborate.

I/O schedulers are particularly beneficial for devices such as magnetic hard drives, where seek time can be expensive and where it is optimal to merge co-located requests. I/Ogli scheduler hanno un impatto minore sui dispositivi a stato solido e sugli ambienti virtualizzati. Questo perché per i dispositivi solid state, l'accesso sequenziale e casuale non differisce e, per gli ambienti virtualizzati, l'host fornisce il proprio livello di pianificazione.

In questo argomento viene descritto lo I/O scheduler di Amazon Linux. Per ulteriori informazioni sul pianificatore I/O utilizzato da altre distribuzioni Linux, fare riferimento alla relativa documentazione.

**Topics**
+ [Pianificatori supportati](#supported-schedulers)
+ [Pianificatore di default](#default-schedulers)
+ [Modifica del pianificatore](#change-scheduler)

## Pianificatori supportati
<a name="supported-schedulers"></a>

Amazon Linux supporta i seguenti I/O programmi di pianificazione:
+ `deadline`— Lo I/O scheduler *Deadline* ordina le I/O richieste e le gestisce nell'ordine più efficiente. Garantisce un orario di inizio per ogni I/O request. It also gives I/O richiesta rimasta in sospeso per troppo tempo e una priorità più alta.
+ `cfq`— Lo I/O scheduler *Completely Fair Queueing* (CFQ) tenta di I/O resources between processes. It sorts and inserts I/O allocare equamente le richieste nelle code per processo.
+ `noop`— Le I/O scheduler inserts all I/O richieste *No Operation* (noop) vengono inserite in una coda FIFO e poi le unisce in un'unica richiesta. Questo pianificatore non esegue l'ordinamento delle richieste.

## Pianificatore di default
<a name="default-schedulers"></a>

No Operation (noop) è lo I/O scheduler predefinito per Amazon Linux. Questo pianificatore viene utilizzato per i seguenti motivi:
+ Molti tipi di istanza utilizzano dispositivi virtualizzati in cui l'host sottostante esegue la pianificazione dell'istanza.
+ I dispositivi a stato solido vengono utilizzati in molti tipi di istanze in cui i vantaggi di uno I/O scheduler hanno un impatto minore.
+ È lo I/O scheduler meno invasivo e può essere personalizzato se necessario.

## Modifica del pianificatore
<a name="change-scheduler"></a>

La modifica dello I/O scheduler può aumentare o diminuire le prestazioni a seconda che lo scheduler comporti il completamento di un numero maggiore o minore di I/O richieste in un determinato periodo di tempo. Ciò dipende in gran parte dal carico di lavoro, dalla generazione del tipo di istanza utilizzata e dal tipo di dispositivo a cui si accede. Se modifichi lo scheduler di I/O utilizzato, ti consigliamo di utilizzare uno strumento, come **iotop**, per misurare I/O le prestazioni e determinare se la modifica è vantaggiosa per il tuo caso d'uso.

È possibile visualizzare lo I/O scheduler di un dispositivo utilizzando il seguente comando, che utilizza come esempio. `nvme0n1` Sostituisci `nvme0n1` nel seguente comando con il dispositivo elencato in `/sys/block` nell'istanza.

```
$  cat /sys/block/nvme0n1/queue/scheduler
```

Per impostare lo I/O scheduler per il dispositivo, utilizzare il seguente comando. 

```
$  echo cfq|deadline|noop > /sys/block/nvme0n1/queue/scheduler
```

Ad esempio, per impostare lo I/O scheduler per un *xvda* dispositivo dal `noop` al`cfq`, utilizzate il comando seguente. 

```
$  echo cfq > /sys/block/xvda/queue/scheduler
```

# Cambia il nome host della tua istanza AL2
<a name="set-hostname"></a>

Quando avvii un'istanza in un VPC privato, Amazon EC2 assegna un nome host del sistema operativo guest. Il tipo di nome host assegnato da Amazon EC2 dipende dalle impostazioni della sottorete. Per ulteriori informazioni sui nomi host EC2, consulta i tipi di hostname delle [istanze Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) nella Amazon *EC2* User Guide.

Un tipico nome DNS privato di Amazon EC2 per un'istanza EC2 configurata per utilizzare la denominazione basata su IP con un IPv4 indirizzo è simile al seguente:`ip-12-34-56-78.us-west-2.compute.internal`, dove il nome è composto dal dominio interno, dal servizio (in questo caso`compute`), dalla regione e da una forma dell'indirizzo privato. IPv4 Parte di questo nome host viene visualizzato nel prompt della shell quando esegui l'accesso all'istanza, ad esempio, `ip-12-34-56-78`). Ogni volta che si arresta e si riavvia l'istanza Amazon EC2 (a meno che non si utilizzi un indirizzo IP elastico), l' IPv4 indirizzo pubblico cambia, così come il nome DNS pubblico, il nome host del sistema e il prompt della shell.

**Importante**  
Queste informazioni si applicano ad Amazon Linux. Per informazioni su altre distribuzioni, consulta la documentazione specifica.

## Modifica del nome host del sistema
<a name="set-hostname-system"></a>

Se disponi di un nome DNS pubblico registrato per l'indirizzo IP dell'istanza, ad esempio `webserver.mydomain.com`, puoi impostare il nome host del sistema in modo che l'istanza identifichi se stessa come appartenente a tale dominio. Ciò modifica anche il prompt della shell in modo che visualizzi la prima parte di questo nome anziché il nome host fornito da AWS (ad esempio,). `ip-12-34-56-78` Se non dispone di un nome DNS pubblico registrato, puoi comunque modificare il nome host, ma il processo necessario è leggermente diverso.

Affinché l'aggiornamento del nome host persista, è necessario verificare che l'impostazione cloud-init di `preserve_hostname` sia impostata su `true`. Per modificare o aggiungere questa impostazione è possibile eseguire il seguente comando:

```
sudo vi /etc/cloud/cloud.cfg
```

Se l'impostazione `preserve_hostname` non è riportata, aggiungere la seguente riga di testo alla fine del file: 

```
preserve_hostname: true
```

**Per modificare il nome host del sistema in un nome DNS pubblico**

Segui questa procedura se disponi già di un nome DNS pubblico registrato.

1. 
   + Per AL2: utilizzate il **hostnamectl** comando per impostare il nome host in modo che rifletta il nome di dominio completo (ad esempio). **webserver.mydomain.com**

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.mydomain.com
     ```
   + Per Amazon Linux AMI: nell'istanza, aprire il file di configurazione `/etc/sysconfig/network` nel proprio editor di testo preferito e modificare la voce `HOSTNAME` in base al nome di dominio completo, ad esempio **webserver.mydomain.com**.

     ```
     HOSTNAME=webserver.mydomain.com
     ```

1. Riavviare l'istanza per rendere effettivo il nuovo nome host.

   ```
   [ec2-user ~]$ sudo reboot
   ```

   In alternativa puoi riavviare usando la console Amazon EC2 (nella pagina **Instances (Istanze)**, seleziona l'istanza e scegli **Instance state (Stato istanza)**, **Reboot instance [Riavvia istanza]**).

1. Eseguire l'accesso all'istanza e verificare che il nome host sia aggiornato. Il prompt deve mostrare il nuovo nome host (fino al primo ".") e il comando **hostname** deve mostrare il nome di dominio completo.

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.mydomain.com
   ```

**Per modificare il nome host del sistema senza un nome DNS pubblico**

1. 
   + Per AL2: utilizzare il **hostnamectl** comando per impostare il nome host in modo che rifletta il nome host di sistema desiderato (ad esempio). **webserver**

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.localdomain
     ```
   + Per Amazon Linux AMI: nell'istanza, aprire il file di configurazione `/etc/sysconfig/network` nel proprio editor di testo preferito e modificare la voce `HOSTNAME` in base al nome host del sistema desiderato, ad esempio **webserver**.

     ```
     HOSTNAME=webserver.localdomain
     ```

1. Aprire il file `/etc/hosts` nel proprio editor di testo preferito e modificare la voce che inizia con **127.0.0.1** in modo che corrisponda all'esempio seguente (sostituire con il proprio nome host).

   ```
   127.0.0.1 webserver.localdomain webserver localhost4 localhost4.localdomain4
   ```

1. Riavviare l'istanza per rendere effettivo il nuovo nome host.

   ```
   [ec2-user ~]$ sudo reboot
   ```

   In alternativa puoi riavviare usando la console Amazon EC2 (nella pagina **Instances (Istanze)**, seleziona l'istanza e scegli **Instance state (Stato istanza)**, **Reboot instance [Riavvia istanza]**).

1. Eseguire l'accesso all'istanza e verificare che il nome host sia aggiornato. Il prompt deve mostrare il nuovo nome host (fino al primo ".") e il comando **hostname** deve mostrare il nome di dominio completo.

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.localdomain
   ```

Puoi anche implementare altre soluzioni programmatiche, ad esempio, specificare i dati utente per configurare l'istanza. Se l'istanza fa parte di un gruppo con scalabilità automatica, puoi utilizzare gli hook del ciclo di vita per definire i dati utente. Per maggiori informazioni, consulta [Esecuzione di comandi sull'istanza Linux durante l'avvio](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) e [Hook del ciclo di vita per l'avvio delle istanze](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html#aws-resource-autoscaling-lifecyclehook--examples--Lifecycle_hook_for_instance_launch) nella *Guida per l'utente di AWS CloudFormation *.

## Modifica del prompt della shell senza ripercussioni sul nome host
<a name="set-hostname-shell"></a>

Se non desiderate modificare il nome host della vostra istanza, ma desiderate che venga visualizzato un nome di sistema più utile (ad esempio**webserver**) rispetto al nome privato fornito da AWS (ad esempio,`ip-12-34-56-78`), potete modificare i file di configurazione del prompt della shell per visualizzare il nickname del sistema anziché il nome host.

**Per modificare il prompt della shell in un nome host alternativo**

1. Creare un file in `/etc/profile.d` in cui sia impostata la variabile di ambiente denominata `NICKNAME` sul valore che si desidera visualizzare nel prompt della shell. Ad esempio, per impostare il nome alternativo del sistema su **webserver**, esegui il comando seguente.

   ```
   [ec2-user ~]$ sudo sh -c 'echo "export NICKNAME=webserver" > /etc/profile.d/prompt.sh'
   ```

1. Aprire il file `/etc/bashrc` (Red Hat) o `/etc/bash.bashrc` (Debian/Ubuntu) con l'editor di testo preferito (ad esempio **vim** o **nano**). È necessario utilizzare **sudo** con il comando dell'editor in quanto `/etc/bashrc` e `/etc/bash.bashrc` sono di proprietà di `root`.

1. Modificare il file e la variabile del prompt della shell (`PS1`) in modo da visualizzare il nome alternativo anziché il nome host. Cercare la seguente riga che imposta il prompt della shell in `/etc/bashrc` o `/etc/bash.bashrc`. Di seguito vengono visualizzate alcune righe circostanti per fornirne il contesto. Cercare la riga che inizia con `[ "$PS1"`):

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

   Modificare `\h` (il simbolo per `hostname`) in tale riga impostando il valore della variabile `NICKNAME`.

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@$NICKNAME \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

1. (Opzionale) Per impostare il titolo delle finestre della shell utilizzando il nuovo nome alternativo, completare la procedura seguente.

   1. Creare un file denominato `/etc/sysconfig/bash-prompt-xterm`.

      ```
      [ec2-user ~]$ sudo touch /etc/sysconfig/bash-prompt-xterm
      ```

   1. Rendere eseguibile il file utilizzando il seguente comando.

      ```
      [ec2-user ~]$ sudo chmod +x /etc/sysconfig/bash-prompt-xterm
      ```

   1. Aprire il file `/etc/sysconfig/bash-prompt-xterm` con il proprio editor di testo preferito (ad esempio **vim** o **nano**). È necessario utilizzare **sudo** con il comando dell'editor in quando `/etc/sysconfig/bash-prompt-xterm` è di proprietà di `root`.

   1. Aggiungere la seguente riga al file.

      ```
      echo -ne "\033]0;${USER}@${NICKNAME}:${PWD/#$HOME/~}\007"
      ```

1. Uscire e rieseguire l'accesso per rendere effettivo il nuovo valore del nome alternativo.

## Modifica del nome host in altre distribuzioni Linux
<a name="set-hostname-other-linux"></a>

Le procedure in questa pagina sono pensate per essere utilizzate solo con Amazon Linux. Per ulteriori informazioni su altre distribuzioni Linux, consulta la documentazione specifica e i seguenti articoli:
+ [How do I assign a static hostname to a private Amazon EC2 instance running RHEL 7 or Centos 7? (Come si assegna un nome host statico a un'istanza di Amazon EC2 privata eseguita in RHEL 7 o Centos 7?)](https://aws.amazon.com/premiumsupport/knowledge-center/linux-static-hostname-rhel7-centos7/)

# Configura il DNS dinamico sulla tua istanza AL2
<a name="dynamic-dns"></a>

Quando avvii un'istanza EC2, a tale istanza vengono assegnati un indirizzo IP pubblico e un nome del sistema dei nomi di dominio (DNS) pubblico che puoi utilizzare per raggiungere l'istanza da Internet. Dal momento che sono presenti numerosi host nel dominio di Amazon Web Services, questi nomi pubblici devono essere sufficientemente lunghi per garantirne l'univocità. Un tipico nome DNS pubblico di Amazon EC2 ha un aspetto simile al seguente:`ec2-12-34-56-78.us-west-2.compute.amazonaws.com`, dove il nome è composto dal dominio Amazon Web Services, dal servizio (in questo caso,`compute`) Regione AWS, e da una forma dell'indirizzo IP pubblico.

All'interno della relativa area del dominio, i servizi DNS dinamici forniscono nomi host DNS personalizzati facili da ricordare e che possono risultare più rilevanti per lo specifico caso d'uso dell'host. Inoltre, alcuni di questi servizi sono gratuiti. Puoi utilizzare un provider di servizi DNS dinamico con Amazon EC2 e configurare l'istanza per l'aggiornamento dell'indirizzo IP associato al nome DNS pubblico a ogni avvio dell'istanza. Sono disponibili numerosi provider selezionabili. I dettagli specifici relativi alla selezione di un provider e al suo utilizzo per la registrazione di un nome non rientrano nell'ambito della presente guida.<a name="procedure-dynamic-dns"></a>

**Per utilizzare il DNS dinamico con Amazon EC2**

1. Eseguire la registrazione a un provider di servizi DNS dinamico e registrare un nome DNS pubblico mediante il relativo servizio. Questa procedura utilizza il servizio gratuito disponibile in [noip.com/free](https://www.noip.com/free) come esempio.

1. Configurare il client di aggiornamento del DNS dinamico Dopo aver registrato un provider di servizi DNS dinamico e un nome DNS pubblico con il servizio, associare il nome DNS all'indirizzo IP dell'istanza. Numerosi provider, compreso [noip.com](https://noip.com), consentono di eseguire manualmente questa operazione dalla pagina dell'account nel proprio sito Web, ma molti altri supportano anche client di aggiornamento software. Se un client di aggiornamento è in esecuzione su un'istanza EC2, il record del DNS dinamico viene aggiornato ogni volta che l'indirizzo IP cambia, come succede dopo un arresto e un riavvio. In questo esempio, viene installato il client noip2, che funziona con il servizio fornito da [noip.com](https://noip.com).

   1. Abilita l'archivio Extra Packages for Enterprise Linux (EPEL) per accedere al client. `noip2`
**Nota**  
AL2 per impostazione predefinita, le istanze hanno le chiavi GPG e le informazioni del repository per l'archivio EPEL installate. [Per ulteriori informazioni e per scaricare la versione più recente di questo pacchetto, consulta https://fedoraproject. org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL).

      ```
      [ec2-user ~]$ sudo amazon-linux-extras install epel -y
      ```

   1. Installare il pacchetto `noip`.

      ```
      [ec2-user ~]$ sudo yum install -y noip
      ```

   1. Creare il file di configurazione. Immettere le informazioni relativi al login e alla password quando viene richiesto e quindi rispondere alle domande successive per configurare il client.

      ```
      [ec2-user ~]$ sudo noip2 -C
      ```

1. Attivare il servizio noip.

   ```
   [ec2-user ~]$ sudo systemctl enable noip.service
   ```

1. Avviare il servizio noip.

   ```
   [ec2-user ~]$ sudo systemctl start noip.service
   ```

   Questo comando avvia il client, che legge il file di configurazione (`/etc/no-ip2.conf`) precedentemente creato e aggiorna l'indirizzo IP per il nome DNS pubblico selezionato.

1. Verificare che il client di aggiornamento abbia impostato l'indirizzo IP corretto per il nome DNS dinamico selezionato. Attendere alcuni minuti per consentire l'aggiornamento dei record DNS e quindi provare a connettersi all'istanza utilizzando SSH con il nome DNS pubblico configurato in questa procedura.

# Configura la tua interfaccia di rete usando ec2-net-utils per AL2
<a name="ec2-net-utils"></a>

Amazon Linux 2 AMIs può contenere script aggiuntivi installati da AWS, noti come ec2-net-utils. Questi script automatizzano facoltativamente la configurazione delle interfacce di rete. Questi script sono disponibili solo per. AL2 

**Nota**  
Per Amazon Linux 2023, il `amazon-ec2-net-utils` pacchetto genera configurazioni specifiche dell'interfaccia nella directory. `/run/systemd/network` Per ulteriori informazioni, consulta la sezione [Servizio di rete](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html) nella *Guida per l'utente di Amazon Linux 2023*.

Usa il seguente comando per installare il pacchetto AL2 se non è già installato, oppure aggiornalo se è installato e sono disponibili aggiornamenti aggiuntivi:

```
$ yum install ec2-net-utils
```

I seguenti componenti fanno parte di ec2-net-utils:

Regole udev (`/etc/udev/rules.d`)  
Identifica le interfacce di rete quando vengono collegate, scollegate o ricollegate a un'istanza in esecuzione e assicura che lo script hotplug venga eseguito (`53-ec2-network-interfaces.rules`). Esegue la mappatura dell'indirizzo MAC a un nome di dispositivo (`75-persistent-net-generator.rules`, che genera `70-persistent-net.rules`).

Script hotplug  
Genera un file di configurazione dell'interfaccia idoneo per l'utilizzo con DHCP (`/etc/sysconfig/network-scripts/ifcfg-eth`*N*). Genera inoltre un file di configurazione del routing (`/etc/sysconfig/network-scripts/route-eth`*N*).

Script DHCP  
Ogni volta che l'interfaccia di rete riceve un nuovo lease DHCP, questo script esegue una query sui metadati dell'istanza per cercare gli indirizzi IP elastici. Per ogni indirizzo IP elastico, aggiunge una regola al database delle policy di routing per garantire che il traffico in uscita da tale indirizzo utilizzi l'interfaccia di rete corretta. All'interfaccia di rete aggiunge inoltre ciascun indirizzo IP privato come indirizzo secondario.

**ec2ifup** eth*N* (`/usr/sbin/`)  
Estende la funzionalità del comando standard **ifup**. Dopo che questo script ha riscritto i file di configurazione `ifcfg-eth`*N* e `route-eth`*N*, esegue **ifup**.

**ec2ifdown** eth*N* (`/usr/sbin/`)  
Estende la funzionalità del comando standard **ifdown**. Dopo che questo script ha rimosso le regole per l'interfaccia di rete dal database delle policy di routing, esegue **ifdown**.

**ec2ifscan** (`/usr/sbin/`)  
Verifica la presenza di interfacce di rete non configurate e le configura.  
Questo script non è disponibile nella versione iniziale di ec2-net-utils.

Per elencare i file di configurazione generati da ec2-net-utils, utilizzare il seguente comando:

```
$ ls -l /etc/sysconfig/network-scripts/*-eth?
```

Per disabilitare l'automazione, puoi aggiungere `EC2SYNC=no` al file `ifcfg-eth`*N* corrispondente. Ad esempio, utilizza il seguente comando per disabilitare l'automazione per l'interfaccia eth1:

```
$ sed -i -e 's/^EC2SYNC=yes/EC2SYNC=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
```

Per disabilitare completamente l'automazione, puoi rimuovere il pacchetto utilizzando il seguente comando:

```
$ yum remove ec2-net-utils
```

# Kernel forniti dall'utente
<a name="UserProvidedKernels"></a>

Se ti occorre un kernel personalizzato per le istanze Amazon EC2, puoi iniziare con un'AMI vicina a quella che desideri, quindi puoi compilare il kernel personalizzato sull'istanza e aggiornare il bootloader per puntare al nuovo kernel. Questo processo varia a seconda del tipo di virtualizzazione utilizzato dall'AMI. Per ulteriori informazioni, consulta i [tipi di virtualizzazione delle AMI Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html) nella Guida per l'utente di *Amazon EC2*.

**Topics**
+ [HVM ( AMIs GRUB)](#HVM_instances)
+ [Paravirtual AMIs (PV-GRUB)](#Paravirtual_instances)

## HVM ( AMIs GRUB)
<a name="HVM_instances"></a>

I volumi delle istanze HVM vengono trattati come dischi fisici reali. Il processo di avvio è simile a quello di un sistema operativo bare metal, con un disco partizionato e un bootloader che consente di lavorare con tutte le distribuzioni Linux attualmente supportate. Il bootloader più comune è GRUB o. GRUB2

Per impostazione predefinita, GRUB non invia il suo output alla console dell'istanza, perché questo comporta un ritardo aggiuntivo nell'avvio. Per ulteriori informazioni, consulta [Output della console delle istanze](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-unreachable-instance.html#instance-console-console-output) nella *Guida per l’utente di Amazon EC2*. Se si sta installando un kernel personalizzato, si dovrebbe prendere in considerazione l'abilitazione dell'output di GRUB.

Non occorre specificare un kernel di fallback, ma suggeriamo di averne uno quando si prova un nuovo kernel. GRUB può ritornare su un altro kernel nel caso in cui quello nuovo non funzioni. Avere un kernel di fallback consente l'avvio dell'istanza anche se il nuovo kernel non viene trovato.

La versione precedente di GRUB per Amazon Linux utilizza`/boot/grub/menu.lst`. GRUB2 per AL2 usi`/etc/default/grub`. Per ulteriori informazioni sull'aggiornamento del kernel predefinito nel bootloader, vedere la documentazione per la distribuzione Linux.

## Paravirtual AMIs (PV-GRUB)
<a name="Paravirtual_instances"></a>

AMIs *che utilizzano la virtualizzazione paravirtual (PV) utilizzano un sistema chiamato PV-GRUB durante il processo di avvio.* PV-GRUB è un bootloader paravirtuale che esegue patch della versione GNU GRUB 0.97. Quando avvii un'istanza, PV-GRUB inizia il processo di avvio e carica in sequenza il kernel specificato dal file dell'immagine `menu.lst`.

PV-GRUB comprende i comandi standard `grub.conf` o `menu.lst`, che gli consentono di lavorare con tutte le distribuzioni Linux attualmente supportate. Le distribuzioni precedenti, come Ubuntu 10.04 LTS, Oracle Enterprise Linux o CentOS 5.x, richiedono uno speciale pacchetto di kernel "ec2" o "xen", mentre le distribuzioni più recenti includono i driver necessari nel pacchetto di kernel predefinito.

La maggior parte delle moderne AMI paravirtuali utilizza un AKI PV-GRUB per impostazione predefinita (comprese tutte le AMI Linux paravirtuali disponibili nel menu Amazon EC2 Launch Wizard Quick Start), perciò non occorre eseguire altri passaggi per utilizzare un kernel diverso sull'istanza, sempre che il kernel che vuoi utilizzare sia compatibile con la tua distribuzione. Il modo migliore per eseguire un kernel personalizzato sulla tua istanza è iniziare da un'AMI vicina a quella desiderata, quindi compilare il kernel personalizzato sull'istanza e modificare il file `menu.lst` per eseguire l'avvio con quel kernel.

È possibile verificare che l'immagine del kernel per un AMI sia un AKI PV-GRUB. Eseguire il comando [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) (sostituendo l'ID immagine del kernel) e verificare se il campo `Name` inizia con `pv-grub`:

```
aws ec2 describe-images --filters Name=image-id,Values=aki-880531cd
```

**Topics**
+ [Limiti di PV-GRUB](#pv-grub-limitations)
+ [Configuring GRUB](#configuringGRUB)
+ [Immagine del kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs)
+ [Aggiornamento di PV-GRUB](#UpdatingPV-GRUB)

### Limiti di PV-GRUB
<a name="pv-grub-limitations"></a>

PV-GRUB presenta i seguenti limiti:
+ Non è possibile utilizzare la versione a 64 bit di PV-GRUB per avviare un kernel da 32 bit o viceversa.
+ Non è possibile specificare una Amazon ramdisk image (ARI) quando si utilizza un AKI PV-GRUB.
+ AWS ha testato e verificato che PV-GRUB funzioni con questi formati di file system: EXT2,,, JFS EXT3 EXT4, XFS e ReiserFS. Altri formati potrebbero non funzionare.
+ PV-GRUB può avviare kernel compressi tramite i formati di compressione gzip, bzip2, lzo e xz.
+ I cluster AMIs non supportano o non necessitano di PV-GRUB, poiché utilizzano la virtualizzazione hardware completa (HVM). Mentre le istanze paravirtuali utilizzano PV-GRUB per l'avvio, i volumi delle istanze HVM sono trattati come dischi reali e il processo di avvio è simile a quello di un sistema operativo bare metal con disco partizionato e bootloader. 
+ Le versioni 1.03 e precedenti di PV-GRUB non supportano il partizionamento GPT, ma solo il partizionamento MBR.
+ Se hai in programma di utilizzare un gestore logico di volumi (LVM) con i volumi Amazon Elastic Block Store (Amazon EBS), ti servirà una partizione di avvio distinta al di fuori del LVM. Potrai così creare volumi logici con il LVM.

### Configura GRUB per paravirtual AMIs
<a name="configuringGRUB"></a>

Per avviare PV-GRUB, nell'immagine deve essere presente un file `menu.lst` GRUB; la posizione più comune di questo file è `/boot/grub/menu.lst`.

Di seguito è riportato un esempio di un file di configurazione `menu.lst` per l'avvio di un'AMI con un AKI PV-GRUB. In questo esempio è possibile scegliere tra due voci di kernel: Amazon Linux 2018.03 (il kernel originale dell'AMI) e Vanilla Linux 4.16.4 (una versione più recente del kernel Vanilla Linux da [https://www.kernel.org/](https://www.kernel.org/)). La voce Vanilla è stata copiata dalla voce originale di questa AMI e i percorsi `kernel` e `initrd` sono stati aggiornati sulle nuove posizioni. Il parametro `default 0` punta il bootloader sulla prima voce che visualizza (in questo caso, la voce Vanilla) e il parametro `fallback 1` punta il bootloader sulla voce successiva in caso di problemi nell'avvio della prima.

```
default 0
fallback 1
timeout 0
hiddenmenu

title Vanilla Linux 4.16.4
root (hd0)
kernel /boot/vmlinuz-4.16.4 root=LABEL=/ console=hvc0
initrd /boot/initrd.img-4.16.4

title Amazon Linux 2018.03 (4.14.26-46.32.amzn1.x86_64)
root (hd0)
kernel /boot/vmlinuz-4.14.26-46.32.amzn1.x86_64 root=LABEL=/ console=hvc0
initrd /boot/initramfs-4.14.26-46.32.amzn1.x86_64.img
```

Non occorre specificare un kernel di fallback nel file `menu.lst`, ma ti suggeriamo di averne uno quando testi un nuovo kernel. PV-GRUB può ritornare su un altro kernel nel caso in cui quello nuovo non funzioni. Avere un kernel di fallback permette l'avvio dell'istanza anche se il nuovo kernel non viene trovato. 

PV-GRUB controlla le seguenti posizioni di `menu.lst` utilizzando la prima che trova:
+  `(hd0)/boot/grub` 
+  `(hd0,0)/boot/grub` 
+  `(hd0,0)/grub` 
+  `(hd0,1)/boot/grub` 
+  `(hd0,1)/grub` 
+  `(hd0,2)/boot/grub` 
+  `(hd0,2)/grub` 
+  `(hd0,3)/boot/grub` 
+  `(hd0,3)/grub` 

Le versioni di PV-GRUB fino alla 1.03 controllano solo una delle prime due posizioni nell'elenco.

### Immagine del kernel Amazon PV-GRUB IDs
<a name="AmazonKernelImageIDs"></a>

Gli AKI PV-GRUB sono disponibili in tutte le Regioni di Amazon EC2, esclusa la Regione Asia Pacifico (Osaka). Esistono tipi di architettura sia AKIs a 32 bit che a 64 bit. La maggior parte delle versioni moderne AMIs utilizza un PV-GRUB AKI di default.

Ti suggeriamo di utilizzare sempre la versione più recente dell'AKI PV-GRUB, perché non tutte le versioni sono compatibili con ogni tipo di istanza. Utilizzate il seguente comando [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) per ottenere un elenco di PV-GRUB per la regione corrente: AKIs 

```
aws ec2 describe-images --owners amazon --filters Name=name,Values=pv-grub-*.gz
```

PV-GRUB è l'unico AKI disponibile nella regione `ap-southeast-2`. Devi verificare che le AMI che vuoi copiare su questa regione utilizzino una versione di PV-GRUB disponibile nella regione.

Le seguenti sono le AKI correnti per ogni regione. IDs Registra un nuovo AMIs file usando un AKI hd0.

**Nota**  
Continuiamo a fornire hd00 AKIs per la retrocompatibilità nelle regioni in cui erano precedentemente disponibili.


**ap-northeast-1, Asia Pacific (Tokyo)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-f975a998  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-7077ab11  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-1, Asia Pacific (Singapore) Region**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-17a40074  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-73a50110  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**ap-southeast-2, Asia Pacific (Sydney)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-ba5665d9  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-66506305  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-central-1, Europe (Frankfurt)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-1419e57b  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-931fe3fc  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**eu-west-1, Europe (Ireland)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-1c9fd86f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-dc9ed9af  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**sa-east-1, South America (São Paulo)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-7cd34110  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-912fbcfd  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-east-1, US East (N. Virginia)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-04206613  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-5c21674b  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-gov-west-1, AWS GovCloud (Stati Uniti occidentali)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-5ee9573f  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-9ee55bff  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-1, US West (N. California)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-43cf8123  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-59cc8239  |  pv-grub-hd0\$11.05-x86\$164.gz  | 


**us-west-2, US West (Oregon)**  

| ID immagine | Nome immagine | 
| --- | --- | 
|  aki-7a69931a  |  pv-grub-hd0\$11.05-i386.gz  | 
|  aki-70cb0e10  |  pv-grub-hd0\$11.05-x86\$164.gz  | 

### Aggiornamento di PV-GRUB
<a name="UpdatingPV-GRUB"></a>

Ti suggeriamo di utilizzare sempre la versione più recente dell'AKI PV-GRUB, perché non tutte le versioni sono compatibili con ogni tipo di istanza. Inoltre, le versioni precedenti di PV-GRUB non sono disponibili in tutte le regioni, quindi se copi un'AMI che utilizza una versione precedente su una regione che non la supporta, non potrai avviare istanze da quell'AMI fino a quando non aggiorni l'immagine del kernel. Utilizza le seguenti procedure per verificare la versione di PV-GRUB dell'istanza e aggiornarla se necessario.

**Per verificare la versione di PV-GRUB**

1. Trovare l'ID kernel per l'istanza.

   ```
   aws ec2 describe-instance-attribute --instance-id instance_id --attribute kernel --region region
   
   {
       "InstanceId": "instance_id", 
       "KernelId": "aki-70cb0e10"
   }
   ```

   L'ID kernel per l'istanza è `aki-70cb0e10`.

1. Visualizzare le informazioni sulla versione dell'ID kernel.

   ```
   aws ec2 describe-images --image-ids aki-70cb0e10 --region region
   
   {
       "Images": [
           {
               "VirtualizationType": "paravirtual", 
               "Name": "pv-grub-hd0_1.05-x86_64.gz", 
               ...
               "Description": "PV-GRUB release 1.05, 64-bit"
           }
       ]
   }
   ```

   L'immagine del kernel è PV-GRUB 1.05. Se la versione di PV-GRUB non è la più recente (come indicato in [Immagine del kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs)), devi aggiornarla utilizzando la seguente procedura.

**Per aggiornare la versione di PV-GRUB**

Se la tua istanza utilizza una versione precedente di PV-GRUB, devi aggiornarla alla versione più recente.

1. Identificare l'AKI PV-GRUB più recente per la regione e l'architettura del processore da [Immagine del kernel Amazon PV-GRUB IDs](#AmazonKernelImageIDs).

1. Arrestare l'istanza. La tua istanza deve essere arrestata per modificare l'immagine del kernel utilizzata.

   ```
   aws ec2 stop-instances --instance-ids instance_id --region region
   ```

1. Modificare l'immagine del kernel utilizzata per l'istanza.

   ```
   aws ec2 modify-instance-attribute --instance-id instance_id --kernel kernel_id --region region
   ```

1. Riavviare l'istanza.

   ```
   aws ec2 start-instances --instance-ids instance_id --region region 
   ```

# AL2 Notifiche di rilascio AMI
<a name="linux-ami-notifications"></a>

Per ricevere una notifica quando AMIs vengono rilasciati nuovi Amazon Linux, puoi abbonarti utilizzando Amazon SNS.

Per informazioni sulla sottoscrizione alle notifiche per AL2023, consulta [Ricezione di notifiche sui nuovi aggiornamenti](https://docs.aws.amazon.com/linux/al2023/ug/receive-update-notification.html) nella *Guida per l'utente di Amazon Linux 2023*.

**Nota**  
Il supporto standard per AL1 è terminato il 31 dicembre 2020. La fase AL1 di supporto alla manutenzione si è conclusa il 31 dicembre 2023. Per ulteriori informazioni sull' AL1 EOL e sul supporto di manutenzione, consulta il post del blog [Update on Amazon Linux AMI end-of-life](https://aws.amazon.com/blogs/aws/update-on-amazon-linux-ami-end-of-life/).

**Per sottoscrivere alle notifiche Amazon Linux**

1. [Apri la console Amazon SNS nella versione v3/home. https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. Nella barra di navigazione modifica la regione in **Stati Uniti orientali (Virginia settentrionale)**, se necessario. Devi selezionare la regione in cui la notifica SNS per la quale hai effettuato la sottoscrizione è stata creata.

1. Nel pannello di navigazione, scegli **Subscriptions (Abbonamenti)**, quindi **Create subscription (Crea abbonamento)**.

1. Nella finestra di dialogo **Create subscription (Crea sottoscrizione)** eseguire le seguenti operazioni:

   1. [AL2] In **Topic ARN (ARN argomento)** copiare e incollare il seguente ARN (Amazon Resource Name): **arn:aws:sns:us-east-1:137112412989:amazon-linux-2-ami-updates**.

   1. [Amazon Linux] In **Topic ARN (ARN argomento)** copiare e incollare il seguente nome della risorsa Amazon (ARN): **arn:aws:sns:us-east-1:137112412989:amazon-linux-ami-updates**.

   1. Per **Protocol**, scegliere **Email**.

   1. In **Endpoint** immetti l'indirizzo e-mail utilizzabile per ricevere le notifiche.

   1. Scegli **Create Subscription (Crea sottoscrizione)**.

1. Riceverai un'e-mail di conferma con oggetto "AWS Notifica - Conferma dell'abbonamento». Apri l'e-mail e seleziona **Conferma sottoscrizione** per completare la sottoscrizione.

Ogni volta che AMIs vengono rilasciati, inviamo notifiche agli abbonati sull'argomento corrispondente. Per non ricevere più queste notifiche, utilizza la procedura seguente per annullare la sottoscrizione.

**Per annullare la sottoscrizione alle notifiche Amazon Linux**

1. [Apri la console Amazon SNS nella versione v3/home. https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. Nella barra di navigazione modifica la regione in **Stati Uniti orientali (Virginia settentrionale)**, se necessario. È necessario utilizzare la regione in cui è stata creata la notifica SNS.

1. Nel pannello di navigazione scegli **Subscriptions (Abbonamenti)**, seleziona l'abbonamento, quindi scegli **Actions (Operazioni)**, **Delete subscriptions (Elimina sottoscrizioni)**.

1. Quando viene richiesta la conferma, seleziona **Elimina**.

**Formato dei messaggi AMI SNS Amazon Linux**  
Lo schema per il messaggio SNS è il seguente. 

```
{
    "description": "Validates output from AMI Release SNS message",
    "type": "object",
    "properties": {
        "v1": {
            "type": "object",
            "properties": {
                "ReleaseVersion": {
                    "description": "Major release (ex. 2018.03)",
                    "type": "string"
                },
                "ImageVersion": {
                    "description": "Full release (ex. 2018.03.0.20180412)",
                    "type": "string"
                },
                "ReleaseNotes": {
                    "description": "Human-readable string with extra information",
                    "type": "string"
                },
                "Regions": {
                    "type": "object",
                    "description": "Each key will be a region name (ex. us-east-1)",
                    "additionalProperties": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "Name": {
                                    "description": "AMI Name (ex. amzn-ami-hvm-2018.03.0.20180412-x86_64-gp2)",
                                    "type": "string"
                                },
                                "ImageId": {
                                    "description": "AMI Name (ex.ami-467ca739)",
                                    "type": "string"
                                }
                            },
                            "required": [
                                "Name",
                                "ImageId"
                            ]
                        }
                    }
                }
            },
            "required": [
                "ReleaseVersion",
                "ImageVersion",
                "ReleaseNotes",
                "Regions"
            ]
        }
    },
    "required": [
        "v1"
    ]
}
```

# Configura la connessione desktop MATE AL2
<a name="amazon-linux-ami-mate"></a>

L'[ambiente desktop MATE](https://mate-desktop.org/) è preinstallato e preconfigurato AMIs con la seguente descrizione:

"`.NET Core x.x, Mono x.xx, PowerShell x.x, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS).`"

L'ambiente fornisce un'interfaccia utente grafica intuitiva per l'amministrazione delle istanze AL2 con un uso minimo della riga di comando. L'interfaccia utilizza rappresentazioni grafiche, come icone, finestre, barre degli strumenti, cartelle, sfondi e widget desktop. Sono disponibili strumenti integrati basati su GUI per eseguire attività comuni. Ad esempio, esistono strumenti per aggiungere e rimuovere software, applicare aggiornamenti, organizzare file, avviare programmi e monitorare lo stato del sistema.

**Importante**  
`xrdp` è il software per desktop remoto incluso nell'AMI. Per impostazione predefinita, `xrdp` utilizza un certificato TLS autofirmato per crittografare le sessioni di desktop remoto. AWS Né i `xrdp` manutentori consigliano di utilizzare certificati autofirmati in produzione. Al contrario, ottenere un certificato da un'autorità di certificazione (CA) appropriata e installarlo nelle istanze. Per ulteriori informazioni sulla configurazione TLS, consulta il [livello di sicurezza TLS](https://github.com/neutrinolabs/xrdp/wiki/TLS-security-layer) sulla wiki `xrdp`.

**Nota**  
Se preferisci utilizzare un servizio di elaborazione di rete virtuale (VNC) anziché xrdp, consulta l'articolo [Come posso installare una GUI sulla mia istanza Amazon EC2 che esegue Knowledge Center](https://repost.aws/knowledge-center/ec2-linux-2-install-gui). AL2 AWS 

## Prerequisito
<a name="al2-mate-configure-prerequisite"></a>

Per eseguire i comandi mostrati in questo argomento, devi installare AWS Command Line Interface (AWS CLI) o AWS Tools for Windows PowerShell e configurare il tuo profilo. AWS 

**Opzioni**

1. Installa il AWS CLI : per ulteriori informazioni, consulta [Installazione AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html) e [nozioni di base sulla configurazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) nella *Guida per l'AWS Command Line Interface utente*.

1. Installa gli strumenti per Windows PowerShell : per ulteriori informazioni, consulta [Installazione AWS Tools for Windows PowerShell e condivisione delle](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html) [credenziali nella Guida](https://docs.aws.amazon.com/powershell/latest/userguide/shared-credentials-in-aws-powershell.html) per l'*AWS Strumenti per PowerShell utente*.

**Suggerimento**  
In alternativa all'installazione completa di AWS CLI, è possibile utilizzare [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)una shell preautenticata basata su browser che si avvia direttamente da. Console di gestione AWS Seleziona [Supportato Regioni AWS](https://docs.aws.amazon.com/cloudshell/latest/userguide/supported-aws-regions.html), per assicurarti che sia disponibile nella regione in cui lavori.

## Configurazione della connessione RDP
<a name="al2-mate-configure-connection"></a>

Attieniti alla seguente procedura per impostare una connessione RDP (Remote Desktop Protocol) dal computer locale a un'istanza AL2 che esegue l'ambiente desktop MATE.

1. Per ottenere l'ID dell'AMI AL2 che include MATE nel nome AMI, puoi usare il comando [describe-images](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html) dallo strumento a riga di comando locale. Se non avete installato gli strumenti da riga di comando, potete eseguire la seguente interrogazione direttamente da una sessione. AWS CloudShell Per informazioni su come avviare una sessione di shell da CloudShell, consultate [Guida introduttiva AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html). Dalla console Amazon EC2 è possibile trovare l'AMI che include MATE avviando un'istanza e quindi inserendo `MATE` nella barra di ricerca AMI. Il AL2 Quick Start con MATE preinstallato verrà visualizzato nei risultati della ricerca.

   ```
   aws ec2 describe-images --filters "Name=name,Values=amzn2*MATE*" --query "Images[*].[ImageId,Name,Description]"
   [
       [
           "ami-0123example0abc12",
           "amzn2-x86_64-MATEDE_DOTNET-2020.12.04",
           ".NET Core 5.0, Mono 6.12, PowerShell 7.1, and MATE DE pre-installed to run your .NET applications on Amazon Linux 2 with Long Term Support (LTS)."
       ],
       [
           "ami-0456example0def34",
           "amzn2-x86_64-MATEDE_DOTNET-2020.04.14",
           "Amazon Linux 2 with .Net Core, PowerShell, Mono, and MATE Desktop Environment"
       ]
   ]
   ```

   Scegli l'AMI appropriato per il tuo utilizzo.

1. Avviare un'istanza EC2 con l'AMI individuata nel passaggio precedente. Configurare il gruppo di sicurezza per consentire il traffico TCP in ingresso alla porta 3389. Per ulteriori informazioni sui gruppi di sicurezza, consulta [Gruppi di sicurezza per il VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html). Questa configurazione consente di utilizzare un client RDP per connettersi all'istanza.

1. Connettersi all'istanza utilizzando [SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html).

1. Aggiorna il software e il kernel sull'istanza.

   ```
   [ec2-user ~]$ sudo yum update
   ```

   Al termine dell'aggiornamento riavvia l'istanza per accertarti che utilizzi i pacchetti e le librerie dell'aggiornamento; gli aggiornamenti del kernel vengono caricati solo dopo il riavvio.

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. Ricollegati all'istanza e utilizza il comando seguente sull'istanza Linux per impostare la password per `ec2-user`.

   ```
   [ec2-user ~]$ sudo passwd ec2-user
   ```

1. Installare il certificato e la chiave.

   Se già disponi di un certificato e di una chiave, copiali nella directory `/etc/xrdp/` come segue:
   + Certificato - `/etc/xrdp/cert.pem`
   + Chiave - `/etc/xrdp/key.pem`

   Se non disponi di un certificato e di una chiave, utilizza il seguente comando per generarli nella directory `/etc/xrdp`.

   ```
   $ sudo openssl req -x509 -sha384 -newkey rsa:3072 -nodes -keyout /etc/xrdp/key.pem -out /etc/xrdp/cert.pem -days 365
   ```
**Nota**  
Questo comando genera un certificato valido per 365 giorni.

1. Aprire un client RDP sul computer da cui ci si connette all'istanza (ad esempio, Connessione desktop remoto su un computer che esegue Microsoft Windows). Immettere `ec2-user` come nome utente e immettere la password creata nella fase precedente.

**Disabilitare `xrdp` sull'istanza Amazon EC2**  
È possibile disattivare `xrdp` in qualsiasi momento eseguendo uno dei seguenti comandi sull'istanza Linux. I seguenti comandi non influiscono sulla capacità di utilizzare MATE con un server X11.

```
[ec2-user ~]$ sudo systemctl disable xrdp
```

```
[ec2-user ~]$ sudo systemctl stop xrdp
```

**Abilitare `xrdp` sull'istanza Amazon EC2**  
Per riattivarlo `xrdp` in modo da poterti connettere alla tua AL2 istanza che esegue l'ambiente desktop MATE, esegui uno dei seguenti comandi sull'istanza Linux.

```
[ec2-user ~]$ sudo systemctl enable xrdp
```

```
[ec2-user ~]$ sudo systemctl start xrdp
```

# AL2 Tutorial
<a name="al2-tutorials"></a>

 I seguenti tutorial mostrano come eseguire attività comuni utilizzando istanze Amazon EC2 in esecuzione. AL2 [Per i tutorial video, consulta Video didattici e laboratori.AWS](https://www.aws.training/) 

Per AL2023 istruzioni, consulta [i tutorial nella Guida](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) per l'*utente di Amazon Linux 2023*.

**Topics**
+ [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: Ospita un WordPress blog su AL2](hosting-wordpress.md)

# Tutorial: installa un server LAMP su AL2
<a name="ec2-lamp-amazon-linux-2"></a>

[Le seguenti procedure consentono di installare un server Web Apache con supporto PHP e MariaDB (un fork di MySQL sviluppato dalla comunità) sull'istanza (a volte chiamata server web LAMP o stack LAMP).](https://mariadb.org/about/) AL2 Puoi usare questo server per ospitare un sito Web statico o distribuire un'applicazione PHP dinamica che legge e scrive informazioni in un database.

**Importante**  
Se si sta tentando di configurare un server web LAMP su una distribuzione diversa, come Ubuntu o Red Hat Enterprise Linux, questo tutorial non funzionerà. AL2023Per[, AL2023 consulta Installare](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html) un server LAMP su. Per Ubuntu, consulta la seguente documentazione della community di Ubuntu: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Per altre distribuzioni, consulta la relativa documentazione specifica.

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager Automation anziché le seguenti attività, esegui il [AWS documento ALAMPServer Docs-Install](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) - Automation. AL2

**Topics**
+ [Fase 1: preparare il server LAMP](#prepare-lamp-server)
+ [Fase 2: verificare il server LAMP](#test-lamp-server)
+ [Fase 3: proteggere il server di database](#secure-mariadb-lamp-server)
+ [Fase 4: (Facoltativo) Installazione phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Risoluzione dei problemi](#lamp-troubleshooting)
+ [Argomenti correlati](#lamp-more-info)

## Fase 1: preparare il server LAMP
<a name="prepare-lamp-server"></a>

**Prerequisiti**
+ Questo tutorial presuppone che tu abbia già avviato una nuova istanza utilizzando AL2, con un nome DNS pubblico raggiungibile da Internet. Per ulteriori informazioni, consulta [Launch an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) nella *Amazon EC2 User* Guide. È inoltre necessario aver configurato il gruppo di sicurezza per consentire le connessioni SSH (porta 22), HTTP (porta 80) e HTTPS (porta 443). Per ulteriori informazioni su questi prerequisiti, consulta [le regole dei gruppi di sicurezza nella Guida](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) per l'utente di *Amazon EC2*.
+ La seguente procedura installa l'ultima versione di PHP attualmente disponibile su. AL2 `php8.2` Se hai in programma di utilizzare applicazioni PHP diverse da quelle descritte in questo tutorial, devi controllare che siano compatibili con `php8.2`.<a name="install_apache-2"></a>

**Per preparare il server LAMP**

1. [Connettiti alla tua istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Per verificare che tutti i pacchetti software siano aggiornati, eseguire un aggiornamento rapido del software sull'istanza. Questo processo può richiedere alcuni minuti, ma è importante assicurarsi di disporre della versione più recente degli aggiornamenti della sicurezza e delle correzioni dei bug.

   L'opzione `-y` installa gli aggiornamenti senza chiedere conferma. Se desideri esaminare gli aggiornamenti prima di installarli, puoi omettere questa opzione.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Installare i repository Amazon Linux Extras `mariadb10.5` per ottenere le versioni più recenti del pacchetto e MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   Se si verifica un errore indicante `sudo: amazon-linux-extras: command not found`, l'istanza non è stata avviata con un'AMI 2 di Amazon Linux (forse stai utilizzando Amazon Linux AMI). È possibile visualizzare la versione di Amazon Linux con il comando seguente.

   ```
   cat /etc/system-release
   ```

1. Installa i repository `php8.2` Amazon Linux Extras per ottenere la versione più recente del PHP pacchetto per. AL2

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Ora che l'istanza è corrente, è possibile installare i pacchetti del server Web Apache, MariaDB e PHP. Utilizzare il comando yum per installare contemporaneamente più pacchetti software e tutte le dipendenze correlate.

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   È possibile visualizzare le versioni correnti di tali pacchetti utilizzando il comando seguente:

   ```
   yum info package_name
   ```

1. Avviare il server Web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  Utilizzare il comando **systemctl** per configurare il server Web Apache per l'avvio a ogni avvio del sistema. 

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   Puoi verificare che **httpd** sia attivo eseguendo il seguente comando:

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. Se ancora non è stato fatto, aggiungere una regola di sicurezza per consentire le connessioni HTTP (porta 80) entranti all'istanza. Per impostazione predefinita, durante l'inizializzazione è stato configurato un gruppo *N* di sicurezza **launch-wizard** per l'istanza. Questo gruppo contiene una regola singola per consentire connessioni SSH. 

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Scegliere **Instances (Istanze)** e selezionare l'istanza.

   1. Nella scheda **Security (Sicurezza)** visualizzare le regole in entrata. Verrà visualizzata la regola seguente:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**avvertimento**  
L'utilizzo `0.0.0.0/0` consente a tutti gli IPv4 indirizzi di accedere all'istanza tramite SSH. L'opzione è accettabile per un breve periodo di tempo in un ambiente di test, ma non è sicura per gli ambienti di produzione. In produzione, potrai autorizzare solo un determinato indirizzo IP o un intervallo di indirizzi per accedere a un'istanza.

   1. Scegliere il collegamento per il gruppo di sicurezza. Utilizzando le procedure in [Aggiungi regole a un gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), aggiungi una nuova regola di sicurezza in entrata con i seguenti valori:
      + **Type (Tipo)**: HTTP
      + **Protocollo**: TCP
      + **Port Range** (Intervallo porte): 80
      + **Source (Origine)**: personalizzata

1. Verificare il server Web. Nel browser Web, digitare l'indirizzo DNS pubblico (o l'indirizzo IP pubblico) dell'istanza. In assenza di contenuti in `/var/www/html`, dovrebbe venire visualizzata la pagina di test di Apache. È possibile ottenere il DNS pubblico per l'istanza utilizzando la console Amazon EC2 (controllare la colonna **Public DNS (DNS pubblico)**; se la colonna è nascosta, scegliere **Show/Hide Columns (Mostra/nascondi colonne)** (l'icona a forma di ingranaggio) e quindi **Public DNS (DNS pubblico)**).

   Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta [Aggiungere regole al gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**Importante**  
Se non si utilizza Amazon Linux, potrebbe inoltre essere necessario configurare il firewall sull'istanza per consentire tali connessioni. Per ulteriori informazioni sulla modalità di configurazione del firewall, consulta la documentazione per la distribuzione specifica.  
![\[Il test del server mostra la pagina di test di Apache.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** utilizza i file che sono tenuti in una directory chiamata root del documento di Apache. La root del documento di Apache Amazon Linux è `/var/www/html`, che per impostazione predefinita è di proprietà della root.

Per permettere all'account `ec2-user` di manipolare file nella directory, è necessario modificare la proprietà e le autorizzazioni della directory. Sono disponibili molti modi per completare questa attività. In questo tutorial, aggiungi l'utente `ec2-user` al gruppo `apache` per assegnare la proprietà del gruppo `apache` della directory `/var/www` e assegnare autorizzazioni di scrittura al gruppo.<a name="setting-file-permissions-2"></a>

**Per impostare le autorizzazioni dei file**

1. Aggiungere l'utente (in questo caso `ec2-user`) al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. Uscire e ripetere l'accesso per scegliere il nuovo gruppo, quindi verificare l'appartenenza.

   1. Uscire (utilizzare il comando **exit** o chiudere la finestra terminale):

      ```
      [ec2-user ~]$ exit
      ```

   1. Per verificare l'appartenenza al gruppo `apache`, riconnettersi all'istanza, quindi eseguire il seguente comando:

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. Modificare la proprietà del gruppo di `/var/www` e dei suoi contenuti al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. Per aggiungere le autorizzazioni di scrittura di gruppo e impostare l'ID di gruppo nelle sottodirectory future, modificare le autorizzazioni di directory di `/var/www` e delle relative sottodirectory.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Per aggiungere le autorizzazioni di scrittura di gruppo, modificare in modo ricorsivo le autorizzazioni del file di `/var/www` e delle relative sottodirectory:

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

Ora, `ec2-user` (e qualsiasi membro futuro del gruppo `apache`) può aggiungere, eliminare e modificare i file nella root del documento di Apache, consentendoti di aggiungere contenuti, ad esempio un sito Web statico o un'applicazione PHP.

**Per proteggere il server Web (facoltativo)**  
Un server Web che esegue il protocollo HTTP non offre alcuna sicurezza di trasporto per i dati inviati e ricevuti. Quando ti connetti a un server HTTP utilizzando un browser Web, URLs ciò che visiti, il contenuto delle pagine Web che ricevi e il contenuto (comprese le password) di tutti i moduli HTML che invii sono tutti visibili agli intercettatori ovunque lungo il percorso di rete. La best practice per la protezione del tuo server Web prevede l'installazione del supporto per HTTPS (HTTP Secure), che protegge i dati con la crittografia SSL/TLS.

Per informazioni sull'abilitazione di HTTPS sul server, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).

## Fase 2: verificare il server LAMP
<a name="test-lamp-server"></a>

Se il server è installato e in esecuzione e le autorizzazioni dei file sono impostate correttamente, l'account `ec2-user` dovrebbe essere in grado di creare un file PHP nella directory `/var/www/html` disponibile da Internet.

**Per verificare il server LAMP**

1. Creare un file PHP nella root del documento di Apache.

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   Se si verifica un errore "Permission denied" (Autorizzazione negata) quando si tenta di eseguire questo comando, provare a uscire e accedere nuovamente per ottenere le autorizzazioni di gruppo appropriate configurate in [Per impostare le autorizzazioni dei file](#setting-file-permissions-2).

1. In un browser Web, digitare l'URL del file appena creato. Questo URL è l'indirizzo DNS pubblico dell'istanza, seguito da una barra e dal nome di file. Ad esempio:

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Viene visualizzata la pagina delle informazioni PHP:  
![\[Il test del server LAMP mostra la pagina di informazioni PHP.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/phpinfo7.2.10.png)

   Se non viene visualizzata questa pagina, verifica che il file `/var/www/html/phpinfo.php` sia stato creato correttamente nella fase precedente. È anche possibile verificare che tutti i pacchetti richiesti siano stati installati con il seguente comando.

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   Se uno dei pacchetti richiesti non è elencato nell'output, installarlo utilizzando il comando **sudo yum install *package***. Verificare inoltre che extra `php7.2` e `lamp-mariadb10.2-php7.2` siano abilitati nell'output del comando **amazon-linux-extras**.

1. Eliminare il file `phpinfo.php`. Sebbene questa informazione possa essere utile, non deve essere divulgata su Internet per ragioni di sicurezza.

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

Ora si dovrebbe avere un server Web LAMP completamente funzionante. Se vengono aggiunti contenuti alla root del documento di Apache su `/var/www/html`, dovrebbe essere possibile visualizzare tali contenuti all'indirizzo DNS pubblico per l'istanza. 

## Fase 3: proteggere il server di database
<a name="secure-mariadb-lamp-server"></a>

L'installazione predefinita del server MariaDB ha diverse caratteristiche che sono ottime per test e sviluppo, ma dovrebbero essere disabilitate o rimosse per i server di produzione. Il comando **mysql\$1secure\$1installation** guida attraverso il processo di impostazione di una password root e la rimozione delle caratteristiche non protette dall'installazione. Anche se non hai intenzione di utilizzare il server MariaDB, consigliamo di eseguire questa procedura.<a name="securing-maria-db"></a>

**Per proteggere il server MariaDB**

1. Avviare il server MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Esegui **mysql\$1secure\$1installation**.

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. Quando richiesto, digitare una password per l'account root.

      1. Digitare la password root corrente. Per impostazione predefinita, l'account root non ha una password configurata. Premere Invio.

      1. Digitare **Y** per impostare una password e digitare una password sicura due volte. Per ulteriori informazioni sulla creazione di una password sicura, vedere [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/). Assicurarsi di conservare questa password in un posto sicuro.

         L'impostazione di una password root per MariaDB è solo la misura di base per la protezione del database. Quando si crea o si installa un'applicazione basata su un database, normalmente si crea un utente del servizio di database per tale applicazione per evitare di usare l'account root per ragioni diverse dall'amministrazione del database. 

   1. Digitare **Y** per rimuovere gli account utente anonimi.

   1. Digitare **Y** per disabilitare l'accesso root in remoto.

   1. Digitare **Y** per rimuovere il database di test.

   1. Digitare **Y** per ricaricare le tabelle dei privilegi e salvare le modifiche.

1. (Facoltativo) Se non si ha intenzione di utilizzare immediatamente il server MariaDB, interromperlo. È possibile riavviarlo quando è di nuovo necessario.

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (Facoltativo) Se si desidera che il server MariaDB si avvii a ogni avvio, digitare il seguente comando.

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## Fase 4: (Facoltativo) Installazione phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)è uno strumento di gestione dei database basato sul Web che puoi utilizzare per visualizzare e modificare i database MySQL sulla tua istanza EC2. Segui le fasi seguenti per installare e configurare `phpMyAdmin` sull'istanza Amazon Linux.

**Importante**  
Non è consigliabile `phpMyAdmin` utilizzarlo per accedere a un server LAMP a meno che tu non lo abbia abilitato SSL/TLS in Apache; in caso contrario, la password dell'amministratore del database e altri dati vengono trasmessi in modo non sicuro su Internet. Per i consigli sulla sicurezza forniti dagli sviluppatori, consulta [Proteggere](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation) l'installazione. phpMyAdmin Per informazioni generali sulla protezione di un server Web su un'istanza EC2, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).

**Per installare phpMyAdmin**

1. Installare le dipendenze richieste.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Riavviare `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Andare alla root del documento di Apache in `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Seleziona un pacchetto sorgente per l'ultima phpMyAdmin versione da [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Per scaricare il file direttamente nell'istanza, copiare il link e incollarlo in un comando **wget**, come in questo esempio:

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. Creare una cartella `phpMyAdmin` in cui estrarre il pacchetto con il comando seguente.

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. Eliminare il *phpMyAdmin-latest-all-languages.tar.gz* tarball.

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (Facoltativo) Se il server MySQL non è in esecuzione, avviarlo in questo momento.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. In un browser Web, digita l'URL dell' phpMyAdmin installazione. Questo URL è l'indirizzo DNS pubblico (o indirizzo IP pubblico) dell'istanza seguito da una barra e dal nome della directory di installazione. Esempio:

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   Dovresti vedere la pagina phpMyAdmin di accesso:  
![\[Il risultato della digitazione dell'URL dell' phpMyAdmin installazione è la schermata di phpMyAdmin accesso.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/phpmyadmin_login.png)

1. Accedi all' phpMyAdmin installazione con il nome `root` utente e la password root MySQL che hai creato in precedenza.

   L'installazione deve essere configurata prima di essere messa in funzione. Si consiglia di iniziare con la creazione manuale del file di configurazione, come segue:

   1. Per iniziare con un file di configurazione minimo, utilizza l'editor di testo preferito per creare un nuovo file e quindi copia al suo interno il contenuto di `config.sample.inc.php`.

   1. Salva il file come `config.inc.php` nella phpMyAdmin directory che contiene. `index.php`

   1. Per qualsiasi [configurazione aggiuntiva, fare riferimento alle istruzioni successive alla creazione del file nella sezione Uso dello script](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) di phpMyAdmin installazione delle istruzioni di installazione.

    Per informazioni sull'utilizzo phpMyAdmin, consultate la [Guida per l'phpMyAdmin utente](http://docs.phpmyadmin.net/en/latest/user.html).

## Risoluzione dei problemi
<a name="lamp-troubleshooting"></a>

Questa sezione offre suggerimenti per la risoluzione di problemi comuni che si possono incontrare quando si configura un nuovo server LAMP. 

### Non riesco a connettermi al mio server utilizzando un browser Web
<a name="is_apache_on"></a>

Esegui i controlli seguenti per verificare se il tuo server Web Apache è in esecuzione e accessibile.
+ **Il server Web è in esecuzione?**

  Puoi verificare che **httpd** sia attivo eseguendo il seguente comando:

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  Se il processo **httpd** non è in esecuzione, ripeti le fasi descritte in [Per preparare il server LAMP](#install_apache-2).
+ **Il firewall è configurato correttamente?**

  Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta [Aggiungere regole al gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### Non riesco a connettermi al mio server utilizzando HTTPS
<a name="is-https-enabled"></a>

Eseguire le seguenti verifiche per verificare se il server Web Apache è configurato per supportare HTTPS.
+ **Il server Web è configurato correttamente?**

  Dopo avere installato Apache, il server è configurato per il traffico HTTP. Per supportare HTTPS, abilitare TLS sul server e installare un certificato SSL. Per informazioni, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).
+ **Il firewall è configurato correttamente?**

  Verificare che il gruppo di protezione per l'istanza contenga una regola per consentire il traffico HTTPS sulla porta 443. Per ulteriori informazioni, consulta [Aggiungere regole a un gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Argomenti correlati
<a name="lamp-more-info"></a>

Per ulteriori informazioni sul trasferimento di file sull'istanza o sull'installazione di un WordPress blog sul server Web, consulta la seguente documentazione:
+ [Trasferisci i file sulla tua istanza Linux utilizzando WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Trasferisci file su istanze Linux utilizzando un SCP client](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: Ospita un WordPress blog su AL2](hosting-wordpress.md)

Per ulteriori informazioni sui comandi e sul software utilizzati in questo tutorial, consulta le pagine Web seguenti:
+ Server Web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Server database MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Linguaggi di programmazione PHP: [http://php.net/](http://php.net/)
+ Il `chmod` comando: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ Il `chown` comando: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Per ulteriori informazioni sulla registrazione di un nome di dominio per il server Web o sul trasferimento di un nome di dominio esistente su questo host, consulta l'articolo relativo alla [creazione e alla migrazione di domini e sottodomini ad Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) nella *Guida per lo sviluppatore di Amazon Route 53*.

# Tutorial: Configura SSL/TLS su AL2
<a name="SSL-on-amazon-linux-2"></a>

Secure Layer/Transport Sockets Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLSsu un'istanza EC2 con AL2 un server web Apache). Questo tutorial presuppone che si non stia utilizzando un sistema di bilanciamento del carico (load balancer). Se si utilizza Elastic Load Balancing, è possibile scegliere di configurare l'offload SSL sul load balancer, utilizzando invece un certificato di [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/).

Per motivi storici, la crittografia Web viene spesso definita semplicemente con l'acronimo SSL. Se da un lato i browser Web continuano a supportare il protocollo SSL, dall'altro il protocollo TLS, suo successore, è meno vulnerabile agli attacchi. Per impostazione predefinita, AL2 disabilita il supporto lato server per tutte le versioni di SSL. Gli [organismi che si occupano degli standard di sicurezza](https://www.ssl.com/article/deprecating-early-tls/) considerano TLS 1.0 non sicuro. TLS 1.0 e TLS 1.1 sono stati dichiarati formalmente [obsoleti](https://datatracker.ietf.org/doc/rfc8996/) a marzo 2021. Le istruzioni contenute in questo tutorial si basano esclusivamente sull'abilitazione di TLS 1.2. TLS 1.3 è stato finalizzato nel 2018 ed è disponibile AL2 purché la libreria TLS sottostante (OpenSSL in questo tutorial) sia supportata e abilitata. [I clienti devono supportare TLS 1.2 o versioni successive entro il 28 giugno 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Per ulteriori informazioni sugli standard di crittografia aggiornati, consulta [RFC 7568](https://tools.ietf.org/html/rfc7568) e [RFC 8446](https://tools.ietf.org/html/rfc8446).

Questo tutorial fa riferimento alla crittografia Web moderna semplicemente come TLS.

**Importante**  
Queste procedure sono destinate all'uso con AL2. Supponiamo anche che si stia operando su una nuova istanza Amazon EC2. Se stai cercando di configurare un'istanza EC2 che esegue una distribuzione diversa o un'istanza che esegue una versione precedente di AL2, alcune procedure di questo tutorial potrebbero non funzionare. Per Ubuntu, consulta la documentazione seguente della community: [Open SSL on Ubuntu](https://help.ubuntu.com/community/OpenSSL) (Apri SSL su Ubuntu). Per Red Hat Enterprise Linux, consulta il seguente argomento: [Setting up the Apache HTTP Web Server](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/setting-apache-http-server_deploying-different-types-of-servers) (Configurazione del server Web HTTP Apache). Per altre distribuzioni, consulta la relativa documentazione specifica.

**Nota**  
In alternativa, puoi utilizzare AWS Certificate Manager (ACM) for AWS Nitro enclaves, un'applicazione enclave che consente di utilizzare SSL/TLS certificati pubblici e privati con applicazioni Web e server in esecuzione su istanze Amazon EC2 con Nitro Enclaves. AWS Nitro Enclaves è una funzionalità di Amazon EC2 che consente la creazione di ambienti di elaborazione isolati per proteggere ed elaborare in modo sicuro dati altamente sensibili, come certificati e chiavi private. SSL/TLS   
ACM per Nitro Enclaves funziona con **nginx** in esecuzione sull'istanza Amazon EC2 Linux per creare chiavi private, distribuire certificati e chiavi private e gestire i rinnovi dei certificati.  
Per utilizzare ACM per Nitro Enclaves, è necessario utilizzare un'istanza Linux abilitata all'enclave.  
[Per ulteriori informazioni, consulta Che cos'è Nitro Enclaves? AWS](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) *e [AWS Certificate Manager per Nitro Enclaves nella Guida per l'utente di Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html).AWS *

**Topics**
+ [Prerequisiti](#ssl_prereq)
+ [Fase 1: abilitare TLS nel server](#ssl_enable)
+ [Fase 2: ottenere un certificato firmato dalla CA](#ssl_certificate)
+ [Fase 3: testare e proteggere la configurazione di sicurezza](#ssl_test)
+ [Risoluzione dei problemi](#troubleshooting)

## Prerequisiti
<a name="ssl_prereq"></a>

Prima di iniziare questo tutorial, completare le procedure descritte di seguito:
+ Avvia un' AL2 istanza supportata da Amazon EBS. Per ulteriori informazioni, consulta [Launch an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) nella *Amazon EC2 User* Guide.
+ Configurare i gruppi di sicurezza in modo da consentire all'istanza di accettare le connessioni sulle porte TCP seguenti: 
  + SSH (porta 22)
  + HTTP (porta 80)
  + HTTPS (porta 443)

  Per ulteriori informazioni, consulta [Regole del gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) nella *Guida per l’utente di Amazon EC2*.
+ Installare il server Web Apache. Per step-by-step istruzioni, consulta [Tutorial: Installa un server Web LAMP su AL2](ec2-lamp-amazon-linux-2.md). Sono necessari solo il pacchetto httpd e le relative dipendenze. Puoi pertanto ignorare le istruzioni relative a PHP e MariaDB.
+ Per identificare e autenticare i siti Web, l'infrastruttura a chiave pubblica (PKI) TLS si basa su Domain Name System (DNS). Per utilizzare l'istanza EC2 per ospitare un sito Web pubblico, devi registrare un nome di dominio per il server Web o trasferire un nome di dominio esistente nell'host Amazon EC2. Per questa operazione sono disponibili numerosi servizi di registrazione di domini e hosting DNS di terze parti. In alternativa, puoi utilizzare [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Fase 1: abilitare TLS nel server
<a name="ssl_enable"></a>

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager l'automazione anziché le seguenti attività, esegui il [documento di automazione](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Questa procedura illustra il processo di configurazione di TLS AL2 con un certificato digitale autofirmato. 

**Nota**  
Un certificato autofirmato è accettabile in ambienti di test, ma non in ambienti di produzione. Se esponi un certificato autofirmato in Internet, i visitatori del sito visualizzeranno avvisi di sicurezza. 

**Per abilitare TLS in un server**

1. [Connettersi all'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) e confermare che Apache è in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

   Se il valore restituito non è "enabled" ("abilitato), avviare Apache e configurarlo in modo che venga avviato all'avvio del sistema:

   ```
   [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
   ```

1. Per verificare che tutti i pacchetti software siano aggiornati, eseguire un aggiornamento rapido del software sull'istanza. Questo processo può richiedere alcuni minuti, ma è importante assicurarsi di disporre della versione più recente degli aggiornamenti della sicurezza e delle correzioni dei bug.
**Nota**  
L'opzione `-y` installa gli aggiornamenti senza chiedere conferma. Se desideri esaminare gli aggiornamenti prima di installarli, puoi omettere questa opzione.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Dopo aver aggiornato l'istanza, aggiungere il supporto per TLS installando il modulo Apache `mod_ssl`.

   ```
   [ec2-user ~]$ sudo yum install -y mod_ssl
   ```

   L'istanza dispone ora dei file seguenti, che serviranno per configurare il server sicuro e creare un certificato per il test:
   +  `/etc/httpd/conf.d/ssl.conf` 

     File di configurazione per mod\$1ssl. Contiene le *direttive* che indicano ad Apache dove cercare le chiavi e i certificati di crittografia, le versioni del protocollo TLS da consentire e il tipo di crittografia da accettare. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Script che genera un certificato X.509 autofirmato e una chiave privata per l'host del server. Questo certificato risulta utile per verificare se Apache è configurato correttamente per l'utilizzo di TLS. Non deve essere usato in ambienti di produzione poiché non garantisce l'identità. In caso contrario, attiva avvisi nei browser Web.

1. Eseguire lo script per generare un certificato dummy autofirmato e una chiave per il test.

   ```
   [ec2-user ~]$ cd /etc/pki/tls/certs
   sudo ./make-dummy-cert localhost.crt
   ```

   Viene così generato il nuovo file `localhost.crt` nella directory `/etc/pki/tls/certs/`. Il nome di file specificato corrisponde al file predefinito assegnato nella direttiva **SSLCertificateFile** in `/etc/httpd/conf.d/ssl.conf` 

   Il file contiene sia un certificato autofirmato che la relativa chiave privata. Apache richiede che certificato e chiave siano entrambi in formato PEM, che è composto da caratteri ASCII con codifica Base64 racchiusi tra le righe "BEGIN" ed "END", come nell'esempio abbreviato riportato di seguito.

   ```
   -----BEGIN PRIVATE KEY-----
   MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q
   3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo
   BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr
   GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT
   ...
   56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs
   27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS
   LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo
   4QQvAqOa8UheYeoXLdWcHaLP
   -----END PRIVATE KEY-----                    
   
   -----BEGIN CERTIFICATE-----
   MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t
   MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
   DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
   bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy
   ...
   z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0
   CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3
   WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak
   3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg==
   -----END CERTIFICATE-----
   ```

   I nomi e le estensioni di file rappresentano una convenzione e non hanno alcuna ripercussione sulla funzionalità. Ad esempio è possibile denominare un certificato `cert.crt`, `cert.pem` o con qualsiasi altro nome di file, a condizione che la direttiva corrispondente nel file `ssl.conf` utilizzi lo stesso nome.
**Nota**  
Quando si sostituiscono i file TLS predefiniti con file personalizzati, assicurarsi che siano in formato PEM. 

1. Apri il file `/etc/httpd/conf.d/ssl.conf` utilizzando un editor di testo (come **vim** o **nano**) in qualità di utente root e commenta la riga seguente, in quanto il certificato dummy autofirmato contiene anche la chiave. Se non si commenta questa riga prima di completare il passaggio successivo, l'avvio del servizio Apache non riesce.

   ```
   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   ```

1. Riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**Nota**  
Assicurarsi che la porta TCP 443 sia accessibile sull'istanza EC2, come descritto in precedenza.

1. Il server Web Apache ora dovrebbe supportare HTTPS (HTTP protetto) sulla porta 443. Per eseguire il test, digitare l'indirizzo IP o il nome di dominio completo dell'istanza EC2 nella barra degli indirizzi URL di un browser con il prefisso **https://**.

   Poiché ti stai connettendo a un sito con un certificato host autofirmato non attendibile, il browser potrebbe visualizzare una serie di avvisi di sicurezza. Ignorare gli avvisi e passare al sito. 

   Se la pagina predefinita di test di Apache viene visualizzata, significa che TLS è stato correttamente configurato sul server. Tutti i dati in transito tra il browser e il server ora sono crittografati.
**Nota**  
Per evitare che i visitatori del sito vedano schermate di avviso, è necessario ottenere un certificato attendibile che non solo esegua la crittografia, ma che fornisca anche un'autenticazione pubblica del proprietario del sito. 

## Fase 2: ottenere un certificato firmato dalla CA
<a name="ssl_certificate"></a>

Puoi utilizzare la seguente procedura per ottenere un certificato firmato dalla CA:
+ Generare una richiesta di firma del certificato (CSR) da una chiave privata
+ Inviare il CSR alla Certificate Authority
+ Ottenere un certificato host firmato
+ Configurare Apache per utilizzare il certificato

Dal punto di vista della crittografia un certificato host TLS X.509 autofirmato è identico a un certificato firmato da una CA. La differenza è una questione di attendibilità. Una CA si impegna infatti a fornire una convalida minima della titolarità di un dominio prima di emettere un certificato a un richiedente. Ogni browser Web contiene un elenco di quelli CAs ritenuti idonei dal fornitore del browser a tale scopo. Un certificato X.509 è principalmente composto da una chiave server privata e da una firma fornita dalla CA e associata a livello di crittografia alla chiave pubblica. Quando un browser si connette a un server Web tramite HTTPS, il server presenta un certificato da confrontare con l'elenco dei siti attendibili CAs. Se il firmatario è incluso nell'elenco oppure è accessibile tramite una *catena di attendibilità* composta da altri firmatari fidati, il browser negozia un canale di dati a crittografia rapida con il server e carica la pagina. 

I certificati in genere costano poiché il processo di convalida delle richieste prevede alcuni costi. Consigliamo pertanto di valutare le varie offerte. Alcuni CAs offrono certificati di livello base gratuiti. Il più importante di questi CAs è il progetto [Let's Encrypt](https://letsencrypt.org/), che supporta anche l'automazione del processo di creazione e rinnovo dei certificati. Per ulteriori informazioni sull'utilizzo di un certificato Let's Encrypt, consulta la pagina [Ottenimento di Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Se hai intenzione di offrire servizi di livello commerciale, [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) è una buona opzione.

L'uso di un certificato host sottostante rappresenta la soluzione ideale. Dal 2019, gruppi appartenenti alla [pubblica amministrazione](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) e a [settori](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) specifici consigliano una dimensione (modulo) di chiave minima pari a 2048 bit per le chiavi RSA a protezione dei documenti fino al 2030. La dimensione predefinita del modulo generato da OpenSSL AL2 in è di 2048 bit, adatta per l'uso in un certificato firmato da un'autorità di certificazione. Nella seguente procedura viene offerto un passaggio opzionale per coloro che desiderano una chiave personalizzata, ad esempio, una chiave con un modulo più grande o che utilizza un algoritmo di crittografia diverso.

**Importante**  
In mancanza di un dominio DNS registrato e ospitato, tali istruzioni per l'acquisizione di certificati host firmati dalla CA non funzioneranno.

**Per ottenere un certificato firmato dalla CA**

1.  [Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) alla propria istanza e accedi a/etc/pki/tls/private/. Si tratta della directory in cui viene memorizzata la chiave privata del server per TLS. Se preferisci utilizzare una chiave host esistente per generare la CSR, passa alla Fase 3.

1. (Opzionale) Generare una nuova chiave privata. Di seguito sono riportate alcune configurazioni di chiave di esempio. Qualsiasi chiave risultante funziona con il server Web, ma il livello e il tipo di sicurezza implementati possono variare.
   + **Esempio 1:** creare una chiave host RSA predefinita. Il file risultante, **custom.key**, è una chiave privata RSA a 2048 bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Esempio 2:** creare una chiave RSA più complessa con un modulo più grande, Il file risultante, **custom.key**, è una chiave privata RSA a 4096 bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Esempio 3:** creare una chiave RSA crittografata a 4096 bit con protezione con password. Il file risultante, **custom.key**, è una chiave privata RSA a 4096 bit crittografata in base allo standard AES-128.
**Importante**  
La crittografia di una chiave fornisce maggiore sicurezza, ma dal momento che una chiave crittografata richiede una password, i servizi che dipendono da essa non possono essere avviati automaticamente. Ogni volta che usi questa chiave, devi fornire la password ( nell'esempio precedente, "abcde12345") tramite una connessione SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Esempio 4:** creare una chiave utilizzando uno standard non RSA. La crittografia RSA può essere relativamente lenta per via della dimensione delle chiavi pubbliche, che sono basate sul prodotto di due grandi numeri primi. Tuttavia, è possibile creare chiavi per TLS che utilizzano una crittografia non RSA. Le chiavi basate su calcoli matematici di curve ellittiche sono di dimensioni inferiori e, dal punto di vista del calcolo, più rapide pur garantendo un livello equivalente di sicurezza.

     ```
     [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey
     ```

     Il risultato è una chiave privata basata su curva ellittica a 256 bit che utilizza prime256v1, una "curva denominata" supportata da OpenSSL. La complessità dal punto di vista crittografico è leggermente superiore rispetto una chiave RSA a 2048 bit, [secondo i dati NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**Nota**  
Non tutti CAs forniscono lo stesso livello di supporto per elliptic-curve-based le chiavi come per le chiavi RSA.

   Assicurati che la nuova chiave privata abbia proprietà e autorizzazioni estremamente restrittive (owner=root, group=root, solo per il proprietario). read/write Il comando è come mostrato nell'esempio seguente.

   ```
   [ec2-user ~]$ sudo chown root:root custom.key
   [ec2-user ~]$ sudo chmod 600 custom.key
   [ec2-user ~]$ ls -al custom.key
   ```

   I comandi precedenti restituiscono il seguente risultato:

   ```
   -rw------- root root custom.key
   ```

    Dopo aver creato e configurato una chiave affidabile, puoi creare una CSR. 

1. Creare una CSR utilizzando la chiave preferita. Nell'esempio seguente viene utilizzato **custom.key**.

   ```
   [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem
   ```

   OpenSSL visualizza una finestra di dialogo e richiede l'immissione delle informazioni riportate nella seguente tabella. Tutti i campi, tranne **Common Name (Nome comune)**, sono facoltativi per un certificato host di base convalidato a livello di dominio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Infine, OpenSSL richiede l'immissione di una password di verifica opzionale. Questa password è valida solo per la CSR e per le transazioni tra te e la CA. Pertanto, attieniti alle raccomandazioni della CA in merito alla definizione di questo tipo di password e all'altro campo facoltativo, ovvero il nome azienda facoltativo. La password di verifica associata alla CSR non ha alcuna ripercussione sulla funzionalità del server.

   Il file **csr.pem** risultante contiene la chiave pubblica, la firma digitale della chiave pubblica e i metadati immessi.

1. Inviare la CSR a una CA. In genere, questa operazione prevede l'apertura del file CSR in un editor di testo e la copia del contenuto in un modulo Web. In questo momento, è possibile che ti venga chiesto di fornire uno o più nomi alternativi del soggetto (SANs) da inserire nel certificato. Se **www.example.com** è il nome comune, **example.com** potrebbe essere un nome alternativo di oggetto (SAN) valido e viceversa. Un visitatore del sito che immettesse uno di questi due nomi avrebbe accesso a una connessione priva di errori. Se il modulo web CA lo consente, includi il nome comune nell'elenco di SANs. Alcuni lo CAs includono automaticamente.

   Dopo l'approvazione della richiesta, riceverai un nuovo certificato host firmato dalla CA. Ti potrebbe inoltre venire richiesto di scaricare un file di *certificato intermedio* contenente i certificati aggiuntivi necessari per completare la catena di attendibilità della CA. 
**Nota**  
La CA potrebbe inviare i file in più formati, destinati a scopi specifici. Ai fini di questo tutorial, ti consigliamo di usare solo un file di certificato in formato PEM, che in genere, ma non sempre, è contrassegnato dall'estensione `.pem` o `.crt`. Se non sei sicuro di quale file usare, apri il file in un editor di testo e cerca quello contenente uno o più blocchi che iniziano con la seguente riga.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
Il file deve inoltre terminare con la seguente riga.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
Puoi anche testare il file nella riga di comando come indicato di seguito.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Verifica che nel file appaiano queste righe. Non utilizzare file che terminano con `.p7b`, `.p7c` o estensioni simili.

1. Posizionare il nuovo certificato firmato dalla CA ed eventuali certificati intermedi nella directory `/etc/pki/tls/certs`.
**Nota**  
Esistono vari modi per caricare il nuovo certificato nell'istanza EC2, ma il più semplice e immediato prevede di aprire un editor di testo (ad esempio, vi, nano o notepad) sul computer locale e sull'istanza e quindi di copiare e incollare il contenuto del file in queste posizioni. Devi disporre delle autorizzazioni root [sudo] durante l'esecuzione di queste operazioni nell'istanza EC2. In questo modo, puoi verificare in tempo reale se si verificano problemi a livello di autorizzazioni o percorsi. Presta particolare attenzione a non aggiungere altre righe durante la copia del contenuto o a non apportare modifiche di alcun tipo. 

   Dall'interno della `/etc/pki/tls/certs` directory, verifica che le impostazioni di proprietà del file, gruppo e autorizzazione corrispondano ai AL2 valori predefiniti altamente restrittivi (owner=root, group=root, solo per il proprietario). read/write L'esempio seguente mostra i comandi da utilizzare. 

   ```
   [ec2-user certs]$ sudo chown root:root custom.crt
   [ec2-user certs]$ sudo chmod 600 custom.crt
   [ec2-user certs]$ ls -al custom.crt
   ```

   Questi comandi dovrebbero restituire il seguente risultato. 

   ```
   -rw------- root root custom.crt
   ```

   Le autorizzazioni del file del certificato intermedio sono meno rigide (owner=root, group=root, il proprietario può scrivere, il gruppo può leggere, tutti gli utenti possono leggere). L'esempio seguente mostra i comandi da utilizzare. 

   ```
   [ec2-user certs]$ sudo chown root:root intermediate.crt
   [ec2-user certs]$ sudo chmod 644 intermediate.crt
   [ec2-user certs]$ ls -al intermediate.crt
   ```

   Questi comandi dovrebbero restituire il seguente risultato.

   ```
   -rw-r--r-- root root intermediate.crt
   ```

1. Posizionare la chiave privata utilizzata per creare la CRS nella directory `/etc/pki/tls/private/`. 
**Nota**  
Esistono vari modi per caricare la chiave personalizzata nell'istanza EC2, ma il più semplice e immediato prevede di aprire un editor di testo (ad esempio, vi, nano o notepad) sul computer locale e sull'istanza e quindi di copiare e incollare il contenuto del file in queste posizioni. Devi disporre delle autorizzazioni root [sudo] durante l'esecuzione di queste operazioni nell'istanza EC2. In questo modo, puoi verificare in tempo reale se si verificano problemi a livello di autorizzazioni o percorsi. Presta particolare attenzione a non aggiungere altre righe durante la copia del contenuto o a non apportare modifiche di alcun tipo.

   Dall'interno della `/etc/pki/tls/private` directory, usa i seguenti comandi per verificare che le impostazioni di proprietà, gruppo e autorizzazione dei file corrispondano ai valori AL2 predefiniti altamente restrittivi (owner=root, group=root, solo per il proprietario). read/write 

   ```
   [ec2-user private]$ sudo chown root:root custom.key
   [ec2-user private]$ sudo chmod 600 custom.key
   [ec2-user private]$ ls -al custom.key
   ```

   Questi comandi dovrebbero restituire il seguente risultato.

   ```
   -rw------- root root custom.key
   ```

1. Modificare `/etc/httpd/conf.d/ssl.conf` per riflettere i nuovi file del certificato e della chiave.

   1. Indicare il percorso e il nome del file del certificato host firmato dalla CA nella direttiva `SSLCertificateFile` di Apache:

      ```
      SSLCertificateFile /etc/pki/tls/certs/custom.crt
      ```

   1. In caso di ricezione di un file del certificato intermedio (`intermediate.crt` in questo esempio), specificare il relativo percorso e nome di file utilizzando la direttiva `SSLCACertificateFile` di Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**Nota**  
Alcuni CAs combinano il certificato host e i certificati intermedi in un unico file, rendendo la direttiva non necessaria. `SSLCACertificateFile` Consultare le istruzioni fornite dalla CA.

   1. Specificare il percorso e il nome del file della chiave privata (`custom.key` in questo esempio) nella direttiva `SSLCertificateKeyFile` di Apache:

      ```
      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
      ```

1. Salvare `/etc/httpd/conf.d/ssl.conf` e riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Testare il server digitando il nome del dominio nella barra dell'URL di un browser con il prefisso `https://`. Il browser deve caricare la pagina di test su HTTPS senza errori.

## Fase 3: testare e proteggere la configurazione di sicurezza
<a name="ssl_test"></a>

Dopo aver configurato TLS e averlo esposto al pubblico, devi testarne il livello effettivo di sicurezza. Questa operazione è semplice grazie a servizi online quali [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), che eseguono un'analisi completa e gratuita della configurazione della sicurezza. In base ai risultati, puoi decidere di rafforzare la configurazione di sicurezza di default mediante il controllo dei protocolli accettati, del tipo di cifratura preferito e degli elementi da escludere. Per ulteriori informazioni, consulta la sezione relativa alla [formulazione delle classificazioni di Qualys](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**Importante**  
Il test in un ambiente reale è di cruciale importanza per la sicurezza del server. Piccoli errori di configurazione potrebbero generare gravi violazioni della sicurezza e perdita di dati. Poiché le procedure consigliate per la sicurezza sono in costante cambiamento in risposta a programmi di ricerca e minacce emergenti, verifiche periodiche della sicurezza rappresentano una pratica di amministrazione ottimale dei server. 

Nel sito [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), immetti il nome di dominio completo del server nel formato **www.example.com**. Dopo circa due minuti riceverai una valutazione del sito (da A a F) e un'analisi dettagliata dei risultati. La tabella seguente riassume il rapporto per un dominio con impostazioni identiche alla configurazione predefinita di Apache e con un certificato Certbot predefinito. AL2 


|  |  | 
| --- |--- |
| Valutazione complessiva | B | 
| Certificato | 100% | 
| Supporto dei protocolli | 95% | 
| Scambio di chiavi | 70% | 
| Affidabilità crittografia | 90% | 

Benché dalla panoramica emerga una certa solidità della configurazione, il rapporto dettagliato mette in luce diversi potenziali problemi, qui elencati in ordine di gravità:

✗ **La RC4 crittografia è supportata per l'uso da parte di alcuni browser meno recenti**. Un codice è il nucleo matematico di un algoritmo di crittografia. RC4[, un codice veloce utilizzato per crittografare i flussi di dati TLS, è noto per presentare diversi gravi punti deboli.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) A meno di avere ottime ragioni per supportare browser legacy, è necessario disabilitare questa opzione.

✗ **Sono supportate versioni di TLS meno recenti.** La configurazione supporta TLS 1.0 (già obsoleto) e TLS 1.1 (in procinto di diventare obsoleto). A partire dal 2018, è raccomandato soltanto TLS 1.2.

✗ **La proprietà Forward Secrecy non è completamente supportata.** La proprietà [Forward Secrecy](https://en.wikipedia.org/wiki/Forward_secrecy) è una caratteristica degli algoritmi che eseguono la crittografia utilizzando chiavi di sessione temporanee (effimere) derivate dalla chiave privata. Ciò in pratica significa che gli utenti malintenzionati non possono decriptare i dati HTTPS anche se sono in possesso della chiave privata a lungo termine di un server Web.

**Per correggere e rendere valida anche per il futuro la configurazione TLS**

1. Aprire il file di configurazione `/etc/httpd/conf.d/ssl.conf` in un editor di testo e commentare la seguente riga inserendo il carattere "\$1" all'inizio:

   ```
   #SSLProtocol all -SSLv3
   ```

1. Aggiungere la seguente direttiva:

   ```
   #SSLProtocol all -SSLv3
   SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
   ```

   Questa direttiva disabilita in modo esplicito SSL versioni 2 e 3, nonché TLS versioni 1.0 e 1.1. Il server ora non accetta più connessioni crittografate con client che utilizzano crittografie diverse da TLS 1.2. Le descrizioni dettagliate della direttiva illustrano più chiaramente al lettore la tipologia di configurazione impostata per il server.
**Nota**  
La disabilitazione di TLS versioni 1.0 e 1.1 consente di bloccare l'accesso al sito da parte di una piccola percentuale di browser Web non aggiornati.

**Per modificare l'elenco delle crittografie consentite**

1. Nel file di configurazione `/etc/httpd/conf.d/ssl.conf`, individuare la sezione con la direttiva **SSLCipherSuite** e commentare la riga esistente inserendo il carattere "\$1" all'inizio.

   ```
   #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
   ```

1. Specificare suite di crittografia esplicite e un ordine di crittografia che dia priorità alla funzione Forward Secrecy e che eviti crittografie non sicure. La direttiva `SSLCipherSuite` qui utilizzata si basa su un output del [generatore di configurazioni SSL di Mozilla](https://mozilla.github.io/server-side-tls/ssl-config-generator/), che personalizza una configurazione TLS in funzione del software specifico in esecuzione sul server Per prima cosa determinare le versioni di Apache e OpenSSL in base all'output dei seguenti comandi.

   ```
   [ec2-user ~]$ yum list installed | grep httpd
   
   [ec2-user ~]$ yum list installed | grep openssl
   ```

   Ad esempio, se l'informazione restituita è Apache 2.4.34 e OpenSSL 1.0.2, inserirla nel generatore. Scegliere poi il modello di compatibilità “moderna”, che crea una direttiva `SSLCipherSuite` e applica in modo rigido la sicurezza ma che funziona per la maggior parte dei browser. Se il software non supporta la configurazione moderna, è possibile aggiornarlo o scegliere la configurazione “intermedia”.

   ```
   SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:
   ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
   ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
   ```

   Le crittografie selezionate includono nel proprio nome l'acronimo *ECDHE* (*, abbreviazione di Elliptic Curve Diffie-Hellman Ephemeral)*. Il termine *effimero* fa riferimento alla proprietà Forward Secrecy. Come sottoprodotto, questi codici non supportano. RC4

   È consigliabile utilizzare un elenco esplicito di crittografie anziché utilizzare le impostazioni predefinite o le direttive concise il cui contenuto non è visibile.

   Copiare la direttiva generata in `/etc/httpd/conf.d/ssl.conf`.
**Nota**  
Nonostante in questa sede siano riportate su più righe per facilitarne la leggibilità, una volta copiata su `/etc/httpd/conf.d/ssl.conf` la direttiva deve trovarsi su un'unica riga con solo due punti (senza spazi) tra i nomi di crittografia.

1. Rimuovere infine i commenti mediante la rimozione del carattere "\$1" dall'inizio della riga:

   ```
   #SSLHonorCipherOrder on
   ```

   Questa direttiva obbliga il server a preferire crittografie con classificazione più elevata, comprese (in questo caso) quelle che supportano la proprietà Forward Secrecy. Con questa direttiva abilitata, il server cerca di stabilire una connessione stabile e affidabile prima di ripiegare sulle crittografie consentite con un livello inferiore di sicurezza.

Dopo aver completato entrambe le procedure, salvare le modifiche a `/etc/httpd/conf.d/ssl.conf` e riavviare Apache.

Se testate nuovamente il dominio su [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), dovreste vedere che la RC4 vulnerabilità e gli altri avvisi sono scomparsi e il riepilogo sarà simile al seguente.


|  |  | 
| --- |--- |
| Valutazione complessiva | A | 
| Certificato | 100% | 
| Supporto dei protocolli | 100% | 
| Scambio di chiavi | 90% | 
| Affidabilità crittografia | 90% | 

Ogni aggiornamento a OpenSSL introduce nuove crittografie e rimuove il supporto per quelle vecchie. Conserva la tua AL2 istanza EC2 up-to-date, tieni d'occhio gli annunci di sicurezza di [OpenSSL](https://www.openssl.org/) e fai attenzione alle segnalazioni di nuovi exploit di sicurezza pubblicate dalla stampa tecnica.

## Risoluzione dei problemi
<a name="troubleshooting"></a>
+ **Il server Web Apache non si avvia a meno che non venga fornita una password**

  Si tratta del comportamento previsto se per il server hai installato una chiave privata crittografata e protetta con password.

  Puoi rimuovere i requisiti di crittografia e password dalla chiave. Supponiamo, ad esempio, di avere una chiave RSA crittografata privata denominata `custom.key` nella directory di default e associata alla password **abcde12345**. Per generare una versione non crittografata della chiave, devi eseguire i seguenti comandi nell'istanza EC2:

  ```
  [ec2-user ~]$ cd /etc/pki/tls/private/
  [ec2-user private]$ sudo cp custom.key custom.key.bak
  [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt 
  [ec2-user private]$ sudo mv custom.key.nocrypt custom.key
  [ec2-user private]$ sudo chown root:root custom.key
  [ec2-user private]$ sudo chmod 600 custom.key
  [ec2-user private]$ sudo systemctl restart httpd
  ```

  A questo punto, Apache viene avviato senza visualizzare alcuna richiesta di password.
+  **Vengono visualizzati errori quando eseguo il comando sudo yum install -y mod\$1ssl.**

  Quando installi i pacchetti richiesti per SSL, è possibile che vengano visualizzati errori simili ai seguenti.

  ```
  Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
  Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
  ```

  Ciò significa in genere che l'istanza EC2 non è in esecuzione. AL2 Questo tutorial supporta solo istanze appena create a partire da un'AMI di AL2 ufficiale.

# Tutorial: Ospita un WordPress blog su AL2
<a name="hosting-wordpress"></a>

Le seguenti procedure ti aiuteranno a installare, configurare e proteggere un WordPress blog sulla tua istanza AL2. Questo tutorial è una buona introduzione all'uso di Amazon EC2 in quanto hai il pieno controllo su un server Web che ospita il tuo WordPress blog, cosa non tipica di un servizio di hosting tradizionale.

È tua responsabilità aggiornare i pacchetti software e gestire le patch di sicurezza del server. Per un' WordPress installazione più automatizzata che non richieda l'interazione diretta con la configurazione del server Web, il CloudFormation servizio fornisce un WordPress modello che può anche aiutarti a iniziare rapidamente. Per ulteriori informazioni, consulta [Nozioni di base](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) nella *Guida per l'utente di AWS CloudFormation *. *Se hai bisogno di una soluzione ad alta disponibilità con un database disaccoppiato, consulta [Implementazione di un WordPress sito Web ad alta disponibilità](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html) nella Guida per gli sviluppatori.AWS Elastic Beanstalk *

**Importante**  
Queste procedure sono destinate all'uso con. AL2 Per ulteriori informazioni su altre distribuzioni, consulta la documentazione specifica. Numerose fasi in questo tutorial non funzionano sulle istanze Ubuntu. Per informazioni WordPress sull'installazione su un'istanza di Ubuntu, [WordPress](https://help.ubuntu.com/community/WordPress)consulta la documentazione di Ubuntu. Puoi anche [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)utilizzarlo per eseguire questa operazione su sistemi Amazon Linux, macOS o Unix.

**Topics**
+ [Prerequisiti](#hosting-wordpress-prereqs)
+ [Installa WordPress](#install-wordpress)
+ [Fasi successive](#wordpress-next-steps)
+ [Aiuto\$1 Il nome DNS pubblico è cambiato e il blog non è accessibile](#wordpress-troubleshooting)

## Prerequisiti
<a name="hosting-wordpress-prereqs"></a>

Questo tutorial presuppone che tu abbia avviato un' AL2 istanza con un server web funzionale con PHP e supporto per database (MySQL o MariadB) seguendo tutti i passaggi indicati. [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md) Questo tutorial include inoltre la procedura per configurare un gruppo di sicurezza che consenta il traffico `HTTP` e `HTTPS`, nonché varie fasi da eseguire per verificare che le autorizzazioni di file siano state configurate correttamente per il server Web. Per informazioni sull'aggiunta di regole al gruppo di sicurezza, consulta [Aggiungere](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule) regole a un gruppo di sicurezza.

Ti consigliamo vivamente di associare un indirizzo IP elastico (EIP) all'istanza che stai utilizzando per ospitare un WordPress blog. Ciò impedisce all'indirizzo DNS pubblico dell'istanza di modificare e interrompere l'installazione. Se sei proprietario di un nome di dominio e vuoi utilizzarlo per il tuo blog, puoi aggiornare il record DNS del nome di dominio in modo che punti all'indirizzo EIP (per ulteriori informazioni su questa procedura, contatta il registrar di nomi di dominio). Puoi usufruire di un indirizzo EIP associato a un'istanza in esecuzione gratuitamente. Per ulteriori informazioni, consulta [Indirizzi IP elastici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) nella *Guida per l’utente di Amazon EC2*.

Se non disponi ancora di un nome di dominio per il tuo blog, puoi registrare un nome di dominio con Route 53 e associare l'indirizzo EIP dell'istanza al nome di dominio. Per ulteriori informazioni, consulta la pagina relativa alla [registrazione dei nomi di dominio utilizzando Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) nella *Guida per lo sviluppatore di Amazon Route 53*.

## Installa WordPress
<a name="install-wordpress"></a>

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager l'automazione anziché le seguenti attività, esegui il [documento di automazione](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Connect all'istanza e scarica il pacchetto WordPress di installazione.

**Per scaricare e decomprimere il pacchetto di WordPress installazione**

1. Scarica il pacchetto di WordPress installazione più recente con il **wget** comando. Il comando seguente dovrebbe scaricare sempre la versione più recente.

   ```
   [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
   ```

1. Decomprimere ed estrarre il pacchetto di installazione. La cartella di installazione viene decompressa in una cartella denominata `wordpress`.

   ```
   [ec2-user ~]$ tar -xzf latest.tar.gz
   ```<a name="create_user_and_database"></a>

**Per creare un utente del database e un database per l' WordPress installazione**

 WordPress L'installazione deve archiviare informazioni, come post di blog e commenti degli utenti, in un database. Questa procedura consente di creare un database del blog e un utente autorizzato a leggere e salvare le informazioni in tale database. 

1. Avviare il server di database.
   + 

     ```
     [ec2-user ~]$ sudo systemctl start mariadb
     ```

1. Accedere al server di database come utente `root`. Immetti la password database `root` quando viene richiesto. Questa password potrebbe essere diversa dalla password del sistema `root` oppure potrebbe anche essere vuota se non hai impostato alcuna protezione per il server di database.

   Se non hai ancora definito la protezione del server di database, è importante che tu lo faccia ora. Per ulteriori informazioni, vedere [Per proteggere il server MariaDB](ec2-lamp-amazon-linux-2.md#securing-maria-db) (AL2).

   ```
   [ec2-user ~]$ mysql -u root -p
   ```

1. <a name="create_database_user"></a>Creare un utente e una password per il database MySQL. L' WordPressinstallazione utilizza questi valori per comunicare con il database MySQL. 

   Assicurarsi di creare una password complessa per l'utente. Non utilizzare l'apostrofo ( ' ) nella password perché interromperebbe l'esecuzione del comando che lo precede. Non riutilizzare una password esistente e accertarsi di memorizzare questa password in un luogo sicuro.

   Immettere il seguente comando, ricordandosi di sostituire gli argomenti con un nome utente univoco e una password.

   ```
   CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
   ```

1. <a name="create_database"></a>Creare il database. Assegnare al database un nome descrittivo e significativo, ad esempio `wordpress-db`.
**Nota**  
I segni di punteggiatura che racchiudono il nome del database nel comando riportato di seguito sono definiti backtick (apice retroverso). Il tasto del segno backtick (apice retroverso) (```) in genere si trova sopra il tasto `Tab` su una tastiera standard. I backtick non sono sempre richiesti, ma consentono di utilizzare caratteri altrimenti non validi, ad esempio i trattini, nei nomi di database.

   ```
   CREATE DATABASE `wordpress-db`;
   ```

1. Concedi i privilegi completi per il tuo database all' WordPress utente che hai creato in precedenza.

   ```
   GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
   ```

1. Scaricare i privilegi del database per implementare tutte le modifiche apportate.

   ```
   FLUSH PRIVILEGES;
   ```

1. Uscire dal client `mysql`.

   ```
   exit
   ```

**Per creare e modificare il file wp-config.php**

La cartella WordPress di installazione contiene un file di configurazione di esempio chiamato`wp-config-sample.php`. In questa procedura, puoi copiare questo file e modificarlo in modo conforme a una configurazione specifica.

1. Copiare il file `wp-config-sample.php` in un file denominato `wp-config.php`. In questo modo, crei un nuovo file di configurazione mantenendo intatto il file campione originale come backup.

   ```
   [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
   ```

1. Modificare il file `wp-config.php` con l'editor di testo preferito (ad esempio **nano** o **vim**) e immettere i valori dell'installazione in uso. Se non si dispone di un editor di testo preferito, `nano` è adatto agli utenti non esperti.

   ```
   [ec2-user ~]$ nano wordpress/wp-config.php
   ```

   1. Cercare la riga che definisce `DB_NAME` e modificare `database_name_here` utilizzando il nome di database creato in [Step 4](#create_database) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_NAME', 'wordpress-db');
      ```

   1. Cercare la riga che definisce `DB_USER` e modificare `username_here` utilizzando l'utente database creato in [Step 3](#create_database_user) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_USER', 'wordpress-user');
      ```

   1. Cercare la riga che definisce `DB_PASSWORD` e modificare `password_here` utilizzando la password complessa creata in [Step 3](#create_database_user) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_PASSWORD', 'your_strong_password');
      ```

   1. Cercare la sezione denominata `Authentication Unique Keys and Salts`. Questi `KEY` e questi `SALT` valori forniscono un livello di crittografia ai cookie del browser che WordPress gli utenti archiviano sui loro computer locali. In sostanza, l'aggiunta di valori lunghi e casuali rende il sito più sicuro. Visita [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/per generare in modo casuale un set di valori chiave che puoi copiare e incollare nel tuo `wp-config.php` file. Per incollare il testo in un'applicazione terminale PuTTY, posizionare il cursore nel punto in cui si desidera incollare il teste e fare clic con il pulsante destro del mouse all'interno dell'applicazione terminale PuTTY.

      [Per ulteriori informazioni sulle chiavi di sicurezza, visita https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**Nota**  
I valori riportati di seguito sono a solo scopo di esempio. Non utilizzarli per l'installazione in uso.

      ```
      define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
      define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
      define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
      define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
      define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
      define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
      define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
      define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
      ```

   1. Salva il file ed esci dall’editor di testo.

**Per installare i WordPress file nella cartella principale del documento Apache**
+ Dopo aver decompresso la cartella di installazione, creato un database e un utente MySQL e personalizzato il file di WordPress configurazione, è possibile copiare i file di installazione nella cartella principale dei documenti del server Web in modo da poter eseguire lo script di installazione che completa l'installazione. La posizione di questi file dipende dal fatto che il WordPress blog sia disponibile nella directory principale effettiva del server Web (ad esempio,`my.public.dns.amazonaws.com`) o in una sottodirectory o cartella sotto la radice (ad esempio,`my.public.dns.amazonaws.com/blog`).
  + Se volete WordPress eseguirlo nella directory principale del documento, copiate il contenuto della directory di installazione di wordpress (ma non la directory stessa) come segue: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Se volete WordPress eseguirlo in una directory alternativa sotto la radice del documento, create prima quella directory e poi copiate i file al suo interno. In questo esempio, WordPress verrà eseguito dalla directory`blog`:

    ```
    [ec2-user ~]$ mkdir /var/www/html/blog
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
    ```

**Importante**  
Per motivi di sicurezza, se non si passa immediatamente alla procedura successiva, arrestare ora il server Web Apache (`httpd`). Dopo aver spostato l'installazione nella directory principale del documento Apache, lo script di WordPress installazione non è protetto e un utente malintenzionato potrebbe accedere al tuo blog se il server web Apache fosse in esecuzione. Per arrestare il server Web Apache, immettere il comando **sudo systemctl stop httpd**. Se invece si passa alla procedura successiva, non è necessario arrestare il server Web Apache.

**Per consentire l'uso dei permalink WordPress**

WordPress i permalink devono utilizzare i `.htaccess` file Apache per funzionare correttamente, ma questo non è abilitato di default su Amazon Linux. Utilizza la seguente procedura per consentire tutte le modifiche nella directory radice dei documenti di Apache.

1. Aprire il file `httpd.conf` con l'editor di testo preferito (ad esempio **nano** o **vim**). Se non si dispone di un editor di testo preferito, `nano` è adatto agli utenti non esperti.

   ```
   [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
   ```

1. Cercare la sezione che inizia con `<Directory "/var/www/html">`.

   ```
   <Directory "/var/www/html">
       #
       # Possible values for the Options directive are "None", "All",
       # or any combination of:
       #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
       #
       # Note that "MultiViews" must be named *explicitly* --- "Options All"
       # doesn't give it to you.
       #
       # The Options directive is both complicated and important.  Please see
       # http://httpd.apache.org/docs/2.4/mod/core.html#options
       # for more information.
       #
       Options Indexes FollowSymLinks
   
       #
       # AllowOverride controls what directives may be placed in .htaccess files.
       # It can be "All", "None", or any combination of the keywords:
       #   Options FileInfo AuthConfig Limit
       #
       AllowOverride None
   
       #
       # Controls who can get stuff from this server.
       #
       Require all granted
   </Directory>
   ```

1. Modificare la riga `AllowOverride None` nella sezione precedente in modo che sia impostata nel seguente modo: `AllowOverride All`.
**Nota**  
Sono presenti più righe `AllowOverride` in questo file. Assicurarsi di modificare la riga nella sezione `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Salva il file ed esci dall’editor di testo.

**Per installare la libreria di disegni grafici PHP su AL2**  
La libreria GD per PHP consente di modificare le immagini. Installa questa libreria se hai bisogno di ritagliare l'immagine di intestazione per il tuo blog. La versione da installare potrebbe richiedere una versione minima specifica di questa libreria (ad esempio, la versione 7.2). phpMyAdmin 

Usa il seguente comando per installare la libreria di disegni grafici PHP su. AL2 Ad esempio, se hai installato php7.2 da amazon-linux-extras come parte dell'installazione dello stack LAMP, questo comando installa la versione 7.2 della libreria di disegni grafici PHP.

```
[ec2-user ~]$ sudo yum install php-gd
```

Per verificare la versione installata utilizza il seguente comando:

```
[ec2-user ~]$ sudo yum list installed php-gd
```

Di seguito è riportato un output di esempio:

```
php-gd.x86_64                     7.2.30-1.amzn2             @amzn2extra-php7.2
```

**Per correggere le autorizzazioni di file sul server Web Apache**

Alcune delle funzionalità disponibili WordPress richiedono l'accesso in scrittura alla radice del documento Apache (come il caricamento di contenuti multimediali tramite le schermate di amministrazione). Se non l'avete ancora fatto, applicate le seguenti appartenenze ai gruppi e autorizzazioni (come descritto più dettagliatamente nella). [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md)

1. Garantire la proprietà dei file di `/var/www` e dei suoi contenuti all'utente `apache`.

   ```
   [ec2-user ~]$ sudo chown -R apache /var/www
   ```

1. Garantire la proprietà del gruppo di `/var/www` e dei suoi contenuti al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo chgrp -R apache /var/www
   ```

1. Modificare le autorizzazioni a livello di directory di `/var/www` e delle relative sottodirectory per aggiungere le autorizzazioni di scrittura e impostare l'ID gruppo per le sottodirectory future.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www
   [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Modifica in modo ricorsivo le autorizzazioni di file di `/var/www` e delle relative sottodirectory.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**Nota**  
 Se intendete utilizzarlo anche WordPress come server FTP, qui avrete bisogno di impostazioni di gruppo più permissive. Per eseguire questa operazione, consulta [i passaggi e le impostazioni di sicurezza consigliati WordPress in](https://wordpress.org/support/article/changing-file-permissions/). 

1. Riavviare il server Web Apache per implementare il nuovo gruppo e le nuove autorizzazioni.
   + 

     ```
     [ec2-user ~]$ sudo systemctl restart httpd
     ```

**Esegui lo script WordPress di installazione con AL2**

Sei pronto per l'installazione WordPress. I comandi utilizzati dipendono dal sistema operativo. I comandi di questa procedura possono essere utilizzati con AL2.

1. Utilizzare il comando **systemctl** per assicurarsi che i servizio `httpd` e di database vengano avviati a ogni avvio del sistema.

   ```
   [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
   ```

1. Verificare che il server di database sia in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl status mariadb
   ```

   Se il servizio di database non è in esecuzione, avviarlo.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Verificare che il server Web Apache (`httpd`) sia in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl status httpd
   ```

   Se il servizio `httpd` non è in esecuzione, avviarlo.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1. In un browser Web, digita l'URL del tuo WordPress blog (l'indirizzo DNS pubblico dell'istanza o l'indirizzo seguito dalla `blog` cartella). Dovresti vedere lo script di WordPress installazione. Fornisci le informazioni richieste dall' WordPress installazione. Per completare l’installazione, seleziona **Installa WordPress**. Per ulteriori informazioni, consulta [Passaggio 5: Esecuzione dello script di installazione](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) sul WordPress sito Web.

## Fasi successive
<a name="wordpress-next-steps"></a>

Dopo aver testato il tuo WordPress blog, valuta la possibilità di aggiornarne la configurazione.

**Utilizza un nome di dominio personalizzato**  
Se all'indirizzo EIP dell'istanza EC2 è associato un nome di dominio, puoi configurare il blog in modo che utilizzi tale nome anziché l'indirizzo DNS EC2 pubblico. Per ulteriori informazioni, consulta [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/) sul WordPress sito Web.

**Configurazione del blog**  
Puoi configurare il blog in modo che utilizzi [temi](https://wordpress.org/themes/) e [plugin](https://wordpress.org/plugins/) diversi in modo da offrire un'esperienza più personalizzata ai lettori. Tuttavia, il processo di installazione può talvolta generare problemi che portano alla perdita dell'intero blog. Pertanto, consigliamo vivamente di eseguire una copia di backup dell'Amazon Machine Image (AMI) dell'istanza prima di tentare di installare temi o plugin in modo da essere in grado di ripristinare il blog in caso di problemi durante l'installazione. Per ulteriori informazioni, consulta [Creare la propria AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Aumento della capacità**  
Se il tuo WordPress blog diventa popolare e hai bisogno di maggiore potenza di calcolo o spazio di archiviazione, prendi in considerazione i seguenti passaggi:
+ Espandi lo spazio di storage sull'istanza. Per ulteriori informazioni, consulta [Volumi elastici Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) nella *Guida per l'utente di Amazon EBS*.
+ Trasferisci il database MySQL in [Amazon RDS](https://aws.amazon.com/rds) in modo da sfruttare tutte le funzionalità di scalabilità del servizio.

**Miglioramento delle prestazioni di rete del traffico Internet**  
Se ti aspetti che il tuo blog gestisca il traffico da parte di utenti situati in tutto il mondo, considera l'uso di [AWS Global Accelerator](https://aws.amazon.com/global-accelerator). Global Accelerator ti aiuta a ridurre la latenza migliorando le prestazioni del traffico Internet tra i dispositivi client degli utenti e l'applicazione su cui è in esecuzione WordPress . AWS Global Accelerator utilizza la [rete AWS globale](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) per indirizzare il traffico verso un endpoint applicativo funzionante nella AWS regione più vicina al client.

**Scopri di più su WordPress**  
Per informazioni in merito WordPress, consultate la documentazione di aiuto del WordPress Codex all'[indirizzo http://codex.wordpress.org/](http://codex.wordpress.org/).

Per ulteriori informazioni sulla risoluzione dei problemi di installazione, consulta [Problemi di installazione comuni](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Per informazioni su come rendere il tuo WordPress blog più sicuro, consulta [Hardening. WordPress](https://wordpress.org/support/article/hardening-wordpress/)

Per informazioni sulla gestione del WordPress blog up-to-date, consulta [Aggiornamento WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Aiuto\$1 Il nome DNS pubblico è cambiato e il blog non è accessibile
<a name="wordpress-troubleshooting"></a>

L' WordPress installazione viene configurata automaticamente utilizzando l'indirizzo DNS pubblico per l'istanza EC2. Se arresti e riavvii l'istanza, l'indirizzo DNS pubblico cambia, a meno che non sia associato a un indirizzo IP elastico, e il blog non funzionerà più perché fa riferimento a risorse disponibili in un indirizzo che non esiste più o che è assegnato a un'altra istanza EC2. Una descrizione più dettagliata del problema e diverse possibili soluzioni sono riportate in [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/).

Se ciò si è verificato durante l' WordPress installazione, potrebbe essere possibile ripristinare il blog seguendo la procedura riportata di seguito, che utilizza l'interfaccia a riga di **wp-cli** comando per WordPress.

**Per modificare l'URL del WordPress sito con **wp-cli****

1. Connettersi all'istanza EC2 con SSH. 

1. Annotare il vecchio URL del sito e il nuovo URL del sito relativi all'istanza. Il vecchio URL del sito è probabilmente il nome DNS pubblico dell'istanza EC2 al momento dell'installazione. WordPress È possibile che il nuovo URL del sito sia il nome DNS pubblico corrente per l'istanza EC2. Se non sei certo del vecchio URL del sito, puoi utilizzare **curl** per cercarlo utilizzando il seguente comando.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   I riferimenti al vecchio nome DNS pubblico dovrebbero essere presenti nell'output e sono simili a quanto segue (il vecchio URL del sito è visualizzato in rosso):

   ```
   <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
   ```

1. Scaricare **wp-cli** con il seguente comando.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Cerca e sostituisci il vecchio URL del sito nell' WordPress installazione con il seguente comando. Sostituisci il vecchio e il nuovo URL del sito con l'istanza EC2 e il percorso dell' WordPress installazione (di solito `/var/www/html` o). `/var/www/html/blog`

   ```
   [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
   ```

1. In un browser web, inserisci il nuovo URL del sito del tuo WordPress blog per verificare che il sito funzioni di nuovo correttamente. In caso contrario, consulta [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/) e [Problemi di installazione comuni](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) per ulteriori informazioni.