자습서: Event Grid를 사용하여 업로드된 이미지 크기 자동 조정Tutorial: Automate resizing uploaded images using Event Grid

Azure Event Grid는 클라우드용 이벤트 서비스입니다.Azure Event Grid is an eventing service for the cloud. Event Grid를 사용하면 Azure 서비스나 타 리소스에서 발생하는 이벤트에 대한 구독을 만들 수 있습니다.Event Grid enables you to create subscriptions to events raised by Azure services or third-party resources.

이 자습서는 스토리지 자습서의 2부입니다.This tutorial is part two of a series of Storage tutorials. 이전 스토리지 자습서를 확장하여 Azure Event Grid 및 Azure Functions를 통해 서버리스 자동 미리 보기 생성을 추가합니다.It extends the previous Storage tutorial to add serverless automatic thumbnail generation using Azure Event Grid and Azure Functions. Event Grid를 사용하면 Azure FunctionsAzure Blob Storage 이벤트에 응답하고 업로드된 이미지의 미리 보기를 생성할 수 있습니다.Event Grid enables Azure Functions to respond to Azure Blob storage events and generate thumbnails of uploaded images. Blob Storage 만들기 이벤트에 대해 이벤트 구독을 만듭니다.An event subscription is created against the Blob storage create event. BLOB이 특정 Blob Storage 컨테이너에 추가되면 함수 엔드포인트가 호출됩니다.When a blob is added to a specific Blob storage container, a function endpoint is called. Event Grid에서 함수 바인딩에 전달된 데이터를 사용하여 BLOB에 액세스하고 미리 보기 이미지를 생성합니다.Data passed to the function binding from Event Grid is used to access the blob and generate the thumbnail image.

Azure CLI 및 Azure Portal을 사용하여 크기 조정 기능을 기존 이미지 업로드 앱에 추가합니다.You use the Azure CLI and the Azure portal to add the resizing functionality to an existing image upload app.

이 자습서에서는 다음 방법에 대해 알아봅니다.In this tutorial, you learn how to:

  • 일반 Azure Storage 계정 만들기Create a general Azure Storage account
  • Azure Functions를 사용하여 서버 없는 코드 배포Deploy serverless code using Azure Functions
  • Event Grid에서 Blob Storage 이벤트 구독 만들기Create a Blob storage event subscription in Event Grid

필수 조건Prerequisites

참고

이 문서는 새 Azure PowerShell Az 모듈을 사용하도록 업데이트되었습니다.This article has been updated to use the new Azure PowerShell Az module. AzureRM 모듈은 적어도 2020년 12월까지 버그 수정을 수신할 예정이므로 계속 사용하셔도 됩니다.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. 새 Az 모듈 및 AzureRM 호환성에 대한 자세한 내용은 새 Azure PowerShell Az 모듈 소개를 참조하세요.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az 모듈 설치 지침은 Azure PowerShell 설치를 참조하세요.For Az module installation instructions, see Install Azure PowerShell.

이 자습서를 완료하려면 다음이 필요합니다.To complete this tutorial:

이전 Blob 스토리지 자습서: Azure Storage를 사용하여 클라우드에 이미지 데이터 업로드를 완료했습니다.You must have completed the previous Blob storage tutorial: Upload image data in the cloud with Azure Storage.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

이전에 사용자의 구독에서 Event Grid 리소스 공급자를 등록한 적이 없는 경우, 등록되었는지 확인합니다.If you've not previously registered the Event Grid resource provider in your subscription, make sure it's registered.

az provider register --namespace Microsoft.EventGrid

Azure Cloud Shell 사용Use Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.To start Azure Cloud Shell:

옵션Option 예제/링크Example/Link
코드 블록의 오른쪽 위 모서리에서 사용을 선택합니다.Select Try It in the upper-right corner of a code block. 사용해보기를 선택하면 코드가 Cloud Shell에 자동으로 복사되지 않습니다.Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell에 대한 사용 예제
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 버튼을 선택하여 브라우저에서 Cloud Shell을 엽니다.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. 새 창에서 Cloud Shell 시작Launch Cloud Shell in a new window
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다.Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Azure Portal의 Cloud Shell 단추

이 문서의 코드를 Azure Cloud Shell에서 실행하려면 다음을 수행합니다.To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell을 시작합니다.Start Cloud Shell.

  2. 코드 블록의 복사 단추를 선택하여 코드를 복사합니다.Select the Copy button on a code block to copy the code.

  3. Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드를 Cloud Shell 세션에 붙여넣습니다.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Enter를 선택하여 코드를 실행합니다.Select Enter to run the code.

CLI를 로컬로 설치하여 사용하도록 선택한 경우 이 자습서에는 Azure CLI 버전 2.0.14 이상이 필요합니다.If you choose to install and use the CLI locally, this tutorial requires the Azure CLI version 2.0.14 or later. az --version을 실행하여 버전을 찾습니다.Run az --version to find the version. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.If you need to install or upgrade, see Install Azure CLI.

Cloud Shell을 사용하지 않는 경우 먼저 az login을 사용하여 로그인해야 합니다.If you are not using Cloud Shell, you must first sign in using az login.

Azure Storage 계정 만들기Create an Azure Storage account

Azure Functions에는 일반 스토리지 계정이 필요합니다.Azure Functions requires a general storage account. 이전 자습서에서 만든 Blob Storage 계정 외에도 az storage account create 명령을 사용하여 리소스 그룹에 별도의 일반 스토리지 계정을 만듭니다.In addition to the Blob storage account you created in the previous tutorial, create a separate general storage account in the resource group by using the az storage account create command. Storage 계정 이름은 3자에서 24자 사이여야 하고 숫자 및 소문자만 포함할 수 있습니다.Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.

  1. 이전 자습서에서 만든 리소스 그룹 이름을 보관하는 변수를 설정합니다.Set a variable to hold the name of the resource group that you created in the previous tutorial.

    resourceGroupName=myResourceGroup
    
  2. Azure Functions에 필요한 새 스토리지 계정 이름에 대한 변수를 설정합니다.Set a variable for the name of the new storage account that Azure Functions requires.

    functionstorage=<name of the storage account to be used by the function>
    
  3. Azure 함수에 대한 스토리지 계정을 만듭니다.Create the storage account for the Azure function.

    az storage account create --name $functionstorage --location southeastasia \
    --resource-group $resourceGroupName --sku Standard_LRS --kind storage
    

함수 앱 만들기Create a function app

함수 실행을 호스트하는 함수 앱이 있어야 합니다.You must have a function app to host the execution of your function. 함수 앱은 서버를 사용하지 않는 함수 코드 실행을 위한 환경을 제공합니다.The function app provides an environment for serverless execution of your function code. az functionapp create 명령을 사용하여 함수 앱을 만듭니다.Create a function app by using the az functionapp create command.

다음 명령에서 사용자 고유의 함수 앱 이름을 제공합니다.In the following command, provide your own unique function app name. 함수 앱은 함수 앱의 기본 DNS 도메인으로 사용되므로 이름이 Azure의 모든 앱에서 고유해야 합니다.The function app name is used as the default DNS domain for the function app, and so the name needs to be unique across all apps in Azure.

  1. 만들려는 함수 앱의 이름을 지정합니다.Specify a name for the function app that's to be created.

    functionapp=<name of the function app>
    
  2. Azure 함수를 만듭니다.Create the Azure function.

    az functionapp create --name $functionapp --storage-account $functionstorage \
    --resource-group $resourceGroupName --consumption-plan-location southeastasia
    

이제 이전 자습서에서 만든 Blob Storage에 연결하도록 함수 앱을 구성해야 합니다.Now you must configure the function app to connect to the Blob storage account you created in the previous tutorial.

함수 앱 구성Configure the function app

이 함수는 az functionapp config appsettings set 명령을 사용하여 함수 앱의 애플리케이션 설정에 추가된 Blob Storage 계정에 대한 자격 증명이 필요합니다.The function needs credentials for the Blob storage account, which are added to the application settings of the function app using the az functionapp config appsettings set command.

blobStorageAccount=<name of the Blob storage account you created in the previous tutorial>
storageConnectionString=$(az storage account show-connection-string --resource-group $resourceGroupName \
--name $blobStorageAccount --query connectionString --output tsv)

az functionapp config appsettings set --name $functionapp --resource-group $resourceGroupName \
--settings AzureWebJobsStorage=$storageConnectionString THUMBNAIL_CONTAINER_NAME=thumbnails \
THUMBNAIL_WIDTH=100 FUNCTIONS_EXTENSION_VERSION=~2

FUNCTIONS_EXTENSION_VERSION=~2 설정은 함수 앱을 Azure Functions 런타임의 버전 2.x에서 실행하게 만듭니다.The FUNCTIONS_EXTENSION_VERSION=~2 setting makes the function app run on version 2.x of the Azure Functions runtime.

이제 이 함수 앱에 함수 코드 프로젝트를 배포할 수 있습니다.You can now deploy a function code project to this function app.

함수 코드 배포Deploy the function code

샘플 C# 크기 조정 기능은 GitHub에서 사용할 수 있습니다.The sample C# resize function is available on GitHub. 이 코드 프로젝트를 az functionapp deployment source config 명령을 사용하여 함수 앱에 배포합니다.Deploy this code project to the function app by using the az functionapp deployment source config command.

az functionapp deployment source config --name $functionapp --resource-group $resourceGroupName --branch master --manual-integration --repo-url https://github.com/Azure-Samples/function-image-upload-resize

이미지 크기 조정 함수는 Event Grid 서비스에서 전송된 HTTP 요청에 의해 트리거됩니다.The image resize function is triggered by HTTP requests sent to it from the Event Grid service. 이벤트 구독을 만들어 Event Grid가 함수의 URL에서 이러한 알림을 가져오도록 지시합니다.You tell Event Grid that you want to get these notifications at your function's URL by creating an event subscription. 이 자습서에서 Blob 생성 이벤트를 구독합니다.For this tutorial you subscribe to blob-created events.

Event Grid 알림에서 함수에 전달되는 데이터에는 Blob의 URL이 포함됩니다.The data passed to the function from the Event Grid notification includes the URL of the blob. 차례로 URL을 입력 바인딩에 전달하여 Blob Storage에서 업로드된 이미지를 가져옵니다.That URL is in turn passed to the input binding to obtain the uploaded image from Blob storage. 이 함수는 미리 보기 이미지를 생성하고 Blob Storage에서 결과 스트림을 별도의 컨테이너에 기록합니다.The function generates a thumbnail image and writes the resulting stream to a separate container in Blob storage.

이 프로젝트에서는 트리거 형식에 EventGridTrigger를 사용합니다.This project uses EventGridTrigger for the trigger type. 일반 HTTP 트리거보다는 Event Grid 트리거를 사용하는 것이 좋습니다.Using the Event Grid trigger is recommended over generic HTTP triggers. Event Grid는 Event Grid Function 트리거의 유효성을 자동으로 검사합니다.Event Grid automatically validates Event Grid Function triggers. 일반 HTTP 트리거를 사용하면 유효성 검사 응답을 구현해야 합니다.With generic HTTP triggers, you must implement the validation response.

이 함수에 대해 자세히 알아보려면 function.json 및 run.csx 파일을 참조하세요.To learn more about this function, see the function.json and run.csx files.

함수 프로젝트 코드는 공개 샘플 리포지토리에서 직접 배포됩니다.The function project code is deployed directly from the public sample repository. Azure Functions의 배포 옵션에 대한 자세한 내용은 Azure Functions에 대한 지속적인 배포를 참조하세요.To learn more about deployment options for Azure Functions, see Continuous deployment for Azure Functions.

이벤트 구독 만들기Create an event subscription

이벤트 구독은 특정 엔드포인트로 보내려는 공급자 생성 이벤트를 나타냅니다.An event subscription indicates which provider-generated events you want sent to a specific endpoint. 이 경우 해당 함수에서 엔드포인트가 노출됩니다.In this case, the endpoint is exposed by your function. Azure Portal에서 함수에 알림을 전송하는 이벤트 구독을 만들려면 다음 단계를 사용합니다.Use the following steps to create an event subscription that sends notifications to your function in the Azure portal:

  1. Azure Portal의 왼쪽 메뉴에서 모든 서비스를 선택한 다음, 함수 앱을 선택합니다.In the Azure portal, select All Services on the left menu, and then select Function Apps.

    Azure Portal의 함수 앱 찾아보기

  2. 함수 앱을 확장하고, 썸네일 함수를 선택하고, Event Grid 구독 추가를 선택합니다.Expand your function app, choose the Thumbnail function, and then select Add Event Grid subscription.

    Azure Portal의 함수 앱 찾아보기

  3. 표에 지정된 대로 이벤트 구독 설정을 사용합니다.Use the event subscription settings as specified in the table.

    Azure Portal의 함수에서 이벤트 구독 만들기

    설정Setting 제안 값Suggested value 설명Description
    NameName imageresizersubimageresizersub 새 이벤트 구독을 식별하는 이름입니다.Name that identifies your new event subscription.
    항목 유형Topic type Storage 계정Storage accounts 스토리지 계정 이벤트 공급자를 선택합니다.Choose the Storage account event provider.
    구독Subscription Azure 구독Your Azure subscription 기본적으로 현재 Azure 구독을 선택합니다.By default, your current Azure subscription is selected.
    리소스 그룹Resource group myResourceGroupmyResourceGroup 기존 항목 사용을 선택하고 이 자습서에서 사용한 리소스 그룹을 선택합니다.Select Use existing and choose the resource group you have been using in this tutorial.
    리소스Resource Blob Storage 계정Your Blob storage account 만든 Blob Storage 계정을 선택합니다.Choose the Blob storage account you created.
    이벤트 유형Event types 만든 BLOBBlob created 만든 BLOB 이외의 모든 유형을 선택 취소합니다.Uncheck all types other than Blob created. Microsoft.Storage.BlobCreated 이벤트 유형만 함수에 전달됩니다.Only event types of Microsoft.Storage.BlobCreated are passed to the function.
    구독자 형식Subscriber type autogeneratedautogenerated Web Hook로 미리 정의됩니다.Pre-defined as Web Hook.
    구독자 엔드포인트Subscriber endpoint autogeneratedautogenerated 사용자에 대해 생성되는 엔드포인트 URL을 사용합니다.Use the endpoint URL that is generated for you.
  4. 필터 탭으로 전환하고 다음 작업을 수행합니다.Switch to the Filter tab, and do the following actions:

    1. 제목 필터링 사용 옵션을 선택합니다.Select Enable subject filtering option.

    2. 제목 시작 문자/blobServices/default/containers/images/blobs/ 값을 입력합니다.For Subject begins with, enter the following value : /blobServices/default/containers/images/blobs/.

      이벤트 구독의 필터 지정

  5. 만들기를 선택하여 이벤트 구독을 추가합니다.Select Create to add the event subscription. 그러면 images 컨테이너에 Blob이 추가될 때 Thumbnail 함수를 트리거하는 이벤트 구독이 만들어집니다.This creates an event subscription that triggers Thumbnail function when a blob is added to the images container. 함수는 이미지의 크기를 조정하고 thumbnails 컨테이너에 추가합니다.The function resizes the images and adds them to the thumbnails container.

이제 백엔드 서비스가 구성되었으므로 샘플 웹앱에서 이미지 크기 조정 기능을 테스트할 수 있습니다.Now that the backend services are configured, you test the image resize functionality in the sample web app.

샘플 앱 테스트Test the sample app

웹앱에서 이미지 크기 조정을 테스트하려면 게시된 앱의 URL로 이동합니다.To test image resizing in the web app, browse to the URL of your published app. 웹앱의 기본 URL은 https://<web_app>.azurewebsites.net입니다.The default URL of the web app is https://<web_app>.azurewebsites.net.

사진 업로드 영역을 클릭하여 파일을 선택 및 업로드합니다.Click the Upload photos region to select and upload a file. 이 영역에 사진을 끌어갈 수도 있습니다.You can also drag a photo to this region.

업로드된 이미지가 사라진 후에는 업로드된 이미지의 사본이 생성된 미리 보기 카루셀에 표시됩니다.Notice that after the uploaded image disappears, a copy of the uploaded image is displayed in the Generated thumbnails carousel. 이 이미지는 함수를 통해 크기 조정되어 썸네일 컨테이너에 추가되었으며 웹 클라이언트가 다운로드한 것입니다.This image was resized by the function, added to the thumbnails container, and downloaded by the web client.

브라우저에 게시된 웹앱

다음 단계Next steps

이 자습서에서는 다음 방법에 대해 알아보았습니다.In this tutorial, you learned how to:

  • 일반 Azure Storage 계정 만들기Create a general Azure Storage account
  • Azure Functions를 사용하여 서버 없는 코드 배포Deploy serverless code using Azure Functions
  • Event Grid에서 Blob Storage 이벤트 구독 만들기Create a Blob storage event subscription in Event Grid

스토리지 자습서 시리즈의 3부를 통해 스토리지 계정에 대한 보안 액세스를 학습합니다.Advance to part three of the Storage tutorial series to learn how to secure access to the storage account.