다음을 통해 공유


외부 매개 변수

환경은 애플리케이션이 실행되도록 컨텍스트를 제공합니다. 매개 변수는 앱을 실행할 때 외부 값을 요청하는 기능을 표현합니다. 매개 변수를 사용하여 로컬로 실행할 때 앱에 값을 제공하거나 배포할 때 값을 묻는 메시지를 표시할 수 있습니다. 비밀, 연결 문자열 및 환경마다 다를 수 있는 기타 구성 값을 비롯한 다양한 시나리오를 모델링하는 데 사용할 수 있습니다.

매개 변수 값

매개 변수 값은 앱 호스트 구성의 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();

참조