Recherche

Effacer le filtre
Article
Guillaume Rongier · Mai 8, 2023

Créer, prédire et explorer les modèles ML en utilisant InterSystems Cloud SQL / IntegratedML

![](/sites/default/files/inline/images/images/image(6066).png) Bonjour à la communauté, Dans cet article, je vais présenter mon application iris-mlm-explainer Cette application web se connecte au service SQL d'InterSystems Cloud pour créer, entraîner, valider et prédire des modèles d'apprentissage automatique, faire des Prédictions et afficher un tableau de bord de tous les modèles entraînés avec une explication du fonctionnement d'un modèle d'apprentissage automatique ajusté. Le tableau de bord fournit des graphiques interactifs sur les performances du modèle, les importances des caractéristiques, les contributions des caractéristiques aux prédictions individuelles, les graphiques de dépendance partielle, les valeurs SHAP (interaction), la visualisation des arbres de décision individuels, etc.   ![](https://github.com/mwaseem75/iris-mlm-explorer/raw/main/irisMLMExp.gif) ## Conditions préalables * Vous devez avoir un compte à SQL d'InterSystems Cloud * Vous devez avoir <a book="" fr="" getting-started-installing-git="" git-scm.com="" https:="" v2="">**Git**</a> installé localement. * Vous devez avoir <a downloads="" https:="" www.python.org="">**Python3**</a> installé localement.   ## Démarrage Nous allons suivre les étapes suivantes pour créer et afficher le tableau de bord explicatif d'un modèle : * Etape 1 : Fermeture/git pull du référentiel * Étape 2 : Connexion au portail de service SQL d'InterSystems Cloud Étape 2.1 : Ajout et gestion de fichiers Étape 2.2 : Importation des fichiers DDL et des fichiers de données Étape 2.3 : Création du modèle Étape 2.4 : Entraînement du modèle Étape 2.5 : Validation du modèle * Étape 3 : Activation de l'environnement virtuel Python * Étape 4 : Exécution de l'application Web pour la prédiction * Étape 5 : Exploration du tableau de bord explicatif ### Etape 1 : Fermeture/git Extraction du référentiel Commençons donc par la première étape Créer un dossier et Cloner/utiliser le git pull pour le référentiel dans n'importe quel répertoire local. git clone https://github.com/mwaseem75/iris-mlm-explainer.git ###   ### Étape 2 : Connexion au portail de service SQL d'InterSystems Cloud Connectez-vous au portail InterSystems Cloud Service Portal ![image](https://user-images.githubusercontent.com/18219467/233755660-7a9dcf01-927e-4d5d-a901-2ef018c33876.png) ###   ###   Sélectionner le déploiement en cours ![image](https://user-images.githubusercontent.com/18219467/233755738-53ef3e59-c890-4d5b-8b7c-17fd0077fb3b.png) ###   Étape 2.1 : Ajout et gestion des fichiers Cliquez sur Ajout et gestion de fichiers (Add and Manage Files) ![image](https://user-images.githubusercontent.com/18219467/233757122-0a976333-c448-4ad4-9925-10794a1c08ab.png) Le référentiel contient les fichiers USA\_Housing\_tables_DDL.sql(DDL pour créer les tables), USA\_Housing\_train.csv(données d'entraînement), et USA\_Housing_validate.csv(pour la validation) dans le dossier datasets. Sélectionnez le bouton de téléchargement pour ajouter ces fichiers. ![AddFiles](https://user-images.githubusercontent.com/18219467/233757254-826532d4-7c86-4f87-a124-9a8d14ca2069.JPG)   Étape 2.2 : Importation des fichiers DDL et des fichiers de données Cliquez sur Importation de fichiers, puis sur le bouton radio Instruction(s) DDL ou DML, puis sur le bouton suivant. ![ImportDDL](https://user-images.githubusercontent.com/18219467/233757429-dde9ae1d-32ac-4417-97c5-f126c539a287.JPG) Cliquez sur le bouton radio Intersystems IRIS et cliquez ensuite sur le bouton suivant ![IsIRIS](https://user-images.githubusercontent.com/18219467/233757466-94af3c32-e248-40da-9045-d0c94675c2f2.JPG) Sélectionnez le fichier USA\_Housing\_tables_DDL.sql et appuyez sur le bouton d'importation de fichiers. ![ImportFileDDL](https://user-images.githubusercontent.com/18219467/233757496-2df03ecf-d038-42fb-9461-084b87c286f7.JPG) Cliquez sur le bouton d'importation "Import" dans la boîte de dialogue de confirmation pour créer le tableau. ![importconfirm](https://user-images.githubusercontent.com/18219467/233757743-acd85bae-9fd9-449b-bbc8-856a5feaad90.jpg) ###![importDone](https://user-images.githubusercontent.com/18219467/233757755-e976c16d-164c-42bd-a0d6-fabe322153cf.jpg)   Cliquez sur le bouton des outils de requête SQL (SQL Query tools) pour vérifier que les tableaux sont créés. ###![checkTblCreated](https://user-images.githubusercontent.com/18219467/233757934-a99b77ba-562b-4796-83c3-73f718e45d37.JPG) Importez des fichiers de données Cliquez sur Importation de fichiers (Import files), puis sur le bouton radio Données CSV (CSV data), et enfin sur le bouton suivant. ### Selectionnez le fichier USA\_Housing\_train.csv et cliquez sur le bouton suivant ###![csv2](https://user-images.githubusercontent.com/18219467/233757971-87734bf4-1d18-4a92-9491-5f491e51814c.JPG) ###   Sélectionnez le fichier USA_Housing\_train.csv dans la liste déroulante, cochez les cases d'importation de lignes en tant que ligne d'en-tête et de noms de champs dans la ligne d'en-tête correspondant aux noms de colonnes dans le tableau sélectionné, puis cliquez sur Importation de fichiers. ![csv3](https://user-images.githubusercontent.com/18219467/233758084-ac6fa086-40b4-4a09-98d1-73e9d93b5f74.jpg) cliquer sur "importation" dans la boîte de dialogue de confirmation ![csv4](https://user-images.githubusercontent.com/18219467/233758167-cc4af63f-71a6-436c-bb83-f2a10b88069e.jpg) Assurez-vous que 4000 lignes sont mises à jour ![csv5](https://user-images.githubusercontent.com/18219467/233758188-15ecaf0f-bc32-4b25-8730-4f86645ada88.jpg) Procédez de la même manière pour importer le fichier USA_Housing\_validate.csv qui contient 1500 enregistrements. ![csv6](https://user-images.githubusercontent.com/18219467/233758219-d2f62c9f-01b9-48d3-a102-184b14ec46f0.jpg) Étape 2.3 : Création du modèle Cliquez sur les outils IntegratedM et sélectionnez Créer un panneau (Create Panel). Saisissez USAHousingPriceModel dans le champ de nom du modèle (Model Name), sélectionnez le tableau usa_housing_train et Prix dans la liste déroulante des champs à prédire (Field to predict). Cliquez sur le bouton "Création du modèle" pour créer le modèle. ###   Étape 2.4 : Entraînement du modèle sélectionnez le panneau d'entraînement (Train Panel), sélectionnez USAHousingPriceModel dans la liste déroulante du modèle à entraîner et saisissez USAHousingPriceModel_t1 dans le champ du nom du modèle d'entraînement (Train Model Name) ###![TRAIN1](https://user-images.githubusercontent.com/18219467/233758471-e8e1779f-0cee-4131-9306-568c13465088.jpg) Le modèle sera entraîné une fois l'état de fonctionnement (Run Status) achevé ###![TRAIN2](https://user-images.githubusercontent.com/18219467/233758563-629542da-01a0-4050-9a1f-79c947efba07.jpg) ###   Étape 2.5 : Validation du modèle Sélectionnez le panneau de validation (Validate Panel), sélectionnez USAHousingPriceModel\_t1 dans le modèle entraîné pour valider la liste déroulante, sélectionnez usa\_houseing_validate dans le tableau pour valider le modèle à partir de la liste déroulante et cliquez sur le bouton de validation du modèle. ###![image](https://user-images.githubusercontent.com/18219467/233758810-9891f2f1-0825-45f3-9e12-5ccae3000ec7.png)   Cliquez sur affichage des mesures de validation pour visualiser les mesures. ![showValidation](https://user-images.githubusercontent.com/18219467/233758865-c20a0275-70aa-4af5-ba0f-1d7c153589c4.JPG)   Cliquez sur l'icône graphique pour afficher le graphique Prédiction VS Réalité. ![validationChart](https://user-images.githubusercontent.com/18219467/233759007-49fd2bce-badc-4036-8c46-b72e4145b6d5.JPG) ###   ### Étape 3 : Activation de l'environnement virtuel Python Le référentiel contient déjà un dossier d'environnement virtuel python (venv) avec toutes les bibliothèques nécessaires. Il suffit d'activer l'environnement Pour Unix ou MacOS : <span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">source</span> venv/bin/activate</span> Pour Windows: venv\scripts\activate ### Étape 4 : Définir les paramètres de connexion à InterSystems SQL Cloud Le référentiel contient le fichier config.py. Il suffit de l'ouvrir et de le paramétrer ![image](https://user-images.githubusercontent.com/18219467/232424168-3fd4ce14-2a78-44bc-a42b-c65909d9696a.png) Mettez les mêmes valeurs que celles utilisées dans InterSystems SQL Cloud ![image](https://user-images.githubusercontent.com/18219467/232485432-4b100781-1127-45b0-b3d8-95570124d977.png) ###   ### Étape 4 : Exécution de l'application Web pour la prédiction Exécutez la commande suivante dans l'environnement virtuel pour démarrer notre application principale python app.py ###![image](https://user-images.githubusercontent.com/18219467/233229144-4ecac12f-15b4-4318-a6ea-0ad6790038ae.png) Pour démarrer l'application, naviguez jusqu'à http://127.0.0.1:5000/ ![image](https://user-images.githubusercontent.com/18219467/233764703-babc7f33-ddd6-4bd5-99b6-a1003567eff4.png) Entrez l'âge de la maison, le nombre de pièces, le nombre de chambres et la population de la région pour obtenir la prédiction ![image](https://user-images.githubusercontent.com/18219467/233764140-7cf45f17-9258-443e-9249-c9da42c1d550.png) ### Étape 5 : Exploration du tableau de bord explicatif Enfin, exécutez la commande suivante dans l'environnement virtuel pour démarrer notre application principale python expdash.py ![image](https://user-images.githubusercontent.com/18219467/232438579-26fc0a30-9f95-4df1-81ef-7f24270316c5.png)![image](https://user-images.githubusercontent.com/18219467/232478449-557091da-3a7d-4534-bd0f-13c12e682e4c.png) ![image](https://user-images.githubusercontent.com/18219467/232478562-70200f16-4161-4738-bf13-fd043a21d194.png) Pour démarrer l'application, naviguez jusqu'à http://localhost:8050/ ![image](https://user-images.githubusercontent.com/18219467/233049477-3c62aa02-952e-4ea1-8334-699f8c8eb215.png) **L'application répertorie tous les modèles entraînés ainsi que notre modèle USAHousingPriceModel. Cliquez sur "aller au panneau de bord" ("go to dashboard") pour voir l'explication du modèle.** Importance des fonctionnalités. Quelles sont les fonctionnalités ayant eu l'impact le plus important ? ![image](https://user-images.githubusercontent.com/18219467/232486985-1719d884-295c-4521-a5cd-85ac034eded9.png)   **Mesures quantitatives de la performance des modèles : dans quelle mesure la valeur prédite est-elle proche de la valeur observée ?** ![image](https://user-images.githubusercontent.com/18219467/232487163-cbaceee4-54c7-4b7e-a3c7-c775cb873419.png)   **Prédiction et Comment chaque fonctionnalité a-t-elle contribué à la prédiction ?** ![image](https://user-images.githubusercontent.com/18219467/232487390-81a06116-ac72-495c-9b1d-be117f69ff08.png)   **Ajustez les valeurs des fonctionnalités pour modifier la prédiction** ![image](https://user-images.githubusercontent.com/18219467/232487500-0c772ce6-b665-40ab-8316-ee5cdf43f3c7.png) **Sommaire des SHAPs, Classement des caractéristiques par valeurs de SHAPs** ![image](https://user-images.githubusercontent.com/18219467/232487656-d2a5bf90-c09b-45b0-b05c-0a1f6570d2cb.png)   **Sommaire des interactions, classement des fonctionnalités par valeur d'interaction de SHAP** ![image](https://user-images.githubusercontent.com/18219467/232487941-c9f4b9a3-d727-4895-887a-68b825a2bb6b.png)   **Arbres de décision, affichage des arbres de décision individuels dans la forêt aléatoire** ![image](https://user-images.githubusercontent.com/18219467/232488582-99b93bb2-5017-4670-a85b-27d19860cc92.png)   Merci
Article
Guillaume Rongier · Juin 20, 2022

Sécurisation de vos API avec OAuth 2.0 dans le cadre de la gestion des API d'InterSystems - Partie 1

Introduction Aujourd'hui, de nombreuses applications utilisent le cadre d'autorisation ouvert (OAuth) pour accéder aux ressources de toutes sortes de services de manière sûre, fiable et efficace. InterSystems IRIS est déjà compatible avec le cadre OAuth 2.0, en fait, il y a un excellent article dans la communauté concernant OAuth 2.0 et InterSystems IRIS dans le lien suivant [ici](https://community.intersystems.com/post/intersystems-iris-open-authorization-framework-oauth-20-implementation-part-1). Toutefois, avec l'avènement des outils de gestion des API, certaines organisations l'utilisent comme point unique d'authentification, empêchant les demandes non autorisées d'arriver aux services descendants et découplant les complexités d'autorisation/authentification du service lui-même. Comme vous le savez peut-être, InterSystems a lancé son outil de gestion des API, appelé InterSystems API Management (IAM), qui est disponible avec la licence IRIS Enterprise (et non IRIS Community Edition). Vous trouverez [ici](https://community.intersystems.com/post/introducing-intersystems-api-manager) un autre excellent article de la communauté présentant InterSystems API Management.  Il s'agit de la première partie d'une série d'articles en trois parties qui montrent comment vous pouvez utiliser IAM pour ajouter simplement de la sécurité, selon les normes OAuth 2.0, à un service précédemment non authentifié déployé dans IRIS. Dans cette première partie, vous trouverez des informations sur OAuth 2.0 ainsi que des définitions et des configurations initiales d'IRIS et d'IAM afin de faciliter la compréhension de l'ensemble du processus de sécurisation de vos services. Suite à la première partie, cette série d'articles abordera deux scénarios possibles pour sécuriser vos services avec IAM. Dans le premier scénario, IAM validera uniquement le jeton d'accès présent dans la requête entrante et transmettra la requête au backend si la validation réussit. Dans le second scénario, IAM va à la fois générer un jeton d'accès (en agissant comme un serveur d'autorisation) et le valider. Par conséquent, la deuxième partie abordera et montrera en détail les étapes nécessaires pour configurer le scénario 1, et la troisième partie abordera et démontrera les configurations pour le scénario 2, ainsi que quelques considérations finales. Si vous voulez essayer IAM, veuillez contacter votre représentant commercial InterSystems. OAuth 2.0 : contexte Chaque flux d'autorisation OAuth 2.0 se compose essentiellement de 4 parties : 1. Utilisateur 2. Client 3. Serveur d'autorisation 4. Propriétaire de la ressource Pour des raisons de simplicité, cet article utilisera le flux OAuth "Resource Owner Password Credentials" (Identifiants du mot de passe du propriétaire de la ressource), mais vous pouvez utiliser n'importe quel flux OAuth dans IAM. De même, cet article ne spécifiera aucune portée. Note: Vous ne devez utiliser le flux d'informations d'identification du mot de passe du propriétaire des ressources que lorsque l'application cliente est hautement fiable, car elle traite directement les informations d'identification des utilisateurs. Dans la plupart des cas, le client doit être une application de première partie. En général, le flux "Resource Owner Password Credentials" (Identifiants du mot de passe du propriétaire de la ressource) suit les étapes suivantes : 1. L'utilisateur saisit ses identifiants (par exemple le nom d'utilisateur et le mot de passe) dans l'application client. 2. L'application client envoie les identifiants de l'utilisateur ainsi que sa propre identification (identifiant et secret du client, par exemple) au serveur d'autorisation. Le serveur d'autorisation valide les identifiants de l'utilisateur et l'identification du client et renvoie un jeton d'accès. 3. Le client utilise le jeton pour accéder aux ressources du serveur de ressources. 4. Le serveur de ressources valide le jeton d'accès reçu avant de renvoyer toute information au client. Dans cette optique, il existe deux scénarios dans lesquels vous pouvez utiliser IAM pour traiter OAuth 2.0 : 1. IAM agit comme un validateur, vérifiant le jeton d'accès fourni par l'application cliente, transmettant la demande au serveur de ressources uniquement si le jeton d'accès est valide ; dans ce cas, le jeton d'accès serait généré par un serveur d'autorisation tiers. 2. IAM agissant à la fois comme un serveur d'autorisation, fournissant un jeton d'accès au client, et comme un validateur de jeton d'accès, vérifiant le jeton d'accès avant de rediriger la demande vers le serveur de ressources. Définitions d'IRIS et d'IAM Dans ce post, il sera utilisé une application Web IRIS appelée "/SampleService". Comme vous pouvez le voir sur la capture d'écran ci-dessous, il s'agit d'un service REST non authentifié déployé dans IRIS :   En outre, dans le côté IAM est configuré un service appelé "SampleIRISService" contenant un itinéraire, comme vous pouvez le voir dans la capture d'écran ci-dessous :   En outre, dans IAM est configuré un consommateur appelé "ClientApp", initialement sans aucun justificatif d'identité, pour identifier celui qui appelle l'API dans IAM :   Avec les configurations ci-dessus, IAM transmet chaque requête GET envoyée à l'URL suivante à IRIS : **http://iamhost:8000/event** À ce stade, aucune authentification n'est encore utilisée. Par conséquent, si nous envoyons une simple requête GET, sans authentification, à l'URL **http://iamhost:8000/event/1** nous obtenons la réponse recherchée. Dans cet article, nous allons utiliser une application appelée "PostMan" pour envoyer des requêtes et vérifier les réponses. Dans la capture d'écran de PostMan ci-dessous, vous pouvez voir une simple requête GET ainsi que sa réponse. Passez à la deuxième partie de cette série pour comprendre comment configurer IAM pour valider les jetons d'accès présents dans les demandes entrantes.
Article
Guillaume Rongier · Juin 22, 2022

Sécurisation de vos API avec OAuth 2.0 dans le cadre de la gestion des API d'InterSystems - Partie 2

Dans cette série d'articles en trois parties, il est montré comment vous pouvez utiliser IAM pour ajouter simplement de la sécurité, selon les normes OAuth 2.0, à un service précédemment non authentifié déployé dans IRIS. Dans la [première partie](https://fr.community.intersystems.com/post/s%C3%A9curisation-de-vos-api-avec-oauth-20-dans-le-cadre-de-la-gestion-des-api-dintersystems-partie), nous avons fourni des informations sur OAuth 2.0 ainsi que des définitions et des configurations initiales d'IRIS et d'IAM afin de faciliter la compréhension de l'ensemble du processus de sécurisation de vos services. Cette partie va maintenant discuter et montrer en détail les étapes nécessaires pour configurer IAM pour valider le jeton d'accès présent dans la demande entrante et transmettre la demande au backend si la validation réussit. La [dernière partie](https://fr.community.intersystems.com/post/s%C3%A9curisation-de-vos-api-avec-oauth-20-dans-le-cadre-de-la-gestion-des-api-dintersystems-1) de cette série abordera et démontrera les configurations nécessaires pour que IAM génère un jeton d'accès (agissant comme un serveur d'autorisation) et le valide, ainsi que quelques considérations finales importantes. Si vous voulez essayer IAM, veuillez contacter votre représentant commercial d'InterSystems. Scénario 1 : IAM comme validateur de jetons d'accès Dans ce scénario, il sera utilisé un serveur d'autorisation externe qui génère un jeton d'accès au format JWT (JSON Web Token). Ce JWT est signé à l'aide de l'algorithme RS256 et d'une clé privée. Afin de vérifier la signature du JWT, l'autre partie (dans ce cas IAM) doit avoir la clé publique, fournie par le serveur d'autorisation. Ce JWT généré par le serveur d'autorisation externe comprend également, dans son corps, une déclaration appelée "exp" contenant l'horodatage de la date d'expiration de ce jeton, et une autre déclaration appelée "iss" contenant l'adresse du serveur d'autorisation. Par conséquent, IAM doit vérifier la signature du JWT avec la clé publique des serveurs d'autorisation et l'horodatage d'expiration contenu dans la déclaration "exp" à l'intérieur du JWT avant de transmettre la demande à IRIS. Afin de configurer cela dans IAM, commençons par ajouter un plugin appelé "JWT" à notre "SampleIRISService" dans IAM. Pour ce faire, allez sur la page Services dans IAM et copiez l'identifiant du "SampleIRISService", nous allons l'utiliser plus tard. Ensuite, allez dans Plugins, cliquez sur le bouton "New Plugin", localisez le plugin "JWT" et cliquez sur Enable. Dans la page suivante, copiez l'identifiant "SampleIRISService" dans le champ "service\_id" et cochez la case "exp" dans le paramètre "config.claims\_to_verify". Notez que la valeur du paramètre "config.key\_claim\_name" est "iss". Nous allons l'utiliser plus tard. Ensuite, appuyez sur le bouton "Create" (créer). Cela fait, allez dans la section "Consumers" dans le menu de gauche et cliquez sur notre "ClientApp" précédemment créée. Allez dans l'onglet "Credentials" (identifiants) et cliquez sur le bouton “New JWT Credential” (nouveau Identifiants JWT). Dans la page suivante, sélectionnez l'algorithme utilisé pour signer le JWT ( ici RS256) et copiez la clé publique dans le champ "rsa\_public\_key" (il s'agit de la clé publique qui vous a été fournie par le serveur d'autorisation au format PEM). Dans le champ "key", vous devez insérer le contenu du revendication JWT que vous avez entré dans le champ "config.key\_claim\_name" lors de l'ajout du plugin JWT. Donc, dans ce cas, je dois insérer le contenu de la revendication iss de mon JWT, qui, dans mon cas, est l'adresse du serveur d'autorisation. Après cela, cliquez sur le bouton "Créer". Hint: À des fins de débogage, il existe un outil en ligne permettant de décoder le JWT afin que vous puissiez vérifier les revendications et leurs valeurs et vérifier les signatures en insérant la clé publique. Voici le lien de cet outil en ligne : https://jwt.io/#debugger Maintenant, avec l'ajout du plugin JWT, il n'est plus possible d'envoyer la requête sans authentification. Comme vous pouvez le voir ci-dessous, une simple demande GET, sans authentification, renvoie à l'URL **http://iamhost:8000/event/1** un message non autorisé avec le code de statut "401 Unauthorized". Afin d'obtenir les résultats d'IRIS, nous devons ajouter le JWT à la requête. Par conséquent, nous devons d'abord demander le JWT au serveur d'autorisation. Le serveur d'autorisation personnalisé que nous utilisons ici renvoie un JWT si une demande POST est faite avec quelques paires clé-valeur dans le corps, y compris des informations sur l'utilisateur et le client, à l'URL suivante : **https://authorizationserver:5001/auth** Voici à quoi ressemblent cette requête et sa réponse : Ensuite, vous pouvez ajouter le JWT obtenu à partir de la réponse ci-dessous dans le header d'autorisation en tant que jeton de porteur Bearer Token et envoyer une requête GET à la même URL utilisée précédemment : **http://iamhost:8000/event/1** Vous pouvez également l'ajouter en tant que paramètre de chaîne de recherche, la clé de la chaîne de recherche étant la valeur spécifiée dans le champ "config.uri\_param\_names" lors de l'ajout du plugin JWT qui, dans ce cas, est "jwt" : Enfin, il y a aussi la possibilité d'inclure JWT dans la requête en tant que cookie, si un nom est saisi dans le champ "config.cookie_names". Passez à la troisième et dernière partie de cette série pour comprendre les configurations nécessaires pour générer un jeton d'accès IAM et le valider, ainsi que quelques considérations finales importantes.
Article
Guillaume Rongier · Juin 24, 2022

Sécurisation de vos API avec OAuth 2.0 dans le cadre de la gestion des API d'InterSystems - Partie 3

Dans cette série d'articles en trois parties, il est montré comment vous pouvez utiliser IAM pour ajouter simplement de la sécurité, selon les normes OAuth 2.0, à un service précédemment non authentifié déployé dans IRIS. Dans la [première partie](https://fr.community.intersystems.com/post/s%C3%A9curisation-de-vos-api-avec-oauth-20-dans-le-cadre-de-la-gestion-des-api-dintersystems-partie), nous avons fourni des informations sur OAuth 2.0 ainsi que des définitions et des configurations initiales d'IRIS et d'IAM afin de faciliter la compréhension de l'ensemble du processus de sécurisation de vos services. La [deuxième partie](https://fr.community.intersystems.com/post/s%C3%A9curisation-de-vos-api-avec-oauth-20-dans-le-cadre-de-la-gestion-des-api-dintersystems-0) discute et montre en détail les étapes nécessaires pour configurer IAM pour valider le jeton d'accès présent dans la demande entrante et transmettre la demande au backend si la validation réussit. Cette dernière partie de cette série abordera et démontrera les configurations nécessaires pour que IAM génère un jeton d'accès (agissant comme un serveur d'autorisation) et le valide, ainsi que quelques considérations finales importantes. Si vous voulez essayer IAM, veuillez contacter votre représentant commercial d'InterSystems. Scénario 2 : IAM comme serveur d'autorisation et validateur de jetons d'accès Dans ce scénario, contrairement au premier scénario, nous allons utiliser un plugin appelé "OAuth 2.0 Authentication". Afin d'utiliser IAM comme serveur d'autorisation dans ce flux d'informations d'identification du propriétaire des ressources et du mot de passe, le nom d'utilisateur et le mot de passe doivent être authentifiés par l'application cliente. La demande d'obtention du jeton d'accès auprès d'IAM ne doit être effectuée que si l'authentification est réussie. Commençons par l'ajouter à notre "SampleIRISService". Comme vous pouvez le voir dans la capture d'écran ci-dessous, nous avons différents champs à remplir afin de configurer ce plugin. Tout d'abord, nous allons copier l'identifiant de notre service "SampleIRISService" dans le champ "service_id" pour activer ce plugin à notre service. Dans le champ "config.auth\_header\_name", nous allons spécifier le nom de l'en-tête qui portera le jeton d'autorisation. Dans ce cas, je vais laisser la valeur par défaut comme "authorization". Le plugin "OAuth 2.0 Authentication" prend en charge les flux OAuth 2.0 Authorization Code Grant, Client Credentials, Implicit Grant ou Resource Owner Password Credentials Grant (respectivement, Attribution de codes d'autorisation, Identifiants client, Attribution implicite et Attribution des informations d'identification du mot de passe du propriétaire de la ressource OAuth 2.0). Comme nous utilisons dans cet article le flux "Resource Owner Password Credentials" (Identifiants du mot de passe du propriétaire de la ressource), nous allons cocher la case "config.enable\_password\_grant".. Dans le champ "config.provision_key", saisissez une chaîne à utiliser comme clé de provision. Cette valeur sera utilisée pour demander un jeton d'accès à IAM. Dans ce cas, j'ai laissé tous les autres champs avec la valeur par défaut. Vous pouvez vérifier la référence complète de chaque champ dans la documentation du plugin disponible [ici](https://docs.intersystems.com/iris20193/csp/docbook/apimgr/plugins/oauth2.html). Voici à quoi ressemble la configuration du plugin à la fin : Une fois le plugin créé, nous devons créer les informations d'identification de notre consommateur "ClientApp". Pour ce faire, allez dans "Consumers" dans le menu de gauche et cliquez sur "ClientApp". Ensuite, cliquez sur l'onglet "Credentials" et ensuite sur le bouton "New OAuth 2.0 Application". Sur la page suivante, entrez un nom quelconque pour identifier votre application dans le champ "name" (nom), définissez un identifiant et un secret de client, respectivement, dans les champs "client\_id" et "client\_secret" et enfin, entrez l'URL dans votre application où les utilisateurs seront envoyés après autorisation dans le champ "redirect_uri". Ensuite, cliquez sur "Create" (créer). Maintenant, vous êtes prêt à envoyer des demandes. La première requête que nous devons faire est d'obtenir le jeton d'accès depuis IAM. Le plugin "OAuth 2.0 Authentication" crée automatiquement un point de terminaison en ajoutant le chemin "/oauth2/token" à l'itinéraire déjà créé. Note: Assurez-vous que vous utilisez le protocole HTTPS et que le port proxy d'IAM prête attention aux requêtes TLS/SSL (le port par défaut est 8443). Il s'agit d'une exigence d'OAuth 2.0. Par conséquent, dans ce cas, nous devrions faire une demande POST à l'URL : **https://iamhost:8443/event/oauth2/token** Dans le corps de la requête, vous devez inclure le JSON suivant : {    "client_id": "clientid",    "client_secret": "clientsecret",    "grant_type": "password",    "provision_key": "provisionkey",    "authenticated_userid": "1" }   Comme vous pouvez le constater, ce JSON contient des valeurs définies à la fois lors de la création du plugin "OAuth 2.0 Authentication", telles que "grant\_type" et "provision\_key", et lors de la création des informations d'identification du Consommateur, telles que "client\_id" et "client\_secret". Le paramètre "authenticated_userid" doit également être ajouté par l'application client lorsque le nom d'utilisateur et le mot de passe fournis sont authentifiés avec succès. Sa valeur doit être utilisée pour identifier de manière unique l'utilisateur authentifié. La demande et sa réponse respective devraient ressembler à ceci :   Avec cela, nous pouvons maintenant faire une requête pour obtenir les données de l'événement en incluant la valeur "access_token" de la réponse ci-dessus comme "Bearer Token" (jeton de porteur) dans une requête GET vers l'URL **https://iamhost:8443/event/1** Si votre jeton d'accès expire, vous pouvez générer un nouveau jeton d'accès en utilisant le jeton de renouvellement que vous avez reçu avec le jeton d'accès expiré en effectuant une requête POST vers le même point de terminaison que celui utilisé pour obtenir un jeton d'accès, avec un corps quelque peu différent : {    "client_id": "clientid",    "client_secret": "clientsecret",    "grant_type": "refresh_token",    "refresh_token": "E50m6Yd9xWy6lybgo3DOvu5ktZTjzkwF" }   La demande et sa réponse respective devraient ressembler à ceci : Une fonctionnalité intéressante du plugin "OAuth 2.0 Authentication" est la possibilité d'afficher et d'invalider les jetons d'accès. Pour répertorier les tokens, envoyez une requête GET au point de terminaison suivant de l'API d'administration d'IAM : **https://iamhost:8444/{workspace\_name}/oauth2\_tokens** où {workspace_name} est le nom de l'espace de travail IAM utilisé. Veillez à saisir les informations d'identification nécessaires pour appeler l'API d'administration d'IAM si vous avez activé RBAC. Notez que "credential\_id" est l'identifiant de l'application OAuth que nous avons créée dans le consommateur ClientApp (dans ce cas, elle s'appelle SampleApp), et "service\_id" est l'identifiant de notre "SampleIRISService" auquel ce plugin est appliqué. Pour invalider un jeton, vous pouvez envoyer une demande DELETE au point de terminaison suivant **https://iamhost:8444/Sample/oauth2\_tokens/{token\_id}** où {token_id} est l'identifiant du jeton à invalider. Si nous essayons d'utiliser le jeton invalidé, nous obtenons un message indiquant que le jeton est invalide ou a expiré si nous envoyons une requête GET contenant ce jeton invalidé comme jeton porteur à l'URL : **https://iamhost:8443/event/1** Considérations finales Dans cet article, nous avons montré comment vous pouvez ajouter l'authentification OAuth 2.0 dans IAM à un service non authentifié déployé dans IRIS. Vous devez tenir compte du fait que le service lui-même continuera à être non authentifié dans IRIS. Par conséquent, si quelqu'un appelle directement le point de terminaison du service IRIS, en contournant la couche IAM, il pourra voir les informations sans aucune authentification. Pour cette raison, il est important d'avoir des règles de sécurité au niveau du réseau pour empêcher les demandes non désirées de contourner la couche IAM. Vous pouvez en savoir plus sur IAM [ici](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AIAM). Si vous voulez essayer IAM, veuillez contacter votre représentant commercial d'InterSystems.
Annonce
Irène Mykhailova · Août 4, 2022

[Webinaire] Mise à l'échelle du serveur InterSystems FHIR sur Amazon Web Services avec ECP

Salut la communauté, Nous sommes ravis d'annoncer que les webinaires de la communauté sont de retour ! Laissez-nous vous inviter tous au webinaire de @Ron.Sweeney1582 sur la mise à l'échelle du serveur FHIR InterSystems sur Amazon Web Services avec ECP. Rejoignez ce webinaire pour faire une plongée technique approfondie, voir une démonstration et évaluer le serveur InterSystems FHIR de mise à l'échelle horizontale sur Amazon Web Services avec Enterprise Cache Protocol (ECP). ⏱ Date et heure : jeudi 18 août, 8h00 HE | 14h00 CEST👨‍🏫 Speaker: @Ron.Sweeney1582, Full Stack Architect à Integration Required L'info sur Integration Required : Nous sommes une équipe de livraison technique complète pour vos charges de travail InterSystems®, adaptée à répondre aux exigences de votre posture de sécurité et des normes de déploiement organisationnelles. Avec une décennie de partenariats avec InterSystems® et une adhésion rigoureuse à la satisfaction de la clientèle, on nous fait confiance pour les meilleures pratiques. Alors... Ne manquez pas cette occasion d'en savoir plus sur la mise à l'échelle de FHIR, ECP et AWS et sur la façon de tout mélanger ! >> ENREGISTREZ-VOUS ICI <<
Article
Evgeny Shvarov · Fév 20, 2023

Déploiement des données d'InterSystems IRIS à l'aide du gestionnaire de paquets ZPM Package Manager

Salut les développeurs ! Nous avons souvent besoin de déployer des données en même temps que des morceaux de code de l'application. Et pour les développeurs d'InterSystems IRIS, la question peut se poser comme suit : "Comment puis-je déployer les données que j'ai dans les globales ?" Je vous propose ici l'une des approches suivantes : le déploiement de données globales à l'aide du gestionnaire de paquet ZPM package manager. **Exportation de données globales** Supposons que vous avez le serveur de base de données IRIS où vous avez une globale que vous voulez déployer. Le gestionnaire de paquets ZPM peut déployer des fichiers, vous devez donc exporter votre globale dans un fichier et construire le paquet avec ce fichier. ZPM peut déployer des globales au format XML, donc nous devons d'abord exporter une globale dans un fichier XML. Par exemple, si la globale que vous devez exporter a le nom "DataD", la commande suivante dans le terminal IRIS exportera la globale DataD dans un fichier XML : d $System.OBJ.Export("DataD.GBL","/irisrun/repo/data/DataD.xml") **Comment se présente la ressource** Pour compiler le paquet avec une globale, nous devons introduire certains éléments de ressource dans le module XML comme par exemple : <Resource Name="DataD.GBL"/> Consultez l'exemple dans la documentation. Remarquez que cet élément de ressource cherchera le fichier DataD.XML, et non DataD.GBL comme vous pourriez vous y attendre. Et ZPM cherchera le fichier DataD.XML dans le dossier /gbl à l'intérieur du dossier indiqué dans l'élément . Exemple Voici un exemple de dépôt iris-dataset-countries qui contient un paquet qui déploie les globales avec les données sur différents pays. Voici module XML: <?xml version="1.0" encoding="UTF-8"?> <Export generator="Cache" version="25"> <Document name="dataset-countries.ZPM"> <Module> <Name>dataset-countries</Name> <Description>Module imports the data of Country passengers in dc.data.Tinanic class</Description> <Version>1.0.0</Version> <Packaging>module</Packaging> <SourcesRoot>src</SourcesRoot> <Resource Name="dc.data.Country.CLS"/> <Resource Name="dc.data.CountryD.GBL"/> </Module> </Document> </Export> Et nous pouvions voir la ressource : <Resource Name="dc.data.CountryD.GBL"/> Qui est située dans le fichier du dépôt /src/gbl/dc.data.CountryD.XML: Ainsi, Lorsque le ZPM charge le module dans IRIS, il importe le global conformément au module.xml. Vous pouvez tester l'installation de la globale (et de la classe qui lui permet de faire des requêtes) avec : USER>zpm "install dataset-countries" Vous pouvez également jouer avec l'emballage global avec les ensembles de données Countries ou Titanic.
Article
Kevin Koloska · Nov 9, 2022

Présentation du gestionnaire de package intersystème ObjectScript

Bonjour les développeurs! Souvent, lorsque nous développons une bibliothèque, un outil, un package, quel qu’il soit dans InterSystems ObjectScript, nous avons une question, comment pouvons-nous déployer ce package sur la machine cible ? De plus, nous attendons souvent d’autres bibliothèques déjà installées, donc notre paquet dépend d’elles, et souvent d’une version spécifique de celui-ci. Lors de l’encodage javascript, python, etc., le rôle de l’implémentation de packages de gestion des dépendances nécessite un gestionnaire de paquets. C’est pourquoi j’ai le plaisir de vous annoncer que InterSystems ObjectScript Package Manager est disponible ! ATTENTION, ATTENTION ! Clause de non-responsabilité officielle. Le serveur InterSystems ObjectScript Package Manager situé sur le pm.community.intersystems.com et le client objectscript intersystems package manager installé à partir de pm.community.intersystems.com ou Github ne sont pas pris en charge par InterSystems Corporation et sont présentés sous licence MIT. Utilisez-le, développez-le, contribuez-y à vos risques et périls. Comment cela fonctionne-t-il ? Le gestionnaire de package ObjectScript intersystème se compose de deux parties. Il existe un serveur Gestionnaire de package qui héberge les packages ObjectScript et expose l’API pour que les clients ZPM déploient et répertorient les packages. Aujourd’hui, nous avons un serveur Developers Community Package Manager disponible dans pm.community.intersystems.com. Vous pouvez installer n’importe quel paquet dans InterSystems IRIS via le client ZPM installé en premier sur le système IRIS. Comment utiliser InterSystems Package Manager ? 1. Consultez la liste des forfaits disponibles Ouvrez https://pm.community.intersystems.com/packages/-/all pour voir la liste des packages actuellement disponibles. [{"name »:"analyzethis »,"versions »:"1.1.1"}},{"name »:"deepseebuttons,""versions »:"0.1.7"},{"name »:"dsw »,"versions »:"Versions »:""2.1.35"},{"namefoods »:"hole,""versions »:"0.1.0"},{"name »:"isc-dev »,"versions »:"1.2.0"}"},{"name »:"mdx2json »,"versions »:"2.2.0"},{"name »:"objectscript,""versions »:"1.0.0"]},{"name »:"pivotsubscriptions »,"versions »:""versions »:"1.0.0"},{"name »:"pivotsubscriptions,""versions »:"1.0.0"}},{"name pivotsubscriptions,""" » Versions »:"1.0.0"}}{"name »:"pivings »,"vers »:"vers »:"1.0.0"}},{"subscription pivots »,"versions »:"1.0.00.0.3"},{"name »:"restforms »,"versions »:"1.6.1"}},{"name »:"thirdpartychartportlets »,"versions »:""0.0.1"}},{"name »:"webterminal »,"versions »:"4.8.3"},{"name »:"zpm »,"versions »:"0.0.6"]}} Chaque package a le nom et la version. Si vous souhaitez en installer un dans InterSystems IRIS, vous devez d’abord installer le client ObjectScript InterSystems Package Manager, alias ZPM. 2. Installez le gestionnaire de package client Obtenez le lancement du client ZPM à partir du serveur ZPM : https://pm.community.intersystems.com/packages/zpm/latest/installer Il s’agit du package ObjectScript en XML, il peut donc être installé en important des classes via le portail de gestion ou par terminal : USER>Do $System.OBJ.Load(« /votrechemin/zpm.xml"ck ») une fois installé, il peut être appelé n’importe quel espace d’espaces de noms, car il s’installe dans %SYS en tant que package z. 3. Travailler avec le client ZPM Le client Zpm dispose d’une interface cli. Appelez zpm dans n’importe quel espace de noms tel que : UTILISATEUR>zpm zpm : UTILISATEUR> Appelez pour voir la liste de toutes les commandes disponibles. Consultez la liste des paquets actuellement disponibles sur le serveur ZPM (pm.community.intersystems.com) : zpm: USER>repo -list-modules -n record deepseebuttons 0.1.7 DSW 2.1.35 Holefoods 0.1.0 ISC-Dev 1.2.0 MDX2JSON 2.2.0 ObjectScript 1...0 0.0 PivotSubscriptions 0.0.3 Façons de se reposer 1.6.1 Troisième Artportletes 0.0.1 WebTerminal 4.8.3 ZPM 0.0.6 Installation d’un package Pour installer l’appel de package Installer la version du nom du package Cela installera le package avec toutes les dépendances. Vous pouvez omettre la version pour obtenir le dernier package. Voici comment installer la dernière version du terminal Web : zpm: USER> installer webterminal Comment savoir ce qui est déjà installé ? Commande de liste d’appels : zpm:USER> list 0,0,6 zpm 4.8.3 Terminal Web Désinstaller le package zpm : UTILISATEUR> désinstaller webterminal Plates-formes de données InterSystems prises en charge Actuellement, ZPM prend en charge IRIS et InterSystems IRIS for Health intersystems. Je veux que mon package soit répertorié dans le Gestionnaire de package Vous pouvez. Les exigences sont les suivantes : Le code devrait fonctionner chez InterSystems IRIS Vous devez avoir .xml module à la racine. Module.xml est le fichier qui décrit la structure du package et ce que vous devez configurer dans la phase de déploiement. Exemples de modules.xml peuvent être très simples, par exemple. Exemple de ObjectScript Ou relativement simple: BI Samples (anciennement HoleFoods), Web Terminal Module avec dépendances : DeepSee Web s’attend à ce que MDX2JSON soit installé et est décrit dans le module.xml:DeepSeeWeb Si vous souhaitez que votre demande soit répertoriée dans le rapport Community Package Manager, veuillez commenter ce post ou dm. Collaboration et soutien Le code source du serveur ZPM n’est pas disponible actuellement et le sera bientôt. Le code source du client ZPM est disponible ici et est actuellement pris en charge par la communauté des développeurs InterSystems et n’est pas pris en charge par InterSystems Corporation. Vous êtes invités à présenter des problèmes et à retirer des demandes. Script La feuille de route actuelle est la suivante : introduire un support d’échange ouvert, introduire l’automatisation pour la mise à jour et le téléchargement des paquets; serveur ZPM open source. Restez à l’écoute et développez vos packages InterSystems ObjectScript chez InterSystems IRIS ! Découvrez l’application connexe sur InterSystems Open Exchange Aller à l’article original écrit par @Evgeny Shvarov
Annonce
Adeline Icard · Avr 8

Alerte : InterSystems IRIS 2024.3 – Problème d'analyse JSON AIX et incompatibilités IntegratedML

Résumé des alertes Alert ID Produit et versions concernés Exigences explicites DP-439207 Plateforme de données InterSystems IRIS® 2024.3 (AIX) Installations AIX utilisant le traitement JSON et les caractères Unicode non-Latin-1 DP-439280 InterSystems IRIS 2024.3 (conteneurs avec IntegratedML) Conteneurs IntegratedML utilisant TensorFlow Détail des alertes DP-439207 - Problème d'analyse JSON Unicode AIX Un bug a été identifié dans InterSystems IRIS 2024.3.0 sur les instances AIX. Il affecte l'analyse des chaînes JSON Unicode. Ce problème survient lorsque la méthode %FromJSON() ou %FromJSONFile() analyse des chaînes contenant des caractères dont la valeur est inférieure à $CHAR(256) suivis de caractères Unicode dont la valeur est supérieure à $CHAR(255). Le processus de conversion transforme incorrectement les premiers caractères en $CHAR(0), ce qui entraîne une corruption silencieuse des données. Ce problème concerne uniquement la version AIX 2024.3 des produits suivants : InterSystems IRIS InterSystems IRIS for Health HealthShare® Health Connect Évaluation d'impact Dans ce cas, des caractères incorrects peuvent être stockés dans la base de données ou transmis aux interfaces sans générer d'erreur. Le défaut a été introduit dans IRIS 2024.3.0 et a été résolu avec DP-439207. Workflows concernés : Ce problème se produit uniquement sur les installations Unicode exécutant AIX et affecte les applications traitant des données contenant un mélange de caractères ASCII et Unicode. Résolution Si vous utilisez InterSystems IRIS 2024.3.0 sur des instances AIX, vous devez effectuer la mise à niveau vers InterSystems IRIS 2025.1.0 dès que possible. Actions requises Identification des systèmes concernés : Déterminez si vous exécutez InterSystems IRIS 2024.3.0 sur une instance AIX avec des bases de données Unicode et si vous utilisez un mélange de caractères Unicode et non Unicode. Mise à niveau : Procédez à la mise à niveau vers InterSystems IRIS 2025.1.0 dès que possible. DP-439280 - Problèmes TensorFlow du conteneur IntegratedML Les clients utilisant l'une des versions conteneurisées suivantes d'IRIS 2024.3 peuvent rencontrer des erreurs d'apprentissage lors de l'utilisation d'IntegratedML. containers.intersystems.com/intersystems/iris-ml:2024.3 Évaluation d'impact Les clients utilisant IntegratedML sur les conteneurs IRIS 2024.3 fournis par InterSystems rencontreront des échecs d'apprentissage du modèle en raison de problèmes de compatibilité avec TensorFlow et les dépendances associées. Résolution Les clients souhaitant utiliser IntegratedML avec IRIS ou IRIS for Health dans des conteneurs sont encouragés à créer leurs propres conteneurs en suivant les conseils publiés sur la communauté des développeurs. Actions requises par le client Pour continuer à utiliser IntegratedML avec AutoML, les clients doivent gérer manuellement les dépendances à l'aide du gestionnaire de paquets pip, comme décrit ci-dessus. Cela garantit la compatibilité et le bon fonctionnement des composants AutoML tels que scikit-learn dans votre environnement Python IntegratedML. Pour plus d'informations Si vous avez des questions ou avez besoin d'aide, veuillez contacter le InterSystems Worldwide Response Center (WRC).
Annonce
Irène Mykhailova · Juin 3, 2022

Nous sommes à la recherche de bêta-testeurs pour notre prochain examen de certification de spécialiste en administration de systèmes InterSystems IRIS

Bonjour à la communauté IRIS, [InterSystems Certification](https://www.intersystems.com/knowledge-hub/certification-program) est en train de développer un examen de certification pour les administrateurs système IRIS et, si vous correspondez à la description de l'examen ci-dessous, nous aimerions que vous testiez l'examen en version bêta. L'examen sera disponible pour un test bêta du 20 au 23 juin 2022 lors du [Global Summit 2022](https://summit.intersystems.com/event/448ad72e-74e4-4869-b352-8bf74652d856/summary), mais uniquement pour les personnes inscrites au Summit (visitez cette page pour en savoir plus sur la certification au [GS22](https://summit.intersystems.com/event/448ad72e-74e4-4869-b352-8bf74652d856/websitePage:3100a899-5772-4047-8be9-54e45ea4db79)). Le test bêta sera ouvert à tous les autres bêta-testeurs intéressés le 1er juillet 2022. Les bêta-testeurs intéressés doivent toutefois s'inscrire dès maintenant en envoyant un courriel à **certification@intersystems.com **(voir ci-dessous pour plus de détails)**. Le test bêta doit être terminé pour le 1er août 2022**. **Quelles sont mes responsabilités en tant que bêta-testeur ?** L'examen vous sera attribué et vous devrez le passer dans le mois suivant la sortie de la version bêta. L'examen sera administré dans un environnement surveillé en ligne (surveillé en direct pendant le Summit), gratuitement (les frais standard de 150 $ par examen sont supprimés pour tous les bêta-testeurs), puis l'équipe de certification d'InterSystems effectuera une analyse statistique minutieuse de toutes les données du bêta-test afin de fixer une note de passage pour l'examen. L'analyse des résultats du test bêta prendra 6 à 8 semaines et, une fois la note de passage établie, vous recevrez une notification par courriel de la part d'InterSystems Certification vous informant des résultats. **Si votre note à l'examen est égale ou supérieure à la note de passage, vous aurez obtenu la certification ! ** **Remarque : les résultats des tests bêta sont totalement confidentiels.** Les informations sur l'examen **Titre de l'examen:** Expert en administration de systèmes InterSystems IRIS **Description du candidat:** Un professionnel de l'informatique qui : * installe, gère et surveille les environnements InterSystems IRIS,  * et garantit la sécurité, l'intégrité et la haute disponibilité des données. **Nombre de questions :** 73 **Temps prévu pour passer l'examen:** 2 heures **Préparation recommandée :** Programme de cours en classe Management des serveurs InterSystems ou expérience équivalente. Le cours en ligne Bases de la gestion d'IRIS InterSystems, est recommandé, ainsi qu'une expérience de recherche Documentation sur la gestion des plates-formes. **Expérience pratique recommandée :** * 1 à 2 ans d'expérience dans l'administration, la gestion et la sécurité de systèmes utilisant la plate-forme de données InterSystems IRIS version 2019.1 ou supérieure. * Révision de la série de questions d'entraînement qui se trouve dans le fichier PDF au bas de cette page (disponible ici après le 6 juin 2022) **Questions d'entraînement d'examen** Cet examen comprendra un ensemble de questions d'entraînement pour aider les candidats à se familiariser avec les formats et les approches des questions. Le document sera disponible ici le 6 juin 2022. **Thèmes et contenu de l'examen** L'examen contient des questions qui couvrent les domaines du rôle indiqué, comme le montre le tableau CCA (connaissances, compétences et aptitudes) ci-dessous. Les questions sont présentées sous deux formes : choix multiple et réponse multiple. Groupe CCA Description du groupe CCA Description de CCA Objets ciblés T41 Installation et configuration d'InterSystems IRIS   Installation et mise à niveau des instances Installation d'instances de développement, de clients, de serveurs et d'instances personnalisées ; Installation de différentes sécurités d'InterSystems IRIS ; Identification de la structure et du contenu des dossiers dans le répertoire d'installation ; Démarrage, arrêt et liste des instances à partir de la ligne de commande ; Mise à niveau des instances existantes     Configuration des espaces de noms, des bases de données, de la mémoire et d'autres paramètres du système Création, visualisation et suppression d'espaces de noms et de bases de données ; Identification du contenu et des caractéristiques des bases de données par défaut ; Mise en correspondance et gestion des globales, des routines et des paquets ; Détermination des cas où il est nécessaire de modifier directement l'iris. cpf et quand cela est déconseillé ; Détermination de la taille appropriée des tampons globaux et des tampons de routine, et ajustement de ces derniers si nécessaire ; Détermination des états de journal appropriés, de la taille de la base de données et de la taille maximale de la base de données ; Détermination de l'espace disque nécessaire à l'installation et au fonctionnement ; Détermination de la mémoire nécessaire à l'installation et au fonctionnement ; Détermination des valeurs appropriées pour les paramètres génériques du tas de mémoire ; Augmentation de la taille des tableaux de verrouillage.     Gestion des licences Activation et révision des licences ; configuration des serveurs de licences T42 Gestion et surveillance d'InterSystems IRIS Gestion des bases de données Montage, démontage et expansion des bases de données ; compactage, tronquage et défragmentation des bases de données ; vérification de l'intégrité des bases de données ; gestion des données ; gestion des routines     Gestion des processus utilisateur et système Exécution des opérations de processus : suspension, reprise, terminaison ; Inspection des processus ; Gestion des verrouillages de processus ; Utilisation du gestionnaire de tâches pour visualiser, planifier, exécuter, gérer et automatiser les tâches     Gestion de la journalisation Configuration des paramètres et de l'emplacement des journaux ; utilisation de la journalisation ; importance de l'activation de l'option "Freeze on error" pour l'intégrité des données ; différence entre les fonctions WIJ et les fonctions de journal ; utilisation de l'utilitaire Journal Profile ; restauration des journaux ; effacement des fichiers de journal     Diagnostic et dépannage des problèmes Accès et configuration des journaux système ; identification et interprétation des erreurs stockées dans les journaux système ; exécution du Rapport IRISHung/Diagnostic ; identification et fin des processus bloqués/en boucle ; interdiction d'accès ; accès d'urgence à la configuration     Contrôle du système Utilisation de ^PERFMON pour surveiller le système ; Détermination des outils de surveillance appropriés pour différents problèmes de performance tels que les profils de journaux, ^BLKCOL et ^SystemPerformance ; Exécution de l'utilitaire ^SystemPerformance ; Détermination des tailles de globales T43 Mise en œuvre de la continuité du système Implémentation de la mise en miroir Identification des conditions nécessaires à l'implémentation de la mise en miroir ; Identification des membres du miroir et description de la communication entre miroirs ; Configuration de la mise en miroir ; Détermination des possibilités de basculement ; Ajout de bases de données aux miroirs     Implémentation de l'ECP Utilisation de l'ECP ; configuration des serveurs de données et d'applications de l'ECP ; surveillance et contrôle des connexions ECP     Gestion des sauvegardes et des récupérations Planification des stratégies de sauvegarde, y compris la fréquence requise, la conservation des fichiers journaux, et la prise en compte des sauvegardes au niveau du système d'exploitation par rapport aux sauvegardes en ligne InterSystems ; identification du contenu des sauvegardes ; utilisation des API FREEZE et THAW pour les sauvegardes instantanées ; vérification des sauvegardes ; restauration du système T44 Mise en œuvre de la sécurité du système Utilisation d'un journal d'audit pour suivre les événements liés aux utilisateurs et au système Activation et désactivation des événements d'audit ; visualisation des entrées d'audit et des propriétés des événements d'audit ; identification de la cause première des événements d'audit courants ; gestion de la base de données d'audit     Gestion de la sécurité Création d'utilisateurs et de rôles ; attribution de rôles et de privilèges ; octroi d'autorisations aux ressources ; activation et désactivation de services ; protection des applications et des ressources au sein des applications ; mise en œuvre du cryptage des bases de données et des éléments de données ; cryptage des journaux ; gestion des paramètres de sécurité à l'échelle du système ; importation/exportation des paramètres de sécurité ; réduction de la surface d'attaque ; mise en œuvre de l'authentification à deux facteurs ; identification des multiples couches impliquées dans la configuration et le dépannage de la passerelle Web (y compris la connexion d'un serveur web externe à InterSystems IRIS) **Vous souhaitez participer ? Envoyez un courriel à certification@intersystems.com maintenant !**
Annonce
Irène Mykhailova · Déc 29, 2022

InterSystems IRIS : Interrompre les installations de serveur Web Apache (alias Private Web Server (PWS))

Si vous souhaitez essayer le nouveau processus d'installation du projet NoPWS, vous pouvez accéder à l'Early Access Program (EAP) here. Une fois inscrit, veuillez envoyer à InterSystems l'adresse e-mail que vous avez utilisée pour vous inscrire à l'EAP à nopws@intersystems.com. Regardez ici pour en savoir plus : message original
Article
Guillaume Rongier · Nov 30, 2023

Diffusion continue de votre solution InterSystems à l'aide de GitLab - Partie IV : Configuration du CD

Dans cette série d'articles, j'aimerais présenter et discuter de plusieurs approches possibles pour le développement de logiciels avec les technologies d'InterSystems et GitLab. J'aborderai des sujets tels que: Git 101 Flux Git (processus de développement) Installation de GitLab Flux de travail GitLab Diffusion continue Installation et configuration de GitLab GitLab CI/CD Dans le premier article, nous avons évoqué les notions de base de Git, les raisons pour lesquelles une compréhension approfondie des concepts de Git est importante pour le développement de logiciels modernes et la manière dont Git peut être utilisé pour développer des logiciels. Dans le deuxième article, nous avons évoqué le flux de travail GitLab - un processus complet du cycle de vie du logiciel ainsi que Diffusion continue. Dans le troisième article, nous avons évoqué l'installation et la configuration de GitLab et la connexion de vos environnements à GitLab Dans cet article, nous allons enfin écrire une configuration sur CD. Plan Environnements Tout d'abord, nous avons besoin de plusieurs environnements et de branches qui leur correspondent: Environnement Branche Diffusion Qui peut valider Qui peut fusionner Test master Automatique Développeurs Propriétaires Développeurs Propriétaires Preprod (préproduction) preprod Automatique Personne Propriétaires Prod (production) prod Semi-automatique (appuyez sur le bouton pour diffuser) Personne Owners Cycle de développement A titre d'exemple, nous allons développer une nouvelle fonctionnalité en utilisant le flux GitLab et la livrer en utilisant le GitLab CD. Les fonctionnalités sont développées dans une branche des fonctionnalités. La branche des fonctionnalités est révisée et fusionnée dans la branche master. Après quelque temps (plusieurs fonctionnalités fusionnées), le master est fusionné dans le preprod Après quelque temps (tests d'utilisateurs, etc.), la préprod est fusionnée dans la prod Voici à quoi il pourrait ressembler (j'ai marqué en cursive les parties qu'il faut développer pour le CD) : Développement et test Le développeur valide le code de la nouvelle fonctionnalité dans une branche de fonctionnalité séparée Une fois que la fonctionnalité est devenue stable, le développeur fusionne la branche de la fonctionnalité dans la branche master Le code de la branche master est livré à l'environnement de test, où il est téléchargé et testé Diffusion dans l'environnement de Preprod Le développeur crée une demande de fusion de la branche master vers la branche preprod Le propriétaire du référentiel approuve la demande de fusion après un certain temps Le code de la branche Preprod est diffusé dans l'environnement Preprod Diffusion dans l'environnement Prod Le développeur crée une demande de fusion de la branche preprod vers la branche prod Le propriétaire du référentiel approuve la demande de fusion après un certain temps Le propriétaire du référentiel appuie sur le bouton "Deploy" (Déployer) Le code de la branche prod est diffusé dans l'environnement Prod Ou le même mais sous une forme graphique : Application Notre application se compose de deux parties: API REST développée sur la plateforme InterSystems Application web JavaScript client Étapes À partir du plan ci-dessus, nous pouvons déterminer les étapes à définir dans notre configuration de diffusion continue : Téléchargement - pour importer le code côté serveur dans InterSystems IRIS Test - pour tester le code client et le code serveur Paquet - pour construire le code client Déploiement - pour "publier" le code client à l'aide d'un serveur web Voici à quoi cela ressemble dans le fichier .gitlab-ci.yml de configuration : stages: - load - test - package - deploy Scripts Téléchargement Ensuite, définissons les scripts. Documentation des scripts. Tout d'abord, définissons un serveur de téléchargement de scripts qui permet le téléchargement du code côté serveur : load server: environment: name: test url: http://test.hostname.com only: - master tags: - test stage: load script: csession IRIS "##class(isc.git.GitLab).load()" Que se passe-t-il ici? load server est un nom de script ensuite, nous décrivons l'environnement dans lequel ce script s'exécute only: master - indique à GitLab que ce script est exécuté uniquement lorsqu'il y a un commit sur la branche master tags: test indique que ce script doit être exécuté uniquement sur un système d'exécution qui a la balise de test stage indique l'étape d'un script script définit le code à exécuter. Dans notre cas, nous appelons le téléchargement de classmethod à partir de la classe isc.git.GitLab Remarque importante Pour InterSystems IRIS, remplacez csession par iris session. Pour une utilisation sous Windows: irisdb -s ../mgr -U TEST "##class(isc.git.GitLab).load() Maintenant, écrivons la classe isc.git.GitLab correspondante. Tous les points d'entrée de cette classe ressemblent à ceci : ClassMethod method() { try { // code halt } catch ex { write !,$System.Status.GetErrorText(ex.AsStatus()),! do $system.Process.Terminate(, 1) } } Notez que cette méthode peut se terminer de deux façons : en arrêtant le processus en cours - ce qui est enregistré dans GitLab comme une réussite en appelant $system.Process.Terminate - ce qui termine le processus de manière anormale et GitLab l'enregistre comme une erreur Enfin, voici notre code de téléchargement : /// Effectuer un téléchargement complet /// Effectuer ##class(isc.git.GitLab).load() ClassMethod load() { try { set dir = ..getDir() do ..log("Importing dir " _ dir) do $system.OBJ.ImportDir(dir, ..getExtWildcard(), "c", .errors, 1) throw:$get(errors,0)'=0 ##class(%Exception.General).%New("Load error") halt } catch ex { write !,$System.Status.GetErrorText(ex.AsStatus()),! do $system.Process.Terminate(, 1) } } Deux méthodes utilitaires sont appelées : getExtWildcard - pour obtenir une liste des extensions de fichiers pertinentes getDir - pour obtenir le répertoire du référentiel Comment obtenir le répertoire ? Lorsque GitLab exécute un script, il spécifie d'abord un grand nombre de variables d'environnement. La première est CI_PROJECT_DIR - Le chemin complet où le référentiel est cloné et où la tâche est exécutée. Nous pouvons l'obtenir dans la méthode getDir sans problème : ClassMethod getDir() [ CodeMode = expression ] { ##class(%File).NormalizeDirectory($system.Util.GetEnviron("CI_PROJECT_DIR")) } Tests Voici le script de test: load test: environment: name: test url: http://test.hostname.com only: - master tags: - test stage: test script: csession IRIS "##class(isc.git.GitLab).test()" artifacts: paths: - tests.html Quels sont les changements ? Le nom et le code du script, bien sûr, mais l'artefact a également été ajouté. Un artefact est une liste de fichiers et de répertoires qui sont attachés à une tâche une fois qu'elle s'est achevée avec succès. Dans notre cas, une fois les tests terminés, nous pouvons générer une page HTML redirigeant vers les résultats des tests et la rendre disponible sur GitLab. Remarquez qu'il y a beaucoup de copier-coller de l'étape de téléchargement - l'environnement est le même, les parties du script telles que les environnements peuvent être étiquetées séparément et attachées à un script. Définissons l'environnement de test : .env_test: &env_test environment: name: test url: http://test.hostname.com only: - master tags: - test Maintenant, notre script de test ressemble à ceci : load test: <<: *env_test script: csession IRIS "##class(isc.git.GitLab).test()" artifacts: paths: - tests.html Ensuite, exécutons les tests à l'aide duframework UnitTest. /// Exécuter ##class(isc.git.GitLab).test() ClassMethod test() { try { set tests = ##class(isc.git.Settings).getSetting("tests") if (tests'="") { set dir = ..getDir() set ^UnitTestRoot = dir $$$TOE(sc, ##class(%UnitTest.Manager).RunTest(tests, "/nodelete")) $$$TOE(sc, ..writeTestHTML()) throw:'..isLastTestOk() ##class(%Exception.General).%New("Tests error") } halt } catch ex { do ..logException(ex) do $system.Process.Terminate(, 1) } } Le paramètre Tests, dans ce cas, est un chemin relatif à la racine du référentiel où sont stockés les tests unitaires. S'il est vide, les tests sont ignorés. La méthode writeTestHTML est utilisée pour produire du html avec une redirection vers les résultats des tests : ClassMethod writeTestHTML() { set text = ##class(%Dictionary.XDataDefinition).IDKEYOpen($classname(), "html").Data.Read() set text = $replace(text, "!!!", ..getURL()) set file = ##class(%Stream.FileCharacter).%New() set name = ..getDir() _ "tests.html" do file.LinkToFile(name) do file.Write(text) quit file.%Save() } ClassMethod getURL() { set url = ##class(isc.git.Settings).getSetting("url") set url = url _ $system.CSP.GetDefaultApp("%SYS") set url = url_"/%25UnitTest.Portal.Indices.cls?Index="_ $g(^UnitTest.Result, 1) _ "&$NAMESPACE=" _ $zconvert($namespace,"O","URL") quit url } ClassMethod isLastTestOk() As %Boolean { set in = ##class(%UnitTest.Result.TestInstance).%OpenId(^UnitTest.Result) for i=1:1:in.TestSuites.Count() { #dim suite As %UnitTest.Result.TestSuite set suite = in.TestSuites.GetAt(i) return:suite.Status=0 $$$NO } quit $$$YES } XData html { <html lang="en-US"> <head> <meta charset="UTF-8"/> <meta http-equiv="refresh" content="0; url=!!!"/> <script type="text/javascript"> window.location.href = "!!!" </script> </head> <body> If you are not redirected automatically, follow this <a href='!!!'>link to tests</a>. </body> </html> } Paquet Notre client est une simple page HTML: <html> <head> <script type="text/javascript"> function initializePage() { var xhr = new XMLHttpRequest(); var url = "${CI_ENVIRONMENT_URL}:57772/MyApp/version"; xhr.open("GET", url, true); xhr.send(); xhr.onloadend = function (data) { document.getElementById("version").innerHTML = "Version: " + this.response; }; var xhr = new XMLHttpRequest(); var url = "${CI_ENVIRONMENT_URL}:57772/MyApp/author"; xhr.open("GET", url, true); xhr.send(); xhr.onloadend = function (data) { document.getElementById("author").innerHTML = "Author: " + this.response; }; } </script> </head> <body onload="initializePage()"> <div id = "version"></div> <div id = "author"></div> </body> </html> Et pour le construire, nous devons remplacer ${CI_ENVIRONMENT_URL} avec sa valeur. Bien sûr, une application réelle nécessiterait probablement npm, mais ce n'est qu'un exemple. Voici le script : package client: <<: *env_test stage: package script: envsubst < client/index.html > index.html artifacts: paths: - index.html Déploiement Enfin, nous déployons notre client en copiant index.html dans le répertoire racine du serveur web. deploy client: <<: *env_test stage: deploy script: cp -f index.html /var/www/html/index.html C'est tout ! Plusieurs environnements Que faire si vous devez exécuter le même (ou similaire) script dans plusieurs environnements ? Les parties de script peuvent également être des étiquettes. Voici un exemple de configuration qui charge le code dans les environnements de test et de préprod : stages: - load - test .env_test: &env_test environment: name: test url: http://test.hostname.com only: - master tags: - test .env_preprod: &env_preprod environment: name: preprod url: http://preprod.hostname.com only: - preprod tags: - preprod .script_load: &script_load stage: load script: csession IRIS "##class(isc.git.GitLab).loadDiff()" load test: <<: *env_test <<: *script_load load preprod: <<: *env_preprod <<: *script_load Nous pouvons ainsi éviter de copier-coller le code. La configuration complète du CD est disponible ici. Il suit le plan initial de déplacement du code entre les environnements de test, de préproduction et de production. Conclusion La diffusion continue peut être configurée pour automatiser tout flux de développement nécessaire. Liens Référentiel de hooks (et exemple de configuration) Référentiel de tests Documentation des scripts Variables d'environnement disponibles Prochaine étape Dans le prochain article, nous créerons une configuration CD qui s'appuie sur le conteneur Docker InterSystems IRIS.
Article
Guillaume Rongier · Déc 7, 2023

Diffusion continue de votre solution InterSystems à l'aide de GitLab - Partie VI : Infrastructure des conteneurs

Dans cette série d'articles, j'aimerais présenter et discuter de plusieurs approches possibles pour le développement de logiciels avec les technologies d'InterSystems et GitLab. J'aborderai des sujets tels que: Git 101 Flux Git (processus de développement) Installation de GitLab Flux de travail GitLab Diffusion continue Installation et configuration de GitLab GitLab CI/CD Pourquoi des conteneurs? Infrastructure de conteneurs GitLab CI/CD utilisant des conteneurs Dans le premier article, nous avons évoqué les notions de base de Git, les raisons pour lesquelles une compréhension approfondie des concepts de Git est importante pour le développement de logiciels modernes et la manière dont Git peut être utilisé pour développer des logiciels. Dans le deuxième article, nous avons évoqué le flux de travail GitLab - un processus complet du cycle de vie du logiciel ainsi que Diffusion continue. Dans le troisième article, nous avons évoqué l'installation et la configuration de GitLab et la connexion de vos environnements à GitLab Dans le quatrième article, nous avons écrit une configuration de CD. Dans le cinquième article, nous avons parlé des conteneurs et de la manière dont ils peuvent être utilisés (et pour quelles raisons). Dans cet article, nous allons discuter des principaux composants dont vous aurez besoin pour exécuter un pipeline de diffusion continue avec des conteneurs et de la façon dont ils fonctionnent tous ensemble. Notre configuration se présente comme suit : On voit ici la répartition des trois étapes principales : Construction Expédition Exécution Build Dans les parties précédentes, la construction (build) était souvent incrémentale - nous calculions la différence entre l'environnement actuel et la base de code actuelle et modifiions notre environnement pour qu'il corresponde à la base de code. Avec les conteneurs, chaque build est un build complet. Le résultat du build est une image qui peut être exécutée n'importe où, sans dépendances. Expédition Une fois que notre image est construite et qu'elle a passé les tests, elle est téléchargée dans le registre - serveur spécialisé pour héberger les images docker. Elle peut alors remplacer l'image précédente ayant la même balise. Par exemple, suite à un nouveau commit dans la branche master, nous avons construit la nouvelle image (projet/version:master) et si les tests sont positifs, nous pouvons remplacer l'image dans le registre par une nouvelle sous la même balise, de sorte que tous ceux qui extraient le projet/version:master obtiendront une nouvelle version. Exécution Les images sont enfin déployées. Bien qu'une solution de CI telle que GitLab puisse contrôler ou un orchestrateur spécialisé, l'objectif est le même : certaines images sont exécutées, leur état est vérifié périodiquement et elles sont mises à jour si une nouvelle version de l'image est disponible. Consultez le webinar de docker expliquant ces différentes étapes. Ou encore, du point de vue du commit : Dans notre configuration de diffusion, nous allons: Introduire le code dans le référentiel GitLab Construire l'image docker Tester cette image Publier l'image dans notre registre docker Remplacer l'ancien conteneur par la nouvelle version à partir du registre P Docker Registre Docker Domaine enregistré (facultatif mais préférable) Outils graphique GUI (facultatif) Docker Tout d'abord, il faut lancer docker quelque part. Je recommanderais de commencer par un serveur équipé d'une version plus courante de Linux, comme Ubuntu, RHEL ou Suse. N'utilisez pas de distributions orientées cloud comme CoreOS, RancherOS, etc. - elles ne sont pas adaptées aux débutants. N'oubliez pas de remplacer le pilote de stockage par devicemapper. Si nous parlons de déploiements importants, l'utilisation d'outils d'orchestration de conteneurs comme Kubernetes, Rancher ou Swarm peut automatiser la plupart des tâches, mais nous n'allons pas en discuter (du moins dans cette partie). Registre Docker Il s'agit d'un premier conteneur que nous devons exécuter, et c'est une application côté serveur évolutive sans état qui stocke les images Docker et vous permet de les distribuer.Vous devriez utiliser le Registre si vous voulez : contrôler rigoureusement l'endroit où vos images sont stockées être pleinement propriétaire de son pipeline de distribution d'images intégrer rigoureusement le stockage et la distribution d'images dans votre flux de travail de développement interne Voici la Documentation de Registre. Connexion du registre et de GitLab Remarque: GitLab contient un registre intégré. Vous pouvez l'exécuter à la place du registre externe. Lisez les documents GitLab liés dans ce paragraphe. Pour connecter votre registre à GitLab, il vous faudra exécuter votre registre avec le support HTTPS - j'utilise Let's Encrypt pour obtenir des certificats, et j'ai suivi ce Gist pour obtenir des certificats et les introduire dans un conteneur. Après avoir vérifié que le registre est disponible en HTTPS (vous pouvez le vérifier depuis votre navigateur), suivez ces instructions pour connecter le registre à GitLab. Ces instructions varient en fonction de vos besoins et de votre installation de GitLab, dans mon cas la configuration consistait à ajouter le certificat et la clé du registre (correctement nommés et avec les permissions correctes) à /etc/gitlab/ssl, et ces lignes à /etc/gitlab/gitlab.rb: registry_external_url 'https://docker.domain.com' gitlab_rails['registry_api_url'] = "https://docker.domain.com" Après la reconfiguration de GitLab, j'ai pu voir un nouvel onglet Registry dans lequel se trouvent les informations sur la manière de marquer correctement les images nouvellement construites, de sorte qu'elles apparaissent ici. Domaine Dans notre configuration de diffusion continue, nous construirons automatiquement une image par branche et si l'image passe les tests alors nous la publierons dans le registre et l'exécuterons automatiquement, ainsi notre application sera automatiquement disponible dans tous les " états ", par exemple, auxquels nous pouvons accéder : Plusieurs branches de fonctionnalités disponibles à <featureName>.docker.domain.com Version test disponible à master.docker.domain.com Version préprod disponible à preprod.docker.domain.com Version prod disponible à prod.docker.domain.com Pour ce faire, il nous faut disposer d'un nom de domaine et ajouter un enregistrement DNS de type wildcard qui renvoie *.docker.domain.com vers l'adresse IP de docker.domain.com. Or vous pouvez utiliser des ports différents. Proxy Nginx Comme nous avons plusieurs branches de fonctionnalités, nous devons rediriger automatiquement les sous-domaines vers le conteneur approprié. Pour ce faire, nous pouvons utiliser Nginx comme un proxy inverse. Voici un guide. Outils graphique GUI Pour commencer l'utilisation des conteneurs, vous pouvez utiliser la ligne de commande ou l'une des interfaces graphiques GUI. Il en existe de nombreux, par exemple : Rancher MicroBadger Portainer Simple Docker UI ... Ils vous permettent de créer des conteneurs et de les gérer à partir de l'interface graphique GUI au lieu de l'interface de commande (CLI). Voici à quoi ressemble Rancher : Système d'exécution de GitLab Comme précédemment, pour exécuter des scripts sur d'autres serveurs, nous devons installer le système d'exécution de GitLab. J'en ai parlé dans le troisième article. Notez que vous devrez utiliser l'exécuteur Shell au lieu de l'exécuteur Docker. L'exécuteur Docker est utilisé lorsque vous avez besoin de quelque chose à l'intérieur de l'image, par exemple vous construisez une application Android dans un conteneur Java et vous n'avez besoin que d'une apk. Dans notre cas, il nous faut un conteneur complet et pour cela nous avons besoin de l'exécuteur Shell. Conclusion Il est facile de commencer à utiliser des conteneurs et il existe de nombreux outils à choisir. La diffusion continue utilisant des conteneurs diffère de la configuration habituelle de la diffusion continue à plusieurs égards : Les dépendances sont satisfaites au moment de la construction et une fois l'image construite, il n'est plus nécessaire de se soucier des dépendances. Reproductibilité - vous pouvez reproduire facilement un environnement existant en utilisant localement le même conteneur. Rapidité - comme les conteneurs ne contiennent rien d'autre que ce que vous avez explicitement ajouté, ils peuvent être construits plus rapidement et, surtout, ils sont construits une seule fois et utilisés à tout moment. Efficacité - comme ci-dessus, les conteneurs génèrent moins de frais généraux par rapport, par exemple, aux VMs. Évolutivité - grâce aux outils d'orchestration, vous pouvez automatiquement adapter votre application à la charge de travail et ne consommer que les ressources dont vous avez besoin dans l'immédiat. Prochaine étape Dans le prochain article, nous parlerons de la création d'une configuration CD qui s'appuie sur le conteneur Docker InterSystems IRIS.
Article
Guillaume Rongier · Déc 21, 2023

Diffusion continue de votre solution InterSystems à l'aide de GitLab - Partie X : Au-delà du code

Après presque quatre ans de pause, ma série CI/CD est de retour ! Au fil des ans, j'ai travaillé avec plusieurs clients d'InterSystems, développant des pipelines CI/CD pour différents cas d'utilisation. J'espère que les informations présentées dans cet article seront utiles à quelqu'un. Cette série d'articles aborde plusieurs approches possibles du développement logiciel avec les technologies InterSystems et GitLab. Nous avons une gamme passionnante de sujets à couvrir: aujourd'hui, parlons de choses au - delà du code, à savoir les configurations et les données. # Problème Nous avons déjà abordé la question des promotions de code, qui était, d'une certaine manière, sans état - nous passons toujours d'une instance (présumée) vide à une base de code complète. Mais parfois, nous devons fournir des données ou un état. Il existe différents types de données: - Configuration: utilisateurs, applications Web, LUT, schémas personnalisés, tâches, partenaires commerciaux et bien d'autres - Paramètres: paires clé-valeur spécifiques à l'environnement - Données : des tableaux de référence etc. doivent souvent être fournis pour que votre application fonctionne. Discutons de tous ces types de données et de la manière dont ils peuvent d'abord être validés dans le contrôle de code source, et ensuite déployés. # Configuration La configuration de système est répartie dans de nombreuses classes différentes, mais InterSystems IRIS peut exporter la plupart d'entre elles en XML. Tout d'abord, il s'agit d'un [paquet de sécurité](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&PACKAGE=Security) qui contient des informations sur : - Les Applications Web - DocDBs - Les domaines - Les événements d'audit - Les serveurs KMIPServers - Les configurations LDAP - Les ressources - Les rôles - Les privilèges SQL - Les configurations SSL - Les services - Les utilisateurs Toutes ces classes sont dotées de méthodes Exists, Export et Import, qui vous permettent de les déplacer d'un environnement à l'autre. Quelques avertissements : - Les utilisateurs et les configurations SSL peuvent contenir des informations sensibles, telles que des mots de passe. Il N'est généralement PAS recommandé de les stocker dans le contrôle du code source pour des raisons de sécurité. Utilisez des méthodes d'exportation/importation pour faciliter les transferts ponctuels. - Par défaut, les méthodes d'exportation et d'importation produisent tout dans un seul fichier, ce qui n'est pas forcément compatible avec le contrôle du code source. Voici une [classe utilitaire](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) qui permet d'exporter et d'importer des tableaux de consultation (LUT), des schémas personnalisés, des partenaires commerciaux, des tâches, des informations d'identification et une configuration SSL. Il exporte un élément par fichier, de sorte que vous obtenez un répertoire avec LUT, un autre répertoire avec des schémas personnalisés, et ainsi de suite. Pour les configurations SSL, il exporte également des fichiers : certificats et clés. Il convient également de noter qu'au lieu d'exporter/importer, vous pouvez utiliser [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer) ou [Merge CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF) pour créer la plupart de ces éléments. Ces deux outils prennent également en charge la création d'espaces de noms et de bases de données. Merge CPF peut ajuster les paramètres du système, tels que la taille du tampon global. ## Tâches La classe [%SYS.Task](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYS.Task) stocke les tâches et fournit les méthodes `ExportTasks` et `ImportTasks`. Vous pouvez également consulter la classe utilitaire ci-dessus pour importer et exporter des tâches individuellement. Notez que lorsque vous importez des tâches, vous pouvez obtenir des erreurs d'importation (`ERROR #7432 : La date et l'heure de début doivent être postérieures à la date et à l'heure actuelles`) si `StartDate` ou d'autres propriétés liées à la planification sont dans le passé. Comme solution, réglez `LastSchedule` à `0`, et InterSystems IRIS replanifiera une tâche nouvellement importée pour qu'elle s'exécute dans le futur le plus proche. ## Interopérabilité Les productions d'interopérabilité contiennent le suivant : - Les partenaires commerciaux - Les paramètres par défaut du système - Les références - Les tableaux de consultation (LUT) Les deux premiers sont disponibles dans le paquet [Ens.Config](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&PACKAGE=Ens.Config) avec les méthodes `%Export` et `%Import`. Exportez les références et les tableaux de consultation à l'aide de la [classe utilitaire](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) ci-dessus. Dans les versions récentes, les tableaux de consultation peuvent être exportés/importés via la classe [$system.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ). # Paramètres [Paramètres par défaut du système](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other_default_settings#ECONFIG_other_default_settings_purpose) est un mécanisme d'interopérabilité par défaut pour les paramètres spécifiques à l'environnement : > L'objectif des paramètres par défaut du système est de simplifier le processus de copiage d'une définition de production d'un environnement à l'autre. Dans toute production, les valeurs de certains paramètres sont déterminées dans le cadre de la conception de la production ; ces paramètres doivent généralement être identiques dans tous les environnements. D'autres paramètres, en revanche, doivent être adaptés à l'environnement ; il s'agit notamment des chemins d'accès aux fichiers, des numéros de port, etc. > > Les paramètres par défaut du système ne doivent spécifier que les valeurs spécifiques à l'environnement dans lequel InterSystems IRIS est installé. En revanche, la définition de la production doit spécifier les valeurs des paramètres qui doivent être identiques dans tous les environnements. Je recommande fortement de les utiliser dans des environnements de production. Utilisez [%Export](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Export) et [%Import](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Import) pour transférer les paramètres par défaut du système. ## Paramètres de l'application Votre application doit également utiliser des paramètres. Dans ce cas, je vous recommande d'utiliser les paramètres par défaut du système. Bien qu'il s'agisse d'un mécanisme d'interopérabilité, il est possible d'accéder aux paramètres via : `%GetSetting(pProductionName, pItemName, pHostClassName, pTargetType, pSettingName, Output pValue)` ([docs](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting)). Vous pouvez écrire un wrapper qui définira les valeurs par défaut dont vous ne vous souciez pas, par exemple : ```objectscript ClassMethod GetSetting(name, Output value) As %Boolean [Codemode=expression] { ##class(Ens.Config.DefaultSettings).%GetSetting("myAppName", "default", "default", , name, .value) } ``` Si vous voulez plus de catégories, vous pouvez aussi exposer les arguments `pItemName` et/ou `pHostClassName`. Les paramètres peuvent être initialement définis par importation, en utilisant le portail de gestion du système, en créant des objets de la classe `Ens.Config.DefaultSettings`, ou en définissant une globale `^Ens.Config.DefaultSettingsD`. Mon premier conseil est de conserver les paramètres en un seul endroit (il peut s'agir des paramètres par défaut du système ou d'une solution personnalisée), et l'application doit obtenir les paramètres uniquement à l'aide d'une API fournie. De cette façon, l'application elle-même ne connaît pas l'environnement et il ne reste plus qu'à fournir un stockage centralisé des paramètres avec des valeurs spécifiques à l'environnement. Pour ce faire, créez un dossier de paramètres dans votre référentiel contenant des fichiers de paramètres, avec des noms de fichiers identiques aux noms des branches de l'environnement. Ensuite, pendant la phase CI/CD, utilisez la [variable d'environnement `$CI_COMMIT_BRANCH`](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html) pour charger le fichier approprié. ``` DEV.xml TEST.xml PROD.xml ``` Si vous avez plusieurs fichiers de configuration par environnement, utilisez des dossiers nommés d'après les branches de l'environnement. Pour obtenir la valeur d'une variable d'environnement à l'intérieur d'InterSystems IRIS [utilisez](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.Util#GetEnviron) `$System.Util.GetEnviron("name")`. # Données Si vous souhaitez mettre à disposition certaines données ( tableaux de référence, catalogues, etc.), vous disposez de plusieurs moyens pour le faire : - Exportation globale. Utilisez soit un fichier binaire [GOF export](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_managing#GGBL_managing_export), soit un nouvel fichier XML. Avec le fichier GOF export, rappelez-vous que les locales sur les systèmes source et cible doivent correspondre (ou au moins la collation globale doit être disponible sur le système cible). Le fichier [XML export](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) prend plus de place. Vous pouvez l'améliorer en exportant les globales dans un fichier `xml.gz`, les méthodes `$system.OBJ` (dés)archivent automatiquement les fichiers `xml.gz` selon les besoins. Le principal inconvénient de cette approche est que les données ne sont pas lisibles par l'homme, même XML - la plupart d'entre elles sont encodées en base64. - Format CSV. [Export CSV](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SQL.StatementResult#%25DisplayFormatted) et l'importer avec [LOAD DATA](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_loaddata). Je préfère CSV car c'est le format lisible par l'homme le plus efficace en termes de stockage, et que tout le monde peut importer. - Format JSON. Créez la classe [JSON Enabled](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GJSON_adaptor). - Format XML. Créez la classe [XML Enabled](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GXMLPROJ_intro) pour projeter des objets en XML. Utilisez-la si vos données ont une structure complexe. Le choix du format dépend de votre cas d'utilisation. Ici, j'ai classé les formats par ordre d'efficacité de stockage, mais ce n'est pas un souci si vous n'avez pas beaucoup de données. # Conclusions L'état ajoute une complexité supplémentaire à vos pipelines de déploiement CI/CD, mais InterSystems IRIS fournit une vaste gamme d'outils pour le gérer. # Liens - [Utility Class](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) - [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer) - [Merge CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF) - [$System.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) - [Paramètres par défaut du système](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting)
Article
Iryna Mykhailova · Mai 10, 2023

Utilisation d'InterSystems IRIS Cloud SQL et d'IntegratedML pour créer une application d'analyse du sommeil Sheep's Galaxy

De nombreux facteurs influencent la qualité de vie des gens, et l'un des plus importants est le sommeil. La qualité de notre sommeil détermine notre capacité à fonctionner pendant la journée et affecte notre santé mentale et physique. Un sommeil de bonne qualité est essentiel à notre santé et à notre bien-être général. Par conséquent, en analysant les indicateurs précédant le sommeil, nous pouvons déterminer la qualité de notre sommeil. C'est précisément la fonctionnalité de l'application Sheep's Galaxy. Sheep's Galaxy est un exemple d'application qui fonctionne avec les technologies IntegratedML et IRIS Cloud SQL d'InterSystems et qui fournit à l'utilisateur un outil d'analyse et d'amélioration de la qualité du sommeil. L'analyse du sommeil prend en compte des facteurs tels que les niveaux de bruit, l'éclairage de la pièce, la durée du sommeil, la consommation de caféine, etc., ce qui permet à l'utilisateur de reconsidérer ses habitudes en matière de sommeil et de créer des conditions optimales pour le sommeil à l'avenir. **Présentation vidéo :** [https://www.youtube.com/watch?v=eZ9Wak831x4&ab_channel=MariaGladkova](https://www.youtube.com/watch?v=eZ9Wak831x4&ab_channel=MariaGladkova) **L'application est basée sur les technologies suivantes :** * [Angular](https://angular.io/) structure pour le frontend; * [FastApi](https://fastapi.tiangolo.com/) structure avec un package DB-API pour le backend ; * [IRIS Cloud SQL with IntegratedML](https://portal.sql-contest.isccloud.io) pour analyser et stocker des données. **Partie Frontend :** Pour construire cette application, nous avons utilisé la structure Angular. Il nous a aidé à créer une application simple à page unique. Nous avons utilisé Angular v15, et tous les composants Angular ont été implémentés en tant que standalones pour rationaliser l'expérience de création. Nous n'avons pas utilisé de modules Angular et c'est une bonne pratique pour faire évoluer une application dans le futur si nécessaire. Nous avons également utilisé l'architecture des composants intelligents (Smart Component Architecture) - tous les composants de notre application frontale sont divisés en composants "intelligents" et "muets". Ce concept nous aide à séparer le code de logique métier et le code de présentation entre ces composants. Toute la Logique métier et les demandes adressées au serveur sont conservées dans les services isolés. Pour traiter les données de notre backend, nous utilisons RxJS - une bibliothèque pour composer des programmes asynchrones et basés sur des événements en utilisant des séquences observables. Pour styliser notre application, nous avons utilisé Angular Material - il s'agit d'une bibliothèque de composants d'interface utilisateur que les développeurs peuvent utiliser dans leurs projets Angular pour accélérer le développement d'interfaces utilisateur élégantes et cohérentes. Cette bibliothèque offre un grand nombre de composants d'interface utilisateur réutilisables et magnifiques - nous en avons ajouté quelques-uns comme les cartes, les entrées, les tableaux de données, les sélecteurs de date, et bien d'autres encore. Nous présentons ci-dessous une vue d'ensemble du flux de travail typique d'un utilisateur. Tout d'abord, l'utilisateur passe par le processus d'enregistrement, s'il l'utilise pour la première fois, ou par l'écran d'autorisation. ![image](/sites/default/files/inline/images/image_5.png) À l'aide de cette application, l'utilisateur entre des renseignements sur son sommeil, tels que son niveau d'activité pendant la journée, le nombre de tasses de café, son confort de sommeil, son niveau de stress et la quantité d'émotions positives, ainsi que la lumière de la pièce et l'heure du coucher. ![image](/sites/default/files/inline/images/image_1_1.png) Après chaque saisie de données, l'utilisateur reçoit une notification sur la qualité de son sommeil. Ces données sont ensuite analysées à l'aide d'algorithmes d'apprentissage automatique afin de fournir aux utilisateurs des informations sur leurs habitudes de sommeil. ![image](/sites/default/files/inline/images/image_2_2.png) **Partie Backend :** Fastapi est un framework python basé sur deux technologies : Pydantic et Starlette. Il a les fonctionnalités suivantes : * Il est basé sur des standards ouverts : OpenAPI, schéma JSON, OAuth2 ; * Documentation automatique de l'API en swagger ; * Implémentation des dépendances ; * Il utilise les fonctionnalités de python moderne : annotation de type, asyncio ; * Il supporte le code synchrone et asynchrone ; La structure du projet consiste en des routeurs avec des points d'extrémité, des modèles pour chaque entité et des services de traitement. Chaque point d'extrémité apparaît dans la documentation atomique à /docs et les champs des points d'extrémité ont une relation avec les modèles de données dans la base de données. ![image](/sites/default/files/inline/images/image_3_0.png) Les modèles pydantiques valident automatiquement les données entrantes et sortantes. ![image](/sites/default/files/inline/images/image_4_0.png) Le processus de traitement des données des utilisateurs repose sur le protocole, qui vous permet de traiter les données en toute sécurité. ![image](/sites/default/files/inline/images/image_5_0.png) Le processus d'interaction avec la base de données est mis en œuvre par la connexion SQL d'IRIS à l'aide de [DB API](https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/DB-API/intersystems_irispython-3.2.0-py3-none-any.whl). ![image](/sites/default/files/inline/images/image_6_0.png) **IRIS Cloud SQL avec IntegratedML :** Tout d'abord, vous devez vous connecter au portail InterSystems Cloud Services. Vous devez ensuite créer un nouveau déploiement IRIS Cloud SQL. Veillez à inclure IntegratedML lorsque vous créez un nouveau déploiement. Lorsqu'il est prêt, vous pouvez obtenir les paramètres de connexion à utiliser dans docker-compose.yml : ![image](/sites/default/files/inline/images/screenshot_2023-04-20_at_12.16.59.png) En ouvrant le menu "IntegratedML Tools", vous avez accès à la création, à l'entraînement et à la validation de votre modèle, ainsi qu'à la possibilité de générer des prédictions sur un champ sélectionné dans le tableau de votre modèle. ![image](/sites/default/files/inline/images/screenshot_2023-04-20_at_12.22.46.png) Dans notre application, nous prédisons la qualité du sommeil sur la base des données de l'utilisateur. Pour ce faire, nous remplissons les champs de la section Prédiction comme suit : ![image](/sites/default/files/inline/images/screenshot_2023-04-20_at_12.23.37.png) Dans la requête générée, le champ prediction contient une prédiction de la qualité du sommeil, le champ probability_quality (probabilité de qualité) contient la probabilité que le sommeil soit " de bonne qualité ". **Liens :** Pour en savoir plus sur notre projet ou l'utiliser comme modèle pour vos futurs travaux : https://openexchange.intersystems.com/package/Sheep%E2%80%99s-Galaxy **Remerciements :** Notre équipe tient à remercier InterSystems et Banksia Global de nous avoir donné l'occasion de travailler avec une technologie de pointe sur des questions importantes. **Développeurs du projet :** * [Maria Gladkova](https://community.intersystems.com/user/maria-gladkova) * [Katsiaryna Shaustruk](https://community.intersystems.com/user/katsiaryna-shaustruk) * [Maria Nesterenko](https://community.intersystems.com/user/maria-nesterenko)
Annonce
Adeline Icard · Juin 13, 2023

Les rapports Zen seraient supprimés d'InterSystems IRIS et IRIS for Health à partir de la version 2025.1

InterSystems annonce la fin de la maintenance de Zen Reports à partir d'Intersystems IRIS et IRIS for Health 2025.1. Cela fait suite à l'avis de dépréciation émis lors de l'introduction d'InterSystems IRIS en 2018 et à l'inclusion ultérieure d'InterSystems Reports en 2020 pour fournir une fonctionnalité de rapport de remplacement. Un aperçu de la chronologie est: Mars 2018. InterSystems IRIS 2018.1 : Annonce de l'abandon de Zen Reports, livraison continue pour assurer la continuité des applications existantes Avril 2020. InterSystems IRIS 2020.1 : Rapports Intersystems intégrés dans le cadre des licences InterSystems IRIS et IRIS for Health and Advanced Server basées sur l'utilisateur Mai 2023. Notification de fin de maintenance pour Zen Reports 2P 2024. Zen Reports disponible en tant que module ipm 1P 2025 (InterSystems IRIS 2025.1) Package Zen Reports supprimé des distributions InterSystems IRIS et IRIS for Health InterSystems a introduit InterSystems Reports, optimisé par Logi Reports de insightsoftware (anciennement Logi Analytics) en tant que solution de création de rapports intégrée commençant par InterSystems IRIS et IRIS for Health 2020.1. InterSystems Reports fournit une solution de reporting moderne par glisser-déposer pour les clients et partenaires InterSystems. Nous prévoyons de faire la transition de Zen Reports vers un package indépendant utilisant IPM (InterSystems Package Manager) et de cesser d'expédier Zen Reports avec InterSystems IRIS et IRIS for Health version 2025.1. Zen Reports continuera d'être disponible en tant que module ipm et pourra être distribué mais ne sera pas maintenu par InterSystems. Le WRC continuera à fournir une assistance sur les versions antérieures de Cache et d'IRIS qui contiennent Zen Reports, mais aucune mise à jour n'est prévue pour le logiciel Zen Reports. Pour plus d'informations sur la mise en route d'InterSystems Reports : Parcours d'apprentissage InterSystems Documentation InterSystems Session du sommet mondial : passage d'InterSystems Application Services de Zen Reports à InterSystems Reports Documentation et didacticiel Logi Report d'insightsoftware Veuillez commenter ci-dessous ou contacter dbpprodmgrs@intersystems.com pour toute question concernant cette annonce.