Azure Functions를 사용하여 요청 시 코드 실행

완료됨

지금까지 함수 앱을 만들었으므로 이제 함수를 빌드하고, 구성하고, 실행하는 방법을 살펴보겠습니다. 다음 연습에서는 함수를 실행할 예정이므로 이 단원의 작업을 완료할 필요가 없습니다.

트리거

함수는 이벤트로 구동됩니다. 즉, 이벤트에 대한 응답으로 실행됩니다. 함수를 시작하는 이벤트 유형을 트리거라고 합니다. 각 함수는 정확히 하나의 트리거로 구성되어야 합니다.

다음 Azure 서비스의 HTTP 요청, 예약된 타이머 및 이벤트를 사용하여 함수 실행을 트리거할 수 있습니다.

Azure 서비스 트리거 설명
Blob Storage 새 BLOB 또는 업데이트된 BLOB이 검색될 때 함수를 시작합니다.
Azure Cosmos DB 삽입 및 업데이트가 검색될 때 함수를 시작합니다.
Event Grid Event Grid에서 이벤트를 수신할 때 함수를 시작합니다.
Event Hubs Event Hubs에서 이벤트를 수신할 때 함수를 시작합니다.
Queue storage 큐에서 새 항목을 수신할 때 함수를 시작합니다. 큐 메시지는 함수에 입력으로 제공됩니다.
Service Bus Service Bus 큐의 메시지에 대한 응답으로 함수를 시작합니다.

바인딩

바인딩은 데이터와 서비스를 함수에 연결하는 선언적인 방법입니다. 바인딩은 다양한 데이터 원본과 상호 작용하므로, 데이터 원본에 연결하고 연결을 관리하기 위해 함수에서 코드를 작성할 필요가 없습니다. 플랫폼은 바인딩 코드의 일부로 복잡성을 관리합니다. 각 바인딩에는 방향이 있습니다. 코드는 입력 바인딩에서 데이터를 읽고 출력 바인딩에 데이터를 씁니다. 각 함수는 함수에 의해 처리된 입력 및 출력 데이터를 관리하기 위해 0개 이상의 바인딩을 포함할 수 있습니다.

트리거는 일부 코드의 실행을 시작할 수 있는 기능을 포함하는 입력 바인딩 형식입니다.

Azure는 다양한 스토리지 및 메시징 서비스에 연결할 많은 바인딩을 제공합니다.

샘플 바인딩 정의

입력 바인딩(트리거)과 출력 바인딩을 사용하여 함수를 구성하는 예를 살펴보겠습니다. 새 메시지가 Azure Queue Storage에 표시될 때마다 Azure Table Storage에 새 행을 작성하려는 경우를 가정해 보겠습니다. 이 시나리오는 Azure Queue Storage ‘트리거’ 및 Azure Table Storage ‘출력 바인딩’을 사용하여 구현할 수 있습니다.

다음 코드 조각은 이 시나리오의 function.json 파일입니다.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

JSON 구성은 메시지가 myqueue-items라는 큐에 추가될 때 함수가 트리거되도록 지정합니다. 그런 다음, 함수의 반환 값은 Azure Table 스토리지의 outTable에 기록됩니다.

PowerShell 함수의 경우 출력 바인딩은Push-OutputBinding cmdlet을 사용하여 명시적으로 작성됩니다.

이 예제는 함수에 대한 바인딩을 구성하는 방법에 대한 간단한 그림입니다. SendGrid 바인딩을 사용하여 출력을 이메일로 변경하거나 이벤트를 Service Bus에 넣어 아키텍처의 다른 구성 요소에 알릴 수 있습니다. 다양한 서비스에 데이터를 푸시하기 위해 여러 출력 바인딩을 가질 수도 있습니다.

Azure Portal에서 function.json의 내용을 보고 편집하려면 홈페이지에서 함수 앱을 선택하고 오른쪽 창에서 JSON 보기를 선택합니다. 리소스 JSON 보기에는 리소스 ID 및 편집 가능한 JSON 코드가 표시됩니다. JSON 보기를 닫으려면 창의 오른쪽 위 모서리에 있는 X를 선택합니다.

Functions에서 지원되는 언어 중 일부는 함수를 정의할 때 function.json 파일을 사용하지 않습니다.

Azure Portal에서 함수 만들기

Azure Functions에는 특정 형식의 트리거를 기반으로 하는 미리 정의된 함수 템플릿이 있습니다. 선택한 언어에서 이 템플릿을 사용하면 첫 번째 함수를 손쉽게 만들 수 있습니다.

Functions에서 지원되는 언어 중 일부에서는 이 모듈이 지원되지 않습니다. 또한 포털은 Functions에서 지원되는 언어 중 일부에 대해 함수 만들기를 지원하지 않습니다.

지원되는 언어가 function.json 파일을 사용해 함수를 정의할 수 있다면 Azure 포털에서 함수를 직접 만들어 편집하는 것도 가능합니다. 포털에서 지원하는 언어로는 JavaScript, PowerShell, Python, C# Script(.csx)가 있습니다. 코드에서 함수를 직접 정의하는 언어는 포털 외부에서 개발하여 Azure로 배포해야 합니다. 이렇게 포트에서 지원하지 않는 언어로는 C#, Java, Python(v2 프로그래밍 모델), JavaScript/TypeScript(Node.js v4 프로그래밍 모델)가 있습니다.

함수 템플릿

포털에서 첫 번째 함수를 만들 때 함수에 대해 미리 정의된 트리거를 선택할 수 있습니다. 선택에 따라 Azure는 입력 데이터를 받을 때 이벤트 로그 항목을 만드는 것과 같이 기본 코드와 구성 정보를 생성합니다.

함수 추가 창에서 템플릿을 선택하면 가장 일반적인 개발 환경, 트리거 및 종속성에 쉽게 액세스할 수 있습니다. Azure Portal에서 함수를 만들 때 20개가 넘는 템플릿 중에서 선택할 수 있습니다. 만든 후에는 코드를 추가로 사용자 지정할 수 있습니다.

템플릿에서 함수를 만들 때 구성 파일인 function.json과 소스 코드 파일인 index.js를 포함하여 여러 파일이 생성됩니다.

함수 앱 메뉴의 함수 범주에서 함수를 선택하여 함수 앱에 대한 함수를 만들거나 편집할 수 있습니다.

함수 앱에서 만든 함수를 선택하면 함수 창이 열립니다. 함수 메뉴에서 코드 + 테스트를 선택하여 명령 모음에서 작업에 액세스하고 코드를 테스트하고 실행하여 변경 내용을 저장 또는 취소하거나, 게시된 URL을 가져올 수 있습니다. 명령 모음에서 테스트/실행을 선택하여 쿼리 문자열과 값을 포함하는 요청에 대한 사용 사례를 실행할 수 있습니다. 코드 상자 위의 함수 경로에는 열려 있는 파일의 이름이 표시됩니다. 드롭다운에서 특정 파일을 선택하여 테스트하거나 편집할 수 있습니다(예: function.json).

메뉴 옵션이 강조 표시된, 펼쳐진 테스트/실행 보기를 보여 주는 함수 코드 및 테스트 편집기의 스크린샷

이전 이미지의 오른쪽 창에는 입력출력 탭이 있습니다. 입력 탭을 선택하면 쿼리 매개 변수를 추가하고 쿼리 문자열에 대한 값을 제공하여 함수를 빌드하고 테스트할 수 있습니다. 출력 탭에는 요청 결과가 표시됩니다.

Azure 함수 테스트

포털에서 함수가 만들어지면 함수를 테스트하는 것이 좋습니다. 다음 두 가지 접근 방법이 있습니다.

  • 포털에서 함수 테스트하기
  • 수동으로 실행

Azure Portal에서 테스트

포털은 또한 함수를 테스트하는 편리한 방법을 제공합니다. 앞의 설명과 마찬가지로 이전 스크린샷에 나와 있습니다. 이 창에서 실행을 선택하면 결과가 출력 탭에 자동으로 표시되며 로그 창이 열려 상태가 표시됩니다.

수동으로 함수 실행

구성된 트리거를 수동으로 트리거하여 함수를 시작할 수 있습니다. 예를 들어 Http 트리거를 사용하는 경우, 이러한 HTTP 테스트 도구 중 하나를 사용하여 함수 엔드포인트 URL에 대한 HTTP 요청을 시작할 수 있습니다.

주의

자격 증명, 비밀, 액세스 토큰, API 키 및 기타 유사한 정보와 같은 중요한 데이터가 있는 시나리오의 경우 필요한 보안 기능으로 데이터를 보호하고, 오프라인 또는 로컬로 작동하며, 데이터를 클라우드에 동기화하지 않고, 온라인 계정에 로그인할 필요가 없는 도구를 사용해야 합니다. 이렇게 하면 중요한 데이터가 대중에게 노출되는 위험을 줄일 수 있습니다.

포털의 함수 정의 페이지에서 함수 URL 가져오기를 선택하여 HTTP 트리거의 URL 엔드포인트를 가져올 수 있습니다.

모니터링 및 Application Insights 대시보드

함수를 모니터링하는 기능은 개발 과정과 프로덕션에서 매우 중요합니다. Azure Portal에서 모니터링 대시보드를 제공하며, Application Insights 통합을 사용하도록 설정하여 이를 켤 수 있습니다. 함수 앱 메뉴의 설정에서 Application Insights를 선택하고 Application Insights 켜기를 선택한 다음, 적용을 선택합니다. 대화 상자에서 를 선택합니다. Application Insights가 타임스탬프, 결과 코드, 기간 및 작업 ID를 표시하기때문에 Application Insights 대시보드를 보면 함수 작업기록을 빠르게 확인할 수 있습니다.

함수 결과, HTTP 상태 코드 및 강조 표시된 모니터링 메뉴 항목이 있는 HTTP 함수 Application Insights 대시보드를 보여주는 스크린샷

스트리밍 로그 창

Azure Portal에서 Application Insights를 사용하도록 설정한 후 디버깅을 위해 함수에 로깅 문구를 추가할 수 있습니다. 각 언어에 대해 호출된 메서드는 테스트 실행 시 코드 + 테스트 창의 로그 창에 로그 정보를 추가하는 데 사용할 수 있는 “로깅” 개체에 전달됩니다.

코드에서 context 개체에 대한 log 메서드를 사용해 로그에 기록합니다. 그러면 개체가 처리기로 전달됩니다. 다음은 기본 로그 수준(정보)에 기록하는 예제입니다.

context.log('Enter your logging statement here');

다음 예제와 같이 코드에서 Write-Host cmdlet을 사용해 로그에 기록합니다.

Write-Host "Enter your logging statement here"

오류, 장애, 경고, 변칙

함수 메뉴의 조사 범주에서 메트릭 또는 옵션을 사용하여 성능을 모니터링하거나 실패를 진단하거나 수십 가지 사전 정의된 통합 문서를 구성하여 합수 앱을 관리할 수 있습니다. 코드의 컴파일 오류 및 경고부터 역할별 사용 통계까지 모든 항목입니다.