자습서: Web App for Containers에서 다중 컨테이너(미리 보기) 앱 만들기

참고 항목

사이드카 컨테이너(미리보기)는 App Service에서 멀티 컨테이너 앱을 이어받게 됩니다. 시작하려면 자습서: Azure App Service(미리 보기) 사용자 지정 컨테이너에 대한 사이드카 컨테이너 구성을 참조하세요.

Web App for Containers는 Docker 이미지를 사용할 수 있는 유연한 방법을 제공합니다. 이 자습서에서는 WordPress 및 MySQL을 사용하여 다중 컨테이너 앱을 만드는 방법을 알아봅니다. Cloud Shell에서 이 자습서를 완료하겠지만 Azure CLI 명령줄 도구(2.0.32 이상)를 사용하여 이러한 명령을 로컬로 실행할 수도 있습니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Web App for Containers에서 작동하도록 Docker Compose 구성 변환
  • Azure에 다중 컨테이너 앱 배포
  • 애플리케이션 설정 추가
  • 컨테이너용 영구 스토리지 사용
  • Azure Database for MySQL에 연결
  • 오류 문제 해결

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

필수 조건

이 자습서를 완료하려면 Docker Compose에 대한 경험이 필요합니다.

샘플 다운로드

이 자습서에서는 Docker의 작성 파일을 사용하지만 Azure Database for MySQL, 영구 스토리지 및 Redis를 포함하도록 수정합니다. 구성 파일은 Azure 샘플에 있습니다. 아래 샘플에서 depends_on지원되지 않는 옵션이며 무시됩니다. 지원되는 구성 옵션은 Docker Compose 옵션을 참조하세요.

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

Cloud Shell에서 자습서 디렉터리를 만든 다음, 변경합니다.

mkdir tutorial

cd tutorial

다음으로 다음 명령을 실행하여 자습서 디렉터리에 샘플 앱 리포지토리를 복제합니다. 그런 다음, multicontainerwordpress 디렉터리로 변경합니다.

git clone https://github.com/Azure-Samples/multicontainerwordpress

cd multicontainerwordpress

리소스 그룹 만들기

리소스 그룹은 웹앱, 데이터베이스, 스토리지 계정과 같은 Azure 리소스가 배포되고 관리되는 논리적 컨테이너입니다. 예를 들어 나중에 간단한 단계 하나만으로 전체 리소스 그룹을 삭제하도록 선택할 수 있습니다.

Cloud Shell에서 az group create 명령을 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 미국 중남부 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다. 표준 계층에서 App Service on Linux의 모든 지원 위치를 확인하려면 az appservice list-locations --sku S1 --linux-workers-enabled 명령을 실행합니다.

az group create --name myResourceGroup --location "South Central US"

일반적으로 사용자와 가까운 지역에서 리소스 그룹 및 리소스를 만듭니다.

명령이 완료되면 JSON 출력이 리소스 그룹 속성을 보여줍니다.

Azure App Service 계획 만들기

Cloud Shell에서 az appservice plan create 명령을 사용하여 리소스 그룹에 App Service 요금제를 만듭니다.

다음 예제에서는 표준 가격 책정 계층(--sku S1) 및 Linux 컨테이너(--is-linux)에서 myAppServicePlan이라는 App Service 계획을 만듭니다.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux

App Service 계획을 만든 경우 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

{
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "South Central US",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "South Central US",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
}

WordPress 및 MySQL 컨테이너가 포함된 Docker Compose

Docker Compose 앱 만들기

Cloud Shell에서 az webapp create 명령을 사용하여 myAppServicePlan App Service 계획에 다중 컨테이너 웹앱을 만듭니다. <app-name>을 고유한 앱 이름으로 바꿔야 합니다.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

웹앱이 만들어지면 Cloud Shell에서는 다음 예제와 비슷한 출력을 표시합니다.

{
  "additionalProperties": {},
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "enabled": true,
  < JSON data removed for brevity. >
}

앱으로 이동

(http://<app-name>.azurewebsites.net)에 배포된 앱으로 이동합니다. 앱을 로드하는 데 몇 분 정도 걸릴 수 있습니다. 오류가 발생하면 몇 분 후에 브라우저를 새로 고칩니다. 문제가 발생하여 이를 해결하려면 컨테이너 로그를 검토합니다.

Web App for Containers의 다중 컨테이너 앱 샘플

축하합니다! Web App for Containers에 다중 컨테이너 앱을 만들었습니다. 다음으로, Azure Database for MySQL을 사용하도록 앱을 구성합니다. 지금은 WordPress를 설치하지 마세요.

프로덕션 데이터베이스에 연결

프로덕션 환경에서 데이터베이스 컨테이너를 사용하지 않는 것이 좋습니다. 로컬 컨테이너는 확장할 수 없습니다. 대신 Azure Database for MySQL을 사용하면 확장할 수 있습니다.

Azure Database for MySQL 서버 만들기

az mysql server create 명령을 사용하여 Azure Database for MySQL 서버를 만듭니다.

다음 명령에서 <mysql-server-name> 자리 표시자가 있는 MySQL 서버 이름을 바꿉니다(유효한 문자: a-z, 0-9, -). 이 이름은 MySQL 서버의 호스트 이름(<mysql-server-name>.database.windows.net)의 일부이며, 전역적으로 고유해야 합니다.

az mysql server create --resource-group myResourceGroup --name <mysql-server-name>  --location "South Central US" --admin-user adminuser --admin-password My5up3rStr0ngPaSw0rd! --sku-name B_Gen5_1 --version 5.7

서버를 만드는 작업이 완료될 때까지 몇 분 정도 걸릴 수 있습니다. MySQL 서버를 만들면 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

{
  "administratorLogin": "adminuser",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.database.windows.net",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "southcentralus",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
}

서버 방화벽 구성

az mysql server firewall-rule create 명령을 사용하여 클라이언트 연결을 허용하도록 MySQL 서버에 대한 방화벽 규칙을 만듭니다. 시작 IP 및 끝 IP가 0.0.0.0으로 설정되면 방화벽이 다른 Azure 리소스에 대해서만 열립니다.

az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

앱이 사용하는 아웃바운드 IP 주소만 사용으로 방화벽 규칙을 훨씬 더 엄격하게 제한할 수 있습니다.

WordPress 데이터베이스 만들기

az mysql db create --resource-group myResourceGroup --server-name <mysql-server-name> --name wordpress

데이터베이스를 만들면 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

{
  "additionalProperties": {},
  "charset": "latin1",
  "collation": "latin1_swedish_ci",
  "id": "/subscriptions/12db1644-4b12-4cab-ba54-8ba2f2822c1f/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>/databases/wordpress",
  "name": "wordpress",
  "resourceGroup": "myResourceGroup",
  "type": "Microsoft.DBforMySQL/servers/databases"
}

WordPress의 데이터베이스 변수 구성

WordPress 앱을 이 새 MySQL 서버에 연결하려면 MYSQL_SSL_CA에서 정의된 SSL CA 경로를 포함하여 몇 가지 WordPress 관련 환경 변수를 구성합니다. DigiCertBaltimore CyberTrust Root는 아래의 사용자 지정 이미지에서 제공됩니다.

이렇게 변경하려면 Cloud Shell에서 az webapp config appsettings set 명령을 사용합니다. 앱 설정은 대/소문자를 구분하고 공백으로 구분합니다.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WORDPRESS_DB_HOST="<mysql-server-name>.mysql.database.azure.com" WORDPRESS_DB_USER="adminuser" WORDPRESS_DB_PASSWORD="My5up3rStr0ngPaSw0rd!" WORDPRESS_DB_NAME="wordpress" MYSQL_SSL_CA="BaltimoreCyberTrustroot.crt.pem"

앱 설정을 만든 경우 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

[
  {
    "name": "WORDPRESS_DB_HOST",
    "slotSetting": false,
    "value": "<mysql-server-name>.mysql.database.azure.com"
  },
  {
    "name": "WORDPRESS_DB_USER",
    "slotSetting": false,
    "value": "adminuser"
  },
  {
    "name": "WORDPRESS_DB_NAME",
    "slotSetting": false,
    "value": "wordpress"
  },
  {
    "name": "WORDPRESS_DB_PASSWORD",
    "slotSetting": false,
    "value": "My5up3rStr0ngPaSw0rd!"
  },
  {
    "name": "MYSQL_SSL_CA",
    "slotSetting": false,
    "value": "BaltimoreCyberTrustroot.crt.pem"
  }
]

환경 변수에 대한 자세한 내용은 환경 변수 구성을 참조하세요.

MySQL TLS/SSL 및 기타 구성에 사용자 지정 이미지 사용

TLS/SSL은 기본적으로 Azure Database for MySQL에서 사용됩니다. WordPress에는 MySQL에서 TLS/SSL을 사용하기 위한 추가 구성이 필요합니다. WordPress '공식 이미지'는 추가 구성을 제공하지 않지만, 사용자의 편의를 위해 사용자 지정 이미지가 준비되어 있습니다. 실제로 원하는 변경 내용을 자신의 이미지에 추가합니다.

사용자 지정 이미지는 Docker 허브의 WordPress '공식 이미지'를 기반으로 합니다. Azure Database for MySQL에 대한 이 사용자 지정 이미지는 다음과 같이 변경되었습니다.

Redis에 대해 다음과 같이 변경되었습니다(다음 섹션에서 사용됨).

사용자 지정 이미지를 사용하려면 docker-compose-wordpress.yml 파일을 업데이트합니다. Cloud Shell에서 텍스트 편집기를 열고 image: mcr.microsoft.com/azuredocs/multicontainerwordpress를 사용하도록 image: wordpress를 변경합니다. 데이터베이스 컨테이너가 더 이상 필요하지 않습니다. 구성 파일에서 db, environment, depends_on, volumes 섹션을 제거합니다. 파일은 다음 코드와 같습니다.

version: '3.3'

services:
   wordpress:
     image: mcr.microsoft.com/azuredocs/multicontainerwordpress
     ports:
       - "8000:80"
     restart: always

새 구성으로 앱 업데이트

Cloud Shell에서 az webapp config container set 명령을 사용하여 다중 컨테이너 웹앱을 다시 구성합니다. <app-name>을 앞에서 만든 웹앱의 이름으로 바꿔야 합니다.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

앱이 다시 구성되면 Cloud Shell에서는 다음 예제와 비슷한 정보를 표시합니다.

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICB3b3JkcHJlc3M6CiAgICAgaW1hZ2U6IG1zYW5nYXB1L3dvcmRwcmVzcwogICAgIHBvcnRzOgogICAgICAgLSAiODAwMDo4MCIKICAgICByZXN0YXJ0OiBhbHdheXM="
  }
]

앱으로 이동

(http://<app-name>.azurewebsites.net)에 배포된 앱으로 이동합니다. 이제 앱에서 Azure Database for MySQL을 사용합니다.

Web App for Containers의 샘플 다중 컨테이너 앱

영구 스토리지 추가

이제 다중 컨테이너가 Web App for Containers에서 실행됩니다. 그러나 지금 WordPress를 설치하고 나중에 앱을 다시 시작하면 WordPress 설치가 없어진 것을 알게 됩니다. 이는 Docker Compose 구성이 현재 컨테이너 내의 스토리지 위치를 가리키기 때문에 발생합니다. 컨테이너에 설치된 파일은 앱을 다시 시작할 때까지 유지되지 않습니다. 이 섹션에서는 WordPress 컨테이너에 영구 스토리지를 추가합니다.

환경 변수 구성

영구 스토리지를 사용하려면 App Service 내에서 이 설정을 사용하도록 설정합니다. 이렇게 변경하려면 Cloud Shell에서 az webapp config appsettings set 명령을 사용합니다. 앱 설정은 대/소문자를 구분하고 공백으로 구분합니다.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

앱 설정을 만든 경우 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_NAME",
    "slotSetting": false,
    "value": "wordpress"
  },
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  }
]

구성 파일 수정

Cloud Shell의 텍스트 편집기에서 docker-compose-wordpress.yml 파일을 엽니다.

volumes 옵션은 파일 시스템을 컨테이너 내의 디렉터리에 매핑합니다. ${WEBAPP_STORAGE_HOME}은 앱의 영구 스토리지에 매핑되는 App Service의 환경 변수입니다. WordPress 파일이 컨테이너 대신 영구 스토리지에 설치되도록 이 환경 변수를 volumes 옵션에 사용합니다. 파일을 다음과 같이 수정합니다.

wordpress 섹션에서 다음 코드와 같이 volumes 옵션을 추가합니다.

version: '3.3'

services:
   wordpress:
     image: mcr.microsoft.com/azuredocs/multicontainerwordpress
     volumes:
      - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
     ports:
       - "8000:80"
     restart: always

새 구성으로 앱 업데이트

Cloud Shell에서 az webapp config container set 명령을 사용하여 다중 컨테이너 웹앱을 다시 구성합니다. <app-name>을 고유한 앱 이름으로 바꿔야 합니다.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

명령이 실행되면 다음 예제와 비슷한 출력이 표시됩니다.

[
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  },
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

앱으로 이동

(http://<app-name>.azurewebsites.net)에 배포된 앱으로 이동합니다.

이제 WordPress 컨테이너에서 Azure Database for MySQL과 영구 스토리지를 사용합니다.

Redis 컨테이너 추가

WordPress '공식 이미지'에는 Redis에 대한 종속성이 포함되어 있지 않습니다. 이러한 종속성 및 WordPress에서 Redis를 사용하는 데 필요한 추가 구성은 이 사용자 지정 이미지에 준비되어 있습니다. 실제로 원하는 변경 내용을 자신의 이미지에 추가합니다.

사용자 지정 이미지는 Docker 허브의 WordPress '공식 이미지'를 기반으로 합니다. Redis에 대한 이 사용자 지정 이미지는 다음과 같이 변경되었습니다.

다음 예제와 같이 구성 파일의 맨 아래에 redis 컨테이너를 추가합니다.

version: '3.3'

services:
   wordpress:
     image: mcr.microsoft.com/azuredocs/multicontainerwordpress
     ports:
       - "8000:80"
     restart: always

   redis:
     image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
     environment:
      - ALLOW_EMPTY_PASSWORD=yes
     restart: always

환경 변수 구성

Redis를 사용하려면 App Service 내에서 WP_REDIS_HOST 설정을 사용하도록 설정합니다. 이는 WordPress에서 Redis 호스트와 통신하는 데 필요한 설정입니다. 이렇게 변경하려면 Cloud Shell에서 az webapp config appsettings set 명령을 사용합니다. 앱 설정은 대/소문자를 구분하고 공백으로 구분합니다.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WP_REDIS_HOST="redis"

앱 설정을 만든 경우 Cloud Shell은 다음 예제와 비슷한 정보를 표시합니다.

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_USER",
    "slotSetting": false,
    "value": "adminuser"
  },
  {
    "name": "WP_REDIS_HOST",
    "slotSetting": false,
    "value": "redis"
  }
]

새 구성으로 앱 업데이트

Cloud Shell에서 az webapp config container set 명령을 사용하여 다중 컨테이너 웹앱을 다시 구성합니다. <app-name>을 고유한 앱 이름으로 바꿔야 합니다.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file compose-wordpress.yml

명령이 실행되면 다음 예제와 비슷한 출력이 표시됩니다.

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

앱으로 이동

(http://<app-name>.azurewebsites.net)에 배포된 앱으로 이동합니다.

단계를 완료하고 WordPress를 설치합니다.

Redis에 WordPress 연결

WordPress 관리자로 로그인합니다. 왼쪽 탐색 영역에서 플러그 인을 선택한 다음, 설치된 플러그 인을 선택합니다.

WordPress 플러그 인 선택

여기서는 모든 플러그 인이 표시됩니다.

플러그 인 페이지에서 Redis Object Cache를 찾은 다음, 활성화를 클릭합니다.

Redis 활성화

설정을 클릭합니다.

설정 클릭

개체 캐시 사용 단추를 클릭합니다.

'개체 캐시 사용' 단추 클릭

WordPress가 Redis 서버에 연결됩니다. 연결 상태가 동일한 페이지에 표시됩니다.

WordPress는 Redis 서버에 연결합니다. 연결 상태가 같은 페이지에 나타납니다.

축하합니다! WordPress가 Redis에 연결되었습니다. 이제 프로덕션 준비가 완료된 앱에서 Azure Database for MySQL, 영구 스토리지 및 Redis를 사용합니다. 그리고 App Service 계획을 여러 인스턴스로 확장할 수 있습니다.

Docker 컨테이너 로그 찾기

여러 컨테이너를 사용하는 데 문제가 발생하면 https://<app-name>.scm.azurewebsites.net/api/logs/docker로 이동하여 컨테이너 로그에 액세스할 수 있습니다.

다음 예제와 비슷한 출력이 표시됩니다.

[
   {
      "machineName":"RD00XYZYZE567A",
      "lastUpdated":"2018-05-10T04:11:45Z",
      "size":25125,
      "href":"https://<app-name>.scm.azurewebsites.net/api/vfs/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log",
      "path":"/home/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log"
   }
]

각 컨테이너에 대한 로그와 부모 프로세스에 대한 추가 로그가 표시됩니다. 해당 href 값을 브라우저에 복사하여 로그를 살펴봅니다.

배포 정리

샘플 스크립트가 실행된 후, 다음 명령을 사용하여 리소스 그룹 및 리소스 그룹과 연관된 모든 리소스를 제거할 수 있습니다.

az group delete --name myResourceGroup

다음 단계

이 자습서에서는 다음 작업 방법을 알아보았습니다.

  • Web App for Containers에서 작동하도록 Docker Compose 구성 변환
  • Azure에 다중 컨테이너 앱 배포
  • 애플리케이션 설정 추가
  • 컨테이너용 영구 스토리지 사용
  • Azure Database for MySQL에 연결
  • 오류 문제 해결

사용자 지정 도메인 및 인증서를 사용하여 앱을 보호하는 방법을 알아보려면 다음 자습서로 이동합니다.

또는 다른 리소스를 확인합니다.