Freigeben über


.NET .NET Aspire Manifestformat für Bereitstellungstool-Generatoren

In diesem Artikel erfahren Sie mehr über das .NET.NET Aspire Manifestformat. Dieser Artikel dient als Referenzhandbuch für Bereitstellungstool-Generatoren, die bei der Erstellung von Tools zur Bereitstellung von .NET.NET Aspire Projekten auf bestimmten Hostingplattformen unterstützt werden, unabhängig davon, ob lokal oder in der Cloud.

.NET .NET Aspire vereinfacht die lokale Entwicklungsumgebung durch die Verwaltung von Abhängigkeiten zwischen Anwendungsintegrationen. Um die Bereitstellung von Anwendungen zu vereinfachen, können .NET Aspire Projekte ein Manifest aller Ressourcen generieren, die als JSON formatierte Datei definiert sind.

Generieren eines Manifests

Zum Generieren eines Manifests ist ein gültiges .NET.NET Aspire Projekt erforderlich. Erstellen Sie zunächst ein .NET.NET Aspire Projekt mithilfe der aspire-starter.NET-Vorlage:

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

Die Manifestgenerierung wird durch Ausführen von dotnet build mit einem speziellen Ziel erreicht:

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

Trinkgeld

Die --output-path unterstützt relative Pfade. Der vorherige Befehl verwendet ../aspire-manifest.json, um die Manifestdatei im Stammverzeichnis des Projekts zu platzieren.

Weitere Informationen finden Sie unter dotnet run. Der vorherige Befehl erzeugt die folgende Ausgabe:

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

Die generierte Datei ist das .NET.NET Aspire Manifest und wird von Tools verwendet, um die Bereitstellung in Zielcloudumgebungen zu unterstützen.

Anmerkung

Sie können auch ein Manifest als Teil des Startprofils generieren. Beachten Sie die folgenden launchSettings.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"
    }
  }
}

Einfaches Manifestformat

Das Veröffentlichen des Manifests aus der Standardstartvorlage für .NET Aspire erzeugt die folgende JSON Ausgabe:

{
  "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"
        }
      }
    }
  }
}

Das Manifestformat JSON besteht aus einem einzelnen Objekt namens resources, das eine Eigenschaft für jede ressource enthält, die in Program.cs angegeben ist (das argument name für jeden Namen wird als Eigenschaft für jedes der untergeordneten Ressourcenobjekte in JSONverwendet).

Verbindungszeichenfolgen- und Bindungsverweise

Im vorherigen Beispiel gibt es zwei Projektressourcen und eine Redis Cacheressource. Die webfrontend- hängt sowohl vom apiservice (Projekt) als auch vom Cache (Redis) Ressourcen ab.

Diese Abhängigkeit ist bekannt, da die Umgebungsvariablen für die webfrontend Platzhalter enthalten, die auf die beiden anderen Ressourcen verweisen:

"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}"
},

Auf die apiservice-Ressource wird mithilfe des Aufrufs webfrontend in der App-Host WithReference(apiservice) datei Program.cs verwiesen, und auf redis wird mithilfe des Aufrufs WithReference(cache)verwiesen:

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();

Verweise zwischen Projektressourcentypen führen zu Dienstermittlung Variablen, die in das referenzierende Projekt eingefügt werden. Verweise auf bekannte Verweistypen wie Redis führen dazu, dass Verbindungszeichenfolgen eingefügt werden.

Ein Diagramm, das zeigt, welche Ressourcen zu welchen entsprechenden Platzhalterzeichenfolgen beitragen.

Weitere Informationen dazu, wie Ressourcen im App-Modell und Verweise zwischen ihnen funktionieren, finden Sie unter .NET.NET Aspire Übersicht über die Orchestrierung.

Platzhalterzeichenfolgenstruktur

Platzhalterzeichenfolgen verweisen auf die Struktur des .NET.NET Aspire Manifests:

Ein Diagramm, das zeigt, wie das Manifest JSON Struktur Platzhalterzeichenfolgen zuordnet.

Das letzte Segment der Platzhalterzeichenfolge ( in diesem Fallurl) wird vom Tool generiert, das das Manifest verarbeitet. Es gibt mehrere Suffixe, die in der Platzhalterzeichenfolge verwendet werden können:

  • connectionString: Für bekannte Ressourcentypen wie Redis. Bereitstellungstools übersetzen die Ressource in der am besten geeigneten Infrastruktur für die Zielcloudumgebung und erstellen dann eine .NET.NET Aspire kompatible Verbindungszeichenfolge für die zu verwendende Anwendung. Auf container.v0 Ressourcen kann das feld connectionString vorhanden und explizit angegeben werden. Dies ist die Unterstützung von Szenarien, in denen auf einen Containerressourcentyp mithilfe der WithReference Erweiterung verwiesen wird, aber explizit als Container gehostet werden soll.
  • url: Für Dienst-zu-Dienst-Verweise, bei denen eine wohlgeformte URL erforderlich ist. Das Bereitstellungstool erzeugt die url basierend auf dem Schema, Protokoll und Transport, das im Manifest definiert ist, und der zugrunde liegenden Compute-/Netzwerktopologie, die bereitgestellt wurde.
  • host: Das Hostsegment der URL.
  • port: Das Portsegment der URL.

Ressourcentypen

Jede Ressource verfügt über ein type Feld. Wenn ein Bereitstellungstool das Manifest liest, sollte er den Typ lesen, um zu überprüfen, ob es das Manifest ordnungsgemäß verarbeiten kann. Während des .NET.NET Aspire Vorschauzeitraums weisen alle Ressourcentypen ein v0 Suffix auf, um anzugeben, dass sie geändert werden können. Wenn .NET.NET Aspire Ansätze ein v1 Suffix freigeben, wird verwendet, um anzugeben, dass die Struktur des Manifests für diesen Ressourcentyp als stabil betrachtet werden sollte (nachfolgende Updates erhöhen die Versionsnummer entsprechend).

Allgemeine Ressourcenfelder

Das feld "type" ist das einzige Feld, das für alle Ressourcentypen gemeinsam ist, jedoch die project.v0, container.v0und executable.v0 Ressourcentypen auch die felder env und bindings gemeinsam nutzen.

Anmerkung

Der ressourcentyp executable.v0 ist aufgrund seines fehlenden Hilfsprogramms in Bereitstellungsszenarien nicht vollständig im Manifest implementiert. Weitere Informationen zum Containerisieren von ausführbaren Dateien finden Sie unter Dockerfile Ressourcentypen.

Der env Feldtyp ist eine grundlegende Schlüssel-Wertzuordnung, bei der die Werte Platzhalterzeichenfolgenenthalten können.

Bindungen werden im feld bindings angegeben, wobei jede Bindung in einem eigenen Feld unter dem bindingsJSON-Objekt enthalten ist. Die Felder, die vom .NET.NET Aspire Manifest im knoten bindings weggelassen werden, umfassen:

  • scheme: Einer der folgenden Werte tcp, udp, httpoder https.
  • protocol: Einer der folgenden Werte tcp oder udp
  • transport: Identisch mit scheme, wird jedoch verwendet, um zwischen http und http2zu unterscheiden.
  • containerPort: Optional, wenn keine Standardwerte für Port 80 angegeben werden.

Das feld "inputs"

Einige Ressourcen generieren ein inputs Feld. Dieses Feld wird verwendet, um Eingabeparameter für die Ressource anzugeben. Das feld inputs ist ein JSON-Objekt, bei dem jede Eigenschaft ein Eingabeparameter ist, der in der Auflösung der Platzhalterstruktur verwendet wird. Ressourcen mit einem connectionStringkönnen z. B. das feld inputs verwenden, um eine password für die Verbindungszeichenfolge anzugeben:

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

Der Platzhalter für die Verbindungszeichenfolge verweist auf den password Eingabeparameter aus dem feld inputs:

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

Im vorherigen JSON Codeausschnitt wird das inputs Feld für eine Ressource mit einem connectionString Feld angezeigt. Der password Eingabeparameter ist ein Zeichenfolgentyp und wird als geheimer Schlüssel markiert. Das feld default wird verwendet, um einen Standardwert für den Eingabeparameter anzugeben. In diesem Fall wird der Standardwert mithilfe des generate-Felds mit zufälliger Zeichenfolge einer Mindestlänge generiert.

Integrierte Ressourcen

Die folgende Tabelle enthält eine Liste der Ressourcentypen, die explizit von .NET Aspire und Erweiterungen generiert werden, die vom .NET Aspire Team entwickelt wurden:

Cloudagnostische Ressourcentypen

Diese Ressourcen sind im 📦Aspireverfügbar. Hosten NuGet-Pakets.

App-Modellnutzung Manifestressourcentyp Überschriftenlink
AddContainer container.v0 Containerressourcentyp
PublishAsDockerFile dockerfile.v0 Dockerfile Ressourcentypen
AddDatabase value.v0 MongoDB Server Ressourcentypen
AddMongoDB container.v0 MongoDB Ressourcentypen
AddDatabase value.v0 MySQL Server Ressourcentypen
AddMySql container.v0 MySQL Ressourcentypen
AddDatabase value.v0 Postgres Ressourcentypen
AddPostgres container.v0 Postgres Ressourcentypen
AddProject project.v0 Project-Ressourcentyp
AddRabbitMQ container.v0 RabbitMQ Ressourcentypen
AddRedis container.v0 Redis Ressourcentyp
AddDatabase value.v0 SQL Server Ressourcentypen
AddSqlServer container.v0 SQL Server Ressourcentypen

Project-Ressourcentyp

Beispielcode:

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

Beispielmanifest:

"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"
    }
  }
}

Containerressourcentyp

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

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

Dockerfile Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Trinkgeld

Der PublishAsDockerFile Aufruf ist erforderlich, um den Dockerfile Ressourcentyp im Manifest zu generieren, und diese Erweiterungsmethode ist nur für den ExecutableResource Typ verfügbar.

Beispielmanifest:

{
  "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 Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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 Ressourcentypen

RabbitMQ wird als Containerressource container.v0modelliert. Das folgende Beispiel zeigt, wie sie dem App-Modell hinzugefügt werden.

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRabbitMQ("rabbitmq1");

Der vorherige Code erzeugt das folgende Manifest:

{
  "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
            }
          }
        }
      }
    }
  }
}

Redis Ressourcentyp

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRedis("redis1");

Beispielmanifest:

{
  "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 Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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 Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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 Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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"
    }
  }
}

Azure-spezifische Ressourcentypen

Die folgenden Ressourcen sind im 📦Aspireverfügbar. Hosting.Azure NuGet-Paket.

App-Modellnutzung Manifestressourcentyp Überschriftenlink
AddAzureAppConfiguration azure.bicep.v0 Azure Ressourcentypen für die App-Konfiguration
AddAzureKeyVault azure.bicep.v0 Azure Key Vault Ressourcentyp
AddAzureRedis azure.bicep.v0 Azure Redis Ressourcentypen
AddAzureServiceBus azure.bicep.v0 Azure Service Bus Ressourcentyp
AddAzureSqlServer(...) azure.bicep.v0 Azure SQL-Ressourcentypen
AddAzureSqlServer(...).AddDatabase(...) value.v0 Azure SQL-Ressourcentypen
AddAzurePostgresFlexibleServer(...) azure.bicep.v0 Azure Postgres Ressourcentypen
AddAzurePostgresFlexibleServer(...).AddDatabase(...) value.v0 Azure Postgres Ressourcentypen
AddAzureStorage azure.storage.v0 Azure Speicherressourcentypen
AddBlobs value.v0 Azure Speicherressourcentypen
AddQueues value.v0 Azure Speicherressourcentypen
AddTables value.v0 Azure Speicherressourcentypen

Azure Key Vault Ressourcentyp

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureKeyVault("keyvault1");

Beispielmanifest:

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

Azure Service Bus Ressourcentyp

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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": []
          }
        ]
      }
    }
  }
}

Azure Speicherressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

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

Beispielmanifest:

{
  "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}"
    }
  }
}

Azure Redis Ressourcentyp

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureRedis("azredis1");

Beispielmanifest:

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

ressourcentyp "Azure App-Konfiguration"

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureAppConfiguration("appconfig1");

Beispielmanifest:

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

Azure SQL-Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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"
    }
  }
}

Azure Postgres Ressourcentypen

Beispielcode:

var builder = DistributedApplication.CreateBuilder(args);

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

Beispielmanifest:

{
  "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"
    }
  }
}

In der Azure Developer CLI unterstützte Ressourcentypen

Die Azure Developer CLI (azd) ist ein Tool, mit dem .NET Aspire Projekte Azure Container Appsbereitgestellt werden können. Mit dem azure.bicep.v0 Ressourcentyp können cloudagnostische Ressourcencontainertypen Azure-spezifischen Ressourcen zugeordnet werden. In der folgenden Tabelle sind die Ressourcentypen aufgeführt, die in der Azure Developer CLIunterstützt werden:

Name Cloudagnostische API Azure-API
Redis AddRedis AddAzureRedis
Postgres AddPostgres AddAzurePostgresFlexibleServer
SQL Server AddSqlServer AddAzureSqlServer

Wenn Ressourcen wie Azure Ressourcen konfiguriert sind, wird der azure.bicep.v0 Ressourcentyp im Manifest generiert. Weitere Informationen finden Sie unter Deploy a .NET Aspire project to Azure Container Apps using the Azure Developer CLI (in depth guide).

Siehe auch