Azure Functions C# 개발자 참조Azure Functions C# developer reference

이 문서는 .NET 클래스 라이브러리의 C#을 사용하여 Azure Functions를 개발하는 방법을 소개합니다.This article is an introduction to developing Azure Functions by using C# in .NET class libraries.

Azure Functions는 C# 및 C# 스크립트 프로그래밍 언어를 지원합니다.Azure Functions supports C# and C# script programming languages. Azure Portal에서 C#을 사용하는 방법에 대한 지침은 C# 스크립트(.csx) 개발자 참조를 참조하세요.If you're looking for guidance on using C# in the Azure portal, see C# script (.csx) developer reference.

이 문서에서는 사용자가 이미 다음 문서를 읽었다고 가정합니다.This article assumes that you've already read the following articles:

지원되는 버전Supported versions

함수 런타임의 버전은 특정 버전의 .NET에서 작동 합니다.Versions of the Functions runtime work with specific versions of .NET. 다음 표에서는 프로젝트에서 특정 버전의 함수에 사용할 수 있는 .NET Core 및 .NET Framework 및 .NET Core의 가장 높은 수준을 보여 줍니다.The following table shows the highest level of .NET Core and .NET Framework and .NET Core that can be used with a specific version of Functions in your project.

함수 런타임 버전Functions runtime version 최대 .NET 버전Max .NET version
함수 3(sp3)Functions 3.x .NET Core 3.1.NET Core 3.1
Functions 2.xFunctions 2.x .NET Core 2.2.NET Core 2.2
Functions 1.xFunctions 1.x .NET Framework 4.6.NET Framework 4.6

자세히 알아보려면 Azure Functions 런타임 버전 개요 를 참조 하세요.To learn more, see Azure Functions runtime versions overview

Functions 클래스 라이브러리 프로젝트Functions class library project

Visual Studio에서 Azure Functions 프로젝트 템플릿은 다음 파일이 포함된 C# 클래스 라이브러리 프로젝트를 만듭니다.In Visual Studio, the Azure Functions project template creates a C# class library project that contains the following files:

  • host.json -로컬로 또는 Azure에서 실행될 경우 프로젝트의 모든 함수에 영향을 주는 구성 설정을 저장합니다.host.json - stores configuration settings that affect all functions in the project when running locally or in Azure.
  • local.settings.json - 로컬로 실행될 때 사용되는 앱 설정 및 연결 문자열을 저장합니다.local.settings.json - stores app settings and connection strings that are used when running locally. 이 파일은 암호를 포함하며 Azure의 함수 앱에 게시되지 않습니다.This file contains secrets and isn't published to your function app in Azure. 대신, 함수 앱에 앱 설정을 추가합니다.Instead, add app settings to your function app.

프로젝트를 빌드하면 빌드 출력 디렉터리에 다음 예제와 같은 폴더 구조가 생성 됩니다.When you build the project, a folder structure that looks like the following example is generated in the build output directory:

<framework.version>
 | - bin
 | - MyFirstFunction
 | | - function.json
 | - MySecondFunction
 | | - function.json
 | - host.json

이 디렉터리는 Azure의 함수 앱에 배포되는 디렉터리입니다.This directory is what gets deployed to your function app in Azure. Functions 런타임의 버전 2.x에 필요한 바인딩 확장은 NuGet 패키지로 프로젝트에 추가됩니다.The binding extensions required in version 2.x of the Functions runtime are added to the project as NuGet packages.

중요

빌드 프로세스는 각 함수에 대해 function.json 파일을 만듭니다.The build process creates a function.json file for each function. function.json 파일은 직접 편집할 수 없습니다.This function.json file is not meant to be edited directly. 이 파일을 편집하여 바인딩 구성을 변경하거나 함수를 사용하지 않도록 설정할 수 없습니다.You can't change binding configuration or disable the function by editing this file. 함수를 사용하지 않도록 설정하는 방법을 알아보려면 함수를 사용하지 않도록 설정하는 방법을 참조하세요.To learn how to disable a function, see How to disable functions.

함수로 인식되는 메서드Methods recognized as functions

클래스 라이브러리에서 함수는 다음 예제와 같이 FunctionName 및 트리거 특성을 포함하는 정적 메서드입니다.In a class library, a function is a static method with a FunctionName and a trigger attribute, as shown in the following example:

public static class SimpleExample
{
    [FunctionName("QueueTrigger")]
    public static void Run(
        [QueueTrigger("myqueue-items")] string myQueueItem, 
        ILogger log)
    {
        log.LogInformation($"C# function processed: {myQueueItem}");
    }
} 

FunctionName 특성은 메서드를 함수 진입점으로 표시합니다.The FunctionName attribute marks the method as a function entry point. 이름은 프로젝트 내에서 고유 해야 하 고, 문자로 시작 하 고, 문자, 숫자, 및 문자 ( _ - 최대 127 자)를 포함 해야 합니다.The name must be unique within a project, start with a letter and only contain letters, numbers, _, and -, up to 127 characters in length. 프로젝트 템플릿에서 Run 메서드를 자주 만들지만, 유효한 C# 이름은 모두 메서드 이름이 될 수 있습니다.Project templates often create a method named Run, but the method name can be any valid C# method name.

트리거 특성은 트리거 유형을 지정하고, 입력 데이터를 메서드 매개 변수에 바인딩합니다.The trigger attribute specifies the trigger type and binds input data to a method parameter. 예제 함수는 큐 메시지에 의해 트리거되며, 큐 메시지는 myQueueItem 매개 변수의 메서드에 전달됩니다.The example function is triggered by a queue message, and the queue message is passed to the method in the myQueueItem parameter.

메서드 서명 매개 변수Method signature parameters

트리거 특성에 사용되는 매개 변수 이외의 매개 변수가 메서드 서명에 포함될 수 있습니다.The method signature may contain parameters other than the one used with the trigger attribute. 다음은 포함할 수 있는 추가 매개 변수 중 일부입니다.Here are some of the additional parameters that you can include:

함수 시그니처에서 매개 변수의 순서는 중요하지 않습니다.The order of parameters in the function signature does not matter. 예를 들어, 다른 바인딩 전후에 트리거 매개 변수를 추가하고, 트리거 또는 바인딩 매개 변수 전후에 로거 매개 변수를 추가할 수 있습니다.For example, you can put trigger parameters before or after other bindings, and you can put the logger parameter before or after trigger or binding parameters.

출력 바인딩 예제Output binding example

다음 예제에서는 출력 큐 바인딩을 추가하여 이전 예제를 수정합니다.The following example modifies the preceding one by adding an output queue binding. 이 함수는 함수를 다른 큐의 새 큐 메시지로 트리거하는 큐 메시지를 씁니다.The function writes the queue message that triggers the function to a new queue message in a different queue.

public static class SimpleExampleWithOutput
{
    [FunctionName("CopyQueueMessage")]
    public static void Run(
        [QueueTrigger("myqueue-items-source")] string myQueueItem, 
        [Queue("myqueue-items-destination")] out string myQueueItemCopy,
        ILogger log)
    {
        log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
        myQueueItemCopy = myQueueItem;
    }
}

바인딩 참조 문서(예: 스토리지 큐)는 트리거, 입력 또는 출력 바인딩 특성에 사용할 수 있는 매개 변수 형식을 설명합니다.The binding reference articles (Storage queues, for example) explain which parameter types you can use with trigger, input, or output binding attributes.

바인딩 식 예제Binding expressions example

다음 코드는 앱 설정에서 모니터링할 큐의 이름을 가져오고, insertionTime 매개 변수에서 큐 메시지 작성 시간을 가져옵니다.The following code gets the name of the queue to monitor from an app setting, and it gets the queue message creation time in the insertionTime parameter.

public static class BindingExpressionsExample
{
    [FunctionName("LogQueueMessage")]
    public static void Run(
        [QueueTrigger("%queueappsetting%")] string myQueueItem,
        DateTimeOffset insertionTime,
        ILogger log)
    {
        log.LogInformation($"Message content: {myQueueItem}");
        log.LogInformation($"Created at: {insertionTime}");
    }
}

자동 생성된 function.jsonAutogenerated function.json

빌드 프로세스는 build 폴더의 function 폴더에 function.json 파일을 만듭니다.The build process creates a function.json file in a function folder in the build folder. 앞에서 설명한 대로 이 파일은 직접 편집할 수 없습니다.As noted earlier, this file is not meant to be edited directly. 이 파일을 편집하여 바인딩 구성을 변경하거나 함수를 사용하지 않도록 설정할 수 없습니다.You can't change binding configuration or disable the function by editing this file.

이 파일의 목적은 소비 계획에 대 한 크기 조정을 결정하는 데 사용할 수 있도록 크기 조정 컨트롤러에 정보를 제공 하는 것입니다.The purpose of this file is to provide information to the scale controller to use for scaling decisions on the Consumption plan. 이러한 이유로 이 파일에는 트리거 정보만 있고 입력 또는 출력 바인딩은 없습니다.For this reason, the file only has trigger info, not input or output bindings.

생성된 function.json 파일에는 바인딩에 function.json 구성 대신 .NET 특성을 사용하도록 런타임에 지시하는 configurationSource 속성이 포함되어 있습니다.The generated function.json file includes a configurationSource property that tells the runtime to use .NET attributes for bindings, rather than function.json configuration. 예를 들면 다음과 같습니다.Here's an example:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "queueTrigger",
      "queueName": "%input-queue-name%",
      "name": "myQueueItem"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\FunctionApp1.dll",
  "entryPoint": "FunctionApp1.QueueTrigger.Run"
}

Microsoft.NET.Sdk.FunctionsMicrosoft.NET.Sdk.Functions

function.json 파일 생성은 Microsoft.NET.Sdk.Functions NuGet 패키지에서 수행됩니다.The function.json file generation is performed by the NuGet package Microsoft.NET.Sdk.Functions.

버전 1.x 및 2.x의 Functions 런타임 둘 다에 동일한 패키지가 사용됩니다.The same package is used for both version 1.x and 2.x of the Functions runtime. 대상 프레임워크가 1.x 프로젝트와 2.x 프로젝트에서 구분되는 측면입니다.The target framework is what differentiates a 1.x project from a 2.x project. 다음은 .csproj 파일의 관련 부분으로, 다른 대상 프레임워크와 동일한 Sdk 패키지를 보여 줍니다.Here are the relevant parts of .csproj files, showing different target frameworks and the same Sdk package:

Functions 1.xFunctions 1.x

<PropertyGroup>
  <TargetFramework>net461</TargetFramework>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.8" />
</ItemGroup>

Functions 2.xFunctions 2.x

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.8" />
</ItemGroup>

Sdk 패키지 종속성에는 트리거 및 바인딩이 있습니다.Among the Sdk package dependencies are triggers and bindings. 1.x 프로젝트는 1.x 트리거와 바인딩이 .NET Framework 대상으로 하는 반면, 2.x 트리거와 바인딩은 .NET Core를 대상으로 하기 때문에 1. x 트리거 및 바인딩을 참조 합니다.A 1.x project refers to 1.x triggers and bindings because those triggers and bindings target the .NET Framework, while 2.x triggers and bindings target .NET Core.

Sdk 패키지는 Newtonsoft.Json에도 종속되며, WindowsAzure.Storage에는 간접적으로 종속됩니다.The Sdk package also depends on Newtonsoft.Json, and indirectly on WindowsAzure.Storage. 이러한 종속성 때문에 프로젝트는 대상이 되는 Functions 런타임 버전에서 작동하는 패키지 버전을 사용하게 됩니다.These dependencies make sure that your project uses the versions of those packages that work with the Functions runtime version that the project targets. 예를 들어, Newtonsoft.Json에는 .NET Framework 4.6.1용 버전 11이 있지만, .NET Framework 4.6.1을 대상으로 하는 Functions 런타임은 Newtonsoft.Json 9.0.1과만 호환됩니다.For example, Newtonsoft.Json has version 11 for .NET Framework 4.6.1, but the Functions runtime that targets .NET Framework 4.6.1 is only compatible with Newtonsoft.Json 9.0.1. 따라서 해당 프로젝트의 함수 코드도 Newtonsoft.Json 9.0.1을 사용해야 합니다.So your function code in that project also has to use Newtonsoft.Json 9.0.1.

Microsoft.NET.Sdk.Functions의 소스 코드는 azure-functions-vs-build-sdk GitHub 리포지토리에서 사용할 수 있습니다.The source code for Microsoft.NET.Sdk.Functions is available in the GitHub repo azure-functions-vs-build-sdk.

런타임 버전Runtime version

Visual Studio는 Azure Functions 핵심 도구를 사용하여 Functions 프로젝트를 실행합니다.Visual Studio uses the Azure Functions Core Tools to run Functions projects. 핵심 도구는 Function 런타임에 대한 명령줄 인터페이스입니다.The Core Tools is a command-line interface for the Functions runtime.

npm을 사용하여 핵심 도구를 설치하는 경우 Visual Studio에서 사용되는 핵심 도구 버전에 영향을 주지 않습니다.If you install the Core Tools by using npm, that doesn't affect the Core Tools version used by Visual Studio. Functions 런타임 버전 1.x의 경우, Visual Studio는 %USERPROFILE%\AppData\Local\Azure.Functions.Cli에 핵심 도구 버전을 저장하고 해당 위치에 저장된 최신 버전을 사용합니다.For the Functions runtime version 1.x, Visual Studio stores Core Tools versions in %USERPROFILE%\AppData\Local\Azure.Functions.Cli and uses the latest version stored there. Functions 2.x의 경우, 핵심 도구는 Azure Functions 및 Web Jobs Tools 확장에 포함되어 있습니다.For Functions 2.x, the Core Tools are included in the Azure Functions and Web Jobs Tools extension. 1.x 및 2.x 둘 다, Functions 프로젝트를 실행할 때 콘솔 출력에 사용되는 버전을 확인할 수 있습니다.For both 1.x and 2.x, you can see what version is being used in the console output when you run a Functions project:

[3/1/2018 9:59:53 AM] Starting Host (HostId=contoso2-1518597420, Version=2.0.11353.0, ProcessId=22020, Debug=False, Attempt=0, FunctionsExtensionVersion=)

바인딩에 대해 지원되는 형식Supported types for bindings

각 바인딩에는 자체적인 지원 형식이 있습니다. 예를들 어, Blob 트리거 특성은 문자열 매개 변수, POCO 매개 변수, CloudBlockBlob 매개 변수 또는 지원되는 기타 몇 가지 형식에 적용될 수 있습니다.Each binding has its own supported types; for instance, a blob trigger attribute can be applied to a string parameter, a POCO parameter, a CloudBlockBlob parameter, or any of several other supported types. Blob 바인딩에 대한 바인딩 참조 문서에는 지원되는 모든 매개 변수 형식이 나와 있습니다.The binding reference article for blob bindings lists all supported parameter types. 자세한 내용은 트리거 및 바인딩각 바인딩 형식에 대한 바인딩 참조 문서를 참조하세요.For more information, see Triggers and bindings and the binding reference docs for each binding type.

HTTP 또는 WebHook를 사용할 계획인 경우 HttpClient의 부적절한 인스턴스화로 인해 발생할 수 있는 포트 소모를 피하도록 계획합니다.If you plan to use the HTTP or WebHook bindings, plan to avoid port exhaustion that can be caused by improper instantiation of HttpClient. 자세한 내용은 Azure Functions에서 연결을 관리하는 방법을 참조하세요.For more information, see How to manage connections in Azure Functions.

메서드 반환 값에 바인딩Binding to method return value

메서드 반환 값에 특성을 적용하여 출력 바인딩에 대한 메서드 반환 값을 사용할 수 있습니다.You can use a method return value for an output binding, by applying the attribute to the method return value. 예제를 보려면 트리거 및 바인딩을 참조하세요.For examples, see Triggers and bindings.

성공적인 함수 실행이 항상 출력 바인딩으로 전달할 반환 값을 생성하는 경우에만 반환 값을 사용합니다.Use the return value only if a successful function execution always results in a return value to pass to the output binding. 그렇지 않으면 다음 섹션에 나와 있는 것처럼 ICollector 또는 IAsyncCollector를 사용합니다.Otherwise, use ICollector or IAsyncCollector, as shown in the following section.

여러 출력 값 쓰기Writing multiple output values

출력 바인딩에 여러 값을 쓰거나 성공적인 함수 호출이 출력 바인딩에 전달할 값을 생성하지 않는 경우 ICollector 또는 IAsyncCollector 형식을 사용합니다.To write multiple values to an output binding, or if a successful function invocation might not result in anything to pass to the output binding, use the ICollector or IAsyncCollector types. 이러한 형식은 메서드가 완료될 때 출력 바인딩에 기록되는 쓰기 전용 컬렉션입니다.These types are write-only collections that are written to the output binding when the method completes.

이 예제에서는 ICollector를 사용하여 동일한 큐에 여러 큐 메시지를 씁니다.This example writes multiple queue messages into the same queue using ICollector:

public static class ICollectorExample
{
    [FunctionName("CopyQueueMessageICollector")]
    public static void Run(
        [QueueTrigger("myqueue-items-source-3")] string myQueueItem,
        [Queue("myqueue-items-destination")] ICollector<string> myDestinationQueue,
        ILogger log)
    {
        log.LogInformation($"C# function processed: {myQueueItem}");
        myDestinationQueue.Add($"Copy 1: {myQueueItem}");
        myDestinationQueue.Add($"Copy 2: {myQueueItem}");
    }
}

로깅Logging

C#의 스트리밍 로그에 대한 출력을 기록하려면 ILogger 형식의 인수를 포함합니다.To log output to your streaming logs in C#, include an argument of type ILogger. 다음 예제와 같이 log로 이름을 지정하는 것이 좋습니다.We recommend that you name it log, as in the following example:

public static class SimpleExample
{
    [FunctionName("QueueTrigger")]
    public static void Run(
        [QueueTrigger("myqueue-items")] string myQueueItem, 
        ILogger log)
    {
        log.LogInformation($"C# function processed: {myQueueItem}");
    }
} 

Azure Functions에서 Console.Write를 사용하지 마세요.Avoid using Console.Write in Azure Functions. 자세한 내용은 Azure Functions 모니터링 문서에서 C# 함수로 로그 작성을 참조하세요.For more information, see Write logs in C# functions in the Monitor Azure Functions article.

AsyncAsync

비동기화 함수를 만들려면 async 키워드를 사용하고 Task 개체를 반환합니다.To make a function asynchronous, use the async keyword and return a Task object.

public static class AsyncExample
{
    [FunctionName("BlobCopy")]
    public static async Task RunAsync(
        [BlobTrigger("sample-images/{blobName}")] Stream blobInput,
        [Blob("sample-images-copies/{blobName}", FileAccess.Write)] Stream blobOutput,
        CancellationToken token,
        ILogger log)
    {
        log.LogInformation($"BlobCopy function processed.");
        await blobInput.CopyToAsync(blobOutput, 4096, token);
    }
}

out 매개 변수는 비동기 함수에 사용할 수 없습니다.You can't use out parameters in async functions. 출력 바인딩에는 함수 반환 값 또는 수집기 개체를 대신 사용합니다.For output bindings, use the function return value or a collector object instead.

취소 토큰Cancellation tokens

함수는 함수가 종료될 때 운영 체제가 코드에 알릴 수 있게 해주는 CancellationToken 매개 변수를 사용할 수 있습니다.A function can accept a CancellationToken parameter, which enables the operating system to notify your code when the function is about to be terminated. 이 알림을 통해 함수가 예기치 않게 종료되어 데이터가 일관되지 않은 상태가 되는 것을 방지할 수 있습니다.You can use this notification to make sure the function doesn't terminate unexpectedly in a way that leaves data in an inconsistent state.

다음 예제에서는 임박한 함수 종료를 확인하는 방법을 보여 줍니다.The following example shows how to check for impending function termination.

public static class CancellationTokenExample
{
    public static void Run(
        [QueueTrigger("inputqueue")] string inputText,
        TextWriter logger,
        CancellationToken token)
    {
        for (int i = 0; i < 100; i++)
        {
            if (token.IsCancellationRequested)
            {
                logger.WriteLine("Function was cancelled at iteration {0}", i);
                break;
            }
            Thread.Sleep(5000);
            logger.WriteLine("Normal processing for queue message={0}", inputText);
        }
    }
}

환경 변수Environment variables

환경 변수 또는 앱 설정 값을 가져오려면 다음 코드 예제와 같이 System.Environment.GetEnvironmentVariable을 사용합니다.To get an environment variable or an app setting value, use System.Environment.GetEnvironmentVariable, as shown in the following code example:

public static class EnvironmentVariablesExample
{
    [FunctionName("GetEnvironmentVariables")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
        log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
    }

    public static string GetEnvironmentVariable(string name)
    {
        return name + ": " +
            System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
    }
}

앱 설정은 로컬로 개발할 때와 Azure에서 실행할 때 환경 변수에서 읽을 수 있습니다.App settings can be read from environment variables both when developing locally and when running in Azure. 로컬로 개발할 때 앱 설정은 Valueslocal.settings.json* 파일의 * 컬렉션에서 가져옵니다.When developing locally, app settings come from the Values collection in the local.settings.json file. 로컬 및 Azure의 두 환경에서 GetEnvironmentVariable("<app setting name>")은 명명된 앱 설정의 값을 검색합니다.In both environments, local and Azure, GetEnvironmentVariable("<app setting name>") retrieves the value of the named app setting. 예를 들어 로컬로 실행하는 경우 local.settings.json 파일에 { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }이 포함된 경우 "My Site Name"이 반환됩니다.For instance, when you're running locally, "My Site Name" would be returned if your local.settings.json file contains { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }.

System.Configuration.ConfigurationManager.AppSettings 속성은 앱 설정 값을 가져오는 대체 API지만, 다음과 같이 GetEnvironmentVariable을 사용하는 것이 좋습니다.The System.Configuration.ConfigurationManager.AppSettings property is an alternative API for getting app setting values, but we recommend that you use GetEnvironmentVariable as shown here.

런타임에 바인딩Binding at runtime

C# 및 기타 .NET 언어에서는 특성의 declarative 바인딩과 달리 명령적 바인딩 패턴을 사용할 수 있습니다.In C# and other .NET languages, you can use an imperative binding pattern, as opposed to the declarative bindings in attributes. 명령적 바인딩은 바인딩 매개 변수를 디자인 타임이 아닌 런타임에 계산해야 할 경우 유용합니다.Imperative binding is useful when binding parameters need to be computed at runtime rather than design time. 이 패턴을 사용하면 함수 코드에서 지원되는 입력 및 출력 바인딩을 즉시 바인딩할 수 있습니다.With this pattern, you can bind to supported input and output bindings on-the-fly in your function code.

다음과 같이 명령적 바인딩을 정의합니다.Define an imperative binding as follows:

  • 원하는 명령적 바인딩에 대한 함수 시그니처에 특성을 포함하지 마세요.Do not include an attribute in the function signature for your desired imperative bindings.

  • 입력 매개 변수 Binder binder 또는 IBinder binder에 전달합니다.Pass in an input parameter Binder binder or IBinder binder.

  • 다음 C# 패턴을 사용하여 데이터 바인딩을 수행합니다.Use the following C# pattern to perform the data binding.

    using (var output = await binder.BindAsync<T>(new BindingTypeAttribute(...)))
    {
        ...
    }
    

    BindingTypeAttribute는 바인딩을 정의하는 .NET 특성이며, T는 해당 바인딩 형식에서 지원되는 입력 또는 출력 형식입니다.BindingTypeAttribute is the .NET attribute that defines your binding, and T is an input or output type that's supported by that binding type. Tout 매개 변수 형식(예: out JObject)일 수 없습니다.T cannot be an out parameter type (such as out JObject). 예를 들어, Mobile Apps 테이블 출력 바인딩은 6가지 출력 형식을 지원하지만 명령적 바인딩에는 ICollector<T> 또는 IAsyncCollector<T>만 사용할 수 있습니다.For example, the Mobile Apps table output binding supports six output types, but you can only use ICollector<T> or IAsyncCollector<T> with imperative binding.

단일 특성 예제Single attribute example

다음 예제 코드에서는 런타임에서 정의된 Blob경로를 사용하는 Storage Blob 출력 바인딩을 만든 다음, Blob에 문자열을 씁니다.The following example code creates a Storage blob output binding with blob path that's defined at run time, then writes a string to the blob.

public static class IBinderExample
{
    [FunctionName("CreateBlobUsingBinder")]
    public static void Run(
        [QueueTrigger("myqueue-items-source-4")] string myQueueItem,
        IBinder binder,
        ILogger log)
    {
        log.LogInformation($"CreateBlobUsingBinder function processed: {myQueueItem}");
        using (var writer = binder.Bind<TextWriter>(new BlobAttribute(
                    $"samples-output/{myQueueItem}", FileAccess.Write)))
        {
            writer.Write("Hello World!");
        };
    }
}

BlobAttributeStorage Blob 입력 또는 출력 바인딩을 정의하며, TextWriter는 지원되는 출력 바인딩 형식입니다.BlobAttribute defines the Storage blob input or output binding, and TextWriter is a supported output binding type.

다중 특성 예제Multiple attribute example

앞의 예제에서는 함수 앱의 주 Storage 계정 연결 문자열(AzureWebJobsStorage)에 대한 앱 설정을 가져옵니다.The preceding example gets the app setting for the function app's main Storage account connection string (which is AzureWebJobsStorage). StorageAccountAttribute를 추가하고 BindAsync<T>()에 특성 배열을 전달하여 스토리지 계정에 사용할 사용자 지정 앱 설정을 지정할 수 있습니다.You can specify a custom app setting to use for the Storage account by adding the StorageAccountAttribute and passing the attribute array into BindAsync<T>(). IBinder가 아닌 Binder 매개 변수를 사용합니다.Use a Binder parameter, not IBinder. 예를 들면 다음과 같습니다.For example:

public static class IBinderExampleMultipleAttributes
{
    [FunctionName("CreateBlobInDifferentStorageAccount")]
    public async static Task RunAsync(
            [QueueTrigger("myqueue-items-source-binder2")] string myQueueItem,
            Binder binder,
            ILogger log)
    {
        log.LogInformation($"CreateBlobInDifferentStorageAccount function processed: {myQueueItem}");
        var attributes = new Attribute[]
        {
        new BlobAttribute($"samples-output/{myQueueItem}", FileAccess.Write),
        new StorageAccountAttribute("MyStorageAccount")
        };
        using (var writer = await binder.BindAsync<TextWriter>(attributes))
        {
            await writer.WriteAsync("Hello World!!");
        }
    }
}

트리거 및 바인딩Triggers and bindings

다음 표에서는 Azure Functions 런타임의 주 버전에서 지원 되는 바인딩을 보여 줍니다.This table shows the bindings that are supported in the major versions of the Azure Functions runtime:

TypeType 1.x1.x 2.x 이상12.x and higher1 트리거Trigger 입력Input 출력Output
Blob StorageBlob storage
Cosmos DBCosmos DB
Event GridEvent Grid
Event HubsEvent Hubs
HTTP & 웹 후크HTTP & webhooks
IoT HubIoT Hub
Microsoft Graph
Excel 테이블
Microsoft Graph
Excel tables
Microsoft Graph
OneDrive 파일
Microsoft Graph
OneDrive files
Microsoft Graph
Outlook 이메일
Microsoft Graph
Outlook email
Microsoft Graph
이벤트
Microsoft Graph
events
Microsoft Graph
인증 토큰
Microsoft Graph
Auth tokens
Mobile AppsMobile Apps
Notification HubsNotification Hubs
Queue StorageQueue storage
SendGridSendGrid
Service BusService Bus
SignalRSignalR
Table StorageTable storage
타이머Timer
TwilioTwilio

1 버전 2.X 런타임으로 시작 하 여 HTTP 및 타이머를 제외한 모든 바인딩을 등록 해야 합니다.1 Starting with the version 2.x runtime, all bindings except HTTP and Timer must be registered. 바인딩 확장 등록을 참조하세요.See Register binding extensions.

다음 단계Next steps