연습 - Core Tools를 사용하여 로컬에서 함수 만들기
Azure Functions Core Tools로 다음을 수행하여 사용자 컴퓨터에서 함수를 로컬로 개발할 수 있습니다.
- 함수 프로젝트에 필요한 파일 및 폴더 만들기
- 프로젝트의 루트 디렉터리에서 로컬로 실행되는 Functions 호스트 제공하기
간단한 관심을 계산하는 함수를 개발하여 Azure Functions를 사용하여 로컬로 작업을 시작하기로 결정합니다. 결국 함께 작동하고 다른 서비스 및 데이터베이스를 호출하는 더 복잡한 함수를 만들 수 있습니다. 핵심 도구를 사용하여 기본 대출 계산을 수행하는 함수를 빌드하는 것이 좋습니다. 또한 Azure에 게시하기 전에 사용자 컴퓨터에서 함수를 실행하려고 합니다. Core Tools를 사용하여 Azure Cloud Shell에서 이 모든 작업을 수행할 수 있습니다.
Azure Cloud Shell에는 Core Tools, Azure CLI 및 코드를 작성 하는 데 사용할 수 있는 편집기가 제공됩니다. 계속하기 전에 위의 샌드박스 활성화를 선택해야 합니다.
로컬 Azure Functions 프로젝트 만들기
이 연습에서는 Cloud Shell을 사용하여 Core Tools를 사용하여 첫 번째 JavaScript 함수를 개발합니다. Cloud Shell에는 이미 올바른 버전의 Core Tools와 Node.js 설치되어 있습니다.
루트 폴더에서 실행
func init
하여 새loan-wizard
폴더에 함수 프로젝트를 만듭니다.func init loan-wizard
작업자 런타임을 선택하라는 메시지가 표시되면 노드에 대해 3을 입력합니다.
언어를 선택하라는 메시지가 표시되면 javascript에 대해 1을 입력합니다.
출력에는 다음 파일을 포함하여 디스크에 기록되는 파일이 나열됩니다.
- host.json 런타임 인스턴스와 특정 트리거 및 바인딩 형식 모두에 대한 앱 수준 구성을 지원합니다.
- local.settings.json 로컬 전용 동작 및 애플리케이션 설정(로컬 환경 변수)을 설정합니다.
- package.json은 사용자 코드 내에서 설치하고 사용하는 패키지를 추적하는 JavaScript 관련 파일입니다.
- .gitignore 및 extensions.json 각각 Git 버전 제어 도구와 Visual Studio Code에서 사용하는 구성 파일입니다. 지금은 무시해도 됩니다.
HTTP 트리거 함수 만들기
이제 함수를 만들 차례입니다.
Cloud Shell에서 새
loan-wizard
디렉터리로 이동합니다.cd ~/loan-wizard
함수 만들기 마법사를 시작하려면 실행
func new
합니다.func new
템플릿을 선택하라는 메시지가 표시되면 HTTP 트리거에 대해 7을 입력합니다.
HTTP 트리거에 대한 함수 이름을 제공하라는 메시지가 표시되면 .를 입력합니다
simple-interest
.다음 명령을 실행하여 Cloud Shell 편집기를 엽니다.
code .
마법사는 기본 템플릿 콘텐츠가 있는 simple-interest.js 함수 프로젝트에
src/functions
새 파일을 만듭니다. 이 코드는 Azure Functions에 대한 Node.js v4 프로그래밍 모델을 지원합니다. 지금 잠시 편집기로 프로젝트 파일을 살펴보겠습니다. 스크린샷은 편집기에서 simple-interest.js 열려 있는 확장된 폴더를 보여줍니다.
simple-interest 함수 구현
Core Tools가 simple-interest.js 만든 기본 함수 구현은 쿼리 문자열 또는 인바운드 HTTP 요청의 본문에서 호출 name
된 입력을 찾고 문자열Hello, [name]
을 반환합니다. HTTP 트리거를 사용하는 방법에 대한 좋은 설명이지만 해당 코드를 세 개의 입력 매개 변수에서 단순 관심을 계산하는 코드로 바꾸려고 합니다.
편집기 파일 창에서 src>함수 폴더를 확장하고 simple-interest.js 선택하여 편집기에서 파일을 엽니다.
simple-interest.js 전체 내용을 다음 코드로 바꿉니다.
const { app } = require('@azure/functions'); app.http('simple-interest', { methods: ['GET','POST'], authLevel: 'anonymous', handler: async (request, context) => { const principal = parseFloat(request.query.get('principal')); const rate = parseFloat(request.query.get('rate')); const term = parseFloat(request.query.get('term')); if ([principal, rate, term].some(isNaN)) { // If any empty or non-numeric values, return a 400 response with an // error message return { status: 400, body: "Please supply principal, rate and term in the query string" }; } else { // Otherwise set the response body to the product of the three values return { body: principal * rate * term }; } } });
이 스크립트는 HTTP 요청의 쿼리 문자열에서 명명된
principal
rate
term
매개 변수를 찾습니다. 그런 다음 간단한 이자 계산(principal * rate * term
)의 결과를 반환합니다.Ctrl S를 눌러 파일을 저장하고 Ctrl++Q를 눌러 편집기를 닫습니다.
Cloud Shell에서 함수 실행
새 함수를 로컬로 실행하여 사용해 보려면 실행 중인 동안 명령줄을 사용할 수 있도록 백그라운드 프로세스에서 Functions 런타임(func.exe)을 시작하는 데 사용합니다func start
. 그런 다음 명령줄 도구를 curl
사용하여 함수와 상호 작용합니다.
자신의 컴퓨터에서 핵심 도구를 사용하는 경우 두 번째 터미널 창 또는 웹 브라우저에서만 사용할 curl
수 있습니다. Core Tools에서 생성된 출력은 첫 번째 터미널 창에 실시간으로 표시됩니다. Cloud Shell에서는 단일 터미널로 제한되므로 백그라운드 프로세스에서 핵심 도구(func.exe)를 실행해야 합니다.
다음 명령을 실행하여 백그라운드에서 함수 호스트를 자동으로 시작합니다.
func start &> ~/output.txt &
func new
와 마찬가지로 Cloud Shell이loan-wizard
디렉터리에 있어야 합니다.이제 Functions 호스트가 ~/output.txt 파일에 출력을 쓰고 있습니다. 명령줄이 실행되는 동안 계속 사용할 수 있습니다.
ps
명령을 사용하여func
프로세스가 실행 중인지 확인합니다.출력 로그를 보려면 다음 명령을 입력합니다.
code ~/output.txt
출력에는 GET 및 POST HTTP 요청
http://localhost:7071/api/simple-interest
으로 목록을Functions: simple-interest:
사용할 수 있는 메시지가 표시됩니다.참고 항목
오류 메시지가 표시되면 Ctrl+C를 선택하여 호스트를 중지합니다. 코드 파일의 내용이 샘플과 동일한지 확인합니다.
이 localhost URL은 웹에 게시되어 있지 않으며 Cloud Shell 세션에서 실행되는 도구에서만 액세스할 수 있습니다.
Ctrl+Q를 선택하여 편집기를 닫습니다.
다음 명령을 실행하여 로컬로 실행 중인 함수에 HTTP GET 요청을 보냅니다.
curl "http://localhost:7071/api/simple-interest" -w "\n"
출력
Please supply principal, rate and term in the query string
은 함수가 성공적으로 호출되었고 응답을 반환할 수 있음을 나타내지만 의도한 대로 호출하지는 않습니다. HTTP 요청의 일부로 매개 변수를 제공해야 합니다.함수를 다시 호출합니다. 이번에는 각 쿼리 문자열 매개 변수에 대한 값을 제공합니다.
curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
이번에는 출력이
6300
입니다. 함수가 예상대로 작동합니다.출력 로그를 다시 보려면 다음 명령을 입력합니다.
code ~/output.txt
시작 로그 항목 후에 다음을 사용하여 함수
curl
를 호출할 때마다 타임스탬프가 지정된 로그 항목 집합이 추가된 것을 볼 수 있습니다.[2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04) [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
Ctrl+Q를 선택하여 편집기를 닫습니다.