다음을 통해 공유


자습서: GitHub Actions를 사용하여 Azure Container Apps에 ASP.NET Core 앱 및 데이터베이스 배포

이 자습서에서는 Visual Studio 및 GitHub Actions를 사용하여 azure Container Apps에 ASP.NET Core 앱 및 SQL Database를 배포하는 방법을 알아봅니다. GitHub Actions에서 Entity Framework 마이그레이션 및 데이터베이스 업데이트를 관리하는 방법도 알아봅니다. 이 개념은 다른 CI/CD 도구 및 환경에도 적용할 수 있습니다.

필수 조건

ASP.NET 및 웹 개발 및 Azure 개발 워크로드를 사용하여 Visual Studio 2022를 설치해야 합니다.

Visual Studio를 이미 설치한 경우:

  • 도움말>업데이트 확인을 차례로 선택하여 Visual Studio에서 최신 업데이트를 설치합니다.
  • 도구>가져오기 도구 및 기능을 선택하여 ASP.NET 및 웹 개발Azure 개발 워크로드가 설치되었는지 확인합니다.

로컬로 샘플 앱 설정

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

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

프로젝트 폴더로 이동하여 Visual Studio에서 솔루션을 엽니다 DotNetCoreSqlDb.sln .

ToDo 애플리케이션을 사용할 준비가 되었지만 Visual Studio에서 사용할 수 있는 SQL 서버에 대한 연결을 localdb 설정해야 합니다. 커넥트 사용하면 로컬로 localdb 작업하는 동안 앱을 실행하고 할 일을 유지할 수 있습니다.

  1. Visual Studio 솔루션 탐색기에서 커넥트 Services 노드를 마우스 오른쪽 단추로 클릭하고 SQL Server 데이터베이스 추가 > 를 선택합니다.
  2. 종속성 커넥트 대화 상자에서 SQL Server Express LocalDB(로컬)를 선택한 다음, 다음을 선택합니다.
  3. SQL Server Express LocalDB(로컬) 대화 상자로 커넥트 다음 값을 설정합니다.
    • 커넥트ion 문자열 이름: 기본값을 그대로 둡니다.
    • 커넥트온 문자열 값: 기본값을 그대로 둡니다.
    • 연결 문자열 값을 저장합니다. [없음]을 선택합니다.
    • 다음을 선택합니다.
  4. 변경 내용 요약 화면에서 설정을 기본값으로 두고 마침을 선택하여 워크플로를 완료합니다.

Visual Studio는 에 대한 연결을 포함하여 서비스 종속성의 요약을 LocalDB표시합니다.

A screenshot showing how to add a migration using Visual Studio.

다음으로 초기 마이그레이션을 만들고 이를 사용하여 todo 앱에 대한 올바른 스키마로 로컬 데이터베이스를 업데이트해야 합니다.

  1. 연결 옆에 있는 서비스 종속성 목록의 오른쪽에 있는 ... 아이콘을 LocalDB 선택하고 마이그레이션 추가를 선택합니다.
  2. Entity Framework 마이그레이션 대화 상자에서 Visual Studio가 프로젝트에 포함된 클래스를 DbContext 찾을 때까지 잠시 기다립니다. 값이 로드되면 마침을 선택합니다.
  3. Visual Studio는 프로젝트에 폴더를 Migrations 생성하고 초기 마이그레이션 클래스를 만듭니다. 이 클래스를 사용하여 올바른 스키마로 데이터베이스를 업데이트할 수 있습니다.
  4. 서비스 옆에 있는 ... 아이콘을 LocalDB 다시 선택하고 데이터베이스 업데이트를 선택합니다.
  5. Entity Framework 마이그레이션 대화 상자에서 Visual Studio가 클래스를 다시 찾을 DbContext 때까지 잠시 기다린 다음 마침을 선택합니다. Visual Studio는 마이그레이션을 실행하고 서버에서 데이터베이스에 대한 스키마를 LocalDB 만듭니다.

Visual Studio 맨 위에 있는 DotNetCoreSqlDb 실행 단추를 선택하여 프로젝트를 시작합니다.

앱이 로드되면 새 할 일을 입력하여 데이터베이스가 제대로 작동하는지 확인합니다. 할 일 앱 홈 페이지의 기본 목록 보기에 나타납니다.

앱 시작 구성 살펴보기

샘플 앱은 파일에 다음 코드를 Program.cs 포함합니다.

if(builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}

이 코드는 다음 구성을 적용합니다.

  • 앱이 로컬로 localdb 실행되면 연결 문자열 파일에서 appsettings.json 끌어와 Entity Framework에 제공됩니다. 이 구성을 사용하면 다른 개발자가 localdb 개발 중에 로컬 데이터베이스에 쉽게 연결할 수 있도록 연결 문자열 소스 제어에 검사 수 있습니다. 또한 Entity Framework 마이그레이션을 로컬로 실행할 수 있습니다. 기본적으로 Entity Framework는 마이그레이션을 실행할 때 환경 변수에 저장된 연결 문자열 검색하지 않습니다.
  • 앱이 GitHub Actions 워크플로 또는 프로덕션에서 실행되면 환경 변수에서 연결 문자열 가져옵니다. 환경 변수는 프로덕션 보안 연결 문자열 소스 제어에 검사 구성 파일에 포함되지 않도록 방지할 수 있습니다.

Azure 서비스 만들기

앱은 성공적인 배포를 위해 다음 Azure 서비스를 만들어야 합니다.

  • 컨테이너 앱: 배포된 애플리케이션을 호스트하고 실행하는 데 필요합니다.
  • 컨테이너 레지스트리: 컨테이너화된 앱의 빌드된 이미지 아티팩트가 저장됩니다.
  • SQL Database: 앱의 데이터를 저장할 Azure SQL 데이터베이스입니다.

Visual Studio의 게시 기능은 이러한 리소스 만들기를 처리할 수 있습니다.

Azure Container App 및 Azure Container Registry 만들기

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

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

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

  4. 배포할 새 컨테이너 앱을 만듭니다. + 새로 만들기 단추를 선택하여 새 대화 상자를 열고 다음 값을 입력합니다.

    A screenshot showing how to create a container app.

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

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

    A screenshot showing how to create a new container registry.

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

  8. 컨테이너 레지스트리를 만든 후에는 해당 레지스트리가 선택되어 있는지 확인한 다음, 다음을 선택합니다.

  9. 배포 유형 화면에서 GitHub Actions 워크플로를 사용하여 CI/CD를 선택한 다음(yml 파일 생성) 마침을 선택합니다. Visual Studio에서 관리 사용자가 게시된 Docker 컨테이너에 액세스할 수 있도록 설정할지 묻는 메시지가 표시되면 를 선택합니다.

Visual Studio는 게시 프로필을 만들고 표시합니다. 대부분의 게시 단계 및 세부 정보는 게시 프로필 요약 보기에서 워크플로 편집 단추를 클릭하여 볼 수 있는 GitHub Actions .yml 파일에 설명되어 있습니다. 이 파일은 문서 뒷부분에서 자세히 설명합니다.

Azure SQL 데이터베이스 만들기

  1. 솔루션 탐색기에서 커넥트 서비스 노드를 마우스 오른쪽 단추로 클릭하고 SQL Server 데이터베이스 추가 > 를 선택합니다.
  2. 종속성 커넥트 대화 상자에서 Azure SQL Database를 선택한 다음, 다음을 선택합니다.
  3. + 새로 만들기를 선택하여 새 데이터베이스를 추가합니다.
  4. Azure SQL Database 대화 상자에서 다음 값을 입력합니다.
    • 데이터베이스 이름: 기본값을 그대로 둡니다.
    • 구독 이름: 이전과 동일한 구독을 선택합니다.
    • 리소스 그룹: 이전에 만든 것과 동일한 msdocs-app-db-ef 그룹을 선택합니다.
    • 데이터베이스 서버: 새로 만들기를 선택하고 새 팝업에 다음 값을 입력합니다.
      • 데이터베이스 서버 이름: 고유한 서버 이름을 입력하거나 자동 생성된 이름의 끝에 난수를 추가합니다.
      • 위치: 가까운 위치를 선택합니다.
      • 관리istrator 사용자 이름: 선택한 값을 입력합니다.
      • 관리주부 암호: 선택한 값을 입력합니다.
      • 관리기 암호(확인): 동일한 암호를 입력하여 확인합니다. 확인을 선택하여 SQL Server 대화 상자를 닫습니다.
    • 만들기를 선택하여 SQL 서버 및 데이터베이스를 만듭니다.
    • 작업이 완료되면 목록에서 서버를 선택하고 다음을 선택합니다 .
  5. Azure SQL Database로의 커넥트 대화 상자에서 기본값을 그대로 두지만 옵션에서 연결 문자열 저장 값의 맨 아래에 없음이 선택되어 있는지 확인합니다.
  6. 마침을 선택하면 Visual Studio에서 SQL 리소스를 만듭니다.

Azure SQL에 컨테이너 앱 커넥트

  1. 만든 컨테이너 앱의 개요 페이지에서 왼쪽 탐색 창에서 서비스 커넥트or(미리 보기)를 선택합니다.

  2. + 만들기를 선택하여 새 연결을 만듭니다.

  3. 연결 플라이아웃 만들기에서 다음 값을 입력합니다.

    • 컨테이너: 만든 dotnetcoresqldb 컨테이너를 선택합니다.

    • 서비스 유형: SQL Database를 선택합니다.

    • 구독: 컨테이너 앱을 만드는 데 사용한 것과 동일한 구독을 선택합니다.

    • 연결 이름: 기본값을 그대로 둡니다.

    • SQL Server: 이전에 만든 데이터베이스 서버를 선택합니다.

    • SQL 데이터베이스: 이전에 만든 데이터베이스를 선택합니다.

    • 클라이언트 유형: .NET을 선택합니다.

      A screenshot showing how to use service connector.

  4. 다음: 인증을 선택하고 다음 값을 입력합니다.

    • 인증 유형에 대한 커넥트ion 문자열을 선택합니다.
    • 사용자 이름: 데이터베이스 서버를 만들 때 사용한 사용자 이름을 입력합니다.
    • 암호: 데이터베이스 서버를 만들 때 사용한 암호를 입력합니다.
  5. 나머지 설정은 기본값으로 두고 다음: 네트워킹을 선택합니다.

  6. 기본값을 선택한 상태로 두고 다음: 검토 + 만들기를 선택합니다.

  7. Azure에서 유효성을 검사한 후 설정에서 만들기를 선택합니다.

잠시 후 SQL 데이터베이스에 대한 연결이 표시됩니다. 화살표를 선택하여 연결을 확장하고 AZURE_SQL_CONNECTIONSTRING 값을 확인합니다. 이 연결 이름은 샘플 앱에 정의된 환경 변수 연결 문자열 이름과 일치합니다.

GitHub Actions 워크플로 구성

Visual Studio에서 생성된 GitHub Actions 워크플로 파일을 GitHub에서 사용하여 변경 내용이 푸시될 때 Azure에 앱을 빌드하고 배포할 수 있습니다. 현재 이 프로세스는 작동하지만 배포된 앱은 예외를 throw합니다. Azure SQL 데이터베이스가 만들어졌지만 스키마를 생성하려면 GitHub Actions 워크플로에 단계를 추가해야 합니다. Azure SQL 데이터베이스에 대한 연결 문자열 GitHub에서 비밀로 안전하게 저장하고 실행할 때 워크플로에서 검색할 수 있습니다.

연결 문자열 검색하고 GitHub 비밀에 추가

  1. Azure Portal의 기본 검색 창에서 만든 데이터베이스를 검색하고 결과에서 선택합니다.

  2. 데이터베이스 개요 페이지의 왼쪽 탐색에서 커넥트ion 문자열을 선택합니다.

  3. ADO.NET 탭의 양식 필드에서 연결 문자열 복사합니다.

    A screenshot showing how to retrieve the connection string.

  4. 앱의 포크된 GitHub 리포지토리로 이동합니다.

  5. 설정 탭의 왼쪽 탐색 영역에서 비밀 > 작업을 선택한 다음 새 리포지토리 비밀을 선택합니다.

  6. 새 비밀 페이지에서 다음 값을 입력합니다.

    • 이름: 의 이름을 입력합니다 DbConnection.

    • 비밀: Azure에서 복사한 연결 문자열 붙여넣습니다. 연결 문자열 암호 자리 표시자를 데이터베이스를 만들 때 선택한 암호로 바꿔야 합니다.

    • 비밀 추가를 선택합니다.

      A screenshot showing how to create a GitHub secret.

이제 연결 문자열 GitHub 리포지토리 비밀에 안전하게 저장되며 GitHub 워크플로를 사용하여 검색할 수 있습니다.

마이그레이션을 사용하도록 GitHub Actions 워크플로 수정

  1. 게시 요약 페이지에서 워크플로 .yml 편집 단추를 선택하여 Visual Studio에서 생성된 GitHub Actions 워크플로 파일을 엽니다.

    A screenshot showing how to edit the workflow.

  2. 워크플로 파일의 끝에 다음 yaml을 추가합니다.

    - name: Run EF 
      run: | 
        dotnet tool install --global dotnet-ef
        dotnet tool restore
        dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
    

    이 코드는 엔터티 프레임워크 명령줄 도구를 설치하고 앱 마이그레이션을 실행합니다. 워크플로가 실행될 때 코드는 명령의 database update 매개 변수를 사용하여 connection 파일에 저장된 appsettings.json 연결 문자열 GitHub 비밀에 추가된 값으로 재정 localdb 의합니다.

GitHub Actions 워크플로를 실행하고 배포 테스트

  1. 다음 명령을 사용하여 애플리케이션에 변경 내용을 커밋하고 포크된 리포지토리로 푸시합니다.

    git add --all
    git commit -m "Added GitHub Actions workflow"
    git push
    
  2. GitHub 리포지토리로 이동하고 작업 탭을 선택합니다. 푸시에 성공하면 워크플로 실행이 자동으로 트리거되어야 합니다.

  3. 활성 워크플로를 선택하여 완료된 각 단계에 대한 로그 세부 정보를 봅니다. 마이그레이션은 마지막으로 실행되어 Azure에서 데이터베이스를 업데이트합니다.

    A screenshot showing the GitHub action workflow.

워크플로가 완료되면 애플리케이션이 Azure Container Apps에 배포되고 업데이트된 스키마를 사용하여 데이터베이스에 연결됩니다.

로컬에서 수행한 것처럼 컨테이너 앱의 홈 페이지로 이동하고 할 일을 만들어 배포를 테스트할 수 있습니다. Azure Portal에서 앱의 개요 페이지에서 컨테이너 앱에 대한 URL을 항상 찾을 수 있습니다.