.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
사용하는 경우 및 accountKey
accountName
를 제공해야 합니다.
<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으로 문의하세요.