Azure Event Grid는 게시-구독 모델을 사용하여 균일한 이벤트 소비를 제공하는 완전 관리형 이벤트 라우팅 서비스입니다. 이 빠른 시작에서는 Azure CLI를 사용하여 컨테이너 레지스트리를 만들고, 레지스트리 이벤트를 구독한 다음, 샘플 웹 애플리케이션을 배포하여 이벤트를 수신합니다. 마지막으로 컨테이너 이미지 push
및 이벤트를 트리거하고 delete
샘플 애플리케이션에서 이벤트 페이로드를 봅니다.
이 문서의 단계를 완료하면 컨테이너 레지스트리에서 Event Grid로 전송된 이벤트가 샘플 웹앱에 표시됩니다.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Prerequisites
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 이 문서의 Azure CLI 명령은 Bash 셸에 대해 형식이 지정됩니다. PowerShell 또는 명령 프롬프트와 같은 다른 셸을 사용하는 경우 그에 따라 줄 연속 문자 또는 변수 할당 줄을 조정해야 할 수 있습니다. 이 문서에서는 변수를 사용하여 필요한 명령 편집의 양을 최소화합니다.
리소스 그룹 만들기
Azure 리소스 그룹은 Azure 리소스를 배포하고 관리하는 논리적 컨테이너입니다. 다음 az group create 명령은 eastus 지역에 myResourceGroup이라는 리소스 그룹을 만듭니다. 리소스 그룹에 다른 이름을 사용하려면 다른 값으로 설정합니다 RESOURCE_GROUP_NAME
.
RESOURCE_GROUP_NAME=myResourceGroup
az group create --name $RESOURCE_GROUP_NAME --___location eastus
컨테이너 레지스트리 만들기
다음으로, 다음 명령을 사용하여 리소스 그룹에 컨테이너 레지스트리를 배포합니다.
az acr create 명령을 실행하기 전에 레지스트리의 이름으로 설정합니다ACR_NAME
. 이름은 Azure 내에서 고유해야 하며 5-50자의 영숫자로 제한됩니다.
ACR_NAME=<acrName>
az acr create --resource-group $RESOURCE_GROUP_NAME --name $ACR_NAME --sku Basic
레지스트리가 만들어지면 Azure CLI는 다음과 유사한 출력을 반환합니다.
{
"adminUserEnabled": false,
"creationDate": "2018-08-16T20:02:46.569509+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
"___location": "eastus",
"loginServer": "myregistry.azurecr.io",
"name": "myregistry",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
이벤트 엔드포인트 만들기
이 섹션에서는 GitHub 리포지토리에 있는 Resource Manager 템플릿을 사용하여 미리 빌드된 샘플 웹 애플리케이션을 Azure App Service에 배포합니다. 나중에 레지스트리의 Event Grid 이벤트를 구독하고 이 앱을 이벤트가 전송되는 엔드포인트로 지정합니다.
샘플 앱을 배포하려면 웹앱의 고유한 이름으로 설정하고 SITE_NAME
다음 명령을 실행합니다. 사이트 이름은 웹앱의 FQDN(정규화된 도메인 이름)의 일부를 구성하기 때문에 Azure 내에서 고유해야 합니다. 이후 섹션에서는 웹 브라우저에서 앱의 FQDN으로 이동하여 레지스트리의 이벤트를 봅니다.
SITE_NAME=<your-site-name>
az deployment group create \
--resource-group $RESOURCE_GROUP_NAME \
--template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
--parameters siteName=$SITE_NAME hostingPlanName=$SITE_NAME-plan
배포가 성공하면(몇 분 정도 걸릴 수 있음) 브라우저를 열고 웹앱으로 이동하여 실행 중인지 확인합니다.
http://<your-site-name>.azurewebsites.net
이벤트 메시지가 표시되지 않고 렌더링된 샘플 앱이 표시됩니다.
Event Grid 리소스 공급자 사용
이전에 Azure 구독에서 Event Grid를 사용하지 않은 경우 Event Grid 리소스 공급자를 등록해야 할 수 있습니다. 다음 명령을 실행하여 공급자를 등록합니다.
az provider register --namespace Microsoft.EventGrid
등록을 완료하는 데 시간이 걸릴 수 있습니다. 상태를 확인하려면 다음 명령을 실행합니다.
az provider show --namespace Microsoft.EventGrid --query "registrationState"
registrationState
가Registered
일 때, 당신은 계속할 준비가 되어 있습니다.
레지스트리 이벤트 구독
Event Grid에서 토픽 을 구독하여 추적할 이벤트와 보낼 위치를 알려줍니다. 다음 az eventgrid event-subscription create
명령은 사용자가 만든 컨테이너 레지스트리를 구독하고 웹앱의 URL을 이벤트를 보내야 하는 엔드포인트로 지정합니다. 이전 섹션에서 채우던 환경 변수는 여기에서 다시 사용되므로 편집이 필요하지 않습니다.
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
APP_ENDPOINT=https://$SITE_NAME.azurewebsites.net/api/updates
az eventgrid event-subscription create \
--name event-sub-acr \
--source-resource-id $ACR_REGISTRY_ID \
--endpoint $APP_ENDPOINT
구독이 완료되면 다음과 유사한 출력이 표시됩니다.
{
"destination": {
"endpointBaseUrl": "https://eventgridviewer.azurewebsites.net/api/updates",
"endpointType": "WebHook",
"endpointUrl": null
},
"filter": {
"includedEventTypes": [
"All"
],
"isSubjectCaseSensitive": null,
"subjectBeginsWith": "",
"subjectEndsWith": ""
},
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry/providers/Microsoft.EventGrid/eventSubscriptions/event-sub-acr",
"labels": null,
"name": "event-sub-acr",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"topic": "/subscriptions/<Subscription ID>/resourceGroups/myresourcegroup/providers/microsoft.containerregistry/registries/myregistry",
"type": "Microsoft.EventGrid/eventSubscriptions"
}
레지스트리 이벤트를 활성화
이제 샘플 앱이 실행 중이며 Event Grid를 사용하여 레지스트리를 구독했으므로 일부 이벤트를 생성할 준비가 되었습니다. 이 섹션에서는 ACR 작업을 사용하여 컨테이너 이미지를 빌드하고 레지스트리에 푸시합니다. ACR 작업은 로컬 컴퓨터에 Docker 엔진을 설치하지 않고도 클라우드에서 컨테이너 이미지를 빌드할 수 있는 Azure Container Registry의 기능입니다.
이미지 빌드 및 푸시
다음 Azure CLI 명령을 실행하여 GitHub 리포지토리의 콘텐츠에서 컨테이너 이미지를 빌드합니다. 기본적으로 ACR 작업은 성공적으로 빌드된 이미지를 레지스트리에 자동으로 푸시하여 이벤트를 생성합니다 ImagePushed
.
Note
다음 예제에서 사용되는 Dockerfile은 Docker Hub의 공용 기본 컨테이너 이미지에 따라 달라집니다. 퍼블릭 콘텐츠를 사용할 때 안정성을 향상하려면 프라이빗 Azure 컨테이너 레지스트리에서 이미지를 가져오고 관리하고 개인 관리 기본 이미지를 사용하도록 Dockerfile을 업데이트합니다. 공용 이미지 작업에 대해 자세히 알아봅니다.
az acr build --registry $ACR_NAME --image myimage:v1 -f Dockerfile https://github.com/Azure-Samples/acr-build-helloworld-node.git#main
ACR 작업이 빌드되고 이미지를 푸시하는 동안 다음과 유사한 출력을 볼 수 있습니다. 간결하게 하기 위해 다음 샘플 출력이 잘렸습니다.
Sending build context to ACR...
Queued a build with build ID: aa2
Waiting for build agent...
2018/08/16 22:19:38 Using acb_vol_27a2afa6-27dc-4ae4-9e52-6d6c8b7455b2 as the home volume
2018/08/16 22:19:38 Setting up Docker configuration...
2018/08/16 22:19:39 Successfully set up Docker configuration
2018/08/16 22:19:39 Logging in to registry: myregistry.azurecr.io
2018/08/16 22:19:55 Successfully logged in
Sending build context to Docker daemon 94.72kB
Step 1/5 : FROM node:9-alpine
...
빌드된 이미지가 레지스트리에 있는지 확인하려면 다음 명령을 실행하여 리포지토리의 태그를 myimage
확인합니다.
az acr repository show-tags --name $ACR_NAME --repository myimage
빌드한 이미지의 "v1" 태그는 다음과 같이 출력에 표시됩니다.
[
"v1"
]
이미지 삭제
이제 az ImageDeleted
acr repository delete 명령을 사용하여 이미지를 삭제하여 이벤트를 생성합니다.
az acr repository delete --name $ACR_NAME --image myimage:v1
매니페스트 및 관련 이미지를 삭제하라는 확인을 요청하는 다음과 유사한 출력이 표시됩니다.
This operation will delete the manifest 'sha256:f15fa9d0a69081ba93eee308b0e475a54fac9c682196721e294b2bc20ab23a1b' and all the following images: 'myimage:v1'.
Are you sure you want to continue? (y/n):
레지스트리 이벤트 보기
이제 레지스트리에 이미지를 푸시한 다음 삭제했습니다. Event Grid 뷰어 웹앱으로 이동하면 ImageDeleted
및 ImagePushed
이벤트를 모두 볼 수 있습니다.
레지스트리 이벤트 구독 섹션에서 명령을 실행하여 생성된 구독 유효성 검사 이벤트가 표시될 수도 있습니다.
다음 스크린샷은 세 개의 이벤트가 있는 샘플 앱을 보여 줍니다. ImageDeleted
해당 세부 정보를 표시하도록 이벤트가 확장됩니다.
Congratulations!
ImagePushed
이벤트와 ImageDeleted
이벤트가 표시되면 레지스트리가 Event Grid에 이벤트를 보내고 Event Grid는 해당 이벤트를 웹앱 엔드포인트로 전달합니다.
자원을 정리하세요
이 빠른 시작에서 만든 리소스가 완료되면 다음 Azure CLI 명령을 사용하여 모두 삭제할 수 있습니다. 리소스 그룹을 삭제하면 포함된 모든 리소스가 영구적으로 삭제됩니다.
경고: 이 작업은 되돌릴 수 없습니다. 명령을 실행하기 전에 그룹의 리소스가 더 이상 필요하지 않은지 확인합니다.
az group delete --name $RESOURCE_GROUP_NAME
Event Grid 이벤트 스키마
Event Grid 설명서에서 Azure Container Registry 이벤트 메시지 스키마 참조를 찾을 수 있습니다.
Container Registry에 대한 Azure Event Grid 이벤트 스키마
다음 단계
이 빠른 시작에서는 컨테이너 레지스트리를 배포하고, ACR 작업을 사용하여 이미지를 빌드하고, 삭제하고, 샘플 애플리케이션을 사용하여 Event Grid에서 레지스트리의 이벤트를 사용했습니다. 다음으로, ACR 작업 자습서로 이동하여 기본 이미지 업데이트에 대한 자동화된 빌드를 포함하여 클라우드에서 컨테이너 이미지를 빌드하는 방법에 대해 자세히 알아봅니다.