View a markdown version of this page

Distribuzione di un'applicazione Rails su Elastic Beanstalk - AWS Elastic Beanstalk

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

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

Prerequisiti

Conoscenza di base di Elastic Beanstalk

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 per avviare il tuo primo ambiente Elastic Beanstalk.

Riga di comando

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 ($) 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 ottenere una Windows-integrated versione di Ubuntu e Bash.

Dipendenze Rails

Il framework Rails 6.1.4.1 ha le seguenti dipendenze. Assicurati di averli tutti installati.

Avvio di un ambiente Elastic Beanstalk

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 #/Nuova applicazione? Nome dell'applicazione=Tutorials&EnvironmentType= LoadBalanced

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

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

  4. Selezionare Review and launch (Controlla e avvia).

  5. 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:

  • Beanstalk Standard: per un ambiente eseguito su Amazon Elastic Compute Cloud (Amazon EC2), Elastic Beanstalk fornisce le seguenti risorse:

    • Istanza EC2: una macchina virtuale 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 istanze: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa consente al traffico TTP proveniente dal sistema di bilanciamento del carico di raggiungere l'istanza EC2 in esecuzione sull'app Web. Per impostazione predefinita, il traffico non è consentito su altre porte.

    • Gruppo di sicurezza del sistema di bilanciamento del carico: un gruppo di sicurezza di Amazon EC2 configurato per abilitare 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.

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

  • Beanstalk Cluster: per un ambiente che funziona su Amazon EKS, Elastic Beanstalk fornisce le seguenti risorse:

    • Cluster Amazon EKS: un cluster Amazon EKS creato e gestito da Elastic Beanstalk. Gli ambienti dello stesso account che utilizzano le stesse sottoreti condividono un cluster.

    • Elaborazione: capacità dei nodi fornita da Amazon EKS Auto Mode, che aggiunge e rimuove nodi per adattarli alle repliche delle applicazioni pianificate nel cluster.

    • Ruoli IAM: i ruoli del cluster e dei nodi forniti per Amazon EKS e il ruolo di osservabilità utilizzato da Elastic Beanstalk per pubblicare le metriche, i log e le tracce dell'ambiente.

    Per ulteriori informazioni su questa infrastruttura, consulta. Architettura Beanstalk Cluster

  • Load balancer: un sistema di bilanciamento del carico che distribuisce le richieste in entrata nell'applicazione. Un sistema di bilanciamento del carico elimina inoltre la necessità di esporre l'applicazione direttamente a Internet.

  • Bucket Amazon S3: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.

  • CloudFormation stack: Elastic Beanstalk utilizza CloudFormation per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella console CloudFormation.

  • Nome di dominio: un nome di dominio che reindirizza 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).

    Se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk, ti consigliamo di utilizzare cookie con un prefisso per una maggiore sicurezza. __Host- Questa pratica difende il tuo dominio dai tentativi di falsificazione delle richieste tra siti (CSRF). Per ulteriori informazioni, consulta la Set-Cookie pagina del 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.

Installazione di Rails e generazione di un sito Web

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 nella Guida per AWS Elastic Beanstalk Platforms. Per ulteriori informazioni sull'ultima versione di Puma, consulta il Puma.io sito Web. 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..

  • 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 situato nella root della directory di origine del progetto. Quindi esegui bundle update. Per ulteriori informazioni, consulta la pagina di aggiornamento del pacchetto sul Bundler.io sito Web.

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.

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.

Esempio app/views/welcome_page/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:

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

Esempio
~/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

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 e, nell'elenco delle regioni, seleziona la tua. Regione AWS

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

  3. Nel riquadro di navigazione, seleziona Configuration (Configurazione).

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

  5. Scorri verso il basso fino alle variabili di ambiente Runtime.

  6. Seleziona Aggiungi variabile di ambiente.

  7. Per Sorgente seleziona Testo normale.

    Nota

    I valori di 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 Usare Elastic Beanstalk con AWS Secrets Manager and AWS Systems Manager Parameter Store.

  8. Inserisci il nome della variabile di ambiente e le coppie di valori della variabile di ambiente.

  9. Se è necessario aggiungere altre variabili, ripetere i passaggi dal passaggio 6 al passaggio 8.

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

A questo punto puoi distribuire il sito nell'ambiente.

Distribuzione dell'applicazione

Crea un bundle di origine 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 e, nell'elenco delle regioni, seleziona la tua. Regione AWS

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

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

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

  5. Selezionare Deploy (Distribuisci).

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

Pulizia

Dopo aver finito di lavorare con il codice demo, puoi terminare il tuo ambiente. Elastic Beanstalk elimina tutte le AWS risorse correlate, come istanze Amazon EC2, istanze di database, sistemi di bilanciamento del carico, gruppi di sicurezza e allarmi.

La rimozione delle risorse non comporta l'eliminazione dell'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 e, nell'elenco delle regioni, seleziona il tuo. Regione AWS

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

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

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

Fasi successive

Per ulteriori informazioni su Rails, visita il sito 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'interfaccia a riga di comando di Elastic Beanstalk (CLI EB) fornisce comandi semplici 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 per l'ambiente e abilitare HTTPS per le connessioni sicure.