Azure Functions를 로컬 환경에서 디버깅

소개



최근 유행? 의 Serverless 아키텍처를 시험하기 위해, Azure Functions를 조사해 보았습니다만 Storage를 사용하면 반드시 과금되어 버리는 것 같습니다 (미미한 것입니다만,,). 그래서 로컬 환경을 구축하는 방법을 찾아 보면 보통이었으므로 Node.js를 사용하여 쉽게 시도해 보겠습니다.

동작 확인 환경



OS: Window 10
Node.js: v4.4.7
npm:3.10.6
Visual Studio Code: 1.7.2

*Node.js는 6.x LTS or later (required by the Yeoman dependency)가 권장하는 것 같습니다만, 우선 움직였습니다.

1. Azure CLI 및 Azure Functions Core Tools 설치


npm install -g azure-cli
npm install -g azure-functions-core-tools

을 실행하고 Azure CLI 및 Azure Functions Core Tools를 설치합니다.

2. Azure function 프로젝트 만들기



다음과 같이 폴더를 만든 다음 func init 명령으로 프로젝트를 만듭니다.
c:\dev\azure>mkdir AzureFunctionsDemo
c:\dev\azure>cd AzureFunctionsDemo
c:\dev\azure\AzureFunctionsDemo>func init
Writing .gitignore
Writing host.json
Writing appsettings.json
Initialized empty Git repository in c:/dev/azure/AzureFunctionsDemo/.git/

3. 간단한 function 만들기 및 실행


func new 명령으로 템플릿에서 함수를 만듭니다.
c:\dev\azure\AzureFunctionsDemo>func new

     _-----_
    |       |    ╭──────────────────────────╮
    |--(o)--|    │   Welcome to the Azure   │
   `---------´   │   Functions generator!   │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? Select an option...
  1) List all templates
  2) List templates by language
  3) List templates by type
  Answer: 1

먼저 1을 입력하고 모든 템플릿을 선택해 봅니다.
? Select an option... List all templates
There are 63 templates available
? Select from one of the available templates...
  HttpTrigger-Batch
  HttpTrigger-CSharp
  HttpTrigger-FSharp
> HttpTrigger-JavaScript
  HttpTrigger-Powershell
  ImageResizer-CSharp
  ImageResizer-FSharp
(Move up and down to reveal more choices)

이번에는 HttpTrigger-JavaScript를 선택하고 HttpTrigger-JS라는 이름의 함수를 만듭니다.
? Select from one of the available templates... HttpTrigger-JavaScript
? Enter a name for your function... HttpTrigger-JS
Creating your function HttpTrigger-JS...
Location for your function...
c:\dev\azure\AzureFunctionsDemo\HttpTrigger-JS


Tip: run `func run <functionName>` to run the function.

그런 다음 func run 명령으로 방금 만든 function을 실행합니다.
c:\dev\azure\AzureFunctionsDemo>func run .\HttpTrigger-JS\ -c "{\"name\": \"Donna\"}"

We need to launch a server that will host and run your functions.
The server will auto load any changes you make to the function.
Do you want to always display this warning before launching a new server [yes/no]? [yes]

Response Status Code: OK
"Hello Donna"

매번 경고 메시지를 표시하거나 듣기 때문에 우선 Yes로 Enterkey를 누르지만 아무 일도 일어나지 않으므로 다시 Enterkey를 합니다. 그러면 다른 DOS 창과 같은 화면이 시작되고 로컬 환경에서 기능이 실행됩니다.

원래 윈도우 (DOS 창)


AzureFunction 실행 중인 Window


AzureFunction 실행중인 Window에 이번에 만든 function의 URL이 표시되므로 아래와 같이 매개 변수를 설정하고 브라우저에 URL을 입력하면,
http://localhost:7071/api/HttpTrigger-JS?name=test

"Hello test"
및 브라우저에 표시됩니다.

3. Visual Studio Code로 디버깅



다음 명령을 사용하여 Visual Studio Code에서 현재 프로젝트를 엽니다.
c:\dev\azure\AzureFunctionsDemo>code .

Visual Studio Code에서 index.js에 Breakpoint를 설정하고 다음 명령을 실행합니다.
c:\dev\azure\AzureFunctionsDemo>func run .\HttpTrigger-JS\ -c "{\"name\": \"Debugging!\"}" --debug
launch.json configured. Setup your break points, launch debugger (F5), and press any key to continue...

launch.json configured로 표시되지만 VisualStudio에서 원격 디버깅 할 수 있도록 다음과 같은 내용으로 launch.json이 자동으로 만들어집니다.

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to Azure Functions",
            "type": "node",
            "request": "attach",
            "port": 5858
        }
    ]
}

또, 이 타이밍에 F5 키 혹은 재생 버튼으로 debugger를 기동합니다.
다시 Enterkey를 누르면 Breakpoint까지 debugger의 처리가 진행됩니다.

일단 처리를 빠져도 브라우저에서 function을 호출하면 다시 debugger의 처리가 움직입니다.
http://localhost:7071/api/HttpTrigger-JS?name=test

Visual Studio Code에서 Debug의 화면.


상당히 간단하게 로컬 환경에서 움직일 수 있는 인상입니다.
다음은 Storage Emulator를 사용하고 queue를 트리거로 한 Azure function을 사용해 보겠습니다.

속편



Azure Functions Queue 트리거 사용
Azure Functions를 로컬 환경에서 Azure 환경으로 배포

참고 URL



Running Azure Functions Locally with the CLI and VS Code
Azure Functions에서 Azure Storage 트리거 및 바인딩
Azure Storage 연결 문자열 구성
개발 및 프로덕션 환경에서 Windows Azure Storage 서비스의 연결 문자열 간 전환
Azure CLI 설치

좋은 웹페이지 즐겨찾기