Azure WebApp(App Service)으로 API 배포하기

Azure WebApp(App Service)으로 API 배포하기

요즘 AWS/Azure/GCP 등 클라우드 환경의 일반화로 굳이 서버/네트워크 장비 등 자체구매/운영 (온프레미스) 하지 않아도 된다.

그렇기에 최소한의 노력을 들여 PaaS 서비스 또는 Container를 지원하는 서비스를 사용하여 쉽게 배포/운영 할 수 있다.

Azure에서는 App Service라는 웹 어플리케이션 용 PaaS를 제공한다.

Java, Node.JS, Python 등 대부분의 웹프레임워크를 지원한다.

이 서비스를 이용하면 굳이 클라우드 환경에서 WEB/WAS/DB 등 서버를 별도 생성/구축하지 않고 웹 서비스를 구축할 수 있다.

클라우드 환경에서 VM을 활용해서 구축한다면, VM을 생성하고, OS 설치/운영하고, OS에 필요 라이브러리를 설치/구동하고, 개발 모듈을 올려서 연동하는 등 다수의 구축작업을 해야한다.

Azure App Service, Azure Functions을 활용하면 이러한 부분을 간소화해서 구축/운영할 수 있다.

0. Azure 웹앱의 동작 원리

Azure 웹앱은 기본적으로 Docker Container로 구동한다.

내부적으로 Oryx라는 Container 빌드 패키지를 사용한다.

Oryx 상세 파라미터

Wep App 배포하기

다음과 같은 순서로 진행하도록 한다.

  1. Python Web Source Code 확보
  2. Azure App Service 생성
  3. Source Code 배포 (Azure Upload)
  4. 구동 확인

Azure에서 제공하는 Sample을 Github에서 다운로드 받아 사용하도록 한다. 아래는 Python Web Framework인 Flask의 Hello World이다.
MS Flask Web App

1
2
$ git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
$ cd msdocs-python-fastapi-quickstart

(소스코드 동작 확인) 로컬에서 정상 동작하는지 일단 확인을 해 보자.

1
2
3
4
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt
$ flask run

1. Azure App Service 생성/설정

Azure App Servie를 생성해준다.

App Service를 생성하는 방법은

  1. Azure Portal
  2. Azure CLI
  3. VS Code
  4. Azure SDK

필자는 Azure Portal에서 하곘다.

Azure Portal 로그인 후 좌측 상단 메뉴에서 “리소스 만들기”를 클릭한다.

그 중에서 웹 앱을 클릭한다.

웹앱 만들기에서 설정이 필요한 부분들은 아래와 같다.

  • 구독/리소스그룹 : 본인의 구독과 리소스 그룹을 선택 or 생성해 주면 된다.
  • 웹앱 이름 : 겹치지 않도록 이름을 설정하자. 예) “azure-webapp-python-test” 이 이름은 웹앱 생성후, “https://<웹앱이름>.azurewebsites.net”로 azure 기본 제공하는 subdomain name이 된다.
  • 게시 방식 : 코드, docker 컨테이너, 정적웹앱. 우리는 가장 단순하게 “코드”를 선택하도록 하자.
  • 런타임 스택 : Python 3.9를 선택. 다른버전 선택도 가능하다.
  • 운영체제 : Linux. (Windows를 선택해도 무방하나, 본 포스팅은 Linux를 기반으로 진행한다.)
  • 지역 : 본인이 편한 위치를 선택하면 된다.
  • 가격정책플랜 : 우리는 테스트 해보는 것이기 때문에 기본으로 사용하자.
  • “검토 + 만들기 “ 버튼을 누른다. 유효성이 검토되면 설정에 대한 요약페이지가 출력되고, 최종적으로 하단에 “만들기” 버튼을 또 한번 눌러 주어야 한다. 이후. “…배포 진행 중”이라는 페이지가 출력 될 것이다. 2~3분 기다리면 “배포 성공” 메세지가 출력된다.
  • “리소스 이동” 버튼을 눌러준다.

웹앱 만들기

웹앱이 생성 완료되면, “리소스로 이동”하여 웹앱의 왼쪽 메뉴중 “개요”에서 전반적인 웹앱의 정보를 확인한다.
우측 상단의 FTP/FTPS 등의 정보는, 배포 시 사용하는데, 민감정보이므로 노출되지 않도록 주의한다.

배포

좌측에 “배포 센터”로 이동한다.

실제 상용에서는 Stage -> Production으로 나누어서 지속배포(CI/CD)체계를 구축하나, 이 포스팅에서는 단순화하여 “로컬 Git”을 사용하여 배포하겠다.

“소스 > 로컬 Git”을 선택해준다.

“저장” 버튼을 클릭해야 적용이 된다.

저장이 완료되면 “Git Clone URI” 정보가 출력된다.

이 URI를 통해 “git push”를 실행하므로 URI를 복사해 두도록한다.

여기서 중요한점 중 하나는 사용자 이름이다. 사용자 이름은 기본적으로 다음과 같이 표기되어 있다 <웹앱 이름>$<웹앱 이름>

실제 Git Push 할 때 인증은 “$<웹앱 이름>” 부분만 사용된다. 예를 들어 표기된 사용자 이름이 “flask-test$flask-test”라면, 실제 사용되는 부분은 $를 포함한 “$flask-test” 부분이 해당된다. 이부분을 잘못 입력하면 인증실패로 git push가 실행되지 않는다. 패스워드의 경우 전체를 복사하여 사용하면 된다.

이제 Azure Portal에서 설정할 내용은 완료하였다. 다음은 Terminal 에서 Git push를 진행하면된다.

본 포스팅에서는 별도 빌드 또는 추가 설정이 필요없기 때문에 “설정/구성”을 추가로 진행하지 않았다. 그러나, 상세설정 들이 필요하다면 아래처럼 “구성” 메뉴에서 “application 설정”, “시작 명령어” 등을 상세 지정할 수 있다. “구성>애플리케이션 설정”은 Application 내부에서 사용할 별도의 설정을 지정할 수 있다.

설정/구성

위와 같이 하면 FTP 기본 인증 게시가 비활성화되어 있다고 에러가 난다. 아래와 같이 바꿔준다.

FTP 기본 인증 게시 자격 증명 설정

설정 저장이 완료되면, 아래와 같이 페이지에 “Git Clone URI” 정보가 출력된다.

Git Clone URI

이 URI로 우리는 ‘git push’를 실행하게 된다.

git push를 할 때 인증정보는 “FTP 자격증명” 메뉴에서 확인할 수 있다.

해당 탭에서 Git Clone URI를 다시 확인할 수 있으며, 사용자 이름/암호를 확인할 수 있다.

향후에는 “게시 프로필 관리”를 통해 인증이 관리되어야 한다.

Local Git 소스 배포

소스코드 폴더로 이동하여 Git Push를 진행하도록 하자. 이 때 는 Azure Portal의 “Local Git 자격증명”에서 확인한 Git Clone URI이다. 사용자명/패스워드는 이전 절에서 거론했던 내용을 사용한다.

ztna를 끄고 push를 진행해야 한다.

1
2
$ git remote add azure <GIT URI>
$ git push -u azure main:master

이제 소스코드 배포를 완료 했다. 앞서 거론했든이 Python은 별다른 빌드를 하지 않기 때문에, 별다른 설정파일 없이 웹앱을 생성할 수 있다. 이제 웹앱의 “개요”페이지에서 확인할 수 있는 웹앱 URL을 확인하고, 웹브라우저로 접속해 보기 바란다.

Reference

[Azure] Azure 웹앱(App Service)으로 API 서버 만들기 - 1

Azure WebApp(App Service)으로 API 배포하기

https://hamin7.github.io/2025/01/07/Azure-WebApp-Sample-Deploy/

Author

hamin

Posted on

2025-01-07

Updated on

2025-02-25

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.