Azure

[Azure] 로컬 환경에서 Function 개발하기

비번변경 2024. 11. 29. 14:48

개요

2024.11.15-[Azure] Functions 이란에서 Azure Function에 대한 개념을 알아보았다. Azure Function은 Azure Portal에서 개발하고 테스트를 수행할 수 있지만, 이번 글에서는 로컬 환경에서 개발하고 테스트를 수행하는 방법을 적어둔다.

 

사용한 환경은 Ubuntu 20.04.5 LTS이다. 

 

 

Core Tool 설치

로컬 환경에서 Azure Function을 개발하고 테스트하기 위해서는 Core Tool을 필수적으로 설치해야 한다.

 

1. Microsoft 패키지 리포지토리 GPG 키 설치

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

 

2. APT 원본 목록 설정

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs 2>/dev/null)-prod $(lsb_release -cs 2>/dev/null) main" > /etc/apt/sources.list.d/dotnetdev.list'

 

3. APT 업데이트

sudo apt-get update

 

4. Core Tool 설치

sudo apt-get install azure-functions-core-tools-4

 

 

프로젝트 생성

func init 명령어를 사용하여 Azure Function 프로젝트를 생성한다. 프로젝트는 현재 위치의 프로젝트 이름으로 된 하위 디렉터리로 생성된다.

--worker-runtime를 선택하면 Function 개발에 사용할 프로그래밍 언어를 지정할 수 있다. 만약 지정하지 않으면 프로젝트 생성 중 사용자 입력으로 지정하게끔 되어 있다.

func init <프로젝트 이름>
# --worker-runtime : 프로그래밍 언어 지정

## 예시
func init first_study
func init first_study --worker-runtime python

 

 

Function 트리거 생성

func new 명령어를 사용하여 생성한 프로젝트에 Function 트리거를 생성한다. 명령어를 실행하는 위치는 프로젝트 내여야 한다. 이번 글에서는 HTTP 함수를 만들어본다.

func new
# --template : 트리거 템플릿
# --name : 템플릿 이름


## 예시
func new
func new --template "Http Trigger" --name MyHttpTrigger

트리거 생성 중 인증 수준을 지정하게 되는데, 로컬 환경에서는 권한 부여가 동작하지 않는다고 한다. 적당히 지정하면 된다.

정상적으로 트리거가 생성되면 자동으로 아래와 같은 내용의 Python 파일이 생성된다.

 

 

Function 실행

func start 명령어를 사용하여 생성한 Function을 실행한다. 명령어는 프로젝트 루트 경로에서 실행해야 한다.

func start

이상이 없다면 출력으로 Function을 트리거할 수 있는 URL을 확인할 수 있다.

 

 

호출 테스트

curl 등으로 동작을 확인해보자.

curl http://localhost:<PORT>/api/<FUNCTION_NAME>

# 예시
curl http://localhost:7071/api/myhttptrigger

 

 

참고 문서

https://learn.microsoft.com/ko-kr/azure/azure-functions/functions-run-local?tabs=linux%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-python