외부 매개 변수
환경은 애플리케이션이 실행되도록 컨텍스트를 제공합니다. 매개 변수는 앱을 실행할 때 외부 값을 요청하는 기능을 표현합니다. 매개 변수를 사용하여 로컬로 실행할 때 앱에 값을 제공하거나 배포할 때 값을 묻는 메시지를 표시할 수 있습니다. 비밀, 연결 문자열 및 환경마다 다를 수 있는 기타 구성 값을 비롯한 다양한 시나리오를 모델링하는 데 사용할 수 있습니다.
매개 변수 값
매개 변수 값은 앱 호스트 구성의 Parameters
섹션에서 읽고 로컬로 실행하는 동안 앱에 값을 제공하는 데 사용됩니다. 앱을 게시할 때 값이 구성되지 않은 경우 입력하라는 메시지가 표시됩니다.
다음 예제 앱 호스트 Program.cs 파일을 고려합니다.
var builder = DistributedApplication.CreateBuilder(args);
// Add a parameter named "value"
var value = builder.AddParameter("value");
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("EXAMPLE_VALUE", value);
앞의 코드는 앱 호스트에 value
매개 변수를 추가합니다. 그런 다음 매개 변수가 EXAMPLE_VALUE
환경 변수로 Projects.ApiService
프로젝트에 전달됩니다.
매개 변수 값 구성
작성기에서 매개 변수를 추가하는 것은 구성의 한 가지 측면일 뿐입니다. 매개 변수에 대한 값도 제공해야 합니다. 이 값은 앱 호스트 구성 파일에서 제공되거나, 사용자 암호로 설정되거나, 다른 표준 구성설정할 수 있습니다. 앱을 게시할 때 매개 변수 값을 찾을 수 없다면, 입력하라는 메시지가 표시됩니다.
다음과 같은 앱 호스트 구성 파일 appsettings.json를 참조하십시오.
{
"Parameters": {
"value": "local-value"
}
}
위의 JSON 앱 호스트 구성의 Parameters
섹션에서 매개 변수를 구성합니다. 즉, 해당 앱 호스트는 매개 변수를 구성대로 찾을 수 있습니다. 예를 들어, IDistributedApplicationBuilder.Configuration에 다가가서 Parameters:value
키를 사용하여 값에 액세스할 수 있습니다.
var builder = DistributedApplication.CreateBuilder(args);
var key = $"Parameters:value";
var value = builder.Configuration[key]; // value = "local-value"
중요하다
그러나 앱 호스트에서 이 구성 값에 직접 액세스할 필요는 없습니다. 대신 ParameterResource 매개 변수 값을 종속 리소스에 전달하는 데 사용됩니다. 환경 변수로 가장 자주 발생합니다.
매니페스트의 매개 변수 표현
.NET
.NET Aspire은 배포 매니페스트을 사용하여 애플리케이션의 리소스 및 해당 관계를 나타냅니다. 매개 변수는 매니페스트에 parameter.v0
이라는 새 기본 형식으로 표시됩니다.
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string"
}
}
}
}
}
비밀 값
매개 변수를 사용하여 비밀을 모델링할 수 있습니다. 매개 변수가 비밀로 표시되면 해당 값을 비밀로 처리해야 한다는 매니페스트의 힌트 역할을 합니다. 앱을 게시하면 값에 대한 메시지가 표시되고 안전한 위치에 저장됩니다. 앱을 로컬로 실행하면 앱 호스트 구성의 Parameters
섹션에서 값을 읽습니다.
다음 예제 앱 호스트 Program.cs 파일을 고려합니다.
var builder = DistributedApplication.CreateBuilder(args);
// Add a secret parameter named "secret"
var secret = builder.AddParameter("secret", secret: true);
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("SECRET", secret);
builder.Build().Run();
이제 다음 앱 호스트 구성 파일 appsettings.json을 고려해 보세요.
{
"Parameters": {
"secret": "local-secret"
}
}
매니페스트 표현은 다음과 같습니다.
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}
연결 문자열 값
매개 변수를 사용하여 연결 문자열을 모델링할 수 있습니다. 앱을 게시하면 값에 대한 메시지가 표시되고 안전한 위치에 저장됩니다. 앱을 로컬로 실행하면 앱 호스트 구성의 ConnectionStrings
섹션에서 값을 읽습니다.
메모
연결 문자열은 데이터베이스 연결, 메시지 브로커, 엔드포인트 URI 및 기타 서비스를 비롯한 광범위한 연결 정보를 나타내는 데 사용됩니다. .NET .NET Aspire 명명법에서 "연결 문자열"이라는 용어는 모든 종류의 연결 정보를 나타내는 데 사용됩니다.
다음 예제 앱 호스트 Program.cs 파일을 고려합니다.
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddConnectionString("redis");
builder.AddProject<Projects.WebApplication>("api")
.WithReference(redis);
builder.Build().Run();
이제 다음의 앱 호스트 구성 파일 appsettings.json를 고려하십시오.
{
"ConnectionStrings": {
"redis": "local-connection-string"
}
}
배포 매니페스트의 연결 문자열 및 해당 표현과 관련된 자세한 내용은 연결 문자열 및 바인딩 참조참조하세요.
매개 변수 예제
매개 변수를 표현하려면 다음 예제 코드를 고려합니다.
var builder = DistributedApplication.CreateBuilder(args);
var db = builder.AddSqlServer("sql")
.PublishAsConnectionString()
.AddDatabase("db");
var insertionRows = builder.AddParameter("insertionRows");
builder.AddProject<Projects.Parameters_ApiService>("api")
.WithEnvironment("InsertionRows", insertionRows)
.WithReference(db);
builder.Build().Run();
다음 단계를 수행합니다.
-
SQL Server 리소스
sql
을 추가하고 연결 문자열로 게시합니다. -
db
데이터베이스를 추가합니다. -
insertionRows
매개 변수를 추가합니다. -
api
프로젝트를 추가하고Projects.Parameters_ApiService
프로젝트 리소스 형식 매개 변수와 연결합니다. -
insertionRows
매개 변수를api
프로젝트에 전달합니다. -
db
데이터베이스를 참조합니다.
insertionRows
매개 변수의 값은 앱 호스트 구성 파일 appsettings.jsonParameters
섹션에서 읽습니다.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
},
"Parameters": {
"insertionRows": "1"
}
}
Parameters_ApiService
프로젝트는 insertionRows
매개 변수를 사용합니다.
Program.cs 예제 파일을 고려합니다.
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
int insertionRows = builder.Configuration.GetValue<int>("InsertionRows", 1);
builder.AddServiceDefaults();
builder.AddSqlServerDbContext<MyDbContext>("db");
var app = builder.Build();
app.MapGet("/", async (MyDbContext context) =>
{
// You wouldn't normally do this on every call,
// but doing it here just to make this simple.
context.Database.EnsureCreated();
for (var i = 0; i < insertionRows; i++)
{
var entry = new Entry();
await context.Entries.AddAsync(entry);
}
await context.SaveChangesAsync();
var entries = await context.Entries.ToListAsync();
return new
{
totalEntries = entries.Count,
entries
};
});
app.Run();
참조
.NET Aspire