.NET 런타임

.NET 런타임은 애플리케이션 코드 및 종속 항목을 설치한 후 가변형 환경에서 해당 애플리케이션을 실행하는 소프트웨어 스택입니다.

.NET 버전 6 이상은 빌드팩을 사용하여 빌드되므로 app.yaml 파일에서 운영체제를 선택해야 합니다. 예를 들어 .NET 8을 사용하려면 Ubuntu 22를 운영체제로 지정해야 합니다.

지원되는 .NET 버전의 전체 목록과 해당 Ubuntu 버전은 런타임 지원 일정을 참조하세요.

.NET 버전 선택

새 런타임 버전

.NET 버전 6 이상의 경우 운영체제를 지정하려면 runtime_configoperating_system 설정을 app.yaml 파일에 포함해야 합니다.

새 버전을 사용하려면 다음을 수행해야 합니다.

  • 프로젝트 파일을 업데이트합니다.

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
    
      <ItemGroup>
        <None Update="app.yaml">
          <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        </None>
      </ItemGroup>
    
    </Project>
    

    자세한 내용은 ASP.NET Core 3.1에서 6.0으로 마이그레이션을 참조하세요.

  • gcloud CLI 버전 420.0.0 이상을 설치합니다. gcloud components update 명령어를 실행하여 CLI 도구를 업데이트할 수 있습니다. 설치된 버전을 보려면 gcloud version 명령어를 실행하면 됩니다.

  • app.yaml 파일에서 operating_system 설정을 지정합니다.

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    

선택사항으로 app.yaml 파일에 runtime_version 설정을 포함하여 런타임 버전을 지정할 수 있습니다. runtime_version 설정이 지정되지 않으면 기본적으로 App Engine은 사용 가능한 최신 LTS .NET 버전을 사용합니다. 예를 들어 Ubuntu 22에서 .NET8을 지정하면 app.yaml 파일은 다음과 같이 보입니다.

    runtime: aspnetcore
    env: flex

    runtime_config:
        runtime_version: "8"
        operating_system: "ubuntu22"

이전 런타임 버전

특정 .NET SDK 버전을 타겟팅하려면 프로젝트 파일을 업데이트합니다. 자세한 내용은 ASP.NET Core 3.1에서 6.0으로 마이그레이션을 참조하세요.

GKE 또는 다른 Docker 호스트를 사용하려면 애플리케이션 코드를 복사하고 종속 항목을 설치하는 Dockerfile을 만들어야 합니다. 자세한 내용은 커스텀 런타임을 참조하세요.

App Engine 앱 배포

.NET 앱을 배포하려면 다음 안내를 따르세요.

앱이 있는 루트 디렉터리에서 다음 명령어를 실행합니다.

v6 이상

    gcloud app deploy

v3.1 이하

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

HTTPS 및 전달 프록시

App Engine은 부하 분산기에서 HTTPS 연결을 종료하고 요청을 애플리케이션에 전달합니다. 애플리케이션은 X-Forwarded-Proto를 검사하여 원래 프로토콜이 HTTP였는지 HTTPS였는지 확인합니다.

일부 애플리케이션은 사용자 IP 주소도 확인해야 합니다. 사용자 IP 주소는 표준 X-Forwarded-For 헤더에서 제공됩니다.

런타임 확장

가변형 환경의 .NET 런타임을 사용하여 커스텀 런타임을 만들 수 있습니다. 커스텀 런타임은 Dockerfile을 통해 구성됩니다.

원하는 대로 Dockerfile.dockerignore를 맞춤설정할 수 있습니다. 마지막으로 app.yaml에서 runtime: aspnetcore 대신 runtime: custom을 지정해야 합니다. 자세한 내용은 .NET 런타임 맞춤설정을 참조하세요.

환경 변수

런타임 환경에서 설정되는 환경 변수는 다음과 같습니다.

환경 변수 설명
GAE_INSTANCE 현재 인스턴스의 이름입니다.
GAE_MEMORY_MB 애플리케이션 프로세스에서 사용할 수 있는 메모리 양입니다.
GAE_SERVICE 애플리케이션의 app.yaml 파일에 지정된 서비스 이름이거나 서비스 이름이 지정되지 않은 경우 default로 설정됩니다.
GAE_VERSION 현재 애플리케이션의 버전 라벨입니다.
GOOGLE_CLOUD_PROJECT 애플리케이션과 연결된 프로젝트 ID로, Google Cloud 콘솔에 표시됩니다.
PORT HTTP 요청을 수신할 포트

appsettings.json을 사용하여 추가 구성 변수를 설정할 수 있습니다.

메타데이터 서버

애플리케이션의 각 인스턴스는 Compute Engine 메타데이터 서버를 사용해 호스트 이름, 외부 IP 주소, 인스턴스 ID, 커스텀 메타데이터, 서비스 계정 정보 등의 인스턴스 관련 정보를 쿼리할 수 있습니다. App Engine에서는 인스턴스별로 커스텀 메타데이터를 설정할 수 없습니다. 하지만 개발자는 프로젝트 전체의 커스텀 메타데이터를 설정한 후 App Engine 및 Compute Engine 인스턴스에서 읽을 수 있습니다.

이 예시 함수는 메타데이터 서버를 사용해 인스턴스의 외부 IP 주소를 가져옵니다.

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Metadata-Flavor", new[] { "Google" });
response = await client.GetStringAsync(
    "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip");