다음을 통해 공유


자습서: Azure Container Apps에서 Python 웹앱을 배포하기 위한 개요 개념 알아보기

이 자습서 시리즈에서는 Python 웹앱을 컨테이너화하고 Azure Container Apps배포하는 방법을 보여줍니다. 샘플 웹앱이 컨테이너화되며, Docker 이미지는 Azure Container Registry에 저장됩니다. Azure Container Apps는 Container Registry에서 Docker 이미지를 끌어와 컨테이너를 만들도록 구성됩니다. 샘플 앱은 Azure Database for PostgreSQL 연결하여 Container Apps와 다른 Azure 리소스 간의 통신을 보여 줍니다.

Azure에서 클라우드 네이티브 및 컨테이너화된 Python 웹앱을 빌드하고 배포하는 몇 가지 옵션이 있습니다. 이 자습서 시리즈에서는 Azure Container Apps에 대해 설명합니다. Container Apps는 범용 컨테이너를 실행하는 데 적합하며, 특히 컨테이너에 배포된 많은 마이크로 서비스에 걸쳐 있는 애플리케이션에 적합합니다.

이 자습서 시리즈에서는 하나의 컨테이너를 만듭니다. Python 웹앱을 Azure App Service에 컨테이너로 배포하려면 MongoDB사용하여 Azure에서 컨테이너화된 Python 웹앱 참조하세요.

이 자습서 시리즈의 절차는 다음 작업을 완료하도록 안내합니다.

  • Python 웹앱에서 Docker 이미지를 빌드하고, 해당 이미지를 Azure Container Registry에 저장합니다.
  • Docker 이미지를 호스트하도록 Azure Container Apps 구성합니다.
  • GitHub Actions을 설정하여 GitHub 리포지토리의 변경사항이 있을 때 새 Docker 이미지로 컨테이너를 업데이트합니다. 이 단계는 선택 사항입니다.
  • Python 웹앱의 CI/CD(지속적인 통합 및 지속적인 업데이트)를 Azure에 설정합니다.

시리즈의 첫 번째 부분에서는 Azure Container Apps에서 Python 웹앱을 배포하기 위한 기본 개념을 알아봅니다.

서비스 개요

다음 다이어그램에서는 이 자습서 시리즈에서 로컬 환경, GitHub 리포지토리 및 Azure 서비스를 사용하는 방법을 보여 줍니다.

Azure Container Apps에 Python 웹앱을 배포하기 위한 환경 및 서비스의 다이어그램입니다.

다이어그램에는 다음 구성 요소가 포함됩니다.

  • Azure Container Apps

    Azure Container Apps를 사용하면 서버리스 플랫폼에서 마이크로 서비스 및 컨테이너화된 애플리케이션을 실행할 수 있습니다. 서버리스 플랫폼은 최소한의 구성으로 컨테이너를 실행하는 이점을 누릴 수 있음을 의미합니다. Azure Container Apps를 사용하면 애플리케이션이 HTTP 트래픽, 이벤트 기반 처리 또는 CPU 또는 메모리 로드와 같은 특성에 따라 동적으로 확장할 수 있습니다.

    Container Apps는 Azure Container Registry에서 Docker 이미지를 가져옵니다. 컨테이너 이미지를 변경하면 배포된 컨테이너에 대한 업데이트가 트리거됩니다. 업데이트를 트리거하도록 GitHub Actions를 구성할 수도 있습니다.

  • Azure Container Registry:

    Azure Container Registry를 사용하면 Azure에서 Docker 이미지를 사용할 수 있습니다. Container Registry는 Azure의 배포와 가깝기 때문에 액세스를 제어할 수 있습니다. Microsoft Entra 그룹 및 권한을 사용하여 Docker 이미지에 대한 액세스를 제어할 수 있습니다.

    이 자습서 시리즈에서 레지스트리 원본은 Azure Container Registry입니다. 그러나 사소한 수정으로 Docker 허브 또는 프라이빗 레지스트리를 사용할 수도 있습니다.

  • Azure Database for PostgreSQL:

    샘플 코드는 애플리케이션 데이터를 PostgreSQL 데이터베이스에 저장합니다. 컨테이너 앱은 사용자 할당 관리 ID사용하여 PostgreSQL에 연결합니다. 연결 정보는 명시적으로 구성된 환경 변수 또는 Azure 서비스 커넥터통해 저장됩니다.

  • GitHub :

    이 자습서 시리즈의 샘플 코드는 로컬로 포크하고 복제하는 GitHub 리포지토리에 있습니다. GitHub Actions사용하여 CI/CD 워크플로를 설정하려면 GitHub 계정이 필요합니다.

    로컬 또는 Azure Cloud Shell 작업하여 샘플 코드 리포지토리에서 컨테이너 이미지를 빌드하는 경우 GitHub 계정 없이도 이 자습서 시리즈를 따라갈 수 있습니다.

수정 버전 및 CI/CD

코드를 변경하고 컨테이너에 푸시하려면 변경 내용이 포함된 새 Docker 이미지를 만듭니다. 그런 다음, 이미지를 Container Registry에 업로드하고 컨테이너 앱의 새 버전을 만듭니다.

이 프로세스를 자동화하기 위해 자습서 시리즈의 선택적 단계에서는 GitHub Actions를 사용하여 CI/CD 파이프라인을 빌드하는 방법을 보여 줍니다. 새 커밋이 GitHub 리포지토리에 푸시될 때마다 파이프라인이 자동으로 코드를 빌드하고 Container Apps에 배포합니다.

인증 및 보안

이 자습서 시리즈에서는 Azure에서 직접 Docker 컨테이너 이미지를 빌드하고 Azure Container Apps에 배포합니다. Container Apps는 환경에서, Azure 가상 네트워크에 의해 지원되는 컨텍스트에서 실행됩니다. 가상 네트워크는 Azure의 프라이빗 네트워크에 대한 기본 구성 요소입니다. Container Apps를 사용하면 인그레스를 활성화하여 컨테이너 앱을 공용 웹에서 접근할 수 있도록 만들 수 있습니다.

CI/CD를 설정하려면 GitHub 계정에 대한 OAuth 앱 Azure Container Apps에 권한을 부여합니다. OAuth 앱인 Container Apps는 업데이트할 Azure 리소스 및 작업에 대한 정보가 포함된 GitHub Actions 워크플로 파일을 리포지토리에 씁니다. 워크플로는 Container Apps에 대한 역할 기반 액세스 권한이 있는 Microsoft Entra 서비스 주체(기존의 서비스 주체를 포함)에 대한 자격 증명과 Azure Container Registry의 사용자 이름 및 암호를 사용하여 Azure 리소스를 업데이트합니다. 자격 증명은 GitHub 리포지토리에 안전하게 저장됩니다.

마지막으로 이 자습서 시리즈의 샘플 웹앱은 PostgreSQL 데이터베이스에 데이터를 저장합니다. 샘플 코드는 연결 문자열을 통해 PostgreSQL에 연결합니다. 앱이 Azure에서 실행 중인 경우 사용자 할당 관리 ID를 사용하여 PostgreSQL 데이터베이스에 연결합니다. 이 코드는 DefaultAzureCredential 사용하여 런타임 동안 Microsoft Entra 액세스 토큰을 사용하여 연결 문자열의 암호를 동적으로 업데이트합니다. 이 메커니즘은 연결 문자열 또는 환경 변수에서 암호를 하드 코딩할 필요가 없도록 하고 추가 보안 계층을 제공합니다.

자습서 시리즈에서는 관리 ID를 만들고 데이터베이스에 액세스하고 업데이트할 수 있도록 적절한 PostgreSQL 역할 및 권한을 부여하는 방법에 대해 설명합니다. Container Apps를 구성하는 동안 자습서 시리즈에서는 앱에서 관리 ID를 구성하고 데이터베이스에 대한 연결 정보를 포함하는 환경 변수를 설정하는 방법을 안내합니다. Azure 서비스 커넥터를 사용하여 동일한 작업을 수행할 수도 있습니다.

필수 구성 요소

이 자습서 시리즈를 완료하려면 다음이 필요합니다.

샘플 앱

Python 샘플 앱은 PostgreSQL에서 레스토랑을 저장하고 데이터를 검토하는 레스토랑 리뷰 앱입니다. 자습서 시리즈의 끝부분에는 다음 스크린샷과 같은 식당 리뷰 앱이 Azure Container Apps에서 배포되고 실행됩니다.

Python 컨테이너화된 웹앱에서 만든 샘플 앱의 스크린샷입니다.

다음 단계

Azure Container Apps 및 PostgreSQL 사용하여 Python 웹앱 빌드 및 배포