Azure Functions 시나리오
일련의 중요한 이벤트에 대응하는 시스템을 빌드하는 경우가 많습니다. 웹 API를 빌드하든, 데이터베이스 변경에 응답하든, 이벤트 스트림 또는 메시지를 처리하든, 이를 구현하는 데 Azure Functions를 사용할 수 있습니다.
대부분의 경우 함수는 여러 클라우드 서비스와 통합되어 다양한 기능을 제공하는 구현을 제공합니다. 다음은 Azure Functions에 대한 일반적인 시나리오 집합이지만 결코 완전한 것은 아닙니다.
문서 상단에서 개발 언어를 선택합니다.
파일 업로드 처리
함수를 사용하여 Blob Storage 컨테이너 내/외부로 파일을 처리하는 방법은 여러 가지가 있습니다. BLOB 컨테이너에서 트리거하는 옵션에 대한 자세한 내용은 모범 사례 설명서의 BLOB 작업을 참조하세요.
예를 들어 소매 솔루션에서 파트너 시스템은 제품 카탈로그 정보를 파일로 Blob Storage에 제출할 수 있습니다. BLOB 트리거 함수를 사용하여 파일이 업로드될 때 파일의 유효성을 검사하고, 변환하고, 기본 시스템으로 처리할 수 있습니다.
다음 자습서에서는 Blob 트리거(Event Grid 기반)를 사용하여 Blob 컨테이너에서 파일을 처리합니다.
예를 들어 BLOB 컨테이너에서 이벤트 구독과 함께 BLOB 트리거를 사용합니다.
[FunctionName("ProcessCatalogData")]
public static async Task Run([BlobTrigger("catalog-uploads/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")]Stream myCatalogData, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myCatalogData.Length} Bytes");
using (var reader = new StreamReader(myCatalogData))
{
var catalogEntry = await reader.ReadLineAsync();
while(catalogEntry !=null)
{
// Process the catalog entry
// ...
catalogEntry = await reader.ReadLineAsync();
}
}
}
실시간 스트리밍 및 이벤트 처리
클라우드 애플리케이션, IoT 디바이스 및 네트워킹 디바이스에서 많은 원격 분석이 생성되고 수집됩니다. Azure Functions는 해당 데이터를 근 실시간으로 실행 부하 과다 경로로 처리한 다음, 분석 대시보드에서 사용할 Azure Cosmos DB에 저장할 수 있습니다.
또한 함수는 Event Grid와 같은 낮은 대기 시간 이벤트 트리거 및 SignalR과 같은 실시간 출력을 사용하여 근 실시간으로 데이터를 처리할 수 있습니다.
예를 들어 이벤트 허브 트리거를 사용하여 이벤트 허브에서 읽고 출력 바인딩을 사용하여 이벤트를 분리하고 변환한 후 이벤트 허브에 씁니다.
[FunctionName("ProcessorFunction")]
public static async Task Run(
[EventHubTrigger(
"%Input_EH_Name%",
Connection = "InputEventHubConnectionString",
ConsumerGroup = "%Input_EH_ConsumerGroup%")] EventData[] inputMessages,
[EventHub(
"%Output_EH_Name%",
Connection = "OutputEventHubConnectionString")] IAsyncCollector<SensorDataRecord> outputMessages,
PartitionContext partitionContext,
ILogger log)
{
var debatcher = new Debatcher(log);
var debatchedMessages = await debatcher.Debatch(inputMessages, partitionContext.PartitionId);
var xformer = new Transformer(log);
await xformer.Transform(debatchedMessages, partitionContext.PartitionId, outputMessages);
}
- Azure Event Hubs, Functions 및 Azure SQL을 사용하여 대규모 스트리밍
- Azure Event Hubs, Functions 및 Cosmos DB를 사용하여 대규모 스트리밍
- Kafka 생산자, Kafka 트리거를 사용하는 Functions 및 Cosmos DB를 사용하여 Azure Event Hubs 대규모 스트리밍
- Azure IoT Hub, Functions 및 Azure SQL을 사용하여 대규모 스트리밍
- Azure Functions의 Azure Event Hubs 트리거
- Azure Functions에 대한 Apache Kafka 트리거
기계 학습 및 AI
데이터 처리 외에 Azure Functions을 사용하여 모델을 유추할 수도 있습니다. Azure OpenAI 바인딩 확장을 사용하면 Azure OpenAI 서비스의 기능 및 동작을 함수 코드 실행에 쉽게 통합할 수 있습니다.
Functions는 OpenAI 리소스에 연결하여 텍스트 및 채팅 완료를 사용하도록 설정하고, 도우미를 사용하고, 포함 및 의미 체계 검색을 활용할 수 있습니다.
함수는 TensorFlow 모델 또는 Azure AI 서비스를 호출하여 이미지 스트림을 처리하고 분류할 수도 있습니다.
- 자습서: Azure OpenAI를 사용한 텍스트 완료
- 샘플: Azure OpenAI를 사용한 텍스트 완료
- 샘플: 모델에 보조 기술 제공
- 샘플: 포함 생성
- 샘플: 의미 체계 검색 활용
- 자습서: Azure OpenAI를 사용한 텍스트 완료
- 샘플: Azure OpenAI를 사용한 텍스트 완료
- 샘플: 모델에 보조 기술 제공
- 샘플: 포함 생성
- 샘플: 의미 체계 검색 활용
예약된 작업 실행
함수를 사용하면 정의한 cron 일정에 따라 코드를 실행할 수 있습니다.
Azure Portal에서 일정에 따라 실행되는 함수를 만드는 방법을 알아보세요.
예를 들어 금융 서비스 고객 데이터베이스는 동일한 고객에게 여러 통신이 전송되지 않도록 15분마다 중복 항목을 분석할 수 있습니다.
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
// Perform the database deduplication
}
확장성 있는 웹 API 빌드
HTTP 트리거 함수는 HTTP 엔드포인트를 정의합니다. 이러한 엔드포인트는 직접 또는 바인딩 확장을 사용하여 다른 서비스에 연결할 수 있는 함수 코드를 실행합니다. 엔드포인트를 웹 기반 API로 작성할 수 있습니다.
HTTP 트리거 함수 엔드포인트를 GitHub 웹후크와 같은 웹후크 통합으로 사용할 수도 있습니다. 이러한 방식으로 GitHub 이벤트의 데이터를 처리하는 함수를 만들 수 있습니다. 자세한 내용은 Azure Functions 웹후크를 사용하여 GitHub 이벤트 모니터링을 참조하세요.
예제는 다음을 참조하세요.
[FunctionName("InsertName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
[CosmosDB(
databaseName: "my-database",
collectionName: "my-container",
ConnectionStringSetting = "CosmosDbConnectionString")]IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string name = data?.name;
if (name == null)
{
return new BadRequestObjectResult("Please pass a name in the request body json");
}
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
return new OkResult();
}
서버리스 워크플로 빌드
함수는 Logic Apps 워크플로와 같은 서버리스 워크플로 토폴로지의 컴퓨팅 구성 요소인 경우가 많습니다. Durable Functions 확장을 사용하여 장기 실행 오케스트레이션을 만들 수도 있습니다. 자세한 내용은 Durable Functions 개요를 참조하세요.
데이터베이스 변경에 응답
어떤 프로세스는 저장된 데이터가 변경될 때 다른 작업을 로그, 감사 또는 수행해야 할 수도 있습니다. 함수 트리거는 이러한 작업을 초기화하기 위한 데이터 변경 내용을 알림으로 알 수 있는 좋은 방법을 제공합니다.
다음 예를 살펴 보십시오.
안정적인 메시지 시스템 만들기
Azure 메시징 서비스와 함께 Functions를 사용하여 고급 이벤트 기반 메시징 솔루션을 만들 수 있습니다.
예를 들어 일련의 함수 실행을 함께 연결하는 방법으로 Azure Storage 큐의 트리거를 사용할 수 있습니다. 또는 온라인 오더링 시스템에 Service Bus 큐 및 트리거를 사용합니다.
다음 문서에서는 스토리지 큐에 출력을 쓰는 방법을 보여 줍니다.
그리고 이러한 문서에서는 Azure Service Bus 큐 또는 토픽에서 트리거하는 방법을 보여 줍니다.