Partager via


.NET .NET Aspire format de manifeste pour les générateurs d’outils de déploiement

Dans cet article, vous allez découvrir le format de manifeste .NET.NET Aspire. Cet article sert de guide de référence pour les générateurs d’outils de déploiement, ce qui permet de créer des outils pour déployer des projets .NET.NET Aspire sur des plateformes d’hébergement spécifiques, qu’elles soient locales ou dans le cloud.

.NET .NET Aspire simplifie l’expérience de développement local en aidant à gérer les interdépendances entre les intégrations d’applications. Pour simplifier le déploiement d’applications, .NET Aspire projets peuvent générer un manifeste de toutes les ressources définies en tant que fichier mis en forme JSON.

Générer un manifeste

Un projet .NET.NET Aspire valide est requis pour générer un manifeste. Pour commencer, créez un projet .NET.NET Aspire à l’aide du modèle aspire-starter.NET :

dotnet new aspire-starter --use-redis-cache `
    -o AspireApp && `
    cd AspireApp

La génération de manifeste est obtenue en exécutant dotnet build avec une cible spéciale :

dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
    --publisher manifest `
    --output-path ../aspire-manifest.json

Pourboire

La --output-path prend en charge les chemins relatifs. La commande précédente utilise ../aspire-manifest.json pour placer le fichier manifeste à la racine du répertoire du projet.

Pour plus d’informations, consultez d’exécution dotnet. La commande précédente génère la sortie suivante :

Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
      Published manifest to: .\AspireApp.AppHost\aspire-manifest.json

Le fichier généré est le manifeste .NET.NET Aspire et est utilisé par les outils pour prendre en charge le déploiement dans des environnements cloud cibles.

Note

Vous pouvez également générer un manifeste dans le cadre du profil de lancement. Tenez compte des launchSettings suivants.json:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "generate-manifest": {
      "commandName": "Project",
      "launchBrowser": false,
      "dotnetRunMessages": true,
      "commandLineArgs": "--publisher manifest --output-path aspire-manifest.json"
    }
  }
}

Format de manifeste de base

La publication du manifeste à partir du modèle de démarrage par défaut pour .NET Aspire produit la sortie JSON suivante :

{
  "resources": {
    "cache": {
      "type": "container.v0",
      "connectionString": "{cache.bindings.tcp.host}:{cache.bindings.tcp.port}",
      "image": "redis:7.2.4",
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 6379
        }
      }
    },
    "apiservice": {
      "type": "project.v0",
      "path": "../AspireApp.ApiService/AspireApp.ApiService.csproj",
      "env": {
        "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
        "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true"
      },
      "bindings": {
        "http": {
          "scheme": "http",
          "protocol": "tcp",
          "transport": "http"
        },
        "https": {
          "scheme": "https",
          "protocol": "tcp",
          "transport": "http"
        }
      }
    },
    "webfrontend": {
      "type": "project.v0",
      "path": "../AspireApp.Web/AspireApp.Web.csproj",
      "env": {
        "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
        "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
        "ConnectionStrings__cache": "{cache.connectionString}",
        "services__apiservice__0": "{apiservice.bindings.http.url}",
        "services__apiservice__1": "{apiservice.bindings.https.url}"
      },
      "bindings": {
        "http": {
          "scheme": "http",
          "protocol": "tcp",
          "transport": "http"
        },
        "https": {
          "scheme": "https",
          "protocol": "tcp",
          "transport": "http"
        }
      }
    }
  }
}

Le format manifeste JSON se compose d’un objet unique appelé resources, qui contient une propriété pour chaque ressource spécifiée dans Program.cs (l’argument name pour chaque nom est utilisé comme propriété pour chacun des objets de ressource enfants dans JSON).

Chaîne de connexion et références de liaison

Dans l’exemple précédent, il existe deux ressources de projet et une ressource de cache Redis. Le webfrontend dépend à la fois des ressources (projet) et cache ().

Cette dépendance est connue, car les variables d’environnement de l'webfrontend contiennent des espaces réservés qui référencent les deux autres ressources :

"env": {
  // ... other environment variables omitted for clarity
  "ConnectionStrings__cache": "{cache.connectionString}",
  "services__apiservice__0": "{apiservice.bindings.http.url}",
  "services__apiservice__1": "{apiservice.bindings.https.url}"
},

La ressource apiservice est référencée par webfrontend à l’aide du WithReference(apiservice) d’appel dans le fichier Program.cs hôte de l’application et redis est référencée à l’aide de l'WithReference(cache)d’appel :

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

var apiService = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");

builder.AddProject<Projects.AspireApp_Web>("webfrontend")
    .WithReference(cache)
    .WithReference(apiService);

builder.Build().Run();

Les références entre les types de ressources de projet entraînent l’injection de variables de service dans le projet de référencement. Les références aux types de référence connus tels que Redis entraînent l’injection de chaînes de connexion.

Diagramme montrant les ressources qui contribuent aux chaînes d’espace réservé correspondantes.

Pour plus d’informations sur la façon dont les ressources dans le modèle d’application et les références entre elles fonctionnent, consultez .NET.NET Aspire vue d’ensemble de l’orchestration.

Structure de chaîne d’espace réservé

Les chaînes d’espace réservé font référence à la structure du manifeste .NET.NET Aspire :

Diagramme montrant comment la structure JSON manifeste est mappée aux chaînes d’espace réservé.

Le segment final de la chaîne d’espace réservé (url dans ce cas) est généré par l’outil qui traite le manifeste. Il existe plusieurs suffixes qui peuvent être utilisés sur la chaîne d’espace réservé :

  • connectionString: pour les types de ressources connus tels que Redis. Les outils de déploiement traduisent la ressource dans l’infrastructure la plus appropriée pour l’environnement cloud cible, puis produisent une chaîne de connexion compatible .NET.NET Aspire pour l’application consommatrice à utiliser. Sur container.v0 ressources, le champ connectionString peut être présent et spécifié explicitement. Il s’agit de prendre en charge les scénarios dans lesquels un type de ressource de conteneur est référencé à l’aide de l’extension WithReference, mais qui doivent être hébergés explicitement en tant que conteneur.
  • url: pour les références de service à service où une URL bien formée est requise. L’outil de déploiement produit la url basée sur le schéma, le protocole et le transport définis dans le manifeste et la topologie de calcul/mise en réseau sous-jacente qui a été déployée.
  • host: segment hôte de l’URL.
  • port: segment de port de l’URL.

Types de ressources

Chaque ressource a un champ type. Lorsqu’un outil de déploiement lit le manifeste, il doit lire le type pour vérifier s’il peut traiter correctement le manifeste. Pendant la période d’aperçu .NET.NET Aspire, tous les types de ressources ont un suffixe v0 pour indiquer qu’ils sont susceptibles de changer. Comme .NET.NET Aspire approches libèrent un suffixe v1 sera utilisé pour indiquer que la structure du manifeste pour ce type de ressource doit être considérée comme stable (les mises à jour ultérieures incrémentent le numéro de version en conséquence).

Champs de ressources courants

Le champ type est le seul champ commun à tous les types de ressources, mais les project.v0, les container.v0et les types de ressources executable.v0 partagent également les champs env et bindings.

Note

Le type de ressource executable.v0 n’est pas entièrement implémenté dans le manifeste en raison de son absence d’utilitaire dans les scénarios de déploiement. Pour plus d’informations sur le conteneurisation des exécutables, consultez Dockerfile types de ressources.

Le type de champ env est un mappage clé/valeur de base où les valeurs peuvent contenir chaînes d’espace réservé.

Les liaisons sont spécifiées dans le champ bindings avec chaque liaison contenue dans son propre champ sous l’objet bindingsJSON. Les champs omis par le manifeste .NET.NET Aspire dans le nœud bindings sont les suivants :

  • scheme: une des valeurs suivantes tcp, udp, httpou https.
  • protocol: une des valeurs suivantes tcp ou udp
  • transport: identique à scheme, mais utilisé pour lever l’ambiguïté entre http et http2.
  • containerPort: facultatif, s’il est omis par défaut au port 80.

Champ inputs

Certaines ressources génèrent un champ inputs. Ce champ est utilisé pour spécifier les paramètres d’entrée de la ressource. Le champ inputs est un objet JSON où chaque propriété est un paramètre d’entrée utilisé dans la résolution de structure d’espace réservé. Les ressources qui ont un connectionString, par exemple, peuvent utiliser le champ inputs pour spécifier un password pour la chaîne de connexion :

"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"

L’espace réservé de chaîne de connexion fait référence au paramètre d’entrée password à partir du champ inputs :

"inputs": {
  "password": {
    "type": "string",
    "secret": true,
    "default": {
      "generate": {
        "minLength": 10
      }
    }
  }
}

L’extrait de code JSON précédent montre le champ inputs d’une ressource qui a un champ connectionString. Le paramètre d’entrée password est un type de chaîne et est marqué comme secret. Le champ default est utilisé pour spécifier une valeur par défaut pour le paramètre d’entrée. Dans ce cas, la valeur par défaut est générée à l’aide du champ generate, avec une chaîne aléatoire d’une longueur minimale.

Ressources intégrées

Le tableau suivant répertorie les types de ressources qui sont générés explicitement par .NET Aspire et les extensions développées par l’équipe .NET Aspire :

Types de ressources indépendantes du cloud

Ces ressources sont disponibles dans le 📦Aspire. Hébergement package NuGet.

Utilisation du modèle d’application Type de ressource de manifeste Lien de titre
AddContainer container.v0 type de ressource conteneur
PublishAsDockerFile dockerfile.v0 Dockerfile types de ressources
AddDatabase value.v0 MongoDB Server types de ressources
AddMongoDB container.v0 MongoDB types de ressources
AddDatabase value.v0 MySQL Server types de ressources
AddMySql container.v0 MySQL types de ressources
AddDatabase value.v0 Postgres types de ressources
AddPostgres container.v0 Postgres types de ressources
AddProject project.v0 type de ressource Project
AddRabbitMQ container.v0 RabbitMQ types de ressources
AddRedis container.v0 Redis type de ressource
AddDatabase value.v0 SQL Server types de ressources
AddSqlServer container.v0 SQL Server types de ressources

Type de ressource de projet

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");

Exemple de manifeste :

"apiservice": {
  "type": "project.v0",
  "path": "../AspireApp.ApiService/AspireApp.ApiService.csproj",
  "env": {
    "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
    "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true"
  },
  "bindings": {
    "http": {
      "scheme": "http",
      "protocol": "tcp",
      "transport": "http"
    },
    "https": {
      "scheme": "https",
      "protocol": "tcp",
      "transport": "http"
    }
  }
}

Type de ressource conteneur

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddContainer("mycontainer", "myimage")
       .WithEnvironment("LOG_LEVEL", "WARN")
       .WithHttpEndpoint(3000);

Exemple de manifeste :

{
  "resources": {
    "mycontainer": {
      "type": "container.v0",
      "image": "myimage:latest",
      "env": {
        "LOG_LEVEL": "WARN"
      },
      "bindings": {
        "http": {
          "scheme": "http",
          "protocol": "tcp",
          "transport": "http",
          "containerPort": 3000
        }
      }
    }
  }
}

Dockerfile types de ressources

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
       .WithHttpEndpoint(hostPort: 5031, env: "PORT")
       .PublishAsDockerFile();

Pourboire

L’appel PublishAsDockerFile est requis pour générer le type de ressource Dockerfile dans le manifeste, et cette méthode d’extension n’est disponible que sur le type ExecutableResource.

Exemple de manifeste :

{
  "resources": {
    "nodeapp": {
      "type": "dockerfile.v0",
      "path": "../nodeapp/Dockerfile",
      "context": "../nodeapp",
      "env": {
        "NODE_ENV": "development",
        "PORT": "{nodeapp.bindings.http.port}"
      },
      "bindings": {
        "http": {
          "scheme": "http",
          "protocol": "tcp",
          "transport": "http",
          "containerPort": 5031
        }
      }
    }
  }
}

Postgres types de ressources

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddPostgres("postgres1")
       .AddDatabase("shipping");

Exemple de manifeste :

{
  "resources": {
    "postgres1": {
      "type": "container.v0",
      "connectionString": "Host={postgres1.bindings.tcp.host};Port={postgres1.bindings.tcp.port};Username=postgres;Password={postgres1.inputs.password}",
      "image": "postgres:16.2",
      "env": {
        "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256",
        "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256",
        "POSTGRES_PASSWORD": "{postgres1.inputs.password}"
      },
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 5432
        }
      },
      "inputs": {
        "password": {
          "type": "string",
          "secret": true,
          "default": {
            "generate": {
              "minLength": 10
            }
          }
        }
      }
    },
    "shipping": {
      "type": "value.v0",
      "connectionString": "{postgres1.connectionString};Database=shipping"
    }
  }
}

RabbitMQ types de ressources

RabbitMQ est modélisé en tant que ressource de conteneur container.v0. L’exemple suivant montre comment ils sont ajoutés au modèle d’application.

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRabbitMQ("rabbitmq1");

Le code précédent produit le manifeste suivant :

{
  "resources": {
    "rabbitmq1": {
      "type": "container.v0",
      "connectionString": "amqp://guest:{rabbitmq1.inputs.password}@{rabbitmq1.bindings.tcp.host}:{rabbitmq1.bindings.tcp.port}",
      "image": "rabbitmq:3",
      "env": {
        "RABBITMQ_DEFAULT_USER": "guest",
        "RABBITMQ_DEFAULT_PASS": "{rabbitmq1.inputs.password}"
      },
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 5672
        }
      },
      "inputs": {
        "password": {
          "type": "string",
          "secret": true,
          "default": {
            "generate": {
              "minLength": 10
            }
          }
        }
      }
    }
  }
}

type de ressource Redis

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRedis("redis1");

Exemple de manifeste :

{
  "resources": {
    "redis1": {
      "type": "container.v0",
      "connectionString": "{redis1.bindings.tcp.host}:{redis1.bindings.tcp.port}",
      "image": "redis:7.2.4",
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 6379
        }
      }
    }
  }
}

SQL Server types de ressources

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddSqlServer("sql1")
       .AddDatabase("shipping");

Exemple de manifeste :

{
  "resources": {
    "sql1": {
      "type": "container.v0",
      "connectionString": "Server={sql1.bindings.tcp.host},{sql1.bindings.tcp.port};User ID=sa;Password={sql1.inputs.password};TrustServerCertificate=true",
      "image": "mcr.microsoft.com/mssql/server:2022-latest",
      "env": {
        "ACCEPT_EULA": "Y",
        "MSSQL_SA_PASSWORD": "{sql1.inputs.password}"
      },
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 1433
        }
      },
      "inputs": {
        "password": {
          "type": "string",
          "secret": true,
          "default": {
            "generate": {
              "minLength": 10
            }
          }
        }
      }
    },
    "shipping": {
      "type": "value.v0",
      "connectionString": "{sql1.connectionString};Database=shipping"
    }
  }
}

MongoDB types de ressources

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddMongoDB("mongodb1")
       .AddDatabase("shipping");

Exemple de manifeste :

{
  "resources": {
    "mongodb1": {
      "type": "container.v0",
      "connectionString": "mongodb://{mongodb1.bindings.tcp.host}:{mongodb1.bindings.tcp.port}",
      "image": "mongo:7.0.5",
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 27017
        }
      }
    },
    "shipping": {
      "type": "value.v0",
      "connectionString": "{mongodb1.connectionString}/shipping"
    }
  }
}

MySQL types de ressources

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddMySql("mysql1")
       .AddDatabase("shipping");

Exemple de manifeste :

{
  "resources": {
    "mysql1": {
      "type": "container.v0",
      "connectionString": "Server={mysql1.bindings.tcp.host};Port={mysql1.bindings.tcp.port};User ID=root;Password={mysql1.inputs.password}",
      "image": "mysql:8.3.0",
      "env": {
        "MYSQL_ROOT_PASSWORD": "{mysql1.inputs.password}"
      },
      "bindings": {
        "tcp": {
          "scheme": "tcp",
          "protocol": "tcp",
          "transport": "tcp",
          "containerPort": 3306
        }
      },
      "inputs": {
        "password": {
          "type": "string",
          "secret": true,
          "default": {
            "generate": {
              "minLength": 10
            }
          }
        }
      }
    },
    "shipping": {
      "type": "value.v0",
      "connectionString": "{mysql1.connectionString};Database=shipping"
    }
  }
}

Azuretypes de ressources spécifiques

Les ressources suivantes sont disponibles dans le 📦Aspire. Hébergement.Azure package NuGet.

Utilisation du modèle d’application Type de ressource de manifeste Lien de titre
AddAzureAppConfiguration azure.bicep.v0 Azure types de ressources App Configuration
AddAzureKeyVault azure.bicep.v0 Azure Key Vault type de ressource
AddAzureRedis azure.bicep.v0 Azure Redis types de ressources
AddAzureServiceBus azure.bicep.v0 Azure Service Bus type de ressource
AddAzureSqlServer(...) azure.bicep.v0 Azure types de ressources SQL
AddAzureSqlServer(...).AddDatabase(...) value.v0 Azure types de ressources SQL
AddAzurePostgresFlexibleServer(...) azure.bicep.v0 Azure Postgres types de ressources
AddAzurePostgresFlexibleServer(...).AddDatabase(...) value.v0 Azure Postgres types de ressources
AddAzureStorage azure.storage.v0 Azure types de ressources de stockage
AddBlobs value.v0 Azure types de ressources de stockage
AddQueues value.v0 Azure types de ressources de stockage
AddTables value.v0 Azure types de ressources de stockage

type de ressource Azure Key Vault

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureKeyVault("keyvault1");

Exemple de manifeste :

{
  "resources": {
    "keyvault1": {
      "type": "azure.bicep.v0",
      "connectionString": "{keyvault1.outputs.vaultUri}",
      "path": "aspire.hosting.azure.bicep.keyvault.bicep",
      "params": {
        "principalId": "",
        "principalType": "",
        "vaultName": "keyvault1"
      }
    }
  }
}

type de ressource Azure Service Bus

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureServiceBus("sb1")
       .AddTopic("topic1", [])
       .AddTopic("topic2", [])
       .AddQueue("queue1")
       .AddQueue("queue2");

Exemple de manifeste :

{
  "resources": {
    "sb1": {
      "type": "azure.bicep.v0",
      "connectionString": "{sb1.outputs.serviceBusEndpoint}",
      "path": "aspire.hosting.azure.bicep.servicebus.bicep",
      "params": {
        "serviceBusNamespaceName": "sb1",
        "principalId": "",
        "principalType": "",
        "queues": [
          "queue1",
          "queue2"
        ],
        "topics": [
          {
            "name": "topic1",
            "subscriptions": []
          },
          {
            "name": "topic2",
            "subscriptions": []
          }
        ]
      }
    }
  }
}

types de ressources de stockage Azure

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("images");

storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");

Exemple de manifeste :

{
  "resources": {
    "images": {
      "type": "azure.bicep.v0",
      "path": "aspire.hosting.azure.bicep.storage.bicep",
      "params": {
        "principalId": "",
        "principalType": "",
        "storageName": "images"
      }
    },
    "blobs": {
      "type": "value.v0",
      "connectionString": "{images.outputs.blobEndpoint}"
    },
    "queues": {
      "type": "value.v0",
      "connectionString": "{images.outputs.queueEndpoint}"
    },
    "tables": {
      "type": "value.v0",
      "connectionString": "{images.outputs.tableEndpoint}"
    }
  }
}

type de ressource AzureRedis

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureRedis("azredis1");

Exemple de manifeste :

{
  "resources": {
    "azredis": {
      "type": "azure.bicep.v0",
      "connectionString": "{azredis.outputs.connectionString}",
      "path": "azredis.module.bicep",
      "params": {
        "principalId": "",
        "principalName": ""
      }
    }
  }
}

Azure type de ressource App Configuration

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureAppConfiguration("appconfig1");

Exemple de manifeste :

{
  "resources": {
    "appconfig1": {
      "type": "azure.bicep.v0",
      "connectionString": "{appconfig1.outputs.appConfigEndpoint}",
      "path": "aspire.hosting.azure.bicep.appconfig.bicep",
      "params": {
        "configName": "appconfig1",
        "principalId": "",
        "principalType": ""
      }
    }
  }
}

Azure types de ressources SQL

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureSqlServer("sql")
       .AddDatabase("inventory");

Exemple de manifeste :

{
  "resources": {
    "sql": {
      "type": "azure.bicep.v0",
      "connectionString": "Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\u0022Active Directory Default\u0022",
      "path": "sql.module.bicep",
      "params": {
        "principalId": "",
        "principalName": ""
      }
    },
    "inventory": {
      "type": "value.v0",
      "connectionString": "{sql.connectionString};Database=inventory"
    }
  }
}

types de ressources AzurePostgres

Exemple de code :

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzurePostgresFlexibleServer("postgres")
       .AddDatabase("db");

Exemple de manifeste :

{
  "resources": {
    "postgres": {
      "type": "azure.bicep.v0",
      "connectionString": "{postgres.outputs.connectionString}",
      "path": "postgres.module.bicep",
      "params": {
        "principalId": "",
        "principalType": "",
        "principalName": ""
      }
    },
    "db": {
      "type": "value.v0",
      "connectionString": "{postgres.connectionString};Database=db"
    }
  }
}

Types de ressources pris en charge dans le Azure Developer CLI

Le Azure Developer CLI (azd) est un outil qui peut être utilisé pour déployer des projets .NET Aspire sur Azure Container Apps. Avec le type de ressource azure.bicep.v0, les types de conteneurs de ressources indépendants du cloud peuvent être mappés à des ressources spécifiques à Azure. Le tableau suivant répertorie les types de ressources pris en charge dans le Azure Developer CLI:

Nom API indépendante du cloud API Azure
Redis AddRedis AddAzureRedis
Postgres AddPostgres AddAzurePostgresFlexibleServer
SQL Server AddSqlServer AddAzureSqlServer

Lorsque les ressources sont configurées comme Azure ressources, le type de ressource azure.bicep.v0 est généré dans le manifeste. Pour plus d’informations, consultez Déployer un projet de .NET Aspire sur Azure Container Apps à l’aide du Azure Developer CLI (guide détaillé).

Voir aussi