Distribuire Ruby sui binari su Oracle Cloud Infrastructure
Terraform per questa architettura distribuibile, oci-arch-ruby-rails-build, è disponibile nel repository DevRel GitHub, accessibile dall'argomento Esplora altro riportato di seguito.
Architettura
L'architettura comprende una rete VCN con diverse subnet per consentire l'isolamento di servizi diversi. Di conseguenza, l'accesso pubblico avviene tramite un load balancer attivo/in standby. Un'ulteriore subnet pubblica fornisce un bastion che supporta l'uso di SSH per accedere ai servizi backend.
Il load balancer posiziona due Virtual Machine (VM) di computazione con ciascuna istanza di hosting di un server Ruby su Rails. Questi server possono accedere a un database MySQL. Sia le VM che il database MySQL si trovano in sottoreti separate per rispondere a considerazioni quali l'accesso.
Il seguente diagramma illustra questa architettura di riferimento.

Descrizione dell'immagine deploy-ruby-rails-mds-arch.png
deployment-ruby-rails-mds-arch-oracle.zip
-
Tenancy
Una tenancy è una partizione sicura e isolata che Oracle imposta all'interno di Oracle Cloud quando ti iscrivi a Oracle Cloud Infrastructure. È possibile creare, organizzare e amministrare le risorse in Oracle Cloud all'interno della tenancy.
Una tenancy è sinonimo di azienda o organizzazione. In genere, un'azienda avrà una sola tenancy e rifletterà la sua struttura organizzativa all'interno di tale tenancy. Una singola tenancy è in genere associata a una singola sottoscrizione e una singola sottoscrizione in genere dispone di una sola tenancy.
- Area
Un'area geografica Oracle Cloud Infrastructure è un'area geografica localizzata che contiene uno o più data center, denominati domini di disponibilità. Le regioni sono indipendenti da altre regioni e grandi distanze possono separarle (tra paesi o addirittura continenti).
- Compartimento
I compartimenti sono partizioni logiche intraregionali all'interno di una tenancy di Oracle Cloud Infrastructure. Utilizza i compartimenti per organizzare le risorse in Oracle Cloud, controllare l'accesso alle risorse e impostare le quote d'uso. Per controllare l'accesso alle risorse in un determinato compartimento, puoi definire criteri che specifichino chi può accedere alle risorse e quali azioni può eseguire.
- Domini di disponibilità
I domini di disponibilità sono data center standalone indipendenti all'interno di un'area geografica. Le risorse fisiche in ciascun dominio di disponibilità sono isolate dalle risorse presenti negli altri domini di disponibilità, che garantiscono la tolleranza agli errori. I domini di disponibilità non condividono l'infrastruttura, ad esempio, l'alimentazione o il raffreddamento oppure la rete interna del dominio di disponibilità. Pertanto, è improbabile che l'eventuale guasto di un dominio di disponibilità influisca sugli altri domini di disponibilità dell'area.
- Domini di errore
Un dominio di errore è un raggruppamento di hardware e infrastruttura all'interno di un dominio di disponibilità. Ogni dominio di disponibilità dispone di tre domini di errore con alimentazione e hardware indipendenti. Quando distribuisci le risorse su più domini di errore, le applicazioni possono tollerare guasti fisici del server, manutenzione del sistema e errori di alimentazione all'interno di un dominio di errore.
- Rete cloud virtuale (VCN) e subnet
Una VCN è una rete personalizzabile definita dal software che si imposta in un'area Oracle Cloud Infrastructure. Analogamente alle reti di data center tradizionali, i VCN offrono il controllo completo sull'ambiente di rete. Una VCN può avere più blocchi CIDR non sovrapposti che puoi modificare dopo aver creato la VCN. Puoi segmentare una VCN in subnet che possono essere definite in un'area o in un dominio di disponibilità. Ogni subnet è costituita da un intervallo contiguo di indirizzi che non si sovrappongono alle altre subnet nella VCN. Puoi modificare la dimensione di una subnet dopo la creazione. Una subnet può essere pubblica o privata.
- Load balancer
Il servizio Oracle Cloud Infrastructure Load Balancing fornisce la distribuzione automatica del traffico da un unico punto di accesso a più server nel back end.
Il load balancer fornisce l'accesso a applicazioni diverse.
- Lista di sicurezza
Per ogni subnet, puoi creare regole di sicurezza che specificano l'origine, la destinazione e il tipo di traffico che deve essere consentito all'interno e all'esterno della subnet.
- Gateway NAT
Il gateway NAT consente alle risorse private di una VCN di accedere agli host su Internet senza esporre tali risorse alle connessioni Internet in entrata.
- Gateway del servizio
Il gateway di servizi fornisce l'accesso da una VCN ad altri servizi, come Oracle Cloud Infrastructure Object Storage. Il traffico dalla rete VCN al servizio Oracle viaggia attraverso il fabric di rete Oracle e non attraversa mai Internet.
- MySQL Database Service
Oracle MySQL Database Service è un servizio di database Oracle Cloud Infrastructure (OCI) completamente gestito che consente agli sviluppatori di sviluppare e distribuire rapidamente applicazioni cloud native sicure. Ottimizzato per OCI ed esclusivamente disponibile in OCI, Oracle MySQL Database Service è progettato, gestito e supportato al 100% dai team di ingegneri OCI e MySQL.
Oracle MySQL Database Service dispone di un motore di analitica integrato e ad alte prestazioni (HeatWave) per eseguire sofisticate funzioni di analitica in tempo reale direttamente in un database MySQL operativo.
- Servizio bastion
Oracle Cloud Infrastructure Bastion offre un accesso sicuro limitato nel tempo alle risorse che non hanno endpoint pubblici e che richiedono severi controlli di accesso alle risorse, quali Bare Metal e Virtual Machine, Oracle MySQL Database Service Autonomous Transaction Processing (ATP), Oracle Container Engine for Kubernetes (OKE) e qualsiasi altra risorsa che consente l'accesso SSH (Secure Shell Protocol). Con il servizio Oracle Cloud Infrastructure Bastion, puoi abilitare l'accesso agli host privati senza distribuire e gestire un jump host. Inoltre, migliora il livello di sicurezza con autorizzazioni basate sull'identità e una sessione SSH centralizzata, controllata e con limiti di tempo. Oracle Cloud Infrastructure Bastion elimina la necessità di un IP pubblico per l'accesso bastion, eliminando le difficoltà e le potenziali superfici di attacco quando fornisce l'accesso remoto.
Suggerimenti
Utilizza i suggerimenti riportati di seguito come punto di partenza per distribuire Ruby sui binari nell'infrastruttura OCI. I requisiti potrebbero differire.
- Sicurezza
Utilizza Oracle Cloud Guard per monitorare e mantenere la sicurezza delle tue risorse in OCI in modo proattivo. Cloud Guard utilizza ricette dei rilevatori che puoi definire per esaminare le risorse e rilevare carenze a livello di sicurezza e monitorare operatori e utenti in caso di attività a rischio. Quando viene rilevata un'attività di configurazione errata o non sicura, Cloud Guard consiglia azioni correttive e supporta l'esecuzione di tali azioni in base alle ricette del rispondente che è possibile definire.
Per le risorse che richiedono una maggiore sicurezza, Oracle consiglia di utilizzare le zone di sicurezza. Una zona di sicurezza è un compartimento associato a una ricetta dei criteri di sicurezza definita da Oracle basata sulle migliori prassi. Ad esempio, le risorse in una zona di sicurezza non devono essere accessibili dalla rete Internet pubblica e devono essere cifrate utilizzando chiavi gestite dal cliente. Quando si creano e si aggiornano risorse in una zona di sicurezza, OCI convalida le operazioni in base ai criteri nella ricetta della zona di sicurezza e nega le operazioni che violano uno qualsiasi dei criteri.
Se l'applicazione viene implementata in modo da esporre il contenuto dinamico o consentire ai client di sottomettere i dati tramite le API, si consiglia di adottare un gateway API, in quanto fornisce i mezzi per gestire l'interazione con le API attraverso l'uso dei criteri API.
- Cloud Guard
Duplica e personalizza le ricette predefinite fornite da Oracle per creare ricette personalizzate del rilevatore e del rispondente. Queste ricette consentono di specificare il tipo di violazioni della sicurezza che generano un'avvertenza e le azioni che possono essere eseguite su di esse. Ad esempio, potresti voler rilevare i bucket di storage degli oggetti con visibilità impostata su pubblica.
Applica Cloud Guard a livello di tenancy per coprire l'ambito più ampio e ridurre l'onere amministrativo derivante dalla gestione di più configurazioni.
È inoltre possibile utilizzare gli elenchi gestiti per applicare determinate configurazioni ai rilevatori.
- Zone di sicurezza
Duplica e personalizza le ricette predefinite fornite da Oracle per creare ricette personalizzate del rilevatore e del rispondente. Queste ricette consentono di specificare il tipo di violazioni della sicurezza che generano un'avvertenza e le azioni che possono essere eseguite su di esse. Ad esempio, potresti voler rilevare i bucket di storage degli oggetti con visibilità impostata su pubblica.
Applica Cloud Guard a livello di tenancy per coprire l'ambito più ampio e ridurre l'onere amministrativo derivante dalla gestione di più configurazioni.
È inoltre possibile utilizzare gli elenchi gestiti per applicare determinate configurazioni ai rilevatori.
- Gruppi di sicurezza di rete (NSG)
Puoi utilizzare i gruppi NSG per definire un set di regole di entrata e uscita valide per le VNIC specifiche. Si consiglia di utilizzare gli NSG anziché gli elenchi di sicurezza perché gli NSG consentono di separare l'architettura della subnet della VCN dai requisiti di sicurezza dell'applicazione.
Puoi utilizzare i gruppi NSG per definire un set di regole di entrata e uscita valide per le VNIC specifiche. Si consiglia di utilizzare gli NSG anziché gli elenchi di sicurezza, in quanto gli NSG consentono di separare l'architettura della subnet della VCN dai requisiti di sicurezza dell'applicazione.
- Larghezza di banda del load balancer
Durante la creazione del load balancer, puoi selezionare una forma predefinita che fornisca una larghezza di banda fissa o specificare una forma personalizzata (flessibile) in cui impostare un intervallo di larghezza di banda e lasciare che il servizio ridimensioni automaticamente la larghezza di banda in base ai pattern di traffico. Con entrambi gli approcci, puoi modificare la forma in qualsiasi momento dopo aver creato il load balancer.
Considerazioni
- Prestazioni
L'uso di questo RA come punto di partenza significa che le prestazioni saranno influenzate dal numero di nodi VM e dal tipo di VM selezionato per ogni nodo. Terraform supporta l'adattamento di questi componenti per l'uso di server di specifica diversi e del numero di nodi.
È possibile ottenere ulteriori vantaggi in termini di prestazioni eseguendo Ruby e i binari utilizzando GraalVM
- Sicurezza
La configurazione di base non tiene conto di autenticazione e autorizzazione dell'applicazione o del supporto API. A livello di rete, è necessario ottimizzare l'accesso e l'instradamento per stabilire se il servizio Ruby è per uso interno o esterno. Con l'uso esterno, è necessario estendere anche l'ambiente in modo da includere l'uso di un Web Application Firewall e considerare Cloud Guard.
- Disponibilità
La disponibilità può essere estesa distribuendo i nodi su più aree di disponibilità e potenzialmente per i livelli di disponibilità più critici in tutte le aree geografiche.
La disponibilità non è solo un fattore dell'esistenza dei nodi di calcolo, ma anche la sicurezza in modo che solo il traffico legittimo possa interagire con le applicazioni distribuite. È possibile risolvere questo problema utilizzando i suggerimenti sulla sicurezza.
- Costo
Inoltre, la sicurezza può contribuire alla gestione dei costi limitando la quantità di computazione necessaria per le richieste di servizio. In questo modo si riduce il fatto che impedire il traffico accidentale o dannoso di colpire i server nel gateway WAF o API riduce la quantità di potenziale carico di lavoro generato.