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

Prerequisiti

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

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 versione integrata con Windows di Ubuntu e Bash.

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#/ newApplication?applicationname=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:

  • Istanza EC2: una macchina virtuale Amazon Elastic Compute Cloud (Amazon EC2) configurata per l'esecuzione di 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.

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

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

  • AWS CloudFormation stack: Elastic AWS 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 AWS CloudFormation.

  • Nome dominio: un nome di dominio che esegue l'instradamento all'applicazione Web utilizzando il formato sottodominio.regione.elasticbeanstalk.com.

    Nota

    Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio elasticbeanstalk.com è registrato nella Public Suffix List (PSL). Per una maggiore sicurezza, ti consigliamo di utilizzare i cookie con un prefisso __Host- se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk. Questa pratica ti aiuterà a difendere il tuo dominio dai tentativi CSRF (cross-site request forgery). Per ulteriori informazioni, consulta la pagina Impostazione cookie 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, consultare 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 sulla versione più recente di Puma, consulta il sito Web 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..

  • 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 dell'aggiornamento del bundle 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.

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.

~/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 proprietà dell'ambiente nella console Elastic Beanstalk
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

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

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  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 a Proprietà dell'ambiente.

  6. Seleziona Aggiungi proprietà dell'ambiente.

  7. Inserisci la coppia di Nome e Valore della proprietà.

  8. Se è necessario aggiungere altre variabili, ripeti il Passaggio 6 e il Passaggio 7.

  9. 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 Regioni, seleziona la tua. Regione AWS

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

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  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 usato Elastic Beanstalk, puoi terminare l'ambiente. Elastic Beanstalk AWS interrompe tutte le risorse associate all'ambiente, come istanze Amazon EC2, istanze di database, sistemi di bilanciamentodel carico, gruppi di sicurezza e allarmi.

Per chiudere l'ambiente Elastic Beanstalk dalla console
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

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

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

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

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

Con Elastic Beanstalk puoi creare facilmente un nuovo ambiente per l'applicazione in qualsiasi momento.

Passaggi successivi

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'Elastic Beanstalk Command Line 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 per l'ambiente e abilitare HTTPS per le connessioni sicure.