Skip to main content

Dans cet article de blog, je vais vous expliquer comment configurer un profil de test hybride dans un projet CAP basé sur Node.js, en utilisant une base de données PostgreSQL hébergée sur BTP, et en l’exécutant localement depuis Business Application Studio.

Bien que la configuration de profils hybrides dans CAP soit une tâche courante, leur utilisation avec PostgreSQL sur BTP introduit quelques défis, principalement la nécessité de se connecter via un tunnel SSH pour accéder à la base de données distante depuis votre espace de travail BAS local.

Pour plus d’informations sur les tests hybrides dans CAP : https://cap.cloud.sap/docs/advanced/hybrid-testing

Table des matières:

Prérequis et exemple de projet

Dans ce tutoriel, j’utiliserai un exemple de projet CAP qui a été créé précédemment et est disponible publiquement sur GitHub. Si vous préférez commencer à partir de zéro, vous pouvez suivre le guide de configuration officiel ici : https://cap.cloud.sap/docs/guides/deployment/to-cf

Assurez-vous simplement de remplacer HANA Cloud par PostgreSQL en exécutant la commande suivante :

cds add postgres --for production

Note : La commande cds add postgres ajoute automatiquement une ressource PostgreSQL à votre fichier mta.yaml, en utilisant le plan de service development par défaut. Cependant, ce plan n’est pas disponible sur les comptes d’essai BTP. Si vous utilisez un compte d’essai, remplacez simplement development par trial dans le fichier mta.yaml comme indiqué ci-dessous :

- name: bookshop-postgres
  type: org.cloudfoundry.managed-service
  parameters:
    service: postgresql-db
    service-plan: trial

Une fois le projet déployé sur BTP, vous verrez cinq instances de service créées:

  • Une instance pour l’autorisation (XSUAA)
  • Une pour le service de destination
  • Deux liées au référentiel d’applications HTML5 (hôte et exécution)
  • Et une pour la base de données PostgreSQL

Cette configuration représente un déploiement CAP standard sur Cloud Foundry avec un module d’interface utilisateur HTML5.

De plus, dans votre espace Cloud Foundry, vous trouverez deux applications déployées:

  • Une pour la base de données PostgreSQL
  • Et une autre pour le service backend de votre application (le module -srv)

Avec la configuration de base établie sur BTP, nous pouvons maintenant passer à la mise en œuvre des tests hybrides depuis Business Application Studio.

Spécificité de PostgreSQL sur BTP

Le service PostgreSQL sur SAP BTP inclut désormais des fonctionnalités qui permettent l’accès depuis l’extérieur de l’environnement BTP. Cela inclut la prise en charge des adresses IP publiques, qui permettent des connexions à partir de systèmes externes, ainsi que la fonctionnalité de partage d’instance, qui vous permet de partager une instance PostgreSQL sur différents sous-comptes.

Pour plus de détails, vous pouvez vous référer aux articles de blog suivants:

Si vous êtes intéressé par d’autres articles de blog officiels sur PostgreSQL sur BTP, consultez cet index : PostgreSQL sur SAP BTP – Vous recherchez des articles de blog officiels ? INDEX du blog. Cependant, dans notre cas d’utilisation spécifique, nous ne pouvons pas utiliser ces fonctionnalités. Cette limitation est due à la nature de notre configuration actuelle, où ces options ne nous permettent pas d’atteindre cet objectif en pratique. Pour contourner ce problème, nous allons créer un tunnel SSH entre Business Application Studio et notre application Cloud Foundry.

Création du profil hybride

Pour configurer le profil hybride, vous devez modifier ou créer le fichier .cdsrc.json (ou .cdsrv-private.json) à la racine de votre projet CAP. Ce fichier définit les profils de lancement et les options spécifiques pour la commande cds.

{
  "cds": {
    "requires": {
      "\[hybrid\]": {
        "db": {
          "kind": "postgres",
          "credentials": {
            "host": "127.0.0.1",
            "port": 63306,
            "user": "\<user\>",
            "password": "\<password\>",
            "database": "\<dbname\>",
            "sslcert": "-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----",
            "sslrootcert": "-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----"
          },
          "ssl": {
            "rejectUnauthorized": true,
            "ca": "\<same\_as\_sslcert\>"
          },
          "pool": {
            "acquireTimeoutMillis": 2000
          }
        }
      }
    }
  }
}

Remplacez les espaces réservés <user>, <password>, <database>, ainsi que les champs <sslcert> et <sslrootcert> par les informations d’identification fournies par votre instance PostgreSQL hébergée sur BTP.

PostgreSQL et CAP nécessitent une connexion chiffrée (SSL). Par conséquent, les champs de configuration SSL doivent être explicitement ajoutés aux informations d’identification de la base de données afin que CAP puisse établir une connexion sécurisée à PostgreSQL.

L’accès direct à la base de données PostgreSQL distante est restreint pour des raisons de sécurité. En créant un tunnel SSH, un port local (par exemple, 63306) sur votre environnement BAS est transféré de manière sécurisée vers la base de données distante, de sorte que la connexion à 127.0.0.1:63306 accède effectivement à l’instance PostgreSQL distante via ce tunnel.

Activer SSH

Avant de pouvoir vous connecter via SSH à votre application Cloud Foundry, vous devez d’abord activer cette fonctionnalité en exécutant :

cf enable-ssh bookshop-srv
cf restart bookshop-srv

Si vous rencontrez des problèmes, consultez la documentation officielle de Cloud Foundry SSH : https://docs.cloudfoundry.org/devguide/deploy-apps/ssh-apps.html

Connexion sécurisée via tunnel SSH

Ouvrez un terminal dans Business Application Studio et exécutez la commande suivante :

cf ssh -L 63306:<host_from_service_key>:<port_from_service_key> <application_name>

Remplacez <host_from_service_key> et <port_from_service_key> par les valeurs de votre clé de service PostgreSQL sur BTP (créez-en une si elle n’existe pas). Remplacez également <application_name> par le nom de votre application Cloud Foundry (par exemple, bookshop-srv).

Cette commande crée un tunnel SSH qui transfère le port local 63306 vers la base de données PostgreSQL distante via l’application Cloud Foundry.

Lancer l’application

Dans un deuxième terminal, exécutez la commande suivante pour démarrer votre application à l’aide du profil hybride:

cds watch --profile hybridVous devriez voir un message dans la console confirmant la connexion à PostgreSQL sur localhost, par exemple :

[cds] - connect to db > postgres {
  host: '127.0.0.1',
  port: 63306,
  ...
}

Votre application s’exécute maintenant localement dans Business Application Studio, mais utilise les données réelles de la base de données PostgreSQL hébergée sur votre compte BTP.

En cas d’erreur « ResourceRequest timed out »

Si vous voyez l’erreur suivante :

<message>ResourceRequest timed out</message>Cela signifie probablement que:

  • Le tunnel SSH n’est pas actif
  • Le certificat SSL n’est pas chargé correctement
  • Le délai d’attente est trop court (d’où l’importance du paramètre acquireTimeoutMillis)

Conclusion

Une fois configurée, cette configuration vous permet de développer localement à partir de Business Application Studio tout en testant votre application avec des données réelles de PostgreSQL. De cette façon, vous évitez de redéployer l’application après chaque modification et exploitez pleinement les capacités de test hybrides de CAP.

Valentin Cadart

Author Valentin Cadart

More posts by Valentin Cadart