Partager via


intégration de .NET AspireMySQL

inclut :intégration d’hébergement et intégrationClient

MySQL est un système de gestion de base de données relationnelle open source (SGBDR) qui utilise le langage SQL (Structured Query Language) pour gérer et manipuler des données. Il est utilisé dans un grand nombre d’environnements différents, de petits projets à des systèmes d’entreprise à grande échelle et il est un choix populaire d’héberger des données qui sous-tendent les microservices dans une application native cloud. L’intégration de base de données .NET AspireMySQL vous permet de vous connecter à des bases de données MySQL existantes ou de créer de nouvelles instances à partir de .NET avec l’image conteneur mysql.

Intégration de l’hébergement

L'intégration d'hébergement MySQL modélise le server en tant que type MySqlServerResource et la base de données en tant que type MySqlDatabaseResource. Pour accéder à ces types et API, ajoutez du package NuGet 📦Aspire.Hosting.MySql dans le projet de l'application hôte .

dotnet add package Aspire.Hosting.MySql

Pour plus d’informations, consultez dotnet add package ou gérer les dépendances de package dans les applications .NET.

Ajouter la ressource MySQL,server et la ressource de base de données

Dans votre projet hôte d’application, appelez AddMySql pour ajouter et retourner un générateur de ressources MySQL. Enchaînez un appel au constructeur de ressources retourné à AddDatabasepour ajouter une ressource de base de données MySQL.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

// After adding all resources, run the app...

Note

Le conteneur SQL Server est lent à démarrer. Il est donc préférable d’utiliser une durée de vie persistante pour éviter les redémarrages inutiles. Pour plus d’informations, consultez la durée de vie des ressources du conteneur.

Lorsque .NET.NET Aspire ajoute une image conteneur à l’hôte de l’application, comme illustré dans l’exemple précédent avec l’image mysql, il crée une instance de MySQL sur votre ordinateur local. Une référence à votre générateur de ressources MySQL (la variable mysql) est utilisée pour ajouter une base de données. La base de données est nommée mysqldb, puis ajoutée au ExampleProject. La ressource MySQL inclut les informations d’identification par défaut avec une username de root et une password aléatoire générée à l’aide de la méthode CreateDefaultPasswordParameter.

Lorsque l’hôte de l’application s’exécute, le mot de passe est stocké dans le stockage secret de l’hôte d’application. Elle est ajoutée à la section Parameters, par exemple :

{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}

Le nom du paramètre est mysql-password, mais il suffit de mettre en forme le nom de la ressource avec un suffixe -password. Pour plus d’informations, consultez Stockage sécurisé des secrets d’application en développement dans ASP.NET Core et Ajout de la ressource MySQL avec des paramètres.

La méthode WithReference configure une connexion dans le ExampleProject nommé mysqldb.

Pourboire

Si vous préférez vous connecter à une MySQLserverexistante, appelez AddConnectionString à la place. Pour plus d’informations, consultez Référencer les ressources existantes.

Ajouter une ressource MySQL avec un volume de données

Pour ajouter un volume de données à la ressource SQL Server, appelez la méthode WithDataVolume sur la ressource SQL Server :

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataVolume();

var mysqldb = mysql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Le volume de données est utilisé pour conserver les données MySQLserver en dehors du cycle de vie de son conteneur. Le volume de données est monté sur le chemin /var/lib/mysql dans le conteneur SQL Server et lorsqu'un paramètre name n'est pas donné, le nom est généré au hasard. Pour plus d’informations sur les volumes de données et sur la raison pour laquelle ils sont préférés par rapport aux montages bind , consultez la documentation Docker : Volumes.

Avertissement

Le mot de passe est stocké dans le volume de données. Lors de l’utilisation d’un volume de données et si le mot de passe change, il ne fonctionnera pas tant que vous ne supprimez pas le volume.

Ajouter une ressource MySQL avec un montage de liaison de données

Pour ajouter un montage de liaison de données à la ressource MySQL, appelez la méthode WithDataBindMount :

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataBindMount(source: @"C:\MySql\Data");

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Important

Les montages de liaison de données ont des fonctionnalités limitées par rapport aux volumes , qui offrent de meilleures performances, une meilleure portabilité et sécurité, les rendant ainsi plus adaptés aux environnements de production. Toutefois, les montages de liaison autorisent l’accès direct et la modification des fichiers sur le système hôte, idéal pour le développement et le test où les modifications en temps réel sont nécessaires.

Les montages de liaison de données s’appuient sur le système de fichiers de l’ordinateur hôte pour conserver les données MySQL entre les redémarrages de conteneur. Le point de montage de données est situé au chemin C:\MySql\Data sur Windows (ou /MySql/Data sur Unix) dans le conteneur MySQL de la machine hôte. Pour plus d’informations sur les montages de liaison de données, consultez Docker docs : Liaison de montages.

Ajouter MySQL ressource avec des paramètres

Lorsque vous souhaitez fournir un mot de passe root MySQL explicitement, vous pouvez le transmettre en tant que paramètre. Prenons l’exemple de remplacement suivant :

var password = builder.AddParameter("password", secret: true);

var mysql = builder.AddMySql("mysql", password)
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

Pour plus d’informations, consultez paramètres externes.

Ajouter une ressource PhpMyAdmin

phpMyAdmin est un outil d’administration web populaire pour MySQL. Vous pouvez l’utiliser pour parcourir et modifier des objets MySQL tels que des bases de données, des tables, des vues et des index. Pour utiliser phpMyAdmin dans votre solution .NET.NET Aspire, appelez la méthode WithPhpMyAdmin. Cette méthode ajoute une nouvelle ressource de conteneur à la solution qui héberge phpMyAdmin et la connecte au conteneur MySQL :

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithPhpMyAdmin();

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Lorsque vous exécutez la solution, le tableau de bord .NET.NET Aspire affiche les ressources phpMyAdmin avec un point de terminaison. Sélectionnez le lien vers le point de terminaison pour afficher phpMyAdmin dans un nouvel onglet de navigateur.

Vérifications d’intégrité de l’intégration d’hébergement

L’intégration d’hébergement MySQL ajoute automatiquement un contrôle d’intégrité pour la ressource MySQL. La vérification de l'état de santé vérifie que le MySQLserver est en cours d’exécution et qu’une connexion peut être établie à celui-ci.

L'intégration de l'hébergement s'appuie sur les AspNetCore.HealthChecks 📦 et le package NuGetMySql.

intégration de Client

Pour commencer à utiliser l'intégration de base de données .NET AspireMySQL, installez le package NuGet 📦Aspire.MySqlConnector dans le projet qui consomme client, c’est-à-dire le projet pour l'application qui utilise le MySQLclient. L’intégration MySQLclient inscrit une instance de MySqlConnector.MySqlDataSource que vous pouvez utiliser pour interagir avec le MySQLserver.

dotnet add package Aspire.MySqlConnector

Pour plus d’informations, consultez dotnet add package ou gérer les dépendances de package dans les applications .NET.

Ajouter une source de données MySQL

Dans le fichier Program.cs de votre projet consommant client, appelez la méthode d'extension AddMySqlDataSource pour enregistrer un MySqlDataSource à utiliser avec le conteneur d'injection de dépendances. La méthode prend un paramètre connectionName.

builder.AddMySqlDataSource(connectionName: "mysqldb");

Pourboire

Le paramètre connectionName doit correspondre au nom utilisé lors de l’ajout de la ressource de base de données MySQL dans le projet hôte de l’application. En d’autres termes, lorsque vous appelez AddDatabase et fournissez un nom de mysqldb ce même nom doit être utilisé lors de l’appel de AddMySqlDataSource. Pour plus d’informations, consultez Ajouter MySQLserver ressource et ressource de base de données.

Vous pouvez ensuite récupérer l’instance MySqlConnector.MySqlDataSource à l’aide de l’injection de dépendances. Par exemple, pour récupérer la source de données à partir d’un exemple de service :

public class ExampleService(MySqlDataSource dataSource)
{
    // Use dataSource...
}

Pour plus d’informations sur l’injection de dépendances, consultez l’injection de dépendances .NET.

Ajouter une source de données à clé MySQL

Il peut arriver que vous souhaitiez inscrire plusieurs instances de MySqlDataSource avec différents noms de connexion. Pour enregistrer les sources de données clés MySQL, appelez la méthode AddKeyedMySqlDataSource :

builder.AddKeyedMySqlDataSource(name: "mainDb");
builder.AddKeyedMySqlDataSource(name: "loggingDb");

Important

Lorsque vous utilisez des services à clé, il est prévu que votre ressource MySQL a configuré deux bases de données nommées, une pour le mainDb et l’autre pour le loggingDb.

Vous pouvez ensuite récupérer les instances MySqlDatSource à l’aide de l’injection de dépendances. Par exemple, pour récupérer la connexion à partir d’un exemple de service :

public class ExampleService(
    [FromKeyedServices("mainDb")] MySqlDataSource mainDbConnection,
    [FromKeyedServices("loggingDb")] MySqlDataSource loggingDbConnection)
{
    // Use connections...
}

Pour plus d’informations sur les services à clé, consultez .NET l'injection de dépendances : services à clé.

Configuration

L’intégration de base de données .NET AspireMySQL fournit plusieurs options pour configurer la connexion en fonction des exigences et des conventions de votre projet.

Utiliser une chaîne de connexion

Lorsque vous utilisez une chaîne de connexion à partir de la section de configuration ConnectionStrings, vous pouvez fournir le nom de la chaîne de connexion lors de l’appel de AddMySqlDataSource méthode :

builder.AddMySqlDataSource(connectionName: "mysql");

Ensuite, la chaîne de connexion est récupérée à partir de la section de configuration ConnectionStrings :

{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}

Pour plus d’informations sur la mise en forme de cette chaîne de connexion, consultez documentation MySqlConnector : ConnectionString.

Utiliser des fournisseurs de configuration

L’intégration de base de données .NET AspireMySQL prend en charge Microsoft.Extensions.Configuration. Il charge le MySqlConnectorSettings à partir de la configuration à l’aide de la clé Aspire:MySqlConnector. L’extrait de code suivant est un exemple de fichier appsettings.json qui configure certaines des options :

{
  "Aspire": {
    "MySqlConnector": {
      "ConnectionString": "YOUR_CONNECTIONSTRING",
      "DisableHealthChecks": true,
      "DisableTracing": true
    }
  }
}

Pour obtenir le schéma complet MySQL d’intégration JSON, consultez Aspire. MySqlConnector/ConfigurationSchemajson.

Utiliser des délégués intégrés

Vous pouvez également transmettre le délégué Action<MySqlConnectorSettings> pour configurer certaines ou toutes les options de manière intégrée, par exemple pour désactiver les vérifications de l'état de santé à partir du code :

builder.AddMySqlDataSource(
    "mysql",
    static settings => settings.DisableHealthChecks  = true);

Client vérifications d’intégrité de l’intégration

Par défaut, .NET.NET Aspire intégrations activent vérifications d’intégrité pour tous les services. Pour plus d’informations, consultez .NET.NET Aspire vue d’ensemble des intégrations.

Intégration de base de données .NET AspireMySQL :

  • Ajoute le contrôle d’intégrité lorsque MySqlConnectorSettings.DisableHealthChecks est false, qui vérifie qu’une connexion peut être établie et que les commandes peuvent être exécutées sur la base de données MySQL.
  • S’intègre au point de terminaison HTTP /health, qui spécifie que tous les tests de santé enregistrés doivent réussir pour que l’application soit considérée comme prête à accepter le trafic.

Observabilité et télémétrie

.NET .NET Aspire intégrations configurent automatiquement les configurations de journalisation, de suivi et de métriques, parfois appelées les piliers de l’observabilité. Pour plus d’informations sur l’observabilité de l’intégration et la télémétrie, consultez .NET.NET Aspire vue d’ensemble des intégrations. Selon le service de stockage, certaines intégrations peuvent uniquement prendre en charge certaines de ces fonctionnalités. Par exemple, certaines intégrations prennent en charge la journalisation et le suivi, mais pas les métriques. Les fonctionnalités de télémétrie peuvent également être désactivées à l’aide des techniques présentées dans la section Configuration.

Exploitation forestière

L'intégration .NET AspireMySQL utilise les catégories de logs suivantes :

  • MySqlConnector.ConnectionPool
  • MySqlConnector.MySqlBulkCopy
  • MySqlConnector.MySqlCommand
  • MySqlConnector.MySqlConnection
  • MySqlConnector.MySqlDataSource

Traçage

L’intégration .NET AspireMySQL émet les activités de suivi suivantes à l’aide de OpenTelemetry:

  • MySqlConnector

Métriques

L’intégration .NET AspireMySQL émet les métriques suivantes à l’aide de OpenTelemetry:

  • MySqlConnector
    • db.client.connections.create_time
    • db.client.connections.use_time
    • db.client.connections.wait_time
    • db.client.connections.idle.max
    • db.client.connections.idle.min
    • db.client.connections.max
    • db.client.connections.pending_requests
    • db.client.connections.timeouts
    • db.client.connections.usage

Voir aussi