Azure App Service에 ASP.NET Core 앱 배포

Azure App Service는 ASP.NET Core를 비롯한 웹앱을 호스팅하기 위한 Microsoft 클라우드 컴퓨팅 플랫폼 서비스입니다.

신뢰할 수 있는 웹앱 패턴

신뢰할 수 있는 웹앱 패턴 for.NETYouTube 비디오문서를 참조하여 처음부터 또는 기존 앱을 리팩터링하든 관계없이 최신의 신뢰할 수 있고 성능이 뛰어나고 테스트 가능하며 비용 효율적이며 확장 가능한 ASP.NET Core 앱을 만드는 방법에 대한 지침을 참조하세요.

유용한 리소스

App Service 설명서에서는 Azure 앱 설명서, 자습서, 샘플, 방법 가이드 및 기타 리소스를 제공합니다. ASP.NET Core 앱 호스트와 관련하여 두 가지 주목할 만한 자습서는 다음과 같습니다.

Azure에서 ASP.NET Core 웹앱 만들기
Visual Studio를 사용하여 ASP.NET Core 웹앱을 만들고 Windows의 Azure App Service에 배포합니다.

App Service on Linux에서 ASP.NET Core 앱 만들기
명령줄을 사용하여 ASP.NET Core 웹앱을 만들고 Linux의 Azure App Service에 배포합니다.

Azure 앱 서비스에서 사용할 수 있는 ASP.NET Core 버전은 ASP.NET Core on App Service Dashboard를 참조하세요.

App Service 공지 리포지토리를 구독하고 문제를 모니터링합니다. App Service 팀은 App Service에 도착하는 공지 및 시나리오를 정기적으로 게시합니다.

다음 문서는 ASP.NET Core 설명서에 제공됩니다.

Visual Studio를 사용하여 Azure에 ASP.NET Core 앱 게시
Visual Studio를 사용하여 Azure App Service에 ASP.NET Core 앱을 게시하는 방법을 알아봅니다.

첫 번째 파이프라인 만들기
ASP.NET Core 앱에 대한 CI 빌드를 설정하고 Azure App Service에 대한 연속 배포 릴리스를 만듭니다.

Azure Web App 샌드박스
Azure 앱 플랫폼에서 적용하는 Azure App Service 런타임 실행 제한 사항을 알아봅니다.

핵심 프로젝트 ASP.NET 문제 해결 및 디버그
ASP.NET Core 프로젝트를 사용하여 경고 및 오류를 이해하고 문제를 해결합니다.

애플리케이션 구성

플랫폼

A 시리즈 컴퓨팅(기본) 또는 그 이상의 호스트 계층에서 호스트되는 앱의 경우 Azure Portal의 앱 설정에서 App Services 앱의 플랫폼 아키텍처(x86/x64)가 설정됩니다. 앱의 게시 설정(예: Visual Studio 게시 프로필(.pubxml))이 Azure Portal의 앱 서비스 구성 설정과 일치하는지 확인합니다.

64비트(x64) 및 32비트(x86) 앱은 Azure App Service에 있습니다. App Service에서 사용 가능한 .NET Core SDK는 32비트이지만 Kudu 콘솔 또는 Visual Studio의 게시 프로세스를 사용하여 로컬로 빌드된 64비트 앱을 배포할 수 있습니다. 자세한 내용은 앱 게시 및 배포 섹션을 참조하세요.

원시 종속 항목을 지원하는 앱의 경우 32비트(x86) 앱의 런타임이 Azure App Service에 있습니다. App Service에서 사용 가능한 .NET Core SDK는 32비트입니다.

.NET Core 런타임 및 .NET Core SDK에 대한 정보와 같은 .NET Core 프레임워크 구성 요소 및 배포 방법에 대한 자세한 내용은 .NET Core 정보: 컴퍼지션을 참조하세요.

패키지

Azure App Service에 배포된 앱에 대한 자동 로깅 기능을 제공하려면 다음 NuGet 패키지를 포함합니다.

위의 패키지는 앱의 프로젝트 파일에서 명시적으로 참조되어야 합니다.

Azure Portal을 사용하여 앱 구성 재정의

Azure Portal의 앱 설정을 사용하면 앱의 환경 변수를 설정할 수 있습니다. 환경 변수는 환경 변수 구성 공급자가 사용할 수 있습니다.

Azure Portal에서 앱 설정을 만들거나 수정하고저장 단추를 선택하면 Azure 앱이 다시 시작됩니다. 서비스를 다시 시작한 후에 환경 변수를 앱에서 사용할 수 있습니다.

앱이 일반 호스트를 사용하는 경우 호스트를 빌드하기 위해 CreateDefaultBuilder가 호출될 때 환경 변수가 앱의 구성에 로드됩니다. 자세한 내용은 ASP.NET Core의 .NET 제네릭 호스트환경 변수 구성 공급자를 참조하세요.

Azure Portal의 앱 설정을 사용하면 앱의 환경 변수를 설정할 수 있습니다. 환경 변수는 환경 변수 구성 공급자가 사용할 수 있습니다.

Azure Portal에서 앱 설정을 만들거나 수정하고저장 단추를 선택하면 Azure 앱이 다시 시작됩니다. 서비스를 다시 시작한 후에 환경 변수를 앱에서 사용할 수 있습니다.

앱이 웹 호스트를 사용하는 경우 호스트를 빌드하기 위해 CreateDefaultBuilder가 호출될 때 환경 변수가 앱의 구성에 로드됩니다. 자세한 내용은 ASP.NET Core 웹 호스트환경 변수 구성 공급자를 참조하세요.

프록시 서버 및 부하 분산 장치 시나리오

Out of Process를 호스트할 때 전달된 헤더 미들웨어를 구성하는 IIS 통합 미들웨어 및 ASP.NET Core 모듈은 체계(HTTP/HTTPS) 및 요청이 시작된 원격 IP 주소를 전달하도록 구성됩니다. 추가 프록시 서버 및 부하 분산 장치 외에도 호스팅되는 앱에 추가 구성이 필요할 수 있습니다. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.

모니터링 및 로깅

App Service에 배포된 ASP.NET Core 앱은 자동으로 App Service 확장인 ASP.NET Core 로깅 통합을 받습니다. 확장을 사용하면 Azure App Service에서 ASP.NET Core 앱에서 로깅 통합이 가능합니다.

App Service에 배포된 ASP.NET Core 앱은 자동으로 App Service 확장인 ASP.NET Core 로깅 확장을 받습니다. 확장을 사용하면 Azure App Service에서 ASP.NET Core 앱에서 로깅 통합이 가능합니다.

모니터링, 로깅 및 문제 해결에 대한 자세한 내용은 다음 문서를 참조하세요.

Azure App Service에서 앱 모니터링
앱 및 App Service 계획의 할당량 및 메트릭을 검토하는 방법을 알아봅니다.

Azure App Service에서 앱에 대한 진단 로깅 사용
HTTP 상태 코드, 실패한 요청 및 웹 서버 활동에 대한 진단 로깅을 활성화하고 액세스하는 방법을 알아봅니다.

ASP.NET Core에서 오류 처리
ASP.NET Core 앱에서 오류를 처리하기 위한 일반적인 접근법을 이해합니다.

Azure App Service 및 IIS에서 ASP.NET Core 문제 해결
ASP.NET Core 앱을 사용하는 Azure App Service 배포에 대한 문제 진단 방법을 알아봅니다.

ASP.NET Core를 사용하여 Azure App Service 및 IIS에 대한 일반적인 오류 문제 해결
Azure App Service/IIS에서 호스트하는 앱의 일반적인 배포 구성 오류와 문제 해결에 대한 조언을 참조하세요.

데이터 보호 키 링 및 배포 슬롯

데이터 보호 키%HOME%\ASP.NET\DataProtection-Keys 폴더에 저장됩니다. 이 폴더는 네트워크 스토리지에서 지원하고, 앱을 호스트하는 모든 머신에서 동기화됩니다. 저장된 키는 보호되지 않습니다. 이 폴더는 단일 배포 슬롯에 앱의 모든 인스턴스에 대한 키 링을 제공합니다. 준비 및 프로덕션과 같은 별도의 배포 슬롯은 키 링을 공유하지 않습니다.

배포 슬롯을 바꿀 경우 데이터 보호를 사용하는 모든 시스템은 이전 슬롯 내에 있는 키 링을 사용하여 저장된 데이터의 암호를 해독할 수 없습니다. ASP.NET Cookie 미들웨어는 데이터 보호를 사용하여 cookie를 보호합니다. 이로 인해 표준 ASP.NET Cookie 미들웨어를 사용하는 앱에서 사용자가 로그아웃됩니다. 슬롯에 관계없는 키 링 솔루션의 경우 다음과 같은 외부 키 링 공급자를 사용하세요.

  • Azure Blob Storage
  • Azure Key Vault
  • SQL 저장소
  • Redis cache

자세한 내용은 ASP.NET Core의 키 스토리지 공급자를 참조하세요.

.NET Core 미리 보기를 사용하는 ASP.NET Core 앱 배포

.NET Core의 미리 보기 릴리스를 사용하는 앱을 배포하려면 다음 리소스를 참조하세요. 이러한 접근 방식은 런타임을 사용할 수 있지만, SDK가 Azure App Service에 설치되지 않은 경우에도 사용됩니다.

Azure 앱 서비스에서 사용할 수 있는 ASP.NET Core 버전은 ASP.NET Core on App Service Dashboard를 참조하세요.

자체 포함 배포를 위한 .NET SDK 버전을 선택하는 방법에 대한 자세한 내용은 사용할 .NET Core 버전 선택을 참조하세요.

Azure Pipelines를 사용하여 .NET Core SDK 버전 지정

Azure App Service CI/CD 시나리오를 사용하여 Azure DevOps와 함께 연속 통합 빌드를 설정합니다. Azure DevOps 빌드를 만든 후에 원하는 경우 특정 SDK 버전을 사용하도록 빌드를 구성합니다.

.NET Core SDK 버전 지정

App Service 배포 센터를 사용하여 Azure DevOps 빌드를 만들 때 기본 빌드 파이프라인에 Restore, Build, TestPublish에 대한 단계가 포함됩니다. SDK 버전을 지정하려면 에이전트 작업 목록에서 추가(+) 단추를 선택하여 새 단계를 추가합니다. 검색 창에서 .NET Core SDK를 검색합니다.

Add the .NET Core SDK step

다음 단계에서 지정된 .NET Core SDK 버전이 사용되도록 이 단계를 빌드의 첫 번째 위치로 이동합니다. .NET Core SDK의 버전을 지정합니다. 이 예제에서 SDK는 3.0.100로 설정됩니다.

Completed SDK step

SCD(자체 포함 게시)를 게시하려면 Publish 단계에서 SCD를 구성하고 RID(런타임 식별자)를 제공합니다.

Self-contained publish

자체 포함 미리 보기 앱 배포

미리 보기 런타임을 대상으로 하는 SCD(자체 포함 배포)는 배포 시 미리 보기 런타임을 전달합니다.

자체 포함된 앱을 배포하는 경우:

자체 포함된 앱 배포 섹션의 지침을 따릅니다.

Web Apps for Containers에서 Docker 사용

Docker Hub에는 https://hub.docker.com/_/microsoft-dotnet 최신 미리 보기 Docker 이미지가 포함되어 있습니다. 이미지는 기본 이미지로 사용할 수 있습니다. 이미지를 사용하고 일반적으로 Web App for Containers에 배포합니다.

미리 보기 사이트 확장 설치

미리 보기 사이트 확장을 사용하는 데 문제가 발생하는 경우 dotnet/AspNetCore 문제를 엽니다.

  1. Azure Portal에서 App Service로 이동합니다.
  2. 웹앱을 선택합니다.
  3. 검색 상자에 "ex"를 입력하여 "확장"으로 필터링하거나 관리 도구 목록을 아래로 스크롤합니다.
  4. 확장을 섡택합니다.
  5. 추가를 선택합니다.
  6. 목록에서 ASP.NET Core {X.Y}({x64|x86}) 런타임 확장을 선택합니다. 여기서 {X.Y}는 ASP.NET Core 미리 보기 버전이며 {x64|x86}은 플랫폼을 지정합니다.
  7. 확인을 선택하여 적합한 조건을 적용합니다.
  8. 확장을 설치하려면 확인을 선택합니다.

작업이 완료되면 최신.NET Core 미리 보기가 설치됩니다. 설치를 확인합니다.

  1. 고급 도구를 선택합니다.

  2. 고급 도구에서 Go를 선택합니다.

  3. 디버그 콘솔>PowerShell 메뉴 항목을 선택합니다.

  4. PowerShell 프롬프트에서 다음 명령을 실행합니다. 명령에서 {X.Y}를 ASP.NET Core 런타임 버전으로 대체하고, {PLATFORM}을 플랫폼으로 대체합니다.

    Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.{PLATFORM}\
    

    x64 미리 보기 런타임이 설치된 경우 명령이 True를 반환합니다.

참고 항목

A 시리즈 컴퓨팅(기본) 또는 그 이상의 호스트 계층에서 호스트되는 앱의 경우 Azure Portal의 앱 설정에서 App Services 앱의 플랫폼 아키텍처(x86/x64)가 설정됩니다. 앱의 게시 설정(예: Visual Studio 게시 프로필(.pubxml))이 Azure Portal의 앱 서비스 구성 설정과 일치하는지 확인합니다.

앱이 in-process 모드에서 실행되고 플랫폼 아키텍처가 64비트(x64)에 대해 구성되는 경우 ASP.NET Core 모듈은 64비트 미리 보기 런타임을 사용합니다(있는 경우). Azure Portal을 사용하여 ASP.NET Core {X.Y}(x64) 런타임 확장을 설치합니다.

x64 미리 보기 런타임을 설치한 후에 Azure Kudu PowerShell 명령 창에서 다음 명령을 실행하여 설치를 확인합니다. 다음 명령에서 {X.Y}에 대한 ASP.NET Core 런타임 버전을 대체합니다.

Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64\

x64 미리 보기 런타임이 설치된 경우 명령이 True를 반환합니다.

참고 항목

ASP.NET Core 확장을 사용하면 Azure 로깅을 사용하는 등 Azure App Services에서 ASP.NET Core에 대한 추가 기능을 사용할 수 있습니다. Visual Studio에서 배포할 경우 확장은 자동으로 설치됩니다. 확장이 설치되지 않은 경우 앱에서 설치합니다.

ARM 템플릿에서 미리 보기 사이트 확장 사용

ARM 템플릿을 사용하여 앱을 만들고 배포하는 경우 Microsoft.Web/sites/siteextensions 리소스 형식을 사용하여 웹앱에 사이트 확장을 추가할 수 있습니다. 다음 예제에서는 ASP.NET Core 5.0(x64) 런타임 사이트 확장(AspNetCoreRuntime.5.0.x64)이 앱에 추가됩니다.

{
    ...
    "parameters": {
        "site_name": {
            "defaultValue": "{SITE NAME}",
            "type": "String"
        },
        ...
    },       
    ...
    "resources": [
        ...
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2018-11-01",
            "name": "[concat(parameters('site_name'), '/AspNetCoreRuntime.5.0.x64')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ]
        }
    ]
}
    

자리 표시자 {SITE NAME}에 Azure App Service에서의 앱 이름을 사용합니다(예: contoso).

앱 게시 및 배포

64 비트 배포의 경우:

  • 64비트 .NET Core SDK를 사용하여 64비트 앱을 빌드합니다.
  • App Service의 구성>일반 설정에서 플랫폼64비트로 설정합니다. 플랫폼 비트 수를 선택할 수 있도록 하려면 앱에서 기본 이상의 서비스 플랜을 사용해야 합니다.

프레임워크 종속 앱 배포

  1. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다. 또는 Visual Studio 도구 모음에서 빌드>{Application Name} 게시를 선택합니다.
  2. 게시 대화 상자에서 Azure>다음을 선택합니다.
  3. Azure 서비스를 선택합니다.
  4. 고급을 선택합니다. 게시 대화 상자가 열립니다.
  5. 리소스 그룹 및 호스팅 계획을 선택하거나 새로 만듭니다.
  6. 마침을 선택합니다.
  7. 게시 페이지에서 다음을 수행 합니다.
    • 구성의 경우 펜 아이콘 구성 편집을 선택합니다.
      • 릴리스 구성이 선택되었는지 확인합니다.
      • 배포 모드 드롭다운 목록에서 프레임워크 종속을 선택합니다.
      • 대상 런타임 드롭다운 목록에서 원하는 런타임을 선택합니다. 기본값은 win-x86입니다.
    • 배포 시 추가 파일을 제거하려면 파일 게시 옵션을 열고 대상에서 추가 파일을 제거하는 확인란을 선택합니다.
    • 저장을 선택합니다.
    • 게시를 선택합니다.

자체 포함된 앱 배포

SCD(자체 포함 배포)에는 Visual Studio 또는 .NET Core CLI를 사용합니다.

  1. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다. 또는 Visual Studio 도구 모음에서 빌드>{Application Name} 게시를 선택합니다.
  2. 게시 대화 상자에서 Azure>다음을 선택합니다.
  3. Azure 서비스를 선택합니다.
  4. 고급을 선택합니다. 게시 대화 상자가 열립니다.
  5. 리소스 그룹 및 호스팅 계획을 선택하거나 새로 만듭니다.
  6. 마침을 선택합니다.
  7. 게시 페이지에서 다음을 수행 합니다.
    • 구성의 경우 펜 아이콘 구성 편집을 선택합니다.
      • 릴리스 구성이 선택되었는지 확인합니다.
      • 배포 모드 드롭다운 목록에서 자체 포함을 선택합니다.
      • 대상 런타임 드롭다운 목록에서 원하는 런타임을 선택합니다. 기본값은 win-x86입니다.
    • 배포 시 추가 파일을 제거하려면 파일 게시 옵션을 열고 대상에서 추가 파일을 제거하는 확인란을 선택합니다.
    • 저장을 선택합니다.
    • 게시를 선택합니다.

프로토콜 설정(HTTPS)

보안 프로토콜 바인딩을 사용하면 HTTPS를 통한 요청에 응답할 때 사용할 인증서를 지정할 수 있습니다. 바인딩을 위해서는 특정 호스트 이름에 대해 발행된 유효한 개인 인증서(.pfx)가 필요합니다. 자세한 내용은 자습서: 기존 사용자 지정 SSL 인증서를 Azure 앱 서비스에 바인딩을 참조하세요.

web.config 변환

게시할 때 web.config를 변환해야 하는 경우(예: 구성, 프로필 또는 환경을 기반으로 환경 변수 설정) web.config 변환을 참조하세요.

추가 리소스

Windows Server의 Azure App Service는 IIS(인터넷 정보 서비스)를 사용합니다. Kestrel 프런트 엔드의 YARP 는 부하 분산 장치를 제공합니다. 다음 항목은 기본 IIS 기술과 관련이 있습니다.