본문 바로가기

일::개발

Python으로 Azure에 Serverless 웹 구축하기 - 2. 프로젝트 생성

Python 환경을 갖췄으면 이제 프로젝트를 생성해본다.

 

프로젝트 디렉토리를 만들고 Visual Studio Code 를 실행한다. 

VisualStudioCode uaremine$ mkdir pfaf-sample
VisualStudioCode uaremine$ cd pfaf-sample

VisualStudioCode uaremine$ pyenv local functions-flask       (이전 포스트 참조)
(functions-flask) pfaf-sample uaremine$
(functions-flask) pfaf-sample uaremine$ code .

(참고로 'code' 로 VSC 실행되게 하는 것은 https://code.visualstudio.com/docs/setup/mac 참조)

 

혹시 아직 설치를 하지 않았다면 Azure Functions Core Tools 설치는 https://uaremine.tistory.com/6 여기를 참조

 

VSC에 설치한 관련 Extensions

Visual Studio Code(이하 VSC)에 필요한 extensions 를 설치한다. 일단 Azure Account는 필요하고, Azure App Service는 잘 모르겠다. 일단 Azure Functions 와 Python 만 설치해보고 안되면 더 필요한 것을 설치해봐도 좋고, 내 환경에서 되는 것을 확인했으니 위의 4가지 (JS-CSS-HTML Formatter 제외) 는 설치해놓고 시작하면 안전할 듯.

 

(Azure 계정은 이미 있다는 가정 하에) 몇 가지 azure 관련된 extension을 설치하면 왼쪽에 Azure 탭이 생긴다. 일단 로그인을 해보자.

 

Sign in to Azure... 를 선택하거나 ⇧ + ⌘ + P 를 누르면 나타나는 명령어 입력창에 "Azure: Sign In" 입력하면 

브라우저 창에 로그인 화면이 뜬다. 로그인하고 닫으면 VSC 하단에 로그인된 Azure 계정이 표시된다.

Subscriptions 도 선택하면 이미 만들어놓은 function 들이 (있으면) 보인다.

 

이제 Azure에 function을 만들고 로컬 프로젝트를 해당 function에 deploy 하는 방식으로 진행할텐데, Azure function은 Azure portal (web)에서 미리 만들어두는 방법도 있고, VSC에서 생성하는 방법도 있다.

VSC에서는 세세한 옵션을 조정할 수 없지만 일단 돌아가게 만들어지니 처음에는 로컬 프로젝트를 먼저 만들고 VSC에서 Azure function을 만드는 방식으로 해보자.

 

Functions 옆에 있는 폴더 모양 아이콘(Create New Project)를 누르면 프로젝트 생성 창이 뜬다. 미리 만들어놓은 프로젝트 디렉토리(pfaf-sample)를 선택하자.

language 는 Python, template는 HTTP trigger 선택.

function name 은 flask-sample 이라고 (성의 없게) 정해보자.

Authorization level 은 Function 선택하면 VSC가 열심히 프로젝트를 만들다가 Python Path 를 물어본다.

pyenv - virtualenv가 적용된 프로젝트 디렉토리에서 Python Path 를 찾아보자.

(functions-flask) pfaf-sample uaremine$ which python
/usr/local/var/pyenv/shims/python

(functions-flask) pfaf-sample uaremine$ pyenv which python
/usr/local/var/pyenv/versions/functions-flask/bin/python

which python 가 아니고 pyenv which python 해야 프로젝트용으로 설정한 가상 환경에서 사용하는 python path 가 나온다.

pyenv which python 의 결과(내 경우는 /usr/local/var/pyenv/versions/functions-flask/bin/python)를 입력해주자.

Python용 Linter가 없다고 나올 수도 있는데, Install 해주거나 싫으면 안 해도 실행은 된다.

 

여기까지 에러 없이 완료되면 일단 뭔가 돌려볼 수 있다. F5 눌러보자!

반가운 그림이 나오고 빨간 글씨가 안 보이면 뭔가 마음이 놓인다.

나오는 URL (http://localhost:7071/api/flask-sample) 에서 ⌘ + click 하면 브라우저가 열린다.

오오 뭔가 나온다.

자동으로 생성되는 flask-sample/__init__.py 를 보면 이렇게 되어 있다.

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

 

name 파라미터를 넣어주면 

일단 로컬에서 function을 돌려보는 것은 성공! 다음은 Azure에서 돌려보기!

Deploy To Azure Functions

요약 : 프로젝트 창의 프로젝트 폴더에서 오른쪽 누르고 Deploy to Function App...

왼쪽 탭에서 Explorer 선택하고 생성한 function name (아까 flask-fample 이라고 성의없이 만들었었다.)에서 오른쪽 클릭한 후에 Deploy to Function App... 선택하면 사실 끝이다.

 

미리 만들어놓은 Function App 이 없으니 'Create New Function App in Azure' 선택하면

globally unique 한 function app 이름을 지어달라고 한다. 어렵지만 만들어보자. 

막 알아서 west-us 에 Function App 을 만들고 프로젝트 deploy까지 해준다. (한참 걸림)

deploy 가 성공적으로 끝나면 (운 좋으면 한번에 될 수도...) VSC의 왼쪽 탭에서 Azure를 선택하고 Functions 항목에 새 Function App 이 생성되었는지 확인해본다. 오오! 있다!!!

Azure Portal에서도 확인해보자.

위에서 function app 이름을 pfaf-flask-sample 로 지으려고 했는데 오타가... 덕분에 pfafflaskfample 이라는 이상한 리소스 그룹이 만들어지고, pfaf-flask-fample 이라는 절대 겹칠 리가 없는 이름의 Function App 이 만들어졌다. 미국 서부에.

 

Function App 을 선택하고 flask-sample function 을 선택하면 내가 만든... 은 아니고 VSC가 만들어준 function이 올라가 있다. "</>함수 URL 가져오기" 를 선택해서 브라우저에 붙이거나 오른쪽의 테스트 탭에서 잘 돌아가는지 확인해보자.

function 만들 때 Authorization Level 을 Function으로 해서 code parameter가 붙어야 한다. Authorization level을 anonymous로 변경하면 code 없이 테스트 가능하다. function.json 에서 변경해주면 된다.

오오오!!! 된다! 로컬에서처럼 name parameter를 넣어주면 똵!

자, 여기까지 Python 으로 Azure Function App을 일단 돌려보는 과정이었다.

다음에는 Flask로 만든 웹사이트를 Function에 올려서 Serverless Web을 만들어보기.