다음을 통해 공유


.NET용 Azure WebJobs Tables 클라이언트 라이브러리 - 버전 1.1.0

이 확장은 Azure Functions Azure Tables에 액세스하기 위한 기능을 제공합니다.

시작

패키지 설치

NuGet을 사용하여 테이블 확장을 설치합니다.

dotnet add package Microsoft.Azure.WebJobs.Extensions.Tables

필수 구성 요소

이 패키지를 사용하려면 Azure 구독스토리지 계정 또는 Cosmos 테이블 계정이 필요합니다.

스토리지 테이블 사용

새 Storage 계정을 만들려면 Azure Portal, Azure PowerShell 또는 Azure CLI를 사용할 수 있습니다. 다음은 Azure CLI 사용 예입니다.

az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS

Cosmos 테이블 사용

새 Cosmos 테이블 를 만들려면 Azure Portal, Azure PowerShell 또는 Azure CLI를 사용할 수 있습니다.

클라이언트 인증

연결은 테이블 서비스에 연결하는 데 필요한 정보 집합을 나타냅니다. 연결 문자열, 엔드포인트, 토큰 자격 증명 또는 공유 키를 포함할 수 있습니다.

TableAttribute 속성은 Connection Table Service 액세스에 사용되는 연결을 정의합니다. 예를 들어 는 [Tables(Connection="MyTableService")] 연결을 사용합니다 MyTableService .

연결 정보는 Azure Portal 또는 애플리케이션 설정에서 설정할 local.settings.json 수 있습니다.

local.settings.json에 설정을 추가할 때 속성 아래에 Values 배치합니다.

{
  "IsEncrypted": false,
  "Values": {
    "MyTableService": "..."
  }
}

Azure Portal 애플리케이션 설정에 설정을 추가하는 경우 제공된 이름을 직접 사용합니다.

MyTableService = ...

테이블 확장은 AzureWebJobsStorage 기본적으로 연결 이름을 사용합니다.

연결 문자열

연결 문자열을 사용하려면 인증을 사용하여 연결 설정에 직접 연결 문자열 값을 할당합니다.

<ConnectionName> = DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net

엔드포인트 및 토큰 자격 증명 사용

참고: 토큰 자격 증명 인증은 스토리지 테이블에 대해서만 지원됩니다.

<ConnectionName>__endpoint = https://...table.core.windows.net

자격 증명 정보가 제공되지 DefaultAzureCredential 않으면 가 사용됩니다.

사용자 할당 관리 ID를 clientId 사용하는 경우 및 credential 설정을 제공해야 합니다.

<ConnectionName>__credential = managedidentity

<ConnectionName>__clientId = <user-assigned client id>

공유 키 자격 증명 사용

공유 키 인증endpoint사용하는 경우 및 accountKeyaccountName 를 제공해야 합니다.

<ConnectionName>__endpoint = https://...table.core.windows.net

<ConnectionName>__credential__accountName = <account name>

<ConnectionName>__credential__accountKey = <account key>

주요 개념

입력 바인딩을 사용하면 Azure Function에 대한 입력으로 테이블을 읽을 수 있습니다. 출력 바인딩을 사용하면 Azure Function에서 테이블 행을 수정하고 삭제할 수 있습니다.

테이블 서비스에 액세스하기 위해 이 확장을 사용하는 방법에 대해 알아보려면 입력 바인딩 자습서출력 바인딩 자습서 를 따르세요.

예제

테이블 확장은 바인딩만 제공합니다. 바인딩 자체는 함수를 트리거할 수 없습니다. 테이블에 대한 항목만 읽거나 쓸 수 있습니다.

다음 예제에서는 HTTP 트리거 를 사용하여 함수를 호출합니다.

단일 엔터티에 바인딩

public class InputSingle
{
    [FunctionName("InputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] TableEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
    }
}

모델 형식을 사용하여 단일 엔터티에 바인딩

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class InputSingleModel
{
    [FunctionName("InputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] MyEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity.Text}");
    }
}

필터를 사용하여 여러 엔터티에 바인딩

public class InputMultipleEntitiesFilter
{
    [FunctionName("InputMultipleEntitiesFilter")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", Filter = "Text ne ''")] IEnumerable<TableEntity> entities, ILogger log)
    {
        foreach (var entity in entities)
        {
            log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
        }
    }
}

단일 엔터티 만들기

public class OutputSingle
{
    [FunctionName("OutputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out TableEntity entity)
    {
        entity = new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = "Hello"
        };
    }
}

모델을 사용하여 단일 엔터티 만들기

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputSingleModel
{
    [FunctionName("OutputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out MyEntity entity)
    {
        entity = new MyEntity()
        {
            PartitionKey = "<PartitionKey>",
            RowKey = "<RowKey>",
            Text = "Hello"
        };
    }
}

여러 엔터티 만들기

public class OutputMultiple
{
    [FunctionName("OutputMultiple")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<TableEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new TableEntity("<PartitionKey>", i.ToString())
            {
                ["Text"] = i.ToString()
            });
        }
    }
}

모델을 사용하여 여러 엔터티 만들기

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputMultipleModel
{
    [FunctionName("OutputMultipleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<MyEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new MyEntity()
            {
                PartitionKey = "<PartitionKey>",
                RowKey = i.ToString(),
                Text = i.ToString()
            });
        }
    }
}

SDK TableClient 형식에 바인딩

TableClient 메서드 매개 변수를 사용하여 Azure Tables SDK를 사용하여 테이블에 액세스합니다.

public class BindTableClient
{
    [FunctionName("BindTableClient")]
    public static async Task Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] TableClient client)
    {
        await client.AddEntityAsync(new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = request.GetEncodedPathAndQuery()
        });
    }
}

문제 해결

문제 해결 지침은 Azure Functions 모니터링을 참조하세요.

다음 단계

Azure Function 소개 또는 Azure Function 가이드 만들기를 읽어보세요.

참여

이 라이브러리의 빌드, 테스트 및 기여에 대한 자세한 내용은 CONTRIBUTING.md 참조하세요.

이 프로젝트에 대한 기여와 제안을 환영합니다. 대부분의 경우 기여하려면 권한을 부여하며 실제로 기여를 사용할 권한을 당사에 부여한다고 선언하는 CLA(기여자 라이선스 계약)에 동의해야 합니다. 자세한 내용은 cla.microsoft.com.

이 프로젝트에는 Microsoft Open Source Code of Conduct(Microsoft 오픈 소스 준수 사항)가 적용됩니다. 자세한 내용은 Code of Conduct FAQ(규정 FAQ)를 참조하세요. 또는 추가 질문이나 의견은 opencode@microsoft.com으로 문의하세요.

Impressions