Déployer Ruby sur Rails sur Oracle Cloud Infrastructure

Ruby on Rails est le Web Application Framework dominant pour le langage de programmation Ruby. Pour prendre en charge le développement avec Ruby on Rails (RoR), une infrastructure résiliente est fournie, qui déploie les machines virtuelles et les instances de base de données MySQL nécessaires, ainsi que le déploiement scripté de Ruby on Rails et les dépendances associées.

Vous pouvez trouver Terraform pour cette architecture déployable, oci-arch-ruby-rails-build, dans le référentiel DevRel GitHub, accessible à partir de la rubrique En savoir plus, ci-dessous.

Architecture

L'architecture comprend un VCN avec plusieurs sous-réseaux pour permettre l'isolement de différents services. Par conséquent, l'accès public s'effectue via un équilibreur de charge actif/de secours. Un sous-réseau public supplémentaire fournit un bastion qui prend en charge l'utilisation de SSH pour accéder aux services back-end.

L'équilibreur de charge fait face à deux machines virtuelles de calcul, chacune hébergeant un serveur Ruby sur Rails. Ces serveurs peuvent accéder à une base de données MySQL. Les machines virtuelles et la base de données MySQL se trouvent dans leurs propres sous-réseaux distincts pour répondre à des considérations telles que l'accès.

Le diagramme suivant illustre cette architecture de référence.

Description de l'image deploy-ruby-rails-mds-arch.png
Description de l'illustration deploy-ruby-rails-mds-arch.png

deploy-ruby-rails-mds-arch-oracle.zip

Cette architecture comporte les composants suivants :
  • Location

    Une location est une partition sécurisée et isolée qu'Oracle configure dans Oracle Cloud lorsque vous souscrivez à Oracle Cloud Infrastructure. Vous pouvez créer, organiser et administrer vos ressources dans Oracle Cloud dans votre location.

    Une location est synonyme d'entreprise ou d'organisation. En général, une entreprise dispose d'une seule location et reflète sa structure organisationnelle au sein de cette location. Une même location est généralement associée à un seul abonnement et un seul abonnement comporte généralement une seule location.

  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique localisée qui contient des centres de données, appelés domaines de disponibilité. Les régions sont indépendantes les unes des autres et de grandes distances peuvent les séparer (elles peuvent se trouver dans des pays voire des continents différents).

  • Compartiment

    Les compartiments sont des partitions logiques inter-régions au sein d'une location Oracle Cloud Infrastructure. Utilisez des compartiments pour organiser vos ressources dans Oracle Cloud, contrôler l'accès aux ressources et définir des quotas d'utilisation. Pour contrôler l'accès aux ressources d'un compartiment donné, vous définissez des stratégies qui indiquent qui peut accéder aux ressources et les actions réalisables.

  • Domaines de disponibilité

    Les domaines de disponibilité sont des centres de données indépendants et autonomes au sein d'une région. Les ressources physiques de chaque domaine de disponibilité sont isolées des ressources des autres domaines de disponibilité, ce qui assure la tolérance aux pannes. Les domaines de disponibilité ne partagent pas les mêmes infrastructures : réseau d'alimentation ou de refroidissement ou réseau interne. Ainsi, il est peu probable qu'un échec sur un domaine de disponibilité compromette les autres domaines de disponibilité de la région.

  • Domaines de pannes

    Un domaine de pannes est un regroupement de matériel et d'infrastructures au sein d'un domaine de disponibilité. Chaque domaine de disponibilité comporte trois domaines de pannes dotés de matériel et d'alimentation indépendants. Lorsque vous répartissez des ressources entre plusieurs domaines de pannes, vos applications peuvent tolérer les pannes de serveur physique, la maintenance du système et les pannes de courant au sein d'un domaine de pannes.

  • Réseau cloud virtuel (VCN) et sous-réseaux

    Un VCN est un réseau personnalisable défini par logiciel que vous configurez dans une région Oracle Cloud Infrastructure. Comme les réseaux de centres de données traditionnels, les réseaux cloud virtuels vous permettent de contrôler entièrement votre environnement réseau. Un VCN peut avoir plusieurs blocs CIDR qui ne se chevauchent pas que vous pouvez modifier après avoir créé le VCN. Vous pouvez segmenter un VCN en sous-réseaux, qui peuvent être ciblés sur une région ou sur un domaine de disponibilité. Chaque sous-réseau se compose d'une plage contiguë d'adresses qui ne chevauchent pas les autres sous-réseaux du VCN. Vous pouvez modifier la taille d'un sous-réseau après sa création. Un sous-réseau peut être public ou privé.

  • équilibrage de charge

    Le service Oracle Cloud Infrastructure Load Balancing fournit une répartition de trafic automatique à partir d'un seul point d'entrée vers plusieurs serveurs dans le back-end.

    L'équilibreur de charge permet d'accéder à différentes applications.

  • Liste de sécurité

    Pour chaque sous-réseau, vous pouvez créer des règles de sécurité qui indiquent la source, la destination et le type de trafic à autoriser vers et depuis le sous-réseau.

  • passerelle NAT

    La passerelle NAT permet aux ressources privées d'un VCN d'accéder aux hôtes sur Internet, sans exposer ces ressources aux connexions Internet entrantes.

  • Passerelle de service

    La passerelle de service fournit un accès d'un VCN à d'autres services, tels qu'Oracle Cloud Infrastructure Object Storage. Le trafic du VCN vers le service Oracle passe par la structure réseau Oracle et ne traverse jamais Internet.

  • MySQL Database Service

    Oracle MySQL Database Service est un service de base de données Oracle Cloud Infrastructure (OCI) entièrement géré qui permet aux développeurs de développer et de déployer rapidement des applications natives du cloud sécurisées. Optimisé et exclusivement disponible dans OCI, Oracle MySQL Database Service est conçu, géré et pris en charge à 100 % par les équipes d'ingénierie OCI et MySQL.

    Oracle MySQL Database Service dispose d'un moteur d'analyse hautes performances intégré (HeatWave) qui permet d'exécuter des analyses sophistiquées en temps réel directement sur une base de données MySQL opérationnelle.

  • Service Bastion

    Oracle Cloud Infrastructure Bastion fournit un accès sécurisé limité et limité dans le temps aux ressources qui ne disposent pas d'adresses publiques et qui nécessitent des contrôles d'accès stricts aux ressources, tels que les machines virtuelles et Bare Metal, Oracle MySQL Database Service Autonomous Transaction Processing (ATP), Oracle Container Engine for Kubernetes (OKE) et toute autre ressource autorisant l'accès au protocole SSH (Secure Shell Protocol). Avec le service Oracle Cloud Infrastructure Bastion, vous pouvez activer l'accès aux hôtes privés sans déployer ni gérer d'hôte de saut. En outre, vous gagnez en sécurité grâce aux autorisations basées sur l'identité et à une session SSH centralisée, auditée et limitée dans le temps. Oracle Cloud Infrastructure Bastion élimine le besoin d'une adresse IP publique pour l'accès aux bastions, éliminant ainsi les tracas et la surface d'attaque potentielle lors de la fourniture d'un accès à distance.

Recommandations

Utilisez les recommandations suivantes comme point de départ lors du déploiement de Ruby sur Rails sur OCI. Vos besoins peuvent être différents.

  • Sécurité

    Utilisez Oracle Cloud Guard pour surveiller et maintenir la sécurité de vos ressources dans OCI de manière proactive. Cloud Guard utilise des recettes de détecteur que vous pouvez définir pour examiner les ressources à la recherche de failles de sécurité et pour surveiller les opérateurs et les utilisateurs à la recherche d'activités risquées. Lorsqu'une erreur de configuration ou une activité non sécurisée est détectée, Cloud Guard recommande des actions correctives et les aide à effectuer ces actions, en fonction des recettes de répondeur que vous pouvez définir.

    Pour les ressources nécessitant une sécurité maximale, Oracle recommande d'utiliser des zones de sécurité. Une zone de sécurité est un compartiment associé à une recette de stratégies de sécurité définie par Oracle et basée sur les meilleures pratiques. Par exemple, les ressources d'une zone de sécurité ne doivent pas être accessibles à partir du réseau Internet public et doivent être cryptées à l'aide de clés gérées par le client. Lorsque vous créez et mettez à jour des ressources dans une zone de sécurité, OCI valide les opérations par rapport aux stratégies de la recette de zone de sécurité et refuse les opérations qui enfreignent l'une des stratégies.

    Si l'application est implémentée de manière à présenter du contenu dynamique ou à permettre aux clients de soumettre des données via des API, nous vous recommandons d'adopter une passerelle d'API car cela permet de gérer les interactions avec les API via l'utilisation de stratégies d'API.

  • Cloud Guard

    Clonez et personnalisez les recettes par défaut fournies par Oracle pour créer des recettes personnalisées de détecteur et de répondeur. Ces recettes vous permettent d'indiquer le type de violation de sécurité qui génère un avertissement et les actions autorisées à y être effectuées. Par exemple, vous pouvez détecter les buckets Object Storage dont la visibilité est définie sur Public.

    Appliquez Cloud Guard au niveau de la location pour couvrir la portée la plus large et réduire la charge administrative liée à la maintenance de plusieurs configurations.

    Vous pouvez également utiliser des listes gérées pour appliquer certaines configurations aux détecteurs.

  • Zones de sécurité

    Clonez et personnalisez les recettes par défaut fournies par Oracle pour créer des recettes personnalisées de détecteur et de répondeur. Ces recettes vous permettent d'indiquer le type de violation de sécurité qui génère un avertissement et les actions autorisées à y être effectuées. Par exemple, vous pouvez détecter les buckets Object Storage dont la visibilité est définie sur Public.

    Appliquez Cloud Guard au niveau de la location pour couvrir la portée la plus large et réduire la charge administrative liée à la maintenance de plusieurs configurations.

    Vous pouvez également utiliser des listes gérées pour appliquer certaines configurations aux détecteurs.

  • Groupes de sécurité réseau

    Vous pouvez utiliser des groupes de sécurité réseau pour définir un ensemble de règles entrantes et sortantes qui s'appliquent à des cartes d'interface réseau virtuelles spécifiques. Nous vous recommandons d'utiliser des groupes de sécurité réseau plutôt que des listes de sécurité, car les groupes de sécurité réseau vous permettent de séparer l'architecture de sous-réseau du VCN des exigences de sécurité de votre application.

    Vous pouvez utiliser des groupes de sécurité réseau pour définir un ensemble de règles entrantes et sortantes qui s'appliquent à des cartes d'interface réseau virtuelles spécifiques. Nous recommandons d'utiliser des groupes de sécurité réseau plutôt que des listes de sécurité, car les groupes de sécurité réseau vous permettent de séparer l'architecture de sous-réseau du VCN des exigences de sécurité de votre application.

  • Bande passante d'équilibreur de charge

    Lors de la création de l'équilibreur de charge, vous pouvez sélectionner une forme prédéfinie qui fournit une bande passante fixe, ou indiquer une forme personnalisée (flexible) dans laquelle vous définissez une plage de bande passante et laisser le service redimensionner automatiquement la bande passante en fonction des modèles de trafic. Avec les deux approches, vous pouvez modifier la forme à tout moment après la création de l'équilibreur de charge.

Remarques

Tenez compte des points suivants lors du déploiement de cette architecture de référence.
  • Performances

    L'utilisation de ce RA comme point de départ signifie que les performances seront influencées par le nombre de noeuds de machine virtuelle et le type de machine virtuelle sélectionnés pour chaque noeud. Terraform prend en charge la personnalisation de ces éléments pour utiliser différents serveurs de spécification et le nombre de noeuds.

    Des gains de performances supplémentaires peuvent être réalisés en exécutant Ruby et Rails à l'aide de GraalVM

  • Sécurité

    La configuration de base ne prend en compte aucune authentification et autorisation d'application ni prise en charge d'API. Au niveau du réseau, l'accès et le routage doivent être réglés pour déterminer si le service Ruby est destiné à une utilisation interne ou externe. Avec une utilisation externe, l'environnement doit également être étendu pour inclure l'utilisation d'un pare-feu d'applications Web et Cloud Guard doit être pris en compte.

  • Disponibilité

    La disponibilité peut être étendue en répartissant les noeuds sur davantage de zones de disponibilité, et potentiellement pour les niveaux de disponibilité les plus critiques sur l'ensemble des régions.

    La disponibilité n'est pas seulement un facteur de l'existence des noeuds de calcul, mais également de la sécurité, de sorte que seul le trafic légitime peut interagir avec les applications déployées. Les recommandations de sécurité permettent d'y remédier.

  • Coût

    La sécurité peut également aider à gérer les coûts en limitant la quantité de calcul nécessaire pour traiter les demandes. Cela revient au fait qu'empêcher le trafic accidentel ou malveillant d'atteindre les serveurs sur WAF ou API Gateway réduit la quantité de charge de travail potentielle générée.

En savoir plus

Pour en savoir plus sur le déploiement de Ruby sur Rails sur OCI, reportez-vous aux ressources suivantes :

Consultez les ressources supplémentaires suivantes :

Remarques

  • Authors: Hassan Ajan, Phil Wilkins
  • Contributors: Chiping Hwang, Luke Feldman