이 문서는 Python 웹앱을 컨테이너화하고 Azure Container Apps 에 배포하는 방법에 대한 자습서 시리즈의 일부입니다. Container Apps를 사용하면 복잡한 인프라를 관리하지 않고 컨테이너화된 앱을 배포할 수 있습니다.
이 자습서에서는 다음을 수행합니다.
- 클라우드에서 컨테이너 이미지를 빌드하여 Python 샘플 웹앱(Django 또는 Flask)을 컨테이너화합니다.
- Azure Container Apps에 컨테이너 이미지를 배포합니다.
- 컨테이너 앱이 샘플 앱이 데이터를 저장하는 Azure Database for PostgreSQL - 유연한 서버 인스턴스에 연결할 수 있도록 하는 환경 변수를 정의합니다.
다음 다이어그램에서는 컨테이너 이미지 빌드 및 배포와 같은 이 자습서의 작업을 강조 표시합니다.
필수 구성 요소
Azure 구독이 없는 경우 시작하기 전에 무료 계정 만드십시오.
Azure CLI 명령을 Azure Cloud Shell에서 또는 Azure CLI가 설치된 워크스테이션에서 실행할 수 있습니다.
로컬로 실행하는 경우 다음 단계에 따라 로그인하고 이 자습서에 필요한 모듈을 설치합니다.
필요한 경우 Azure에 로그인하고 인증합니다.
az login최신 버전의 Azure CLI를 실행하고 있는지 확인합니다.
az upgradeaz extension add 명령을 사용하여 containerapp 및 rdbms-connect Azure CLI 확장을 설치하거나 업그레이드합니다.
az extension add --name containerapp --upgrade az extension add --name rdbms-connect --upgrade참고 항목
시스템에 설치된 확장을 나열하려면 az extension list 명령을 사용할 수 있습니다. 예를 들어:
az extension list --query [].name --output tsv
샘플 앱 가져오기
샘플 코드를 포크하고 개발자 환경에 복제합니다.
샘플 앱(Django 또는 Flask)의 GitHub 리포지토리로 이동하여 포크를 선택합니다.
단계에 따라 리포지토리를 GitHub 계정으로 포크합니다. 포크 또는 GitHub 계정 없이 로컬 컴퓨터에 직접 코드 리포지토리를 다운로드할 수도 있습니다. 그러나 다운로드 방법을 사용하는 경우 이 시리즈의 다음 자습서에서 CI/CD(지속적인 통합 및 지속적인 업데이트)를 설정할 수 없습니다.
콘솔의 명령 프롬프트에서 git clone 명령을 사용하여 포크된 리포지토리를 python 컨테이너 폴더에 복제합니다.
# Django git clone https://github.com/<github-username>/msdocs-python-django-azure-container-apps.git python-container # Flask # git clone https://github.com/<github-username>/msdocs-python-flask-azure-container-apps.git python-container디렉터리를 변경합니다.
cd python-container
웹앱 코드에서 컨테이너 이미지 빌드
이러한 단계를 수행하면 샘플 코드에서 빌드된 Docker 컨테이너 이미지가 포함된 Azure Container Registry 인스턴스가 생성됩니다.
Windows 컴퓨터의 Git Bash 셸에서 명령을 실행하는 경우 계속하기 전에 다음 명령을 입력합니다.
#!/bin/bash export MSYS_NO_PATHCONV=1az group create 명령을 사용하여 리소스 그룹을 만듭니다.
#!/bin/bash RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATIONaz acr create 명령을 사용하여 컨테이너 레지스트리를 만듭니다.
#!/bin/bash REGISTRY_NAME=<registry-name> #The name that you use for *\<registry-name>* must be unique within Azure, and it must contain 5 to 50 alphanumeric characters. az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $REGISTRY_NAME \ --sku Basic \ --admin-enabled trueaz acr login 명령을 사용하여 레지스트리에 로그인합니다.
az acr login --name $REGISTRY_NAME이 명령은 이름에 "azurecr.io"를 추가하여 정규화된 레지스트리 이름을 만듭니다. 로그인에 성공하면 "로그인 성공" 메시지가 나타납니다. 레지스트리를 만든 구독과 다른 구독에서 레지스트리에 액세스하려면
--suffix스위치를 사용하십시오.로그인에 실패하면 Docker 디먼이 시스템에서 실행되고 있는지 확인합니다.
az acr build 명령을 사용하여 이미지를 빌드합니다.
#!/bin/bash az acr build \ --registry $REGISTRY_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --image pythoncontainer:latest .이러한 고려 사항은 다음과 같습니다.
명령의 끝에 있는 점(
.)은 빌드할 소스 코드의 위치를 나타냅니다. 샘플 앱의 루트 디렉터리에서 이 명령을 실행하지 않는 경우 코드 경로를 지정합니다.Azure Cloud Shell에서 명령을 실행하는 경우
git clone사용하여 먼저 리포지토리를 Cloud Shell 환경으로 끌어옵니다. 그런 다음 점(.)이 올바르게 해석되도록 디렉터리를 프로젝트의 루트로 변경합니다.(동일한
--image) 옵션을 제외-t하면 명령은 로컬 컨텍스트 빌드를 레지스트리에 푸시하지 않고 큐에 대기합니다. 푸시하지 않고 빌드하면 이미지가 빌드되는지 확인하는 데 유용할 수 있습니다.
az acr repository list 명령을 사용하여 컨테이너 이미지가 만들어졌는지 확인합니다.
az acr repository list --name $REGISTRY_NAME
참고 항목
이 섹션의 단계에서는 기본 서비스 계층에서 컨테이너 레지스트리를 만듭니다. 이 계층은 개발자 시나리오를 대상으로 하는 기능 집합 및 처리량을 사용하여 비용 최적화되며 이 자습서의 요구 사항에 적합합니다. 프로덕션 시나리오에서는 표준 또는 프리미엄 서비스 계층을 사용할 가능성이 높습니다. 이러한 계층은 향상된 수준의 스토리지 및 처리량을 제공합니다.
자세한 내용은 azure Container Registry 서비스 계층
PostgreSQL 유연한 서버 인스턴스 만들기
샘플 앱(Django 또는 Flask)은 PostgreSQL 데이터베이스에 레스토랑 리뷰 데이터를 저장합니다. 이 단계에서는 데이터베이스를 포함할 서버를 만듭니다.
az postgres flexible-server create 명령을 사용하여 Azure에서 PostgreSQL 서버를 만듭니다. 이 명령이 완료되기 전에 몇 분 동안 실행되는 것은 드문 일이 아닙니다.
#!/bin/bash ADMIN_USERNAME=demoadmin ADMIN_PASSWORD=<admin-password> # Use a strong password that meets the requirements for PostgreSQL. POSTGRES_SERVER_NAME=<postgres-server-name> az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $POSTGRES_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USERNAME \ --admin-password $ADMIN_PASSWORD \ --version 16 \ --tier Burstable \ --sku-name Standard_B1ms \ --public-access 0.0.0.0 \ --microsoft-entra-auth Enabled \ --storage-size 32 \ --backup-retention 7 \ --high-availability Disabled \ --yes다음 값을 사용합니다.
<postgres-server-name>: PostgreSQL 데이터베이스 서버 이름입니다. 이 이름은 모든 Azure에서 고유해야 합니다. 서버 엔드포인트가
https://<postgres-server-name>.postgres.database.azure.com. 허용되는 문자는A에서Z,0에서9, 및 하이픈(-)입니다.<위치>: 웹앱에 사용한 것과 동일한 위치를 사용합니다. <위치>는 명령
Name출력에서 나온 Azure 위치az account list-locations -o table값 중 하나입니다.<관리자-사용자 이름>: 관리자 계정의 사용자 이름입니다.
azure_superuser,admin,administrator,root,guest또는public수 없습니다. 이 자습서에서는demoadmin사용합니다.<관리자 암호>: 관리자 사용자의 암호입니다. 다음 세 가지 범주에서 8~128자를 포함해야 합니다. 영문 대문자, 영문 소문자, 숫자 및 영숫자가 아닌 문자
중요합니다
사용자 이름이나 비밀번호를 만들 때 달러 기호($) 문자를 사용하지 마세요. 나중에 이러한 값을 사용하여 환경 변수를 만들 때 해당 문자는 Python 앱을 실행하는 데 사용하는 Linux 컨테이너 내에서 특별한 의미를 줍니다.
--version:16사용합니다. 서버에 사용할 PostgreSQL 버전을 지정합니다.--tier:Burstable사용합니다. 서버의 가격 책정 계층을 지정합니다. 버스트 가능한 계층은 CPU를 지속적으로 완전하게 사용하지 않는 워크로드에 대한 저렴한 옵션이며, 이 튜토리얼의 요구 사항에 적합합니다.--sku-name: 가격 책정 계층 및 컴퓨팅 구성의 이름입니다. 예를 들어Standard_B1ms. 자세한 내용은 Azure Database for PostgreSQL 가격 책정을 참조하세요. 사용 가능한 계층을 나열하려면az postgres flexible-server list-skus --location <location>사용합니다.--public-access:0.0.0.0사용합니다. 컨테이너 앱과 같은 Azure 서비스에서 서버에 대한 공용 액세스를 허용합니다.--microsoft-entra-auth:Enabled사용합니다. 서버에서 Microsoft Entra 인증을 사용하도록 설정합니다.--storage-size:32사용합니다. 서버에 대한 스토리지 크기(GB)를 지정합니다. 최소값은 32GB입니다.--backup-retention:7사용합니다. 서버에 대한 백업을 보존할 일 수를 지정합니다. 최소값은 7일입니다.--high-availability:Disabled사용합니다. 서버의 고가용성을 비활성화합니다. 이 자습서에서는 고가용성이 필요하지 않습니다.--yes: PostgreSQL 서버에 대한 사용 약관을 허용합니다.
참고 항목
도구를 사용하여 로컬 워크스테이션에서 PostgreSQL 서버로 작업하려는 경우 az postgres flexible-server firewall-rule create 명령을 사용하여 워크스테이션의 IP 주소에 대한 방화벽 규칙을 추가해야 합니다.
az ad sign-in-user show 명령을 사용하여 사용자 계정의 개체 ID를 가져옵니다. 다음 명령에서 이 ID를 사용합니다.
#!/bin/bash CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv) CALLER_DISPLAY_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)az postgres flexible-server ad-admin create 명령을 사용하여 PostgreSQL 서버에서 사용자 계정을 Microsoft Entra 관리자로 추가합니다.
#!/bin/bash az postgres flexible-server microsoft-entra-admin create \ --server-name "$POSTGRES_SERVER_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --display-name "$CALLER_DISPLAY_NAME" \ --object-id "$CALLER_OBJECT_ID" \ --type Useraz postgres 유연한 서버 방화벽 규칙 만들기 명령을 사용하여 웹앱이 PostgreSQL 유연한 서버에 액세스할 수 있도록 하는 규칙을 추가합니다. 다음 명령에서는 공용 IP 주소를 사용하여 개발 워크스테이션의 연결을 허용하도록 서버의 방화벽을 구성합니다.
MY_IP=$(curl -s ifconfig.me) az postgres flexible-server firewall-rule create \ --name "$POSTGRES_SERVER_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --rule-name allow-my-ip \ --start-ip-address "$MY_IP" \ --end-ip-address "$MY_IP" ```
참고 항목
이 섹션의 단계에서는 버스트 가능한 가격 책정 계층에서 단일 vCore 및 제한된 메모리를 사용하여 PostgreSQL 서버를 만듭니다. 버스트 가능한 계층은 CPU를 지속적으로 완전하게 사용하지 않는 워크로드에 대한 저렴한 옵션이며, 이 튜토리얼의 요구 사항에 적합합니다. 프로덕션 워크로드의 경우 범용 또는 메모리 최적화 가격 책정 계층으로 업그레이드할 수 있습니다. 이러한 계층은 더 높은 성능을 제공하지만 비용이 증가합니다.
자세한 내용은 Azure Database for PostgreSQL - 유연한 서버의 컴퓨팅 옵션을 참조하세요. 가격 책정에 대한 자세한 내용은 Azure Database for PostgreSQL 가격 책정을 참조하세요.
서버에 데이터베이스 만들기
이 시점에서 PostgreSQL 서버가 있습니다. 이 섹션에서는 서버에 데이터베이스를 만듭니다.
restaurants_reviews데이터베이스를 만들기 위해 az postgres flexible-server db create 명령어를 사용하십시오.
#!/bin/bash
DATABASE_NAME=restaurants_reviews
az postgres flexible-server db create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $POSTGRES_SERVER_NAME \
--database-name $DATABASE_NAME
az postgres 유연한 서버 연결 명령을 사용하여 데이터베이스에 연결한 다음 psql 명령을 사용할 수도 있습니다. psql을 사용하는 경우 셸에 모든 종속성이 포함되어 있으므로 Azure Cloud Shell 사용하는 것이 더 쉽습니다.
Azure Database for PostgreSQL 유연한 서버에 연결하고
사용자 할당 관리 ID 만들기
Azure에서 실행 중일 때 컨테이너 앱의 ID로 사용할 사용자 할당 관리 ID를 만듭니다.
참고 항목
사용자 할당 관리 ID를 만들려면 계정에 관리 ID 기여자 역할 할당이 필요합니다.
az identity create 명령을 사용하여 사용자 할당형 관리 ID를 만듭니다.
UA_MANAGED_IDENTITY_NAME=<managed-identity-name> # Use a unique name for the managed identity, such as-"my-ua-managed-id".
az identity create \
--name $UA_MANAGED_IDENTITY_NAME
--resource-group $RESOURCE_GROUP_NAME
PostgreSQL 데이터베이스에서 관리 ID 구성
PostgreSQL 서버에서 관리 ID를 역할로 구성한 다음 restaurants_reviews 데이터베이스에 필요한 권한을 부여합니다. Azure CLI 또는 psql을 사용하는 경우 서버 인스턴스에서 Microsoft Entra 관리자로 구성된 사용자를 사용하여 Azure PostgreSQL 서버에 연결해야 합니다. PostgreSQL 관리자로 구성된 Microsoft Entra 계정만 서버에서 관리 ID 및 기타 Microsoft 관리자 역할을 구성할 수 있습니다.
az account get-access-token 명령을 사용하여 Azure 계정에 대한 액세스 토큰을 가져옵니다. 다음 단계에서 액세스 토큰을 사용합니다.
#!/bin/bash MY_ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) echo $MY_ACCESS_TOKENaz postgres flexible-server execute 명령을 사용하여 사용자 할당 관리 ID를 PostgreSQL 서버에서 데이터베이스 역할로 추가합니다.
#!/bin/bash az postgres flexible-server execute \ --name "$POSTGRES_SERVER_NAME" \ --admin-user "$CALLER_DISPLAY_NAME" \ --admin-password "$ACCESS_TOKEN" \ --database-name postgres \ --querytext "SELECT * FROM pgaadauth_create_principal('$UA_MANAGED_IDENTITY_NAME', false, false);"참고 항목
로컬 워크스테이션에서
az postgres flexible-server execute명령을 실행하는 경우 워크스테이션의 IP 주소에 대한 방화벽 규칙을 추가했는지 확인합니다. az postgres flexible-server firewall-rule create 명령을 사용하여규칙을 추가할 수 있습니다. 다음 단계에서 명령에 대해서도 동일한 요구 사항이 있습니다. 다음 az postgres flexible-server execute 명령을 사용하여 사용자에게 할당된 관리 ID에 restaurants_reviews 데이터베이스에 필요한 권한을 부여하시오.
#!/bin/bash SQL_GRANTS=$(cat <<EOF GRANT CONNECT ON DATABASE $DATABASE_NAME TO "$UA_MANAGED_IDENTITY_NAME"; GRANT USAGE, CREATE ON SCHEMA public TO "$UA_MANAGED_IDENTITY_NAME"; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "$UA_MANAGED_IDENTITY_NAME"; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "$UA_MANAGED_IDENTITY_NAME"; EOF ) az postgres flexible-server execute \ --name "$POSTGRES_SERVER_NAME" \ --admin-user "$CALLER_DISPLAY_NAME" \ --admin-password "$MY_ACCESS_TOKEN" \ --database-name "$DATABASE_NAME" \ --querytext "$SQL_GRANTS"이 Azure CLI 명령은 서버의 restaurants_reviews 데이터베이스에 연결하고 다음 SQL 명령을 실행합니다.
GRANT CONNECT ON DATABASE restaurants_reviews TO "my-ua-managed-id"; GRANT USAGE ON SCHEMA public TO "my-ua-managed-id"; GRANT CREATE ON SCHEMA public TO "my-ua-managed-id"; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "my-ua-managed-id"; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "my-ua-managed-id";
Container Apps에 웹앱 배포
컨테이너 앱은 보안 경계 역할을 하는Azure Container Apps
이러한 단계에는 Azure Container Apps 확장,containerapp
az containerapp env create 명령을 사용하여 Container Apps 환경을 만듭니다.
#!/bin/bash APP_ENV_NAME=<app-env-name> # Use a unique name for the environment, such as "python-container-env". az containerapp env create \ --name $APP_ENV_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATIONaz acr credential show 명령을 사용하여 Azure Container Registry 인스턴스의 로그인 자격 정보를 얻습니다.
#!/bin/bash REGISTRY_CREDS=$(az acr credential show -n "$REGISTRY_NAME" --query "[username,passwords[0].value]" -o tsv) REGISTRY_USERNAME=$(echo "$REGISTRY_CREDS" | head -n1) REGISTRY_PASSWORD=$(echo "$REGISTRY_CREDS" | tail -n1)5단계에서 컨테이너 앱을 만들 때 명령의 출력에서 반환된 사용자 이름과 암호 중 하나를 사용합니다.
사용자 할당 관리 ID의 클라이언트 ID 및 리소스 ID를 얻으려면 az identity show 명령을 사용하세요.
UA_CLIENT_ID=$(az identity show \ --name "$UA_MANAGED_IDENTITY_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --query clientId -o tsv) UA_RESOURCE_ID=$(az identity show \ --name "$UA_MANAGED_IDENTITY_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --query id -o tsv)5단계에서 컨테이너 앱을 만들 때 명령 출력의 클라이언트 ID(GUID) 값과 리소스 ID를 사용합니다. 리소스 ID의 형식은
/subscriptions/<subscription-id>/resourcegroups/pythoncontainer-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-ua-managed-id.다음 명령을 실행하여 비밀 키 값을 생성합니다.
AZURE_SECRET_KEY=$(python -c 'import secrets; print(secrets.token_hex())')5단계에서 컨테이너 앱을 만들 때 비밀 키 값을 사용하여 환경 변수를 설정합니다.
참고 항목
이 단계에서 보여 주는 명령은 Bash 셸용입니다. 환경에 따라
python3사용하여 Python을 호출해야 할 수 있습니다. Windows에서는-c매개 변수의 명령을 작은따옴표 대신 큰따옴표로 묶어야 합니다. 환경에 따라py또는py -3사용하여 Python을 호출해야 할 수도 있습니다.az containerapp create 명령을 사용하여 환경에서 컨테이너 앱을 만듭니다.
az containerapp create \ --name "$CONTAINER_APP_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --environment "$APP_ENV_NAME" \ --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME" \ --target-port "$TARGET_PORT" \ --ingress external \ --registry-server "$REGISTRY_NAME.azurecr.io" \ --registry-username "$REGISTRY_USERNAME" \ --registry-password "$REGISTRY_PASSWORD" \ --user-assigned "$UA_RESOURCE_ID" \ --env-vars \ DBHOST="$POSTGRES_SERVER_NAME" \ DBNAME="$DATABASE_NAME" \ DBUSER="$UA_MANAGED_IDENTITY_NAME" \ RUNNING_IN_PRODUCTION=1 \ AZURE_CLIENT_ID="$UA_CLIENT_ID" \ AZURE_SECRET_KEY="$AZURE_SECRET_KEY"Django의 경우에만 데이터베이스 스키마를 마이그레이션하고 생성합니다. (Flask 샘플 앱에서는 자동으로 수행되며 이 단계를 건너뛸 수 있습니다.)
az containerapp exec 명령어를 사용하여 연결합니다.
az containerapp exec \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME그런 다음 셸 명령 프롬프트에서
python manage.py migrate입력합니다.컨테이너의 수정 버전을 마이그레이션할 필요가 없습니다.
웹 사이트를 테스트합니다.
이전에 입력한
az containerapp create명령은 앱을 탐색하는 데 사용할 수 있는 애플리케이션 URL을 출력합니다. URL이azurecontainerapps.io으로 끝납니다. 브라우저에서 URL로 이동합니다. 또는 az containerapp browse 명령을 사용할 수 있습니다.
다음은 레스토랑과 두 개의 리뷰를 추가한 후 샘플 웹 사이트의 예입니다.
배포 문제 해결
웹 사이트에 액세스하기 위한 애플리케이션 URL을 잊어버렸습니다.
Azure Portal에서 다음을 수행합니다.
- 컨테이너 앱의 개요 페이지로 이동하여 애플리케이션 URL찾습니다.
VS Code에서:
- Azure 보기(Ctrl+Shift+A)로 이동한 후 작업 중인 구독을 확장합니다.
Container Apps 노드를 확장하고, 관리 환경을 확장하고,python-container-app 마우스 오른쪽 단추로 클릭한 다음,열기선택합니다. VS Code는 애플리케이션 URL을 사용하여 브라우저를 엽니다.
Azure CLI에서:
- 명령
az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn사용합니다.
VS Code에서 Azure 작업의 빌드 이미지는 오류를 반환합니다.
"오류: 컨텍스트를 다운로드하지 못했습니다. VS Code 출력 창에서 URL이 잘못된지 확인한 후, Docker 확장에서 레지스트리를 새로 고치세요. 새로 고치려면 Docker 확장을 선택하고 레지스트리 섹션으로 이동하여 레지스트리를 찾은 다음 선택합니다.
Azure 작업에서
Azure Portal에서 컨테이너 앱을 만드는 동안 액세스 오류가 표시됩니다.
Azure Container Registry 인스턴스의 관리자 자격 증명을 사용하지 않도록 설정하면 "ACR '<이름>.azurecr.io'에 액세스할 수 없음"이 포함된 액세스 오류가 발생합니다.
포털에서 관리자 상태를 확인하려면 Azure Container Registry 인스턴스로 이동하여 액세스 키 리소스를 선택하고 관리 사용자 사용하도록 설정되어 있는지 확인합니다.
컨테이너 이미지가 Azure Container Registry 인스턴스에 표시되지 않음
- Azure CLI 명령 또는 VS Code 출력의 출력을 확인하고 성공을 확인하는 메시지를 찾습니다.
- Azure CLI를 사용하여 빌드 명령이나 VS Code 작업 프롬프트에서 레지스트리 이름이 올바르게 지정되었는지 확인합니다.
- 자격 증명이 만료되지 않았는지 확인합니다. 예를 들어 VS Code에서 Docker 확장에서 대상 레지스트리를 찾아 새로 고칩니다. Azure CLI에서
az login실행합니다.
웹 사이트에서 "잘못된 요청(400)"을 반환합니다.
"잘못된 요청(400)" 오류가 발생하면 컨테이너에 전달된 PostgreSQL 환경 변수를 확인합니다. 400 오류는 Python 코드가 PostgreSQL 인스턴스에 연결할 수 없음을 나타내는 경우가 많습니다.
이 자습서에 사용된 샘플 코드는 RUNNING_IN_PRODUCTION컨테이너 환경 변수가 존재하는지 확인하며, 이 변수는 1같은 모든 값으로 설정할 수 있습니다.
웹 사이트에서 "찾을 수 없음(404)"을 반환합니다.
- 컨테이너에 대한 개요 페이지에서 애플리케이션 URL 값을 확인합니다. 애플리케이션 URL에 "internal"이라는 단어가 포함된 경우 인그레스가 올바르게 설정되지 않습니다.
- 컨테이너의 수신을 확인합니다. 예를 들어, Azure Portal에서 컨테이너의 수신 리소스로 이동합니다. HTTP 수신 사용하도록 설정되어 있는지 확인하고 선택한 모든 곳에서 트래픽을 허용합니다.
웹 사이트가 시작되지 않거나 "스트림 시간 제한"이 표시되거나 아무것도 반환되지 않습니다.
- 로그를 확인합니다.
- Azure Portal에서 컨테이너 앱의 수정 관리 리소스로 이동하여 컨테이너에 대한 프로비전 상태 확인합니다.
- 상태가 프로비저닝인 경우, 프로비전이 완료될 때까지 기다리십시오.
- 상태가 실패
경우 수정 버전을 선택하고 콘솔 로그를 봅니다. 표시할 열의 순서를 선택하세요: 시간 생성, Stream_s, Log_s. 로그를 가장 최근으로 정렬하고 stderr열에서 Pythonstdout및 메시지를 찾습니다. Pythonprint출력은stdout메시지입니다.
- Azure CLI에서 az containerapp logs show 명령을 사용합니다.
- Azure Portal에서 컨테이너 앱의 수정 관리 리소스로 이동하여 컨테이너에 대한 프로비전 상태 확인합니다.
- Django 프레임워크를 사용하는 경우 데이터베이스에 restaurants_reviews 테이블이 있는지 확인합니다. 그렇지 않은 경우 콘솔을 사용하여 컨테이너에 액세스하고 실행
python manage.py migrate합니다.



