Condividi tramite


.NET .NET Aspire formato manifesto per i generatori di strumenti di distribuzione

In questo articolo vengono fornite informazioni sul formato manifesto .NET.NET Aspire. Questo articolo funge da guida di riferimento per i generatori di strumenti di distribuzione, che facilitano la creazione di strumenti per distribuire .NET.NET Aspire progetti in piattaforme di hosting specifiche, in locale o nel cloud.

.NET .NET Aspire semplifica l'esperienza di sviluppo locale aiutando a gestire le interdipendenze tra le integrazioni delle applicazioni. Per semplificare la distribuzione delle applicazioni, .NET Aspire progetti possono generare un manifesto di tutte le risorse definite come file formattato JSON.

Generare un manifesto

Per generare un manifesto è necessario un progetto di .NET.NET Aspire valido. Per iniziare, creare un progetto di .NET.NET Aspire usando il modello di aspire-starter.NET:

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

La generazione del manifesto viene ottenuta eseguendo dotnet build con una destinazione speciale:

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

Mancia

Il --output-path supporta i percorsi relativi. Il comando precedente usa ../aspire-manifest.json per inserire il file manifesto nella radice della directory del progetto.

Per altre informazioni, vedere dotnet run. Il comando precedente produce l'output seguente:

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

Il file generato è il manifesto .NET.NET Aspire e viene usato dagli strumenti per supportare la distribuzione in ambienti cloud di destinazione.

Nota

È anche possibile generare un manifesto come parte del profilo di avvio. Prendere in considerazione i launchSettings seguenti.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"
    }
  }
}

Formato manifesto di base

La pubblicazione del manifesto dal modello di avvio predefinito per .NET Aspire produce l'output JSON seguente:

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

Il formato manifesto JSON è costituito da un singolo oggetto denominato resources, che contiene una proprietà per ogni risorsa specificata in Program.cs (l'argomento name per ogni nome viene usato come proprietà per ogni oggetto risorsa figlio in JSON).

Riferimenti a stringhe di connessione e binding

Nell'esempio precedente sono presenti due risorse di progetto e una Redis risorsa cache. Il webfrontend dipende dalle risorse (progetto) apiservice e cache ().

Questa dipendenza è nota perché le variabili di ambiente per il webfrontend contengono segnaposto che fanno riferimento alle due altre risorse:

"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 risorsa apiservice fa riferimento webfrontend usando il WithReference(apiservice) di chiamata nel file Program.cs dell'host dell'app e redis viene fatto riferimento usando la chiamata WithReference(cache):

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

I riferimenti tra i tipi di risorse di progetto comportano 'individuazione del servizio variabili inserite nel progetto di riferimento. Riferimenti a tipi di riferimento noti, ad esempio Redis comportano l'iniezione di stringhe di connessione.

Diagramma che mostra le risorse che contribuiscono alle stringhe segnaposto corrispondenti.

Per altre informazioni sul funzionamento delle risorse nel modello di app e sui riferimenti tra di essi, vedere .NET.NET Aspire panoramica dell'orchestrazione.

Struttura di stringhe segnaposto

Le stringhe segnaposto fanno riferimento alla struttura del manifesto .NET.NET Aspire:

Diagramma che mostra il mapping del manifesto JSON struttura alle stringhe segnaposto.

Il segmento finale della stringa segnaposto (url in questo caso) viene generato dallo strumento che elabora il manifesto. Nella stringa segnaposto possono essere usati diversi suffissi:

  • connectionString: per tipi di risorse noti, ad esempio Redis. Gli strumenti di distribuzione convertono la risorsa nell'infrastruttura più appropriata per l'ambiente cloud di destinazione e quindi producono una stringa di connessione .NET.NET Aspire compatibile per l'applicazione che usa. Nelle risorse container.v0 il campo connectionString può essere presente e specificato in modo esplicito. Si tratta di supportare scenari in cui viene fatto riferimento a un tipo di risorsa contenitore usando l'estensione WithReference, ma si vuole essere ospitati in modo esplicito come contenitore.
  • url: per i riferimenti da servizio a servizio in cui è necessario un URL ben formato. Lo strumento di distribuzione produce il url in base allo schema, al protocollo e al trasporto definiti nel manifesto e alla topologia di calcolo/rete sottostante distribuita.
  • host: segmento host dell'URL.
  • port: segmento di porta dell'URL.

Tipi di risorse

Ogni risorsa ha un campo type. Quando uno strumento di distribuzione legge il manifesto, deve leggere il tipo per verificare se può elaborare correttamente il manifesto. Durante il periodo di anteprima .NET.NET Aspire, tutti i tipi di risorse hanno un suffisso v0 per indicare che sono soggetti a modifiche. Poiché .NET.NET Aspire approcci rilasciano un suffisso v1 verrà usato per indicare che la struttura del manifesto per tale tipo di risorsa deve essere considerata stabile (gli aggiornamenti successivi incrementeranno di conseguenza il numero di versione).

Campi delle risorse comuni

Il campo type è l'unico campo comune in tutti i tipi di risorse, ma i tipi di risorse project.v0, container.v0e executable.v0 condividono anche i campi env e bindings.

Nota

Il tipo di risorsa executable.v0 non è completamente implementato nel manifesto a causa della mancanza di utilità negli scenari di distribuzione. Per altre informazioni sulla creazione di contenitori di file eseguibili, vedere Dockerfile tipi di risorse.

Il tipo di campo env è un mapping chiave/valore di base in cui i valori possono contenere stringhe segnaposto.

Le associazioni vengono specificate nel campo bindings con ogni associazione contenuta all'interno del proprio campo sotto l'oggetto bindingsJSON. I campi omessi dal manifesto .NET.NET Aspire nel nodo bindings includono:

  • scheme: uno dei valori seguenti tcp, udp, httpo https.
  • protocol: uno dei valori seguenti tcp o udp
  • transport: uguale a scheme, ma usato per disambiguare tra http e http2.
  • containerPort: facoltativo, se omesso per impostazione predefinita è la porta 80.

Campo inputs

Alcune risorse generano un campo inputs. Questo campo viene usato per specificare i parametri di input per la risorsa. Il campo inputs è un oggetto JSON in cui ogni proprietà è un parametro di input utilizzato nella risoluzione della struttura segnaposto. Le risorse con un connectionString, ad esempio, possono usare il campo inputs per specificare un password per la stringa di connessione:

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

Il segnaposto della stringa di connessione fa riferimento al parametro di input password dal campo inputs:

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

Il frammento di codice JSON precedente mostra il campo inputs per una risorsa con un campo connectionString. Il parametro di input password è un tipo stringa e viene contrassegnato come segreto. Il campo default viene usato per specificare un valore predefinito per il parametro di input. In questo caso, il valore predefinito viene generato usando il campo generate, con stringa casuale di lunghezza minima.

Risorse predefinite

La tabella seguente è un elenco di tipi di risorse generati in modo esplicito da .NET Aspire ed estensioni sviluppate dal team .NET Aspire:

Tipi di risorse indipendenti dal cloud

Queste risorse sono disponibili nel 📦Aspire. Hosting pacchetto NuGet.

Utilizzo del modello di app Tipo di risorsa manifesto Collegamento intestazione
AddContainer container.v0 tipo di risorsa contenitore
PublishAsDockerFile dockerfile.v0 Dockerfile tipi di risorse
AddDatabase value.v0 MongoDB Server tipi di risorse
AddMongoDB container.v0 MongoDB tipi di risorse
AddDatabase value.v0 MySQL Server tipi di risorse
AddMySql container.v0 MySQL tipi di risorse
AddDatabase value.v0 Postgres tipi di risorse
AddPostgres container.v0 Postgres tipi di risorse
AddProject project.v0 tipo di risorsa progetto
AddRabbitMQ container.v0 RabbitMQ tipi di risorse
AddRedis container.v0 Redis tipo di risorsa
AddDatabase value.v0 SQL Server tipi di risorse
AddSqlServer container.v0 SQL Server tipi di risorse

Tipo di risorsa progetto

Codice di esempio:

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

Manifesto di esempio:

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

Tipo di risorsa contenitore

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

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

Dockerfile tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Mancia

La chiamata PublishAsDockerFile è necessaria per generare il tipo di risorsa Dockerfile nel manifesto e questo metodo di estensione è disponibile solo nel tipo di ExecutableResource.

Manifesto di esempio:

{
  "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 tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

{
  "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 tipi di risorse

RabbitMQ viene modellato come risorsa contenitore container.v0. L'esempio seguente mostra come vengono aggiunti al modello di app.

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRabbitMQ("rabbitmq1");

Il codice precedente produce il manifesto seguente:

{
  "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 tipo di risorsa

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddRedis("redis1");

Manifesto di esempio:

{
  "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 tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

{
  "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 tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

{
  "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 tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

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

Azuretipi di risorse specifici

Nella 📦Aspiresono disponibili le risorse seguenti. Ospitare.Azure pacchetto NuGet.

Utilizzo del modello di app Tipo di risorsa manifesto Collegamento intestazione
AddAzureAppConfiguration azure.bicep.v0 Azure tipi di risorse di Configurazione app
AddAzureKeyVault azure.bicep.v0 Azure Key Vault tipo di risorsa
AddAzureRedis azure.bicep.v0 Azure Redis tipi di risorse
AddAzureServiceBus azure.bicep.v0 Azure Service Bus tipo di risorsa
AddAzureSqlServer(...) azure.bicep.v0 Azure tipi di risorse SQL
AddAzureSqlServer(...).AddDatabase(...) value.v0 Azure tipi di risorse SQL
AddAzurePostgresFlexibleServer(...) azure.bicep.v0 Azure Postgres tipi di risorse
AddAzurePostgresFlexibleServer(...).AddDatabase(...) value.v0 Azure Postgres tipi di risorse
AddAzureStorage azure.storage.v0 Azure tipi di risorse di archiviazione
AddBlobs value.v0 Azure tipi di risorse di archiviazione
AddQueues value.v0 Azure tipi di risorse di archiviazione
AddTables value.v0 Azure tipi di risorse di archiviazione

Azure Key Vault tipo di risorsa

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureKeyVault("keyvault1");

Manifesto di esempio:

{
  "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 tipo di risorsa

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

{
  "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 tipi di risorse di archiviazione

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

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

Manifesto di esempio:

{
  "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 tipo di risorsa

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureRedis("azredis1");

Manifesto di esempio:

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

Azure tipo di risorsa Configurazione app

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddAzureAppConfiguration("appconfig1");

Manifesto di esempio:

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

Azure tipi di risorse SQL

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

{
  "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 tipi di risorse

Codice di esempio:

var builder = DistributedApplication.CreateBuilder(args);

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

Manifesto di esempio:

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

Tipi di risorse supportati nella Azure Developer CLI

Il Azure Developer CLI (azd) è uno strumento che può essere usato per distribuire progetti .NET Aspire in Azure Container Apps. Con il tipo di risorsa azure.bicep.v0, è possibile eseguire il mapping dei tipi di contenitore di risorse indipendenti dal cloud a Azurerisorse specifiche. Nella tabella seguente sono elencati i tipi di risorse supportati nel Azure Developer CLI:

Nome API indipendente dal cloud API Azure
Redis AddRedis AddAzureRedis
Postgres AddPostgres AddAzurePostgresFlexibleServer
SQL Server AddSqlServer AddAzureSqlServer

Quando le risorse sono configurate come risorse Azure, il tipo di risorsa azure.bicep.v0 viene generato nel manifesto. Per altre informazioni, vedere Distribuire un progetto di .NET Aspire per Azure Container Apps usando Azure Developer CLI (guida dettagliata).

Vedere anche