Share via


Azure Container Apps에서 ASP.NET Core 앱 배포 및 스케일링

일시적으로 높은 수요가 발생하는 Azure에 배포된 앱은 수요를 충족하기 위해 스케일링 성능을 활용합니다. 스케일링 가능한 앱은 워크로드가 가장 높은 동안 용량을 확보하도록 스케일 아웃한 다음, 최대 워크로드가 떨어질 때 자동으로 스케일 다운할 수 있어 비용을 절감할 수 있습니다. 수평적 크기 조정(스케일 아웃)이란 VM 또는 데이터베이스 복제본 같은 리소스의 새 인스턴스를 추가하는 것입니다. 이 문서에서는 다음 작업을 완료하여 수평으로 스케일링 가능한 ASP.NET Core 앱을 Azure Container Apps에 배포하는 방법을 보여 줍니다.

  1. 샘플 프로젝트 설정
  2. Azure Container Apps에 앱 배포
  3. 앱 스케일링 및 문제 해결
  4. Azure 서비스 만들기
  5. Azure 서비스 연결
  6. 앱 구성 및 다시 배포

이 문서에서는 Razor Pages를 사용하지만 대부분은 다른 ASP.NET Core 앱에 적용됩니다.

경우에 따라 기본 ASP.NET Core 앱은 특별한 고려 사항 없이 스케일링할 수 있습니다. 그러나 특정 프레임워크 기능 또는 아키텍처 패턴을 활용하는 앱에는 다음을 비롯한 추가 구성이 필요합니다.

  • 보안 양식 제출: Razor Pages, MVC 및 Web API 앱은 일반적으로 양식 제출을 사용합니다. 기본적으로 이 앱은 교차 사이트 위조 토큰 및 내부 데이터 보호 서비스를 사용하여 요청을 보호합니다. 클라우드에 배포되는 경우 이 앱은 안전하고 중앙 집중화된 위치에서 데이터 보호 서비스 문제를 관리하도록 구성되어야 합니다.

  • SignalR 회로: Blazor Server 앱은 안전하게 스케일링하기 위해 중앙 집중화된 Azure SignalR 서비스를 사용해야 합니다. 이 서비스는 앞에서 언급한 데이터 보호 서비스도 활용합니다.

  • 중앙 집중식 캐싱 또는 상태 관리 서비스: 스케일링 가능한 앱은 Azure Cache for Redis를 사용하여 분산 캐싱을 제공할 수 있습니다. Azure Storage는 여러 앱 인스턴스에서 상태를 관리하는 앱을 작성하는 데 도움이 될 수 있는 Microsoft Orleans 같은 프레임워크에 대한 상태를 저장하는 데 필요할 수 있습니다.

이 문서의 단계에서는 스케일링 가능한 앱을 Azure Container Apps에 배포하여 앞의 문제를 올바르게 해결하는 방법을 보여 줍니다. 이 자습서의 대부분 개념은 Azure App Service 인스턴스를 스케일링하는 조정하는 경우에도 적용됩니다.

샘플 프로젝트 설정

GitHub Explorer 샘플 앱을 사용하여 이 자습서를 따라 합니다. GitHub에서 앱을 복제하려면 다음 명령을 실행합니다.

git clone "https://github.com/dotnet/AspNetCore.Docs.Samples.git"

/tutorials/scalable-razor-apps/start 폴더로 이동하고 ScalableRazor.csproj를 엽니다.

샘플 앱은 검색 양식을 사용하여 이름으로 GitHub 리포지토리를 찾습니다. 양식은 기본 제공 ASP.NET Core 데이터 보호 서비스를 사용하여 위조 방지 문제를 처리합니다. 기본적으로 앱이 Container Apps에서 수평으로 스케일링될 때 데이터 보호 서비스가 예외를 throw합니다.

앱 테스트

  1. Visual Studio에서 앱을 시작합니다. 프로젝트에는 Docker 파일이 포함됩니다. 즉, 실행 단추 옆에 있는 화살표를 선택하여 Docker 데스크톱 설정 또는 표준 ASP.NET Core 로컬 웹 서버를 사용하여 앱을 시작할 수 있습니다.

검색 양식을 사용하여 이름으로 GitHub 리포지토리를 찾습니다.

A screenshot showing the GitHub Explorer app.

Azure Container Apps에 앱 배포

Visual Studio는 Azure Container Apps에 앱을 배포하는 데 사용됩니다. 컨테이너 앱은 컨테이너화된 앱 및 마이크로 서비스를 호스트하는 작업을 간소화하도록 디자인된 관리형 서비스를 제공합니다.

참고 항목

앱용으로 만들어진 대부분의 리소스에는 위치가 필요합니다. 이 앱의 경우 위치는 중요하지 않습니다. 실제 앱은 클라이언트와 가장 가까운 위치를 선택해야 합니다. 자신과 가까운 위치를 선택하려고 할 수 있습니다.

  1. Visual Studio 솔루션 탐색기에서 최상위 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다.

  2. 게시 대화 상자에서 Azure를 배포 대상으로 선택하고 다음을 선택합니다.

  3. 특정 대상에 대해 Azure Container Apps(Linux)를 선택하고 다음을 선택합니다.

  4. 배포할 새 컨테이너 앱을 만듭니다. 녹색 + 아이콘을 선택하여 새 대화 상자를 열고 다음 값을 입력합니다.

    A screenshot showing Visual Studio deployment.

    • 컨테이너 앱 이름: 기본값을 그대로 두거나 이름을 입력합니다.
    • 구독 이름: 배포할 구독을 선택합니다.
    • 리소스 그룹: 새로 만들기를 선택하고 msdocs-scalable-razor라는 새 리소스 그룹을 만듭니다.
    • 컨테이너 앱 환경: 새로 만들기를 선택하여 컨테이너 앱 환경 대화 상자를 열고 다음 값을 입력합니다.
      • 환경 이름: 기본값을 유지합니다.
      • 위치: 자신과 가까운 위치를 선택합니다.
      • Azure Log Analytics 작업 영역: 새로 만들기를 선택하여 Log Analytics 작업 영역 대화 상자를 엽니다.
        • 이름: 기본값을 그대로 둡니다.
        • 위치: 자신과 가까운 위치를 선택한 다음, 확인을 선택하여 대화 상자를 닫습니다.
      • 확인을 선택하여 컨테이너 앱 환경 대화 상자를 닫습니다.
    • 만들기를 선택하여 원래 컨테이너 앱 대화 상자를 닫습니다. Visual Studio는 Azure에서 컨테이너 앱 리소스를 만듭니다.
  5. 리소스가 만들어지면 컨테이너 앱 목록에서 리소스가 선택되어 있는지 확인하고 다음을 선택합니다.

  6. 앱에 대한 게시된 이미지 아티팩트를 저장하려면 Azure Container Registry를 만들어야 합니다. 컨테이너 레지스트리 화면에서 녹색 + 아이콘을 선택합니다.

    A screenshot showing how to create a new container registry.

  7. 기본값을 그대로 두고 만들기를 선택합니다.

    A screenshot showing the values for a new container registry.

  8. 컨테이너 레지스트리가 만들어진 후 해당 레지스트리가 선택되어 있는지 확인한 다음, {b>완료

    Visual Studio에서 관리 사용자가 게시된 Docker 컨테이너에 액세스할 수 있도록 설정할지 묻는 메시지가 표시되면 를 선택합니다.

  9. 게시 프로필 요약의 오른쪽 위에서 게시를 선택하여 Azure에 앱을 배포합니다.

배포가 완료되면 Visual Studio에서 브라우저를 시작하여 호스트된 앱을 표시합니다. 양식 필드에서 Microsoft를 검색하면 리포지토리 목록이 표시됩니다.

앱 스케일링 및 문제 해결

앱은 현재 문제 없이 작동하지만 트래픽이 많은 볼륨을 예상하여 더 많은 인스턴스에서 앱을 스케일링하려고 합니다.

  1. Azure Portal의 최상위 검색 창에서 razorscaling-app-**** 컨테이너 앱을 검색하고 결과에서 선택합니다.
  2. 개요 페이지의 왼쪽 탐색에서 스케일링을 선택한 다음, + 편집 및 배포를 선택합니다.
  3. 수정 버전 페이지에서 스케일링 탭으로 전환합니다.
  4. 최소 및 최대 인스턴스를 모두 4로 설정한 다음, 만들기를 선택합니다. 이 구성 변경은 앱이 4개 인스턴스에서 수평으로 스케일링되도록 보장합니다.

다시 앱으로 이동합니다. 페이지가 로드되면 처음에는 모든 것이 제대로 작동하는 것처럼 보입니다. 그러나 검색어를 입력하고 제출하면 오류가 발생할 수 있습니다. 오류가 표시되지 않으면 양식을 여러 번 더 제출합니다.

오류 문제 해결

검색 요청이 실패하는 이유는 즉시 표시되지 않습니다. 브라우저 도구는 400 잘못된 요청 응답이 다시 전송되었음을 나타냅니다. 그러나 컨테이너 앱의 로깅 기능을 사용하여 환경에서 발생하는 오류를 진단할 수 있습니다.

  1. 컨테이너 앱 개요 페이지의 왼쪽 탐색에서 로그를 선택합니다.

  2. 로그 페이지에서 열리는 팝업을 닫고 테이블 탭으로 이동합니다.

  3. 사용자 지정 로그 항목을 확장하여 ContainerAppConsoleLogs_CL 노드를 표시합니다. 이 테이블에는 문제를 해결하기 위해 쿼리할 수 있는 컨테이너 앱에 대한 다양한 로그가 포함됩니다.

    A screenshot showing the container app logs.

  4. 쿼리 편집기에서 다음 스크립트와 같이 ContainerAppConsoleLogs_CL Logs 테이블에서 최근 예외를 검색하는 기본 쿼리를 작성합니다.

    ContainerAppConsoleLogs_CL
    | where Log_s contains "exception"
    | sort by TimeGenerated desc
    | limit 500
    | project ContainerAppName_s, Log_s
    

    앞의 쿼리는 ContainerAppConsoleLogs_CL 테이블에서 단어 예외가 포함된 행을 검색합니다. 결과는 생성된 시간별로 정렬되고, 500개 결과로 제한되며, 결과를 더 쉽게 읽을 수 있도록 ContainerAppName_sLog_s 열만 포함합니다.

  5. 실행을 선택하면 결과 목록이 표시됩니다. 로그를 읽어 보면 대부분의 로그가 위조 방지 토큰 및 암호화와 관련이 있는 것을 알 수 있습니다.

    A screenshot showing the logs query.

    Important

    앱의 오류는 .NET 데이터 보호 서비스로 인해 발생합니다. 앱의 여러 인스턴스가 실행 중인 경우 양식을 제출하기 위한 HTTP POST 요청이 HTTP GET 요청에서 페이지를 처음 로드한 동일한 컨테이너로 라우팅된다는 보장은 없습니다. 요청이 여러 인스턴스에서 처리되는 경우 위조 방지 토큰이 올바르게 처리되지 않고 예외가 발생합니다.

    앞의 단계에서 이 문제는 Azure Storage 서비스에서 데이터 보호 키를 중앙 집중화하고 Key Vault로 보호하여 해결됩니다.

Azure 서비스 만들기

앞의 오류를 해결하기 위해 다음 서비스가 만들어지고 앱에 연결됩니다.

  • Azure Storage 계정: 데이터 보호 서비스에 대한 데이터 저장을 처리합니다. 앱이 스케일링될 때 키 데이터를 저장할 중앙 집중화된 위치를 제공합니다. 스토리지 계정은 문서, 큐 데이터, 파일 공유 및 거의 모든 형식의 Blob 데이터를 저장하는 데 사용할 수도 있습니다.
  • Azure KeyVault: 이 서비스는 앱에 대한 비밀을 저장하며 데이터 보호 서비스에 대한 암호화 문제를 관리하는 데 사용됩니다.

스토리지 계정 서비스 만들기

  1. Azure Portal 검색 창에서 Storage accounts를 입력하고 일치하는 결과를 선택합니다.
  2. 스토리지 계정 페이지에서 + 만들기를 선택합니다.
  3. 기본 사항 탭에서 다음 값을 입력합니다.
    • 구독: 컨테이너 앱에 대해 선택한 것과 동일한 구독을 선택합니다.
    • 리소스 그룹: 이전에 만든 msdocs-scalable-razor 리소스 그룹을 선택합니다.
    • 스토리지 계정 이름: 계정 이름을 scalablerazorstorageXXXX로 지정합니다. 여기서 X는 선택하는 난수입니다. 이 이름은 Azure의 모든 이름에서 고유해야 합니다.
    • 지역: 이전에 선택한 동일한 지역을 선택합니다.
  4. 나머지 값을 기본값으로 두고 검토를 선택합니다. Azure에서 입력의 유효성을 검사한 후 만들기를 선택합니다.

Azure는 새 스토리지 계정을 프로비저닝합니다. 작업이 완료되면 리소스로 이동을 선택하여 새 서비스를 봅니다.

스토리지 컨테이너 만들기

앱의 데이터 보호 키를 저장할 컨테이너를 만듭니다.

  1. 새 스토리지 계정에 대한 개요 페이지의 왼쪽 탐색에서 스토리지 브라우저를 선택합니다.
  2. Blob 컨테이너를 선택합니다.
  3. + 컨테이너 추가를 선택하여 새 컨테이너 플라이아웃 메뉴를 엽니다.
  4. scalablerazorkeys 이름을 입력하고, 나머지 설정을 기본값으로 두고, 만들기를 선택합니다.

새 컨테이너가 페이지 목록에 표시됩니다.

키 자격 증명 모음 서비스 만들기

Blob Storage 컨테이너의 데이터를 보호하는 키를 포함하는 키 자격 증명 모음을 만듭니다.

  1. Azure Portal 검색 창에서 Key Vault를 입력하고 일치하는 결과를 선택합니다.
  2. 키 자격 증명 모음 목록 페이지에서 + 만들기를 선택합니다.
  3. 기본 사항 탭에서 다음 값을 입력합니다.
    • 구독: 이전에 선택한 것과 동일한 구독을 선택합니다.
    • 리소스 그룹: 이전에 만든 msdocs-scalable-razor 리소스 그룹을 선택합니다.
    • Key Vault 이름: scalablerazorvaultXXXX 이름을 입력합니다.
    • 지역: 자신의 위치 근처 지역을 선택합니다.
  4. 나머지 설정을 해당 기본값으로 유지한 다음, 검토 + 만들기를 선택합니다. Azure에서 설정의 유효성을 검사할 때까지 기다린 다음, 만들기를 선택합니다.

Azure는 새 키 자격 증명 모음을 프로비저닝합니다. 작업이 완료되면 리소스로 이동을 선택하여 새 서비스를 봅니다.

키 만들기

Blob Storage 계정의 데이터를 보호할 비밀 키를 만듭니다.

  1. 키 자격 증명 모음 기본 개요 페이지의 왼쪽 탐색에서 를 선택합니다.
  2. 키 만들기 페이지에서 + 생성/가져오기를 선택하여 키 만들기 플라이아웃 메뉴를 엽니다.
  3. 이름 필드에 razorkey를 입력합니다. 나머지 설정은 기본값으로 두고 만들기를 선택합니다. 새 키가 키 목록 페이지에 나타납니다.

Azure 서비스 연결

컨테이너 앱은 데이터 보호 오류를 해결하고 올바르게 스케일링하기 위해 스토리지 계정 및 키 자격 증명 모음 서비스에 대한 보안 연결이 필요합니다. 새 서비스는 다음 단계를 사용하여 함께 연결됩니다.

Important

서비스 커넥터 및 기타 도구를 통한 보안 역할 할당은 일반적으로 전파하는 데 1~2분이 걸리며, 드문 경우에는 8분까지 걸릴 수 있습니다.

스토리지 계정 연결

  1. Azure Portal에서 컨테이너 앱 개요 페이지로 이동합니다.
  2. 왼쪽 탐색에서 서비스 커넥터를 선택합니다.
  3. 서비스 커넥트or 페이지에서 + 만들기를 선택하여 만들기 커넥트ion 플라이아웃 패널을 열고 다음 값을 입력합니다.
    • 컨테이너: 이전에 만든 컨테이너 앱을 선택합니다.
    • 서비스 유형: Storage - Blob을 선택합니다.
    • 구독: 이전에 사용한 구독을 선택합니다.
    • 연결 이름: 기본값을 그대로 둡니다.
    • 스토리지 계정: 이전에 만든 스토리지 계정을 선택합니다.
    • 클라이언트 유형: .NET을 선택합니다.
  4. 다음: 인증을 선택하여 다음 단계로 진행합니다.
  5. 시스템 할당 관리 ID 선택하고 다음: 네트워킹을 선택합니다.
  6. 기본 네트워킹 옵션을 선택한 상태로 두고 검토 + 만들기를 선택합니다.
  7. Azure에서 설정의 유효성을 검사한 후 만들기를 선택합니다.

서비스 커넥터는 컨테이너 앱에서 시스템 할당 관리 ID를 사용할 수 있습니다. 또한 스토리지 컨테이너에서 데이터 작업을 수행할 수 있도록 Storage Blob 데이터 Contributor 역할을 ID에 할당합니다.

키 자격 증명 모음 연결

  1. Azure Portal에서 컨테이너 앱 개요 페이지로 이동합니다.
  2. 왼쪽 탐색에서 서비스 커넥터를 선택합니다.
  3. 서비스 커넥트or 페이지에서 + 만들기를 선택하여 만들기 커넥트ion 플라이아웃 패널을 열고 다음 값을 입력합니다.
    • 컨테이너: 이전에 만든 컨테이너 앱을 선택합니다.
    • 서비스 유형: Key Vault를 선택합니다.
    • 구독: 이전에 사용한 구독을 선택합니다.
    • 연결 이름: 기본값을 그대로 둡니다.
    • 키 자격 증명 모음: 이전에 만든 키 자격 증명 모음을 선택합니다.
    • 클라이언트 유형: .NET을 선택합니다.
  4. 다음: 인증을 선택하여 다음 단계로 진행합니다.
  5. 시스템 할당 관리 ID 선택하고 다음: 네트워킹을 선택합니다.
  6. 기본 네트워킹 옵션을 선택한 상태로 두고 검토 + 만들기를 선택합니다.
  7. Azure에서 설정의 유효성을 검사한 후 만들기를 선택합니다.

서비스 커넥터는 키 자격 증명 모음 키에 대한 데이터 작업을 수행할 수 있도록 ID에 역할을 할당합니다.

앱 구성 및 다시 배포

필요한 Azure 리소스가 만들어졌습니다. 이 섹션에서 앱 코드는 새 리소스를 사용하도록 구성됩니다.

  1. 다음 NuGet 패키지를 설치합니다.

    • Azure.Identity: Azure ID 및 액세스 관리 서비스를 사용하기 위한 클래스를 제공합니다.
    • Microsoft.Extensions.Azure: 핵심 Azure 구성을 수행하기 위한 유용한 확장 메서드를 제공합니다.
    • Azure.Extensions.AspNetCore.DataProtection.Blobs: 웹앱의 여러 인스턴스에서 키를 공유할 수 있도록 Azure Blob Storage에 ASP.NET Core DataProtection 키 저장을 허용합니다.
    • Azure.Extensions.AspNetCore.DataProtection.Keys: Azure Key Vault 키 암호화/래핑 기능을 사용하여 미사용 키를 보호할 수 있습니다.
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Blobs
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Keys
    
  2. 다음 강조 표시된 코드로 업데이트 Program.cs 합니다.

    using Azure.Identity;
    using Microsoft.AspNetCore.DataProtection;
    using Microsoft.Extensions.Azure;
    
    var builder = WebApplication.CreateBuilder(args);
    var BlobStorageUri = builder.Configuration["AzureURIs:BlobStorage"];
    var KeyVaultURI = builder.Configuration["AzureURIs:KeyVault"];
    
    builder.Services.AddRazorPages();
    builder.Services.AddHttpClient();
    builder.Services.AddServerSideBlazor();
    
    builder.Services.AddAzureClientsCore();
    
    builder.Services.AddDataProtection()
                    .PersistKeysToAzureBlobStorage(new Uri(BlobStorageUri),
                                                    new DefaultAzureCredential())
                    .ProtectKeysWithAzureKeyVault(new Uri(KeyVaultURI),
                                                    new DefaultAzureCredential());
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    

앞의 변경 내용을 통해 앱은 중앙 집중화된 스케일링 가능한 아키텍처를 사용하여 데이터 보호를 관리할 수 있습니다. DefaultAzureCredential은 앱이 다시 배포될 때 이전에 사용된 관리 ID 구성을 검색합니다.

다음을 포함하도록 appsettings.json 파일의 AzureURIs 섹션에서 자리 표시자를 업데이트합니다.

  1. <storage-account-name> 자리 표시자를 scalablerazorstorageXXXX 스토리지 계정 이름으로 바꿉니다.

  2. <container-name> 자리 표시자를 scalablerazorkeys 스토리지 컨테이너 이름으로 바꿉니다.

  3. <key-vault-name> 자리 표시자를 scalablerazorvaultXXXX 키 자격 증명 모음의 이름으로 바꿉니다.

  4. 키 자격 증명 모음 URI의 <key-name> 자리 표시자를 이전에 만든 razorkey 이름으로 바꿉니다.

    {
      "GitHubURL": "https://api.github.com",
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "AzureURIs": {
        "BlobStorage": "https://<storage-account-name>.blob.core.windows.net/<container-name>/keys.xml",
        "KeyVault": "https://<key-vault-name>.vault.azure.net/keys/<key-name>/"
      }
    }
    

앱 다시 배포

이제 앱이 이전에 만든 Azure 서비스를 사용하도록 올바르게 구성되었습니다. 코드 변경 내용을 적용하려면 앱을 다시 배포합니다.

  1. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다.
  2. 게시 프로필 요약 뷰의 오른쪽 위에서 게시 단추를 선택합니다.

Visual Studio는 이전에 만든 컨테이너 앱 환경에 앱을 다시 배포합니다. 프로세스가 완료되면 브라우저가 앱 홈페이지로 시작됩니다.

검색 필드에서 Microsoft를 검색하여 앱을 다시 테스트합니다. 이제 제출할 때마다 페이지가 올바른 결과로 다시 로드됩니다.

로컬 개발을 위한 역할 구성

개발 중에 로컬로 실행하는 동안 앱의 기존 코드 및 구성이 작동할 수도 있습니다. 이전에 구성된 DefaultAzureCredential 클래스는 로컬 환경 자격 증명을 선택하여 Azure Services에 인증할 수 있습니다. 인증이 작동하려면 앱의 관리 ID에 할당된 고유한 계정에 동일한 역할을 할당해야 합니다. Visual Studio 또는 Azure CLI에 로그인하는 데 사용하는 것과 동일한 계정이어야 합니다.

로컬 개발 환경에 로그인

DefaultAzureCredential을 통해 자격 증명을 선택하려면 Azure CLI, Visual Studio 또는 Azure PowerShell에 로그인해야 합니다.

az login

개발자 계정에 역할 할당

  1. Azure Portal에서 이전에 만든 scalablerazor**** 스토리지 계정으로 이동합니다.
  2. 왼쪽 탐색에서 액세스 제어(IAM)를 선택합니다.
  3. + 추가를 선택한 다음, 드롭다운 메뉴에서 역할 할당 추가를 선택합니다.
  4. 역할 할당 추가 페이지에서 Storage blob data contributor를 검색하고, 일치하는 결과를 선택하고, 다음을 선택합니다.
  5. 사용자, 그룹 또는 서비스 주체가 선택되어 있는지 확인한 다음, + 멤버 선택을 선택합니다.
  6. 멤버 선택 플라이아웃에서 고유한 user@domain 계정을 검색하고 결과에서 선택합니다.
  7. 다음를 선택하고 검토 + 할당을 선택합니다. Azure에서 설정의 유효성을 검사한 후 검토 + 할당을 다시 선택합니다.

앞에서 설명한 것처럼 역할 할당 권한은 전파하는 데 1~2분이 걸리거나 드문 경우에 8분까지 걸릴 수 있습니다.

이전 단계를 반복하여 계정에 역할을 할당하면 해당 역할이 키 자격 증명 모음 서비스 및 비밀에 액세스할 수 있습니다.

  1. Azure Portal에서 이전에 만든 razorscalingkeys 키 자격 증명 모음으로 이동합니다.
  2. 왼쪽 탐색에서 액세스 제어(IAM)를 선택합니다.
  3. + 추가를 선택한 다음, 드롭다운 메뉴에서 역할 할당 추가를 선택합니다.
  4. 역할 할당 추가 페이지에서 Key Vault Crypto Service Encryption User를 검색하고, 일치하는 결과를 선택하고, 다음을 선택합니다.
  5. 사용자, 그룹 또는 서비스 주체가 선택되어 있는지 확인한 다음, + 멤버 선택을 선택합니다.
  6. 멤버 선택 플라이아웃에서 고유한 user@domain 계정을 검색하고 결과에서 선택합니다.
  7. 다음를 선택하고 검토 + 할당을 선택합니다. Azure에서 설정의 유효성을 검사한 후 검토 + 할당을 다시 선택합니다.

이 역할 할당이 전파될 때까지 다시 기다려야 할 수 있습니다.

그런 다음, Visual Studio로 돌아가고 로컬로 앱을 실행할 수 있습니다. 코드는 예상대로 계속 작동해야 합니다. DefaultAzureCredential은 Visual Studio 또는 Azure CLI의 기존 자격 증명을 사용합니다.

신뢰할 수 있는 웹앱 패턴

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