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