다음을 통해 공유


배포 도구 작성기용 .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 매니페스트의 구조를 참조합니다.

매니페스트 JSON 구조체가 자리 표시자 문자열에 매핑되는 방법을 보여 주는 다이어그램입니다.

개체 틀 문자열의 마지막 세그먼트(이 경우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.v0executable.v0 리소스 종류도 envbindings 필드를 공유합니다.

메모

executable.v0 리소스 종류는 배포 시나리오에서 유틸리티가 부족하여 매니페스트에서 완전히 구현되지 않습니다. 실행 파일을 컨테이너화하는 방법에 대한 자세한 내용은 리소스 종류를 참조하세요.

필드 형식은 값에자리 표시자 문자열을 포함할 수 있는 기본 키/값 매핑입니다.

바인딩은 bindings 필드에 지정되며 각 바인딩은 bindingsJSON 개체 아래의 자체 필드 내에 포함됩니다. .NET 노드의 .NET Aspirebindings 매니페스트에서 생략된 필드는 다음과 같습니다.

  • scheme: tcp, udp, http또는 https값 중 하나입니다.
  • protocol: tcp 또는 udp 값 중 하나입니다.
  • transport: scheme동일하지만 httphttp2간에 명확하게 구분하는 데 사용됩니다.
  • 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 프로젝트 배포를 참조하세요.

참고 항목