

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

# Distribuzione di un'applicazione Rails su Elastic Beanstalk
<a name="ruby-rails-tutorial"></a>

Rails è un framework open source model-view-controller (MVC) per Ruby. Questo tutorial illustra il processo di generazione di un'applicazione Rails e la sua distribuzione in un ambiente. AWS Elastic Beanstalk 

**Topics**
+ [Prerequisiti](#ruby-rails-tutorial-prereqs)
+ [Conoscenza di base di Elastic Beanstalk](#ruby-rails-tutorial-prereqs-basic)
+ [Avvio di un ambiente Elastic Beanstalk](#ruby-rails-tutorial-launch)
+ [Installazione di Rails e generazione di un sito Web](#ruby-rails-tutorial-generate)
+ [Configurazione delle impostazioni di Rails](#ruby-rails-tutorial-configure)
+ [Distribuzione dell'applicazione](#ruby-rails-tutorial-deploy)
+ [Pulizia](#ruby-rails-tutorial-cleanup)
+ [Fasi successive](#ruby-rails-tutorial-nextsteps)

## Prerequisiti
<a name="ruby-rails-tutorial-prereqs"></a>

## Conoscenza di base di Elastic Beanstalk
<a name="ruby-rails-tutorial-prereqs-basic"></a>

Questo tutorial presuppone determinate conoscenze sulle operazioni di base di Elastic Beanstalk e della console Elastic Beanstalk. Se non lo hai già fatto, segui le istruzioni in [Scopri come iniziare a usare Elastic Beanstalk](GettingStarted.md) per avviare il tuo primo ambiente Elastic Beanstalk.

### Riga di comando
<a name="ruby-rails-tutorial-prereqs-cmdline"></a>

Per seguire le procedure in questa guida, devi usare un terminale a riga di comando o una shell per eseguire i comandi. I comandi vengono visualizzati in elenchi preceduti da un simbolo di prompt (\$1) e dal nome della directory corrente, se appropriato.

```
~/eb-project$ this is a command
this is output
```

Su Linux e macOS usa la tua shell e il tuo programma di gestione dei pacchetti preferiti. Su Windows puoi [installare il sottosistema Windows per Linux per](https://docs.microsoft.com/en-us/windows/wsl/install-win10) ottenere una versione integrata con Windows di Ubuntu e Bash.

### Dipendenze Rails
<a name="ruby-rails-tutorial-prereqs-railsreqs"></a>

Il framework Rails 6.1.4.1 ha le seguenti dipendenze. Assicurati di averli tutti installati.
+ **Ruby 2.5.0 o versioni successive**: per istruzioni di installazione, consulta [Configurazione dell'ambiente di sviluppo Ruby per Elastic Beanstalk](ruby-development-environment.md).

  In questo tutorial utilizziamo Ruby 3.0.2 e la versione della piattaforma Elastic Beanstalk corrispondente.
+ **Node.js**: per istruzioni di installazione, consulta [Installazione di Node.js tramite il programma di gestione dei pacchetti](https://nodejs.org/en/download/package-manager/).
+ **Yarn**: per istruzioni di installazione, consulta [Installazione](https://yarnpkg.com/lang/en/docs/install/) sul sito Web *Yarn*.

## Avvio di un ambiente Elastic Beanstalk
<a name="ruby-rails-tutorial-launch"></a>

Utilizza la console Elastic Beanstalk per creare un ambiente Elastic Beanstalk. Scegli la piattaforma **Ruby** e accetta le impostazioni predefinite e il codice di esempio.

**Per avviare un ambiente (console)**

1. [Apri la console Elastic Beanstalk utilizzando questo link preconfigurato: console.aws.amazon. com/elasticbeanstalk/home\$1/newApplication? ApplicationName=Tutorials&EnvironmentType= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. Per **Platform** (Piattaforma), selezionare il ramo della piattaforma e la piattaforma che corrispondono al linguaggio utilizzato dall'applicazione.

1. In **Application code** (Codice applicazione), scegli **Sample application** (Applicazione di esempio).

1. Selezionare **Review and launch** (Controlla e avvia).

1. Verificare le opzioni disponibili. Scegliere l'opzione disponibile che si desidera utilizzare e, quando si è pronti, scegliere **Create app** (Crea app).

Occorrono circa cinque minuti per creare l'ambiente e le seguenti risorse:
+ **EC2 istanza**: una macchina virtuale Amazon Elastic Compute Cloud (Amazon EC2) configurata per eseguire app Web sulla piattaforma scelta.

  Ogni piattaforma esegue un insieme specifico di software, file di configurazione e script per supportare una versione della lingua, un framework, un container Web specifici o una determinata combinazione di essi. La maggior parte delle piattaforme utilizza Apache o NGINX come proxy inverso su cui viene eseguita l'app Web, inoltra le richieste all'app, fornisce asset statici e genera log degli accessi e di errore.
+ **Gruppo di sicurezza dell'istanza**: un gruppo EC2 di sicurezza Amazon configurato per consentire il traffico in entrata sulla porta 80. Questa risorsa consente al traffico HTTP proveniente dal sistema di bilanciamento del carico di raggiungere l' EC2 istanza su cui è in esecuzione la tua app web. Per impostazione predefinita, il traffico non è consentito su altre porte.
+ **Sistema di bilanciamento del carico**: un sistema di bilanciamento del carico Elastic Load Balancing configurato per distribuire richieste alle istanze in esecuzione sull'applicazione. Un sistema di bilanciamento del carico inoltre elimina la necessità di esporre le proprie istanze direttamente in Internet.
+ Gruppo di **sicurezza Load Balancer: un gruppo** EC2 di sicurezza Amazon configurato per consentire il traffico in entrata sulla porta 80. Questa risorsa HTTP consente al traffico proveniente da Internet di raggiungere il sistema di bilanciamento del carico. Per impostazione predefinita, il traffico non è consentito su altre porte.
+ **Gruppo Auto Scaling**: un gruppo Auto Scaling configurato per sostituire un'istanza se viene terminata o diventa non disponibile.
+ **Bucket Amazon S3**: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.
+ ** CloudWatch Allarmi Amazon**: due CloudWatch allarmi che monitorano il carico sulle istanze nel tuo ambiente e che vengono attivati se il carico è troppo alto o troppo basso. Quando viene attivato un allarme, il gruppo Auto Scaling aumenta o diminuisce di conseguenza.
+ **CloudFormation stack**: Elastic CloudFormation Beanstalk utilizza per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella [console CloudFormation](https://console.aws.amazon.com/cloudformation).
+ **Nome di dominio***: un nome di dominio che indirizza alla tua app Web nel modulo. *subdomain* *region*.elasticbeanstalk.com*.
**Sicurezza del dominio**  
Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio *elasticbeanstalk.com* è registrato nella [Public Suffix List (PSL).](https://publicsuffix.org/)  
Se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk, ti consigliamo di utilizzare i cookie `__Host-` con un prefisso per una maggiore sicurezza. Questa pratica difende il tuo dominio dai tentativi di falsificazione delle richieste tra siti (CSRF). Per ulteriori informazioni, consulta la pagina [Impostazione cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) nella pagina Mozilla Developer Network.

Tutte queste risorse sono gestite da Elastic Beanstalk. Quando arresti l'ambiente, Elastic Beanstalk termina tutte le risorse che contiene.

**Nota**  
Il bucket Amazon S3 creato da Elastic Beanstalk è condiviso tra gli ambienti e non viene eliminato quando l'ambiente viene terminato. Per ulteriori informazioni, consulta [Utilizzo di Elastic Beanstalk con Amazon S3](AWSHowTo.S3.md).

## Installazione di Rails e generazione di un sito Web
<a name="ruby-rails-tutorial-generate"></a>

Installa Rails e le relative dipendenze con il comando `gem`.

```
~$ gem install rails
Fetching: concurrent-ruby-1.1.9.gem
Successfully installed concurrent-ruby-1.1.9
Fetching: rack-2.2.3.gem
Successfully installed rack-2.2.3
...
```

Testa l'installazione di Rails.

```
~$ rails --version
Rails 6.1.4.1
```

Utilizza `rails new` con il nome dell'applicazione per creare un nuovo progetto Rails.

```
~$ rails new ~/eb-rails
```

Rails crea una directory con il nome specificato, genera tutti i file necessari per eseguire un progetto di esempio in locale, quindi esegue il bundler per installare tutte le dipendenze (Gems) definite nel Gemfile del progetto.

**Nota**  
Questo processo installa l'ultima versione di Puma per il progetto. Questa versione potrebbe essere diversa dalla versione fornita da Elastic Beanstalk sulla versione della piattaforma Ruby del tuo ambiente. Per visualizzare le versioni Puma fornite da Elastic Beanstalk, consulta [Cronologia della piattaforma Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-ruby.html) nella *Guida per AWS Elastic Beanstalk Platforms*. Per ulteriori informazioni sulla versione più recente di Puma, consulta il sito Web [PUMA.io](http://puma.io). Se c'è una mancata corrispondenza tra le due versioni di Puma, usa una delle seguenti opzioni:  
Utilizza la versione Puma installata dal comando `rails new` precedente. In questo caso, devi aggiungere un `Procfile` per consentire alla piattaforma di utilizzare la versione del server Puma fornita. Per ulteriori informazioni, consulta [Configurazione del processo di applicazione con un Procfile su Elastic Beanstalk.](ruby-platform-procfile.md).
Aggiorna la versione di Puma in modo che sia coerente con la versione preinstallata sulla versione della piattaforma Ruby del tuo ambiente. Per farlo, modifica la versione di Puma nel [Gemfile](ruby-platform-gemfile.md#ruby-platform-gemfile.title) situato nella root della directory di origine del progetto. Quindi esegui `bundle update`. Per ulteriori informazioni, consulta la pagina [dell'aggiornamento del bundle](https://bundler.io/man/bundle-update.1.html) sul sito Web di Bundler.io. 

Testa la tua installazione Rails eseguendo il progetto predefinito in locale.

```
~$ cd eb-rails
~/eb-rails$ rails server
=> Booting Puma
=> Rails 6.1.4.1 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.2-p107) ("Zawgyi")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 77857
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
...
```

Apri `http://localhost:3000` in un browser Web per visualizzare il progetto predefinito in azione.

![\[Pagina di sviluppo del sito Rails predefinito.\]](http://docs.aws.amazon.com/it_it/elasticbeanstalk/latest/dg/images/ruby-rails-default.png)


Questa pagina può essere visualizzata solo in modalità di sviluppo. Aggiungi alcuni contenuti alla pagina iniziale dell'applicazione per supportare una distribuzione di produzione in Elastic Beanstalk. Usa `rails generate` per creare un controller, una route e una visualizzazione per la pagina di benvenuto. 

```
~/eb-rails$ rails generate controller WelcomePage welcome
      create  app/controllers/welcome_page_controller.rb
       route  get 'welcome_page/welcome'
      invoke  erb
      create    app/views/welcome_page
      create    app/views/welcome_page/welcome.html.erb
      invoke  test_unit
      create    test/controllers/welcome_page_controller_test.rb
      invoke  helper
      create    app/helpers/welcome_page_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/welcome_page.coffee
      invoke    scss
      create      app/assets/stylesheets/welcome_page.scss.
```

In questo modo, avrai tutto quello che ti serve per accedere alla pagina in `/welcome_page/welcome`. Prima di pubblicare le modifiche, tuttavia, cambia i contenuti della visualizzazione e aggiungi un instradamento per far apparire questa pagina nella parte superiore del sito. 

Usa un editor di testo per modificare i contenuti in `app/views/welcome_page/welcome.html.erb`. Per questo esempio, potrai utilizzare `cat` per sovrascrivere semplicemente il contenuto del file esistente. 

**Example app/views/welcome\$1page/welcome.html.erb**  

```
<h1>Welcome!</h1>
<p>This is the front page of my first Rails application on Elastic Beanstalk.</p>
```

 Infine, aggiungi il seguente instradamento a `config/routes.rb`: 

**Example config/routes.rb**  

```
Rails.application.routes.draw do
  get 'welcome_page/welcome'
  root 'welcome_page#welcome'
```

In questo modo, Rails instrada le richieste alla directory principale del sito Web al metodo di benvenuto del controller della pagina di benvenuto che trasforma il contenuto nella visualizzazione di benvenuto (`welcome.html.erb`).

Affinché Elastic Beanstalk distribuisca correttamente l'applicazione sulla piattaforma Ruby, è necessario aggiornare `Gemfile.lock`. Alcune dipendenze di `Gemfile.lock ` potrebbero essere specifiche per la piattaforma. Pertanto, dobbiamo aggiungere **platform ruby** a `Gemfile.lock` in modo che tutte le dipendenze richieste vengano installate con la distribuzione.

**Example**  

```
~/eb-rails$ bundle lock --add-platform ruby
Fetching gem metadata from https://rubygems.org/............
Resolving dependencies...
Writing lockfile to /Users/janedoe/EBDPT/RubyApps/eb-rails-doc-app/Gemfile.lock
```

## Configurazione delle impostazioni di Rails
<a name="ruby-rails-tutorial-configure"></a>

Usa la console Elastic Beanstalk per configurare Rails con proprietà dell'ambiente. Imposta la proprietà dell'ambiente `SECRET_KEY_BASE` su una stringa di massimo 256 caratteri alfanumerici.

Rails utilizza questa proprietà per creare le chiavi. Pertanto è necessario tenerla segreta e non memorizzarla nel controllo del codice sorgente in testo normale. La fornisci al codice Rails nel tuo ambiente attraverso una proprietà di ambiente.

**Per configurare le variabili di ambiente nella console Elastic Beanstalk**

1. Apri la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) e, **nell'elenco Regioni, seleziona la tua**. Regione AWS

1. Nel pannello di navigazione selezionare **Environments** (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

1. Nel riquadro di navigazione, seleziona **Configuration** (Configurazione).

1. Nella categoria di configurazione **Updates, monitoring, and logging** (Aggiornamenti, monitoraggio e registrazione), scegli **Edit** (Modifica).

1. Scorri verso il basso fino alle variabili di ambiente **Runtime**.

1. Seleziona **Aggiungi variabile di ambiente**.

1. Per **Sorgente** seleziona **Testo normale**.
**Nota**  
I valori **Secrets Manager** e **SSM Parameter Store** nel menu a discesa servono a configurare le variabili di ambiente come segreti per archiviare dati sensibili, come credenziali e chiavi API. Per ulteriori informazioni, consulta [Utilizzo di Elastic Gestione dei segreti AWS AWS Systems Manager Beanstalk con e Parameter Store](AWSHowTo.secrets.md). 

1. **Immettere le coppie del **nome della variabile di ambiente e del valore della variabile** di ambiente.**

1. Se è necessario aggiungere altre variabili, ripetere i **passaggi da 6** a **8**.

1. Per salvare le modifiche scegli **Apply** (Applica) nella parte inferiore della pagina.

A questo punto puoi distribuire il sito nell'ambiente.

## Distribuzione dell'applicazione
<a name="ruby-rails-tutorial-deploy"></a>

Crea un [bundle di origine](applications-sourcebundle.md) che contiene i file creati da Rails. Il comando seguente crea un bundle di origine denominato `rails-default.zip`.

```
~/eb-rails$ zip ../rails-default.zip -r * .[^.]*
```

Carica il bundle di origine in Elastic Beanstalk per distribuire Rails nel tuo ambiente.

**Per distribuire un bundle di origine**

1. Apri la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) e, **nell'elenco Regioni, seleziona la tua**. Regione AWS

1. Nel pannello di navigazione selezionare **Environments** (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

1. Nella pagina della panoramica dell'ambiente scegliere **Upload and deploy** (Carica e distribuisci).

1. Utilizzare la finestra di dialogo su schermo per caricare il bundle di origine.

1. Selezionare **Deploy (Distribuisci)**.

1. Al termine della distribuzione, è possibile scegliere l'URL del sito per aprire il sito Web in una nuova scheda.

## Pulizia
<a name="ruby-rails-tutorial-cleanup"></a>

Dopo aver finito di utilizzare il codice demo, puoi chiudere l'ambiente. [Elastic Beanstalk elimina tutte le risorse AWS correlate, [come istanze EC2 Amazon](using-features.managing.ec2.md), [istanze di database, sistemi di bilanciamento del carico, gruppi](using-features.managing.db.md) di sicurezza e [allarmi](using-features.managing.elb.md).](using-features.alarms.md#using-features.alarms.title) 

La rimozione delle risorse non elimina l'applicazione Elastic Beanstalk, quindi puoi creare nuovi ambienti per la tua applicazione in qualsiasi momento.

**Per terminare l'ambiente Elastic Beanstalk dalla console**

1. Apri la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) e, **nell'elenco Regioni, seleziona la tua**. Regione AWS

1. Nel pannello di navigazione selezionare **Environments** (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

1. Seleziona **Actions** (Operazioni), quindi **Terminate environment** (Termina ambiente).

1. Utilizza la finestra di dialogo su schermo per confermare la terminazione dell'ambiente.

## Fasi successive
<a name="ruby-rails-tutorial-nextsteps"></a>

Per ulteriori informazioni su Rails, visita il sito [rubyonrails.org](https://rubyonrails.org/).

Mentre continui a sviluppare l'applicazione, potrebbe essere necessario un metodo per gestire gli ambienti e distribuire l'applicazione senza creare manualmente un file .zip e caricarlo sulla console Elastic Beanstalk. L'[Elastic Beanstalk Command Line](eb-cli3.md) Interface (EB CLI easy-to-use) fornisce comandi per creare, configurare e distribuire applicazioni in ambienti Elastic Beanstalk dalla riga di comando.

Infine, se prevedi di usare l'applicazione in un ambiente di produzione, devi [configurare un nome di dominio personalizzato](customdomains.md) per l'ambiente e [abilitare HTTPS](configuring-https.md) per le connessioni sicure.