Azure Functions에 대한 Microsoft Graph 바인딩Microsoft Graph bindings for Azure Functions

이 문서에서는 Azure Functions에서 Microsoft Graph 트리거 및 바인딩을 구성하고 사용하는 방법에 대해 설명합니다.This article explains how to configure and work with Microsoft Graph triggers and bindings in Azure Functions. 이러한 방법을 배우고 나면 Azure Functions를 사용하여 Microsoft Graph에서 데이터, 자세한 정보 및 이벤트를 작업할 수 있습니다.With these, you can use Azure Functions to work with data, insights, and events from the Microsoft Graph.

Microsoft Graph 확장에는 다음과 같은 바인딩이 제공됩니다.The Microsoft Graph extension provides the following bindings:

이는 Azure Functions 개발자에 대한 참조 정보입니다.This is reference information for Azure Functions developers. Azure Functions를 처음 접하는 경우 다음 리소스부터 시작합니다.If you're new to Azure Functions, start with the following resources:

참고

Microsoft Graph 바인딩은 현재 Azure Functions 버전 2.x 이상에 대해 미리 보기로 제공 됩니다.Microsoft Graph bindings are currently in preview for Azure Functions version 2.x and higher. Functions 버전 1.x에서 지원되지 않습니다.They are not supported in Functions version 1.x.

패키지Packages

인증 토큰 입력 바인딩은 Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet 패키지에서 제공됩니다.The auth token input binding is provided in the Microsoft.Azure.WebJobs.Extensions.AuthTokens NuGet package. 다른 Microsoft Graph 바인딩은 Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph 패키지에서 제공됩니다.The other Microsoft Graph bindings are provided in the Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph package. 이 패키지에 대한 소스 코드는 azure-functions-microsoftgraph-extension GitHub 리포지토리에 있습니다.Source code for the packages is in the azure-functions-microsoftgraph-extension GitHub repository.

다음 방법을 사용 하 여 선호 하는 개발 환경에서 지원을 추가 합니다.Add support in you preferred development environment using the following methods.

개발 환경Development environment 애플리케이션 종류Application type 지원을 추가 하려면To add support
Visual StudioVisual Studio C # 클래스 라이브러리C# class library NuGet 패키지 설치Install the NuGet package
Visual Studio CodeVisual Studio Code 핵심 도구 기반Based on core tools 확장 번들 등록Register the extension bundle

Azure Tools 확장 을 설치 하는 것이 좋습니다.Installing the Azure Tools extension is recommended.
다른 모든 편집기/IDEAny other editor/IDE 핵심 도구 기반Based on core tools 확장 번들 등록Register the extension bundle
Azure PortalAzure Portal 포털 에서만 온라인Online only in portal 바인딩을 추가할 때 설치Installs when adding a binding

함수 앱을 다시 게시 하지 않고 기존 바인딩 확장을 업데이트 하려면 확장 업데이트 를 참조 하세요.See Update your extensions to update existing binding extensions without having to republish your function app.

확장 설정Setting up the extensions

Microsoft Graph 바인딩은 _바인딩 확장_을 통해 제공됩니다.Microsoft Graph bindings are available through binding extensions. 바인딩 확장은 Azure Functions 런타임의 선택적 구성 요소입니다.Binding extensions are optional components to the Azure Functions runtime. 이 섹션에서는 Microsoft Graph 및 인증 토큰 확장을 설정하는 방법을 설명합니다.This section shows how to set up the Microsoft Graph and auth token extensions.

함수 2.0 사용Enabling Functions 2.0

바인딩 확장은 Azure Functions 2.0 에서만 사용할 수 있습니다.Binding extensions are available only for Azure Functions 2.0.

함수 런타임의 2.0 버전을 사용 하도록 함수 앱을 설정 하는 방법에 대 한 자세한 내용은 Azure Functions 런타임 버전을 대상으로 하는 방법을 참조 하세요.For information about how to set a function app to use the 2.0 version of the Functions runtime, see How to target Azure Functions runtime versions.

확장 설치Installing the extension

Azure Portal에서 확장을 설치하려면 확장을 참조하는 템플릿 또는 바인딩으로 이동합니다.To install an extension from the Azure portal, navigate to either a template or binding that references it. 새 함수를 만들고, 템플릿 선택 화면에서 "Microsoft Graph" 시나리오를 선택합니다.Create a new function, and while in the template selection screen, choose the "Microsoft Graph" scenario. 이 시나리오의 템플릿 중 하나를 선택합니다.Select one of the templates from this scenario. 또는 기존 함수의 "통합" 탭으로 이동하여 이 문서에서 다루는 바인딩 중 하나를 선택할 수도 있습니다.Alternatively, you can navigate to the "Integrate" tab of an existing function and select one of the bindings covered in this article.

어떤 방법을 선택하든 설치할 확장을 지정하는 경고가 표시됩니다.In both cases, a warning will appear which specifies the extension to be installed. 설치를 클릭하여 확장을 가져옵니다.Click Install to obtain the extension. 각 확장을 함수 앱마다 한 번씩만 설치하면 됩니다.Each extension only needs to be installed once per function app.

참고

포털 내 설치 프로세스는 소비 계획에서 최대 10 분 정도 걸릴 수 있습니다.The in-portal installation process can take up to 10 minutes on a Consumption plan.

Visual Studio를 사용하는 경우 앞서 이 아티클에서 나열된 NuGet 패키지를 설치하여 확장을 설치할 수 있습니다.If you are using Visual Studio, you can get the extensions by installing the NuGet packages that are listed earlier in this article.

인증/권한 부여 구성Configuring Authentication / Authorization

이 문서에서 설명하는 바인딩은 반드시 ID를 사용해야 합니다.The bindings outlined in this article require an identity to be used. 이를 통해 Microsoft Graph가 권한을 적용하고 상호 작용을 감사할 수 있습니다.This allows the Microsoft Graph to enforce permissions and audit interactions. ID는 애플리케이션에 액세스하는 사용자일 수도 있고 애플리케이션 자체일 수도 있습니다.The identity can be a user accessing your application or the application itself. 이 ID를 구성하려면 Azure Active Directory를 사용하여 App Service 인증/권한 부여를 설정합니다.To configure this identity, set up App Service Authentication / Authorization with Azure Active Directory. 그리고 함수에 필요한 리소스 권한을 요청해야 합니다.You will also need to request any resource permissions your functions require.

참고

Microsoft Graph 확장은 Azure AD 인증만 지원합니다.The Microsoft Graph extension only supports Azure AD authentication. 사용자는 회사 또는 학교 계정으로 로그인해야 합니다.Users need to log in with a work or school account.

Azure Portal을 사용하는 경우 확장을 설치할지 묻는 메시지 아래에 경고가 표시됩니다.If you're using the Azure portal, you'll see a warning below the prompt to install the extension. 이 경고는 App Service 인증/권한 부여를 구성하고, 템플릿 또는 바인딩에 필요한 사용 권한을 요구하라는 메시지를 표시합니다.The warning prompts you to configure App Service Authentication / Authorization and request any permissions the template or binding requires. 지금 Azure AD 구성 또는 지금 권한 추가를 적절히 클릭합니다.Click Configure Azure AD now or Add permissions now as appropriate.

인증 토큰Auth token

인증 토큰 입력 바인딩은 지정된 리소스에 대한 Azure AD 토큰을 획득하여 코드에 문자열로 제공합니다.The auth token input binding gets an Azure AD token for a given resource and provides it to your code as a string. 애플리케이션이 권한을 갖고 있는 모든 것을 리소스로 사용할 수 있습니다.The resource can be any for which the application has permissions.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

인증 토큰 - 예제Auth token - example

언어 관련 예제를 참조하세요.See the language-specific example:

인증 토큰 - C# 스크립트 예제Auth token - C# script example

다음 예제에서는 사용자 프로필 정보를 가져옵니다.The following example gets user profile information.

function.json 파일은 토큰 입력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 C# 스크립트 코드는 토큰을 사용하여 Microsoft Graph에 대한 HTTP 호출을 만들고 그 결과를 반환합니다.The C# script code uses the token to make an HTTP call to the Microsoft Graph and returns the result:

using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string graphToken, ILogger log)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
    return await client.GetAsync("https://graph.microsoft.com/v1.0/me/");
}

인증 토큰 - JavaScript 예제Auth token - JavaScript example

다음 예제에서는 사용자 프로필 정보를 가져옵니다.The following example gets user profile information.

function.json 파일은 토큰 입력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a token input binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 JavaScript 코드는 토큰을 사용하여 Microsoft Graph에 대한 HTTP 호출을 만들고 그 결과를 반환합니다.The JavaScript code uses the token to make an HTTP call to the Microsoft Graph and returns the result.

const rp = require('request-promise');

module.exports = function (context, req) {
    let token = "Bearer " + context.bindings.graphToken;

    let options = {
        uri: 'https://graph.microsoft.com/v1.0/me/',
        headers: {
            'Authorization': token
        }
    };
    
    rp(options)
        .then(function(profile) {
            context.res = {
                body: profile
            };
            context.done();
        })
        .catch(function(err) {
            context.res = {
                status: 500,
                body: err
            };
            context.done();
        });
};

인증 토큰 - 특성Auth token - attributes

C# 클래스 라이브러리에서 Token 특성을 사용합니다.In C# class libraries, use the Token attribute.

인증 토큰 - 구성Auth token - configuration

다음 표에서는 function.json 파일 및 Token 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the Token attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 인증 토큰의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the auth token. 코드에서 인증 토큰 입력 바인딩 사용을 참조하세요.See Using an auth token input binding from code.
typetype 해당 없음n/a 필수 - token으로 설정해야 합니다.Required - must be set to token.
directiondirection 해당 없음n/a 필수 - in으로 설정해야 합니다.Required - must be set to in.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IduserId IdUserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
리소스Resource 리소스나resource 필수 - 토큰이 요청되는 Azure AD 리소스 URL입니다.Required - An Azure AD resource URL for which the token is being requested.

인증 토큰 - 사용Auth token - usage

바인딩 자체는 Azure AD 권한이 전혀 필요 없지만, 토큰이 사용되는 방식에 따라 추가 권한을 요청해야 할 수도 있습니다.The binding itself does not require any Azure AD permissions, but depending on how the token is used, you may need to request additional permissions. 토큰을 사용하여 액세스하려는 리소스의 요구 사항을 확인하세요.Check the requirements of the resource you intend to access with the token.

토큰은 항상 코드에 문자열로 표시됩니다.The token is always presented to code as a string.

참고

userFromId, userFromToken 또는 userFromRequest 옵션 중 하나를 사용하여 로컬로 개발할 경우 필요한 토큰을 수동으로 가져오고 호출 클라이언트 애플리케이션의 X-MS-TOKEN-AAD-ID-TOKEN 요청 헤더에 지정할 수 있습니다.When developing locally with either of userFromId, userFromToken or userFromRequest options, required token can be obtained manually and specified in X-MS-TOKEN-AAD-ID-TOKEN request header from a calling client application.

Excel 입력Excel input

Excek 테이블 입력 바인딩은 OneDrive에 저장된 Excel 테이블의 콘텐츠를 읽습니다.The Excel table input binding reads the contents of an Excel table stored in OneDrive.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

Excel 입력 - 예제Excel input - example

언어 관련 예제를 참조하세요.See the language-specific example:

Excel 입력 - C# 스크립트 예제Excel input - C# script example

다음 function.json 파일은 Excel 입력 바인딩을 사용하여 HTTP 트리거를 정의합니다.The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 C# 스크립트 코드는 지정된 테이블의 내용을 읽어서 사용자에게 반환합니다.The following C# script code reads the contents of the specified table and returns them to the user:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, string[][] excelTableData, ILogger log)
{
    return new OkObjectResult(excelTableData);
}

Excel 입력 - JavaScript 예제Excel input - JavaScript example

다음 function.json 파일은 Excel 입력 바인딩을 사용하여 HTTP 트리거를 정의합니다.The following function.json file defines an HTTP trigger with an Excel input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "excel",
      "direction": "in",
      "name": "excelTableData",
      "path": "{query.workbook}",
      "identity": "UserFromRequest",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 JavaScript 코드는 지정된 테이블의 내용을 읽어서 사용자에게 반환합니다.The following JavaScript code reads the contents of the specified table and returns them to the user.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.excelTableData
    };
    context.done();
};

Excel 입력 - 특성Excel input - attributes

C# 클래스 라이브러리에서 Excel 특성을 사용합니다.In C# class libraries, use the Excel attribute.

Excel 입력 - 구성Excel input - configuration

다음 표에서는 function.json 파일 및 Excel 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - Excel 테이블의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the Excel table. 코드에서 Excel 테이블 입력 바인딩 사용을 참조하세요.See Using an Excel table input binding from code.
typetype 해당 없음n/a 필수 - excel으로 설정해야 합니다.Required - must be set to excel.
directiondirection 해당 없음n/a 필수 - in으로 설정해야 합니다.Required - must be set to in.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IduserId IdUserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
pathpath 경로Path 필수 - OneDrive에서 Excel 통합 문서의 경로입니다.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName 테이블이 검색되는 워크시트입니다.The worksheet in which the table is found.
tableNametableName TableNameTableName 테이블의 이름입니다.The name of the table. 지정하지 않으면 워크시트의 콘텐츠가 사용됩니다.If not specified, the contents of the worksheet will be used.

Excel 입력 - 사용Excel input - usage

이 바인딩에는 다음 Azure AD 권한이 필요합니다.This binding requires the following Azure AD permissions:

리소스Resource 사용 권한Permission
Microsoft GraphMicrosoft Graph 사용자 파일 읽기Read user files

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • 사용자 지정 개체 형식(구조 모델 바인딩 사용)Custom object types (using structural model binding)

Excel 출력Excel output

Excel 출력 바인딩은 OneDrive에 저장된 Excel 테이블의 콘텐츠를 수정합니다.The Excel output binding modifies the contents of an Excel table stored in OneDrive.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

Excel 출력 - 예제Excel output - example

언어 관련 예제를 참조하세요.See the language-specific example:

Excel 출력 - C# 스크립트 예제Excel output - C# script example

다음 예제에서는 Excel 테이블에 행을 추가합니다.The following example adds rows to an Excel table.

function.json 파일은 Excel 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

이 C# 스크립트 코드는 쿼리 문자열의 입력을 기반으로 테이블에(단일 열로 가정) 새 행을 추가합니다.The C# script code adds a new row to the table (assumed to be single-column) based on input from the query string:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, IAsyncCollector<object> newExcelRow, ILogger log)
{
    string input = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await newExcelRow.AddAsync(new {
        Text = input
        // Add other properties for additional columns here
    });
    return;
}

Excel 출력 - JavaScript 예제Excel output - JavaScript example

다음 예제에서는 Excel 테이블에 행을 추가합니다.The following example adds rows to an Excel table.

function.json 파일은 Excel 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with an Excel output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "newExcelRow",
      "type": "excel",
      "direction": "out",
      "identity": "userFromRequest",
      "updateType": "append",
      "path": "{query.workbook}",
      "tableName": "{query.table}"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 JavaScript 코드는 쿼리 문자열의 입력을 기반으로 테이블에(단일 열로 가정) 새 행을 추가합니다.The following JavaScript code adds a new row to the table (assumed to be single-column) based on input from the query string.

module.exports = function (context, req) {
    context.bindings.newExcelRow = {
        text: req.query.text
        // Add other properties for additional columns here
    }
    context.done();
};

Excel 출력 - 특성Excel output - attributes

C# 클래스 라이브러리에서 Excel 특성을 사용합니다.In C# class libraries, use the Excel attribute.

Excel 출력 - 구성Excel output - configuration

다음 표에서는 function.json 파일 및 Excel 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the Excel attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 인증 토큰의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the auth token. 코드에서 Excel 테이블 출력 바인딩 사용을 참조하세요.See Using an Excel table output binding from code.
typetype 해당 없음n/a 필수 - excel으로 설정해야 합니다.Required - must be set to excel.
directiondirection 해당 없음n/a 필수 - out으로 설정해야 합니다.Required - must be set to out.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IdUserId IduserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
pathpath 경로Path 필수 - OneDrive에서 Excel 통합 문서의 경로입니다.Required - the path in OneDrive to the Excel workbook.
worksheetNameworksheetName WorksheetNameWorksheetName 테이블이 검색되는 워크시트입니다.The worksheet in which the table is found.
tableNametableName TableNameTableName 테이블의 이름입니다.The name of the table. 지정하지 않으면 워크시트의 콘텐츠가 사용됩니다.If not specified, the contents of the worksheet will be used.
updateTypeupdateType UpdateTypeUpdateType 필수 - 테이블에 적용해야 하는 변경 형식입니다.Required - The type of change to make to the table. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • update - OneDrive에 있는 테이블의 콘텐츠를 대체합니다.update - Replaces the contents of the table in OneDrive.
  • append - 새 행을 만들어서 OneDrive에 있는 테이블의 끝에 페이로드를 추가합니다.append - Adds the payload to the end of the table in OneDrive by creating new rows.

Excel 출력 - 사용Excel output - usage

이 바인딩에는 다음 Azure AD 권한이 필요합니다.This binding requires the following Azure AD permissions:

리소스Resource 사용 권한Permission
Microsoft GraphMicrosoft Graph 사용자 파일에 대한 전체 액세스 권한이 있음Have full access to user files

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • string[][]string[][]
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • Microsoft.Graph.WorkbookTableMicrosoft.Graph.WorkbookTable
  • 사용자 지정 개체 형식(구조 모델 바인딩 사용)Custom object types (using structural model binding)

파일 입력File input

OneDrive 파일 입력 바인딩은 OneDrive에 저장된 파일의 콘텐츠를 읽습니다.The OneDrive File input binding reads the contents of a file stored in OneDrive.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

파일 입력 - 예제File input - example

언어 관련 예제를 참조하세요.See the language-specific example:

파일 입력 - C# 스크립트 예제File input - C# script example

다음 예제에서는 OneDrive에 저장된 파일을 읽습니다.The following example reads a file that is stored in OneDrive.

function.json 파일은 OneDrive 파일 입력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 쿼리 문자열에 지정된 파일을 읽고 그 길이를 기록합니다.The C# script code reads the file specified in the query string and logs its length:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequestMessage req, Stream myOneDriveFile, ILogger log)
{
    log.LogInformation(myOneDriveFile.Length.ToString());
}

파일 입력 - JavaScript 예제File input - JavaScript example

다음 예제에서는 OneDrive에 저장된 파일을 읽습니다.The following example reads a file that is stored in OneDrive.

function.json 파일은 OneDrive 파일 입력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a OneDrive file input binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "in",
      "path": "{query.filename}",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 JavaScript 코드는 쿼리 문자열에 지정된 파일을 읽고 그 길이를 반환합니다.The following JavaScript code reads the file specified in the query string and returns its length.

module.exports = function (context, req) {
    context.res = {
        body: context.bindings.myOneDriveFile.length
    };
    context.done();
};

파일 입력 - 특성File input - attributes

C# 클래스 라이브러리에서 OneDrive 특성을 사용합니다.In C# class libraries, use the OneDrive attribute.

파일 입력 - 구성File input - configuration

다음 표에서는 function.json 파일 및 OneDrive 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 파일의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the file. 코드에서 OneDrive 파일 입력 바인딩 사용을 참조하세요.See Using a OneDrive file input binding from code.
typetype 해당 없음n/a 필수 - onedrive으로 설정해야 합니다.Required - must be set to onedrive.
directiondirection 해당 없음n/a 필수 - in으로 설정해야 합니다.Required - must be set to in.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IduserId IdUserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
pathpath 경로Path 필수 - OneDrive에서 파일의 경로입니다.Required - the path in OneDrive to the file.

파일 입력 - 사용File input - usage

이 바인딩에는 다음 Azure AD 권한이 필요합니다.This binding requires the following Azure AD permissions:

리소스Resource 사용 권한Permission
Microsoft GraphMicrosoft Graph 사용자 파일 읽기Read user files

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • STREAMStream
  • stringstring
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

파일 출력File output

OneDrive 파일 출력 바인딩은 OneDrive에 저장된 파일의 콘텐츠를 수정합니다.The OneDrive file output binding modifies the contents of a file stored in OneDrive.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

파일 출력 - 예제File output - example

언어 관련 예제를 참조하세요.See the language-specific example:

파일 출력 - C# 스크립트 예제File output - C# script example

다음 예제에서는 OneDrive에 저장된 파일에 씁니다.The following example writes to a file that is stored in OneDrive.

function.json 파일은 OneDrive 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

다음 C# 스크립트 코드는 쿼리 문자열에서 텍스트를 가져와서 호출자의 OneDrive 루트에 있는 텍스트 파일(이전 예제에 정의된 FunctionsTest.txt)에 기록합니다.The C# script code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the preceding example) at the root of the caller's OneDrive:

using System.Net;
using System.Text;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, ILogger log, Stream myOneDriveFile)
{
    string data = req.Query
        .FirstOrDefault(q => string.Compare(q.Key, "text", true) == 0)
        .Value;
    await myOneDriveFile.WriteAsync(Encoding.UTF8.GetBytes(data), 0, data.Length);
    myOneDriveFile.Close();
    return;
}

파일 출력 - JavaScript 예제File output - JavaScript example

다음 예제에서는 OneDrive에 저장된 파일에 씁니다.The following example writes to a file that is stored in OneDrive.

function.json 파일은 OneDrive 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a OneDrive output binding:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "myOneDriveFile",
      "type": "onedrive",
      "direction": "out",
      "path": "FunctionsTest.txt",
      "identity": "userFromRequest"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript 코드는 쿼리 문자열에서 텍스트를 가져와서 호출자의 OneDrive 루트에 있는 텍스트 파일(위의 config에 정의된 FunctionsTest.txt)에 기록합니다.The JavaScript code gets text from the query string and writes it to a text file (FunctionsTest.txt as defined in the config above) at the root of the caller's OneDrive.

module.exports = function (context, req) {
    context.bindings.myOneDriveFile = req.query.text;
    context.done();
};

파일 출력 - 특성File output - attributes

C# 클래스 라이브러리에서 OneDrive 특성을 사용합니다.In C# class libraries, use the OneDrive attribute.

파일 출력 - 구성File output - configuration

다음 표에서는 function.json 파일 및 OneDrive 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the OneDrive attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 파일의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for file. 코드에서 OneDrive 파일 출력 바인딩 사용을 참조하세요.See Using a OneDrive file output binding from code.
typetype 해당 없음n/a 필수 - onedrive으로 설정해야 합니다.Required - must be set to onedrive.
directiondirection 해당 없음n/a 필수 - out으로 설정해야 합니다.Required - must be set to out.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IdUserId IduserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
pathpath 경로Path 필수 - OneDrive에서 파일의 경로입니다.Required - the path in OneDrive to the file.

파일 출력 - 사용File output - usage

이 바인딩에는 다음 Azure AD 권한이 필요합니다.This binding requires the following Azure AD permissions:

리소스Resource 사용 권한Permission
Microsoft GraphMicrosoft Graph 사용자 파일에 대한 전체 액세스 권한이 있음Have full access to user files

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • byte[]byte[]
  • STREAMStream
  • stringstring
  • Microsoft.Graph.DriveItemMicrosoft.Graph.DriveItem

Outlook 출력Outlook output

Outlook 메시지 출력 바인딩은 Outlook을 통해 메일 메시지를 보냅니다.The Outlook message output binding sends a mail message through Outlook.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

Outlook 출력 - 예제Outlook output - example

언어 관련 예제를 참조하세요.See the language-specific example:

Outlook 출력 - C# 스크립트 예제Outlook output - C# script example

다음 예제에서는 Outlook 통해 전자 메일을 보냅니다.The following example sends an email through Outlook.

function.json 파일은 Outlook 메시지 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 호출자의 메일을 쿼리 문자열에 지정된 받는 사람에게 보냅니다.The C# script code sends a mail from the caller to a recipient specified in the query string:

using System.Net;
using Microsoft.Extensions.Logging;

public static void Run(HttpRequest req, out Message message, ILogger log)
{ 
    string emailAddress = req.Query["to"];
    message = new Message(){
        subject = "Greetings",
        body = "Sent from Azure Functions",
        recipient = new Recipient() {
            address = emailAddress
        }
    };
}

public class Message {
    public String subject {get; set;}
    public String body {get; set;}
    public Recipient recipient {get; set;}
}

public class Recipient {
    public String address {get; set;}
    public String name {get; set;}
}

Outlook 출력 - JavaScript 예제Outlook output - JavaScript example

다음 예제에서는 Outlook 통해 전자 메일을 보냅니다.The following example sends an email through Outlook.

function.json 파일은 Outlook 메시지 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with an Outlook message output binding:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "message",
      "type": "outlook",
      "direction": "out",
      "identity": "userFromRequest"
    }
  ],
  "disabled": false
}

JavaScript 코드는 호출자의 메일을 쿼리 문자열에 지정된 받는 사람에게 보냅니다.The JavaScript code sends a mail from the caller to a recipient specified in the query string:

module.exports = function (context, req) {
    context.bindings.message = {
        subject: "Greetings",
        body: "Sent from Azure Functions with JavaScript",
        recipient: {
            address: req.query.to 
        } 
    };
    context.done();
};

Outlook 출력 - 특성Outlook output - attributes

C# 클래스 라이브러리에서 Outlook 특성을 사용합니다.In C# class libraries, use the Outlook attribute.

Outlook 출력 - 구성Outlook output - configuration

다음 표에서는 function.json 파일 및 Outlook 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the Outlook attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 메일 메시지의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the mail message. 코드에서 Outlook 메시지 출력 바인딩 사용을 참조하세요.See Using an Outlook message output binding from code.
typetype 해당 없음n/a 필수 - outlook으로 설정해야 합니다.Required - must be set to outlook.
directiondirection 해당 없음n/a 필수 - out으로 설정해야 합니다.Required - must be set to out.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IduserId IdUserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.

Outlook 출력 - 사용Outlook output - usage

이 바인딩에는 다음 Azure AD 권한이 필요합니다.This binding requires the following Azure AD permissions:

리소스Resource 사용 권한Permission
Microsoft GraphMicrosoft Graph 사용자로 메일 보내기Send mail as user

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • Microsoft.Graph.MessageMicrosoft.Graph.Message
  • Newtonsoft.Json.Linq.JObjectNewtonsoft.Json.Linq.JObject
  • stringstring
  • 사용자 지정 개체 형식(구조 모델 바인딩 사용)Custom object types (using structural model binding)

WebhookWebhooks

웹후크를 사용하여 Microsoft Graph의 이벤트에 대응할 수 있습니다.Webhooks allow you to react to events in the Microsoft Graph. 웹후크를 지원하려면 함수를 만들고, 새로 고치고, _웹후크 구독_에 반응해야 합니다.To support webhooks, functions are needed to create, refresh, and react to webhook subscriptions. 완전한 웹후크 솔루션을 구성하려면 다음과 같은 바인딩 조합이 필요합니다.A complete webhook solution requires a combination of the following bindings:

바인딩 자체는 Azure AD 권한이 필요 없지만, 대응하려는 리소스 종류와 관련된 권한을 요청해야 합니다.The bindings themselves do not require any Azure AD permissions, but you need to request permissions relevant to the resource type you wish to react to. 각 리소스 종류에 필요한 권한 목록은 구독 권한을 참조하세요.For a list of which permissions are needed for each resource type, see subscription permissions.

웹후크에 대한 자세한 내용은 Microsoft Graph에서 웹후크 작업을 참조하세요.For more information about webhooks, see Working with webhooks in Microsoft Graph.

웹후크 트리거Webhook trigger

Microsoft Graph 웹후크 트리거를 사용하면 함수가 Microsoft Graph에서 들어오는 웹후크에 대응할 수 있습니다.The Microsoft Graph webhook trigger allows a function to react to an incoming webhook from the Microsoft Graph. 이 트리거의 각 인스턴스는 한 가지 Microsoft Graph 리소스 종류에 대응할 수 있습니다.Each instance of this trigger can react to one Microsoft Graph resource type.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

웹후크 트리거 - 예제Webhook trigger - example

언어 관련 예제를 참조하세요.See the language-specific example:

웹후크 트리거 - C# 스크립트 예제Webhook trigger - C# script example

다음 예제에서는 들어오는 Outlook 메시지에 대한 웹후크를 처리합니다.The following example handles webhooks for incoming Outlook messages. 웹후크 트리거를 사용하려면 구독을 만들고 만료되지 않도록 새로 고칠 수 있습니다.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

function.json 파일은 웹후크 트리거를 정의합니다.The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 들어오는 이메일 메시지에 반응하여 받는 사람이 보냈고 제목에 "Azure Functions"가 포함된 이메일 메시지의 본문을 기록합니다.The C# script code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

#r "Microsoft.Graph"
using Microsoft.Graph;
using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(Message msg, ILogger log)  
{
    log.LogInformation("Microsoft Graph webhook trigger function processed a request.");

    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if (msg.Subject.Contains("Azure Functions") && msg.From.Equals(msg.Sender)) {
        log.LogInformation($"Processed email: {msg.BodyPreview}");
    }
}

웹후크 트리거 - JavaScript 예제Webhook trigger - JavaScript example

다음 예제에서는 들어오는 Outlook 메시지에 대한 웹후크를 처리합니다.The following example handles webhooks for incoming Outlook messages. 웹후크 트리거를 사용하려면 구독을 만들고 만료되지 않도록 새로 고칠 수 있습니다.To use a webhook trigger you create a subscription, and you can refresh the subscription to prevent it from expiring.

function.json 파일은 웹후크 트리거를 정의합니다.The function.json file defines a webhook trigger:

{
  "bindings": [
    {
      "name": "msg",
      "type": "GraphWebhookTrigger",
      "direction": "in",
      "resourceType": "#Microsoft.Graph.Message"
    }
  ],
  "disabled": false
}

JavaScript 코드는 들어오는 이메일 메시지에 반응하여 받는 사람이 보냈고 제목에 "Azure Functions"가 포함된 이메일 메시지의 본문을 기록합니다.The JavaScript code reacts to incoming mail messages and logs the body of those sent by the recipient and containing "Azure Functions" in the subject:

module.exports = function (context) {
    context.log("Microsoft Graph webhook trigger function processed a request.");
    const msg = context.bindings.msg
    // Testable by sending oneself an email with the subject "Azure Functions" and some text body
    if((msg.subject.indexOf("Azure Functions") > -1) && (msg.from === msg.sender) ) {
      context.log(`Processed email: ${msg.bodyPreview}`);
    }
    context.done();
};

웹후크 트리거 - 특성Webhook trigger - attributes

C # 클래스 라이브러리에서 GraphWebhookTrigger 특성을 사용 합니다.In C# class libraries, use the GraphWebhookTrigger attribute.

웹후크 트리거 - 구성Webhook trigger - configuration

다음 표에서는 function.json 파일 및 GraphWebhookTrigger 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookTrigger attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 메일 메시지의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the mail message. 코드에서 Outlook 메시지 출력 바인딩 사용을 참조하세요.See Using an Outlook message output binding from code.
typetype 해당 없음n/a 필수 - graphWebhook으로 설정해야 합니다.Required - must be set to graphWebhook.
directiondirection 해당 없음n/a 필수 - trigger으로 설정해야 합니다.Required - must be set to trigger.
resourceTyperesourceType ResourceTypeResourceType 필수 - 이 함수가 웹후크에 응답해야 하는 그래프 리소스입니다.Required - the graph resource for which this function should respond to webhooks. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • #Microsoft.Graph.Message - Outlook 메시지의 변경 내용입니다.#Microsoft.Graph.Message - changes made to Outlook messages.
  • #Microsoft.Graph.DriveItem - OneDrive 루트 항목의 변경 내용입니다.#Microsoft.Graph.DriveItem - changes made to OneDrive root items.
  • #Microsoft.Graph.Contact - Outlook의 개인 연락처에 대한 변경 내용입니다.#Microsoft.Graph.Contact - changes made to personal contacts in Outlook.
  • #Microsoft.Graph.Event - Outlook 일정 항목의 변경 내용입니다.#Microsoft.Graph.Event - changes made to Outlook calendar items.

참고

함수 앱은 지정된 resourceType 값에 대해 등록된 함수 하나만 사용할 수 있습니다.A function app can only have one function that is registered against a given resourceType value.

웹후크 트리거 - 사용Webhook trigger - usage

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • 리소스 종류와 관련된 Microsoft Graph SDK 형식(예: Microsoft.Graph.Message 또는 Microsoft.Graph.DriveItem)Microsoft Graph SDK types relevant to the resource type, such as Microsoft.Graph.Message or Microsoft.Graph.DriveItem.
  • 사용자 지정 개체 형식(구조 모델 바인딩 사용)Custom object types (using structural model binding)

웹후크 입력Webhook input

Microsoft Graph 웹후크 입력 바인딩을 사용하면 이 함수 앱이 관리하는 구독 목록을 검색할 수 있습니다.The Microsoft Graph webhook input binding allows you to retrieve the list of subscriptions managed by this function app. 이 바인딩은 함수 앱 스토리지에서 정보를 읽으므로, 앱 외부에서 작성된 다른 구독은 반영하지 않습니다.The binding reads from function app storage, so it does not reflect other subscriptions created from outside the app.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

웹후크 입력 - 예제Webhook input - example

언어 관련 예제를 참조하세요.See the language-specific example:

웹후크 입력 - C# 스크립트 예제Webhook input - C# script example

다음 예제는 호출하는 사용자에 대한 모든 구독을 가져와서 삭제합니다.The following example gets all subscriptions for the calling user and deletes them.

function.json 파일은 삭제 작업을 사용하는 구독 입력 바인딩 및 구독 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 구독을 가져와서 삭제합니다.The C# script code gets the subscriptions and deletes them:

using System.Net;
using Microsoft.Extensions.Logging;

public static async Task Run(HttpRequest req, string[] existingSubscriptions, IAsyncCollector<string> subscriptionsToDelete, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    foreach (var subscription in existingSubscriptions)
    {
        log.LogInformation($"Deleting subscription {subscription}");
        await subscriptionsToDelete.AddAsync(subscription);
    }
}

웹후크 입력 - JavaScript 예제Webhook input - JavaScript example

다음 예제는 호출하는 사용자에 대한 모든 구독을 가져와서 삭제합니다.The following example gets all subscriptions for the calling user and deletes them.

function.json 파일은 삭제 작업을 사용하는 구독 입력 바인딩 및 구독 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a subscription input binding and a subscription output binding that uses the delete action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in",
      "filter": "userFromRequest"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToDelete",
      "direction": "out",
      "action": "delete",
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript 코드는 구독을 가져와서 삭제합니다.The JavaScript code gets the subscriptions and deletes them:

module.exports = function (context, req) {
    const existing = context.bindings.existingSubscriptions;
    var toDelete = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Deleting subscription ${existing[i]}`);
        todelete.push(existing[i]);
    }
    context.bindings.subscriptionsToDelete = toDelete;
    context.done();
};

웹후크 입력 - 특성Webhook input - attributes

C # 클래스 라이브러리에서 GraphWebhookSubscription 특성을 사용 합니다.In C# class libraries, use the GraphWebhookSubscription attribute.

웹후크 입력 - 구성Webhook input - configuration

다음 표에서는 function.json 파일 및 GraphWebhookSubscription 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookSubscription attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 메일 메시지의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the mail message. 코드에서 Outlook 메시지 출력 바인딩 사용을 참조하세요.See Using an Outlook message output binding from code.
typetype 해당 없음n/a 필수 - graphWebhookSubscription으로 설정해야 합니다.Required - must be set to graphWebhookSubscription.
directiondirection 해당 없음n/a 필수 - in으로 설정해야 합니다.Required - must be set to in.
필터가filter 필터Filter userFromRequest로 설정하면 바인딩이 호출하는 사용자 소유의 구독만 검색합니다(HTTP 트리거에만 유효).If set to userFromRequest, then the binding will only retrieve subscriptions owned by the calling user (valid only with HTTP trigger).

웹후크 입력 - 사용Webhook input - usage

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • string[]string[]
  • 사용자 지정 개체 형식 배열Custom object type arrays
  • Newtonsoft.Json.Linq.JObject[]Newtonsoft.Json.Linq.JObject[]
  • Microsoft.Graph.Subscription[]Microsoft.Graph.Subscription[]

웹후크 출력Webhook output

웹후크 구독 출력 바인딩을 사용하면 Microsoft Graph에서 웹후크 구독을 만들고, 삭제하고, 새로 고칠 수 있습니다.The webhook subscription output binding allows you to create, delete, and refresh webhook subscriptions in the Microsoft Graph.

이 섹션은 다음 하위 섹션을 포함합니다.This section contains the following subsections:

웹후크 출력 - 예제Webhook output - example

언어 관련 예제를 참조하세요.See the language-specific example:

웹후크 출력 - C# 스크립트 예제Webhook output - C# script example

다음 예제는 구독을 만듭니다.The following example creates a subscription. 만료되지 않도록 구독을 새로 고칠 수 있습니다.You can refresh the subscription to prevent it from expiring.

function.json 파일은 만들기 작업을 사용하여 구독 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 호출하는 사용자가 Outlook 메시지를 받으면 이 함수 앱에 그 사실을 알리는 웹후크를 등록합니다.The C# script code registers a webhook that will notify this function app when the calling user receives an Outlook message:

using System;
using System.Net;
using Microsoft.Extensions.Logging;

public static HttpResponseMessage run(HttpRequestMessage req, out string clientState, ILogger log)
{
  log.LogInformation("C# HTTP trigger function processed a request.");
    clientState = Guid.NewGuid().ToString();
    return new HttpResponseMessage(HttpStatusCode.OK);
}

웹후크 출력 - JavaScript 예제Webhook output - JavaScript example

다음 예제는 구독을 만듭니다.The following example creates a subscription. 만료되지 않도록 구독을 새로 고칠 수 있습니다.You can refresh the subscription to prevent it from expiring.

function.json 파일은 만들기 작업을 사용하여 구독 출력 바인딩으로 HTTP 트리거를 정의합니다.The function.json file defines an HTTP trigger with a subscription output binding using the create action:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "clientState",
      "direction": "out",
      "action": "create",
      "subscriptionResource": "me/mailFolders('Inbox')/messages",
      "changeTypes": [
        "created"
      ],
      "identity": "userFromRequest"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ],
  "disabled": false
}

JavaScript 코드는 호출하는 사용자가 Outlook 메시지를 받으면 이 함수 앱에 그 사실을 알리는 웹후크를 등록합니다.The JavaScript code registers a webhook that will notify this function app when the calling user receives an Outlook message:

const uuidv4 = require('uuid/v4');

module.exports = function (context, req) {
    context.bindings.clientState = uuidv4();
    context.done();
};

웹후크 출력 - 특성Webhook output - attributes

C # 클래스 라이브러리에서 GraphWebhookSubscription 특성을 사용 합니다.In C# class libraries, use the GraphWebhookSubscription attribute.

웹후크 출력 - 구성Webhook output - configuration

다음 표에서는 function.json 파일 및 GraphWebhookSubscription 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the GraphWebhookSubscription attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
namename 해당 없음n/a 필수 - 메일 메시지의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the mail message. 코드에서 Outlook 메시지 출력 바인딩 사용을 참조하세요.See Using an Outlook message output binding from code.
typetype 해당 없음n/a 필수 - graphWebhookSubscription으로 설정해야 합니다.Required - must be set to graphWebhookSubscription.
directiondirection 해당 없음n/a 필수 - out으로 설정해야 합니다.Required - must be set to out.
identityidentity IDIdentity 필수 - 작업 수행에 사용되는 ID입니다.Required - The identity that will be used to perform the action. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • userFromRequest - HTTP 트리거에만 유효합니다.userFromRequest - Only valid with HTTP trigger. 호출하는 사용자의 ID를 사용합니다.Uses the identity of the calling user.
  • userFromId - 지정된 ID를 사용하여 이전에 로그인한 사용자의 ID를 사용합니다.userFromId - Uses the identity of a previously logged-in user with the specified ID. userId 속성을 참조하세요.See the userId property.
  • userFromToken - 지정된 토큰으로 표시된 ID를 사용합니다.userFromToken - Uses the identity represented by the specified token. userToken 속성을 참조하세요.See the userToken property.
  • clientCredentials - 함수 앱의 ID를 사용합니다.clientCredentials - Uses the identity of the function app.
IduserId IdUserId identityuserFromId으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromId. 이전에 로그인한 사용자와 연결된 사용자 계정 ID입니다.A user principal ID associated with a previously logged-in user.
userTokenuserToken UserTokenUserToken identityuserFromToken으로 설정된 경우에만 필요합니다.Needed if and only if identity is set to userFromToken. 함수 앱에 유효한 토큰입니다.A token valid for the function app.
actionaction 동작Action 필수 - 바인딩이 수행해야 하는 작업을 지정합니다.Required - specifies the action the binding should perform. 다음 값 중 하나를 사용할 수 있습니다.Can be one of the following values:
  • create - 새 구독을 등록합니다.create - Registers a new subscription.
  • delete - 지정된 구독을 삭제합니다.delete - Deletes a specified subscription.
  • refresh - 구독이 만료되지 않도록 지정된 구독을 새로 고칩니다.refresh - Refreshes a specified subscription to keep it from expiring.
subscriptionResourcesubscriptionResource SubscriptionResourceSubscriptionResource actioncreate로 설정된 경우에만 필요합니다.Needed if and only if the action is set to create. 변경 내용이 모니터링될 Microsoft Graph 리소스를 지정합니다.Specifies the Microsoft Graph resource that will be monitored for changes. Microsoft Graph에서 웹후크 작업을 참조하세요.See Working with webhooks in Microsoft Graph.
changeTypechangeType ChangeTypeChangeType actioncreate로 설정된 경우에만 필요합니다.Needed if and only if the action is set to create. 구독하는 리소스에서 알림을 발생시키는 변경 형식을 나타냅니다.Indicates the type of change in the subscribed resource that will raise a notification. 지원되는 값은 created, updated, deleted입니다.The supported values are: created, updated, deleted. 쉼표로 구분된 목록을 사용하여 여러 값을 조합할 수 있습니다.Multiple values can be combined using a comma-separated list.

웹후크 출력 - 사용Webhook output - usage

이 바인딩은 .NET 함수에 다음 형식을 노출합니다.The binding exposes the following types to .NET functions:

  • stringstring
  • Microsoft.Graph.SubscriptionMicrosoft.Graph.Subscription

웹후크 구독 새로 고침Webhook subscription refresh

구독을 새로 고치는 두 가지 방법이 있습니다.There are two approaches to refreshing subscriptions:

  • 애플리케이션 ID를 사용하여 모든 구독을 처리하는 방법.Use the application identity to deal with all subscriptions. 이 경우 Azure Active Directory 관리자의 동의가 필요 합니다. Azure Functions에서 지 원하는 모든 언어에서 사용할 수 있습니다.This will require consent from an Azure Active Directory admin. This can be used by all languages supported by Azure Functions.
  • 각 사용자 ID를 수동으로 바인딩하여 각 구독에 연결된 ID를 사용하는 방법.Use the identity associated with each subscription by manually binding each user ID. 이렇게 하려면 일부 사용자 지정 코드에서 바인딩을 수행해야 합니다.This will require some custom code to perform the binding. 이 방법은 .NET 함수에만 사용할 수 있습니다.This can only be used by .NET functions.

이 섹션에는 이러한 각 방법의 예제가 나와 있습니다.This section contains an example for each of these approaches:

웹후크 구독 새로 고침 - 앱 ID 예제Webhook Subscription refresh - app identity example

언어 관련 예제를 참조하세요.See the language-specific example:

앱 ID 새로 고침 - C# 스크립트 예제App identity refresh - C# script example

다음 예제에서는 애플리케이션 ID를 사용하여 구독을 새로 고칩니다.The following example uses the application identity to refresh a subscription.

function.json은 구독 입력 바인딩 및 구독 출력 바인딩으로 타이머 트리거를 정의합니다.The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 구독을 새로 고칩니다.The C# script code refreshes the subscriptions:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, string[] existingSubscriptions, ICollector<string> subscriptionsToRefresh, ILogger log)
{
    // This template uses application permissions and requires consent from an Azure Active Directory admin.
    // See https://go.microsoft.com/fwlink/?linkid=858780
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
      log.LogInformation($"Refreshing subscription {subscription}");
      subscriptionsToRefresh.Add(subscription);
    }
}

앱 ID 새로 고침 - C# 스크립트 예제App identity refresh - C# script example

다음 예제에서는 애플리케이션 ID를 사용하여 구독을 새로 고칩니다.The following example uses the application identity to refresh a subscription.

function.json은 구독 입력 바인딩 및 구독 출력 바인딩으로 타이머 트리거를 정의합니다.The function.json defines a timer trigger with a subscription input binding and a subscription output binding:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "subscriptionsToRefresh",
      "direction": "out",
      "action": "refresh",
      "identity": "clientCredentials"
    }
  ],
  "disabled": false
}

JavaScript 코드는 구독을 새로 고칩니다.The JavaScript code refreshes the subscriptions:

// This template uses application permissions and requires consent from an Azure Active Directory admin.
// See https://go.microsoft.com/fwlink/?linkid=858780

module.exports = function (context) {
    const existing = context.bindings.existingSubscriptions;
    var toRefresh = [];
    for (var i = 0; i < existing.length; i++) {
        context.log(`Refreshing subscription ${existing[i]}`);
        toRefresh.push(existing[i]);
    }
    context.bindings.subscriptionsToRefresh = toRefresh;
    context.done();
};

웹후크 구독 새로 고침 - 사용자 ID 예제Webhook Subscription refresh - user identity example

다음 예제에서는 사용자 ID를 사용하여 구독을 새로 고칩니다.The following example uses the user identity to refresh a subscription.

function.json 파일은 타이머 트리거를 정의하고 함수 코드에 대한 구독 입력 바인딩을 지연합니다.The function.json file defines a timer trigger and defers the subscription input binding to the function code:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 * * */2 * *"
    },
    {
      "type": "graphWebhookSubscription",
      "name": "existingSubscriptions",
      "direction": "in"
    }
  ],
  "disabled": false
}

C# 스크립트 코드는 각 사용자의 ID를 사용하여 코드에서 구독을 새로 고치고, 출력 바인딩을 만듭니다.The C# script code refreshes the subscriptions and creates the output binding in code, using each user's identity:

using System;
using Microsoft.Extensions.Logging;

public static async Task Run(TimerInfo myTimer, UserSubscription[] existingSubscriptions, IBinder binder, ILogger log)
{
  log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    foreach (var subscription in existingSubscriptions)
    {
        // binding in code to allow dynamic identity
        using (var subscriptionsToRefresh = await binder.BindAsync<IAsyncCollector<string>>(
            new GraphWebhookSubscriptionAttribute() {
                Action = "refresh",
                Identity = "userFromId",
                UserId = subscription.UserId
            }
        ))
        {
            log.LogInformation($"Refreshing subscription {subscription}");
            await subscriptionsToRefresh.AddAsync(subscription);
        }

    }
}

public class UserSubscription {
    public string UserId {get; set;}
    public string Id {get; set;}
}

다음 단계Next steps