배포 도구 작성기용 .NET.NET Aspire 매니페스트 형식
이 문서에서는 .NET.NET Aspire 매니페스트 형식에 대해 알아봅니다. 이 문서는 온-프레미스 또는 클라우드에서 특정 호스팅 플랫폼에 .NET.NET Aspire 프로젝트를 배포하는 도구를 만드는 데 도움이 되는 배포 도구 작성기를 위한 참조 가이드 역할을 합니다.
.NET .NET Aspire 애플리케이션 통합 간의 상호 종속성을 관리하여 로컬 개발 환경을 간소화합니다. 애플리케이션 배포를 간소화하기 위해 .NET Aspire 프로젝트는 JSON 형식 파일로 정의된 모든 리소스의 매니페스트를 생성할 수 있습니다.
매니페스트 생성
매니페스트를 생성하려면 유효한 .NET.NET Aspire 프로젝트가 필요합니다. 시작하려면 .NET.NET Aspire 템플릿을 사용하여 aspire-starter
.NET 프로젝트를 만듭니다.
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
매니페스트 생성은 특수 대상을 사용하여 dotnet build
실행하여 수행됩니다.
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
팁
--output-path
상대 경로를 지원합니다. 이전 명령은 ../aspire-manifest.json
사용하여 매니페스트 파일을 프로젝트 디렉터리의 루트에 배치합니다.
자세한 내용은 dotnet run
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
생성된 파일은 .NET.NET Aspire 매니페스트이며 도구에서 대상 클라우드 환경에 배포를 지원하는 데 사용됩니다.
메모
매니페스트를 시작 프로필의 일부로 생성할 수도 있습니다. 다음 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"
}
}
}
기본 매니페스트 형식
.NET Aspire 기본 시작 템플릿에서 매니페스트를 게시하면 다음과 같은 JSON 출력이 생성됩니다.
{
"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"
}
}
}
}
}
매니페스트 형식 JSONresources
지정된 각 리소스에 대한 속성을 포함하는 Program.cs라는 단일 개체로 구성됩니다(각 이름에 대한 name
인수는 JSON각 자식 리소스 개체의 속성으로 사용됨).
연결 문자열 및 바인딩 참조
이전 예제에는 두 개의 프로젝트 리소스와 하나의 Redis 캐시 리소스가 있습니다. 웹 프런트 엔드apiservice(프로젝트) 및 캐시(Redis) 리소스 모두에 따라 달라집니다.
이 종속성은 webfrontend 환경 변수에 다른 두 리소스를 참조하는 자리 표시자를 포함하기 때문에 알려져 있습니다.
"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}"
},
apiservice
리소스는 앱 호스트 webfrontend
파일의 호출 WithReference(apiservice)
사용하여 Program.cs 참조되고 redis
호출 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();
프로젝트 리소스 형식 간의 참조로 인해 서비스 검색 변수가 참조 프로젝트에 삽입됩니다. Redis 같은 잘 알려진 참조 형식에 대한 참조로 인해 연결 문자열이 삽입됩니다.
앱 모델의 리소스와 해당 리소스 간의 참조가 작동하는 방식에 대한 자세한 내용은 .NET.NET Aspire 오케스트레이션 개요참조하세요.
자리 표시자 문자열 구조체
자리 표시자 문자열은 .NET.NET Aspire 매니페스트의 구조를 참조합니다.
개체 틀 문자열의 마지막 세그먼트(이 경우url
)는 매니페스트를 처리하는 도구에 의해 생성됩니다. 자리 표시자 문자열에 사용할 수 있는 몇 가지 접미사가 있습니다.
-
connectionString
: Redis같은 잘 알려진 리소스 형식의 경우. 배포 도구는 대상 클라우드 환경에 가장 적합한 인프라의 리소스를 변환한 다음 사용 중인 애플리케이션에서 사용할 .NET.NET Aspire 호환되는 연결 문자열을 생성합니다.container.v0
리소스에서connectionString
필드가 있고 명시적으로 지정될 수 있습니다. 이는 컨테이너 리소스 종류가 WithReference 확장을 사용하여 참조되지만 컨테이너로 명시적으로 호스트되는 시나리오를 지원하기 위한 것입니다. -
url
: 올바른 형식의 URL이 필요한 서비스 대 서비스 참조의 경우 배포 도구는 매니페스트에 정의된 체계, 프로토콜 및 전송과 배포된 기본 컴퓨팅/네트워킹 토폴로지에 따라url
생성합니다. -
host
: URL의 호스트 세그먼트입니다. -
port
: URL의 포트 세그먼트입니다.
리소스 종류
각 리소스에는 type
필드가 있습니다. 배포 도구가 매니페스트를 읽을 때 매니페스트를 올바르게 처리할 수 있는지 여부를 확인하기 위해 형식을 읽어야 합니다.
.NET
.NET Aspire 미리 보기 기간 동안 모든 리소스 종류에는 변경될 수 있음을 나타내는 v0
접미사가 있습니다.
.NET
.NET Aspire 릴리스될 때 v1
접미사는 해당 리소스 종류에 대한 매니페스트의 구조를 안정적으로 간주해야 임을 나타내는 데 사용됩니다(후속 업데이트는 버전 번호를 그에 따라 증가).
일반 리소스 필드
type
필드는 모든 리소스 종류에서 공통적인 유일한 필드이지만 project.v0
, container.v0
및 executable.v0
리소스 종류도 env
및 bindings
필드를 공유합니다.
메모
executable.v0
리소스 종류는 배포 시나리오에서 유틸리티가 부족하여 매니페스트에서 완전히 구현되지 않습니다. 실행 파일을 컨테이너화하는 방법에 대한 자세한 내용은
바인딩은 bindings
필드에 지정되며 각 바인딩은 bindings
JSON 개체 아래의 자체 필드 내에 포함됩니다.
.NET 노드의 .NET Aspirebindings
매니페스트에서 생략된 필드는 다음과 같습니다.
-
scheme
:tcp
,udp
,http
또는https
값 중 하나입니다. -
protocol
:tcp
또는udp
값 중 하나입니다. -
transport
:scheme
동일하지만http
http2
간에 명확하게 구분하는 데 사용됩니다. -
containerPort
: 선택 사항입니다. 생략된 경우 기본값은 포트 80입니다.
inputs
필드
일부 리소스는 inputs
필드를 생성합니다. 이 필드는 리소스에 대한 입력 매개 변수를 지정하는 데 사용됩니다.
inputs
필드는 각 속성이 자리 표시자 구조 확인에 사용되는 입력 매개 변수인 JSON 개체입니다. 예를 들어 connectionString
있는 리소스는 inputs
필드를 사용하여 연결 문자열에 대한 password
지정할 수 있습니다.
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
연결 문자열 자리 표시자는 password
필드에서 inputs
입력 매개 변수를 참조합니다.
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
앞의 JSON 코드 조각은 inputs
필드가 있는 리소스에 대한 connectionString
필드를 보여줍니다.
password
입력 매개 변수는 문자열 형식이며 비밀로 표시됩니다.
default
필드는 입력 매개 변수의 기본값을 지정하는 데 사용됩니다. 이 경우 기본값은 최소 길이의 임의 문자열과 함께 generate
필드를 사용하여 생성됩니다.
기본 제공 리소스
다음 표는 .NET Aspire 팀에서 개발한 .NET Aspire 및 확장에서 명시적으로 생성되는 리소스 종류 목록입니다.
클라우드에 구애받지 않은 리소스 종류
이러한 리소스는 📦Aspire사용할 수 있습니다. NuGet 패키지를 호스팅합니다.
앱 모델 사용 | 매니페스트 리소스 종류 | 제목 링크 |
---|---|---|
AddContainer | container.v0 |
컨테이너 리소스 종류 |
PublishAsDockerFile |
dockerfile.v0 |
Dockerfile 리소스 종류 |
AddDatabase | value.v0 |
MongoDB Server 리소스 종류 |
AddMongoDB | container.v0 |
MongoDB 리소스 종류 |
AddDatabase | value.v0 |
MySQL Server 리소스 종류 |
AddMySql | container.v0 |
MySQL 리소스 종류 |
AddDatabase | value.v0 |
Postgres 리소스 종류 |
AddPostgres | container.v0 |
Postgres 리소스 종류 |
AddProject | project.v0 |
Project 리소스 종류 |
AddRabbitMQ | container.v0 |
RabbitMQ 리소스 종류 |
AddRedis | container.v0 |
Redis 리소스 종류 |
AddDatabase | value.v0 |
SQL Server 리소스 종류 |
AddSqlServer | container.v0 |
SQL Server 리소스 종류 |
프로젝트 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
매니페스트 예제:
"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"
}
}
}
컨테이너 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
매니페스트 예제:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
Dockerfile 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
팁
매니페스트에서 PublishAsDockerFile
리소스 형식을 생성하려면 Dockerfile 호출이 필요하며 이 확장 메서드는 ExecutableResource 형식에서만 사용할 수 있습니다.
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
매니페스트 예제:
{
"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 리소스 종류
RabbitMQ 컨테이너 리소스 container.v0
모델링됩니다. 다음 샘플에서는 앱 모델에 추가된 방법을 보여줍니다.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
이전 코드는 다음 매니페스트를 생성합니다.
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
매니페스트 예제:
{
"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특정 리소스 종류
다음 리소스는 📦Aspire사용할 수 있습니다. 호스팅. NuGet 패키지를Azure.
앱 모델 사용량 | 매니페스트 리소스 종류 | 제목 링크 |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
Azure App Configuration 리소스 종류 |
AddAzureKeyVault | azure.bicep.v0 |
Azure Key Vault 리소스 종류 |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis 리소스 종류 |
AddAzureServiceBus | azure.bicep.v0 |
Azure Service Bus 리소스 종류 |
AddAzureSqlServer(...) |
azure.bicep.v0 |
Azure SQL 리소스 종류 |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
Azure SQL 리소스 종류 |
AddAzurePostgresFlexibleServer(...) |
azure.bicep.v0 |
Azure Postgres 리소스 종류 |
AddAzurePostgresFlexibleServer(...).AddDatabase(...) |
value.v0 |
Azure Postgres 리소스 종류 |
AddAzureStorage | azure.storage.v0 |
Azure Storage 리소스 종류 |
AddBlobs | value.v0 |
Azure Storage 리소스 종류 |
AddQueues | value.v0 |
Azure Storage 리소스 종류 |
AddTables | value.v0 |
Azure Storage 리소스 종류 |
Azure Key Vault 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
매니페스트 예제:
{
"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 Storage 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
매니페스트 예제:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
Azure App Configuration 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
매니페스트 예제:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
SQL 리소스 종류 Azure
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
매니페스트 예제:
{
"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 리소스 종류
예제 코드:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
매니페스트 예제:
{
"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"
}
}
}
Azure Developer CLI 지원되는 리소스 종류
Azure Developer CLI(azd)는 .NET AspireAzure Container Apps 프로젝트를 배포하는 데 사용할 수 있는 도구입니다.
azure.bicep.v0
리소스 유형을 사용하면 클라우드에 구애받지 않은 리소스 컨테이너 유형을 Azure특정 리소스에 매핑할 수 있습니다. 다음 표에서는 Azure Developer CLI지원되는 리소스 유형을 나열합니다.
이름 | 클라우드에 구애받지 않은 API | Azure API |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
리소스가 Azure 리소스로 구성된 경우 azure.bicep.v0
리소스 종류가 매니페스트에 생성됩니다. 자세한 내용은 Azure Container Apps사용하여 Azure Developer CLI 프로젝트 배포를 참조하세요.
참고 항목
.NET Aspire