빠른 시작: Azure CLI를 사용하여 스토리지 이벤트를 웹 엔드포인트로 라우팅Quickstart: Route storage events to web endpoint with Azure CLI

Azure Event Grid는 클라우드에 대한 이벤트 서비스입니다.Azure Event Grid is an eventing service for the cloud. 이 문서에서는 Azure CLI를 사용하여 Blob Storage 이벤트를 구독하고 이벤트를 트리거하여 결과를 확인합니다.In this article, you use the Azure CLI to subscribe to Blob storage events, and trigger the event to view the result.

일반적으로 이벤트 데이터를 처리하고 작업을 수행하는 엔드포인트에 이벤트를 보냅니다.Typically, you send events to an endpoint that processes the event data and takes actions. 그러나 이 문서를 간소화하기 위해 메시지를 수집하고 표시하는 웹앱에 이벤트를 보냅니다.However, to simplify this article, you send the events to a web app that collects and displays the messages.

이 문서에서 설명하는 단계를 완료하면 이벤트 데이터가 웹앱으로 보내졌음을 알 수 있습니다.When you complete the steps described in this article, you see that the event data has been sent to the web app.

구독 이벤트 보기

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

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 top-right menu bar 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.24 이상)를 실행해야 합니다.If you choose to install and use the CLI locally, this article requires that you're running the latest version of Azure CLI (2.0.24 or later). 버전을 확인하려면 az --version을 실행합니다.To find the version, run az --version. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.If you need to install or upgrade, see Install Azure CLI.

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

리소스 그룹 만들기Create a resource group

Event Grid 토픽은 Azure 리소스이며 Azure 리소스 그룹에 배치해야 합니다.Event Grid topics are Azure resources, and must be placed in an Azure resource group. 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컬렉션입니다.The resource group is a logical collection into which Azure resources are deployed and managed.

az group create 명령을 사용하여 리소스 그룹을 만듭니다.Create a resource group with the az group create command.

다음 예제에서는 westcentralus 위치에 <resource_group_name>이라는 리소스 그룹을 만듭니다.The following example creates a resource group named <resource_group_name> in the westcentralus location. <resource_group_name>을 리소스 그룹의 고유한 이름으로 바꿉니다.Replace <resource_group_name> with a unique name for your resource group.

az group create --name <resource_group_name> --location westcentralus

스토리지 계정 만들기Create a storage account

Blob Storage 이벤트는 범용 v2 스토리지 계정과 Blob Storage 계정에서 사용할 수 있습니다.Blob storage events are available in general-purpose v2 storage accounts and Blob storage accounts. 범용 v2 스토리지 계정은 Blob, 파일, 큐 및 테이블을 포함하여 모든 스토리지 서비스의 모든 기능을 지원하는 스토리지 계정입니다.General-purpose v2 storage accounts support all features for all storage services, including Blobs, Files, Queues, and Tables. Blob Storage 계정은 Azure Storage에서 Blob와 같은 구조화되지 않은 데이터(개체) 저장을 위한 특수 Storage 계정입니다.A Blob storage account is a specialized storage account for storing your unstructured data as blobs (objects) in Azure Storage. Blob Storage 계정은 범용 스토리지 계정과 유사합니다. 블록 Blob과 연결 Blob에 대한 100% API 일관성을 포함하여 현재 제공되는 뛰어난 내구성, 가용성, 확장성은 모두 같습니다.Blob storage accounts are like general-purpose storage accounts and share all the great durability, availability, scalability, and performance features that you use today including 100% API consistency for block blobs and append blobs. 자세한 내용은 Azure Storage 계정 개요를 참조하세요.For more information, see Azure storage account overview.

<storage_account_name>을 스토리지 계정의 고유한 이름으로 바꾸고 <resource_group_name>을 이전에 만든 리소스 그룹으로 바꿉니다.Replace <storage_account_name> with a unique name for your storage account, and <resource_group_name> with the resource group you created earlier.

az storage account create \
  --name <storage_account_name> \
  --location westcentralus \
  --resource-group <resource_group_name> \
  --sku Standard_LRS \
  --kind BlobStorage \
  --access-tier Hot

메시지 엔드포인트 만들기Create a message endpoint

토픽을 구독하기 전에 이벤트 메시지에 대한 엔드포인트를 만들어 보겠습니다.Before subscribing to the topic, let's create the endpoint for the event message. 일반적으로 엔드포인트는 이벤트 데이터를 기반으로 작업을 수행합니다.Typically, the endpoint takes actions based on the event data. 이 빠른 시작을 간소화하기 위해 이벤트 메시지를 표시하는 미리 작성된 웹앱을 배포합니다.To simplify this quickstart, you deploy a pre-built web app that displays the event messages. 배포된 솔루션은 App Service 계획, App Service 웹앱 및 GitHub의 소스 코드를 포함합니다.The deployed solution includes an App Service plan, an App Service web app, and source code from GitHub.

<your-site-name>을 웹앱의 고유한 이름으로 바꿉니다.Replace <your-site-name> with a unique name for your web app. 웹앱 이름은 DNS 항목의 일부이므로 고유해야 합니다.The web app name must be unique because it's part of the DNS entry.

sitename=<your-site-name>

az group deployment create \
  --resource-group <resource_group_name> \
  --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
  --parameters siteName=$sitename hostingPlanName=viewerhost

배포가 완료될 때까지 몇 분 정도 걸릴 수 있습니다.The deployment may take a few minutes to complete. 배포가 성공된 후 실행하는지 확인하려면 웹앱을 봅니다.After the deployment has succeeded, view your web app to make sure it's running. 웹 브라우저에서 https://<your-site-name>.azurewebsites.net으로 이동합니다.In a web browser, navigate to: https://<your-site-name>.azurewebsites.net

현재 표시된 메시지가 없는 사이트가 표시되어야 합니다.You should see the site with no messages currently displayed.

Event Grid 리소스 공급자를 사용하도록 설정Enable Event Grid resource provider

이전에 Azure 구독에서 Event Grid를 사용하지 않은 경우 Event Grid 리소스 공급자를 등록해야 할 수 있습니다.If you haven't previously used Event Grid in your Azure subscription, you may need to register the Event Grid resource provider. 공급자를 등록하는 다음 명령을 실행합니다.Run the following command to register the provider:

az provider register --namespace Microsoft.EventGrid

등록을 완료하는 데 잠시 시간이 걸릴 수 있습니다.It may take a moment for the registration to finish. 상태를 확인하려면 다음을 실행합니다.To check the status, run:

az provider show --namespace Microsoft.EventGrid --query "registrationState"

registrationStateRegistered이면 진행할 준비가 된 것입니다.When registrationState is Registered, you're ready to continue.

스토리지 계정 구독Subscribe to your storage account

항목을 구독하여 Event Grid에 추적하려는 이벤트와 해당 이벤트를 보낼 위치를 알립니다.You subscribe to a topic to tell Event Grid which events you want to track and where to send those events. 다음 예제에서는 스토리지 계정을 구독하고 웹앱의 URL을 이벤트 알림에 대한 엔드포인트로 전달합니다.The following example subscribes to the storage account you created, and passes the URL from your web app as the endpoint for event notification. <event_subscription_name>을 이벤트 구독의 이름으로 바꿉니다.Replace <event_subscription_name> with a name for your event subscription. <resource_group_name><storage_account_name>에는 앞에서 만든 값을 사용합니다.For <resource_group_name> and <storage_account_name>, use the values you created earlier.

웹앱에 대한 엔드포인트는 접미사 /api/updates/를 포함해야 합니다.The endpoint for your web app must include the suffix /api/updates/.

storageid=$(az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
endpoint=https://$sitename.azurewebsites.net/api/updates

az eventgrid event-subscription create \
  --resource-id $storageid \
  --name <event_subscription_name> \
  --endpoint $endpoint

웹앱을 다시 확인하고, 구독 유효성 검사 이벤트를 보냈음을 확인합니다.View your web app again, and notice that a subscription validation event has been sent to it. 눈 모양 아이콘을 선택하여 이벤트 데이터를 확장합니다.Select the eye icon to expand the event data. Event Grid는 유효성 검사 이벤트를 보내므로 엔드포인트는 이벤트 데이터를 수신하려는 것을 확인할 수 있습니다.Event Grid sends the validation event so the endpoint can verify that it wants to receive event data. 웹앱은 구독의 유효성을 검사하는 코드를 포함합니다.The web app includes code to validate the subscription.

구독 이벤트 보기

Blob Storage에서 이벤트 트리거Trigger an event from Blob storage

이제 이벤트를 트리거하여 Event Grid가 메시지를 사용자 엔드포인트에 어떻게 배포하는지 살펴 보겠습니다.Now, let's trigger an event to see how Event Grid distributes the message to your endpoint. 먼저 스토리지 계정의 이름과 키를 구성하고, 컨테이너를 만든 다음, 파일을 만들고 업로드합니다.First, let's configure the name and key for the storage account, then we create a container, then create and upload a file. <storage_account_name><resource_group_name>에 대해 이전에 만든 값을 다시 사용합니다.Again, use the values for <storage_account_name> and <resource_group_name> you created earlier.

export AZURE_STORAGE_ACCOUNT=<storage_account_name>
export AZURE_STORAGE_ACCESS_KEY="$(az storage account keys list --account-name <storage_account_name> --resource-group <resource_group_name> --query "[0].value" --output tsv)"

az storage container create --name testcontainer

touch testfile.txt
az storage blob upload --file testfile.txt --container-name testcontainer --name testfile.txt

이벤트를 트리거했고 Event Grid가 구독할 때 구성한 엔드포인트로 메시지를 보냈습니다.You've triggered the event, and Event Grid sent the message to the endpoint you configured when subscribing. 웹앱을 확인하여 방금 전송한 이벤트를 봅니다.View your web app to see the event you just sent.

[{
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/myblobstorageaccount",
  "subject": "/blobServices/default/containers/testcontainer/blobs/testfile.txt",
  "eventType": "Microsoft.Storage.BlobCreated",
  "eventTime": "2017-08-16T20:33:51.0595757Z",
  "id": "4d96b1d4-0001-00b3-58ce-16568c064fab",
  "data": {
    "api": "PutBlockList",
    "clientRequestId": "d65ca2e2-a168-4155-b7a4-2c925c18902f",
    "requestId": "4d96b1d4-0001-00b3-58ce-16568c000000",
    "eTag": "0x8D4E4E61AE038AD",
    "contentType": "text/plain",
    "contentLength": 0,
    "blobType": "BlockBlob",
    "url": "https://myblobstorageaccount.blob.core.windows.net/testcontainer/testblob1.txt",
    "sequencer": "00000000000000EB0000000000046199",
    "storageDiagnostics": {
      "batchId": "dffea416-b46e-4613-ac19-0371c0c5e352"
    }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

리소스 정리Clean up resources

이 스토리지 계정 및 이벤트 구독을 계속 사용하려면 이 문서에서 만든 리소스를 정리하지 마세요.If you plan to continue working with this storage account and event subscription, do not clean up the resources created in this article. 계속하지 않으려는 경우 다음 명령을 사용하여 이 문서에서 만든 리소스를 삭제합니다.If you do not plan to continue, use the following command to delete the resources you created in this article.

<resource_group_name>을 위에서 만든 리소스 그룹으로 바꿉니다.Replace <resource_group_name> with the resource group you created above.

az group delete --name <resource_group_name>

다음 단계Next steps

이제 토픽 및 이벤트 구독을 만드는 방법을 알아보았으므로 Blob Storage 이벤트 및 Event Grid에서 수행할 수 있는 작업에 대해 자세히 알아봅니다.Now that you know how to create topics and event subscriptions, learn more about Blob storage Events and what Event Grid can help you do: