알림을 사용하는 Azure 관리형 애플리케이션

Azure 관리형 애플리케이션 알림을 통해 게시자는 관리형 애플리케이션 인스턴스의 수명 주기 이벤트에 따라 작업을 자동화할 수 있습니다. 게시자는 사용자 지정 알림 웹후크 엔드포인트를 지정하여 신규 및 기존 관리형 애플리케이션 인스턴스에 대한 이벤트 알림을 받을 수 있습니다. 게시자는 애플리케이션 프로비전, 업데이트 및 삭제 시 사용자 지정 워크플로를 설정할 수 있습니다.

시작하기

관리되는 애플리케이션 알림 수신을 시작하려면 공용 HTTPS 엔드포인트를 만듭니다. 서비스 카탈로그 애플리케이션 정의 또는 Microsoft Azure Marketplace 제안을 게시할 때 엔드포인트를 지정합니다.

빠른 시작을 위한 권장 단계는 다음과 같습니다.

  1. 들어오는 POST 요청을 기록하고 200 OK를 반환하는 공용 HTTPS 엔드포인트를 만듭니다.
  2. 이 문서의 뒷부분에 설명된 대로 서비스 카탈로그 애플리케이션 정의 또는 Azure Marketplace 제안에 엔드포인트를 추가합니다.
  3. 애플리케이션 정의 또는 Azure Marketplace 제안을 참조하는 관리형 애플리케이션 인스턴스를 만듭니다.
  4. 알림이 수신되는지 확인합니다.
  5. 이 문서의 엔드포인트 인증 섹션에 설명된 대로 권한 부여를 사용하도록 설정합니다.
  6. 이 문서의 알림 스키마 섹션에 설명된 지침에 따라 알림 요청을 구문 분석하고 알림을 바탕으로 비즈니스 논리를 구현합니다.

서비스 카탈로그 애플리케이션 정의 알림 추가

다음 예는 포털 또는 REST API를 사용하여 알림 엔드포인트 URI를 추가하는 방법을 보여 줍니다.

Azure Portal

시작하려면 빠른 시작: Azure Managed Application 정의 만들기 및 게시를 참조하세요.

Screenshot of the Azure portal that shows a service catalog managed application definition and the notification endpoint.

REST API

참고 항목

관리되는 애플리케이션 정의의 notificationEndpoints 속성에는 하나의 엔드포인트만 제공할 수 있습니다.

{
  "properties": {
    "isEnabled": true,
    "lockLevel": "ReadOnly",
    "displayName": "Sample Application Definition",
    "description": "Notification-enabled application definition.",
    "notificationPolicy": {
      "notificationEndpoints": [
        {
            "uri": "https://isv.azurewebsites.net:1214?sig=unique_token"
        }
      ]
    },
    "authorizations": [
      {
        "principalId": "d6b7fbd3-4d99-43fe-8a7a-f13aef11dc18",
        "roleDefinitionId": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
      },
    ...

Azure Marketplace 관리형 애플리케이션 알림 추가

자세한 내용은 Azure 애플리케이션 제안 만들기를 참조하세요.

Screenshot of Azure Marketplace managed application notifications in the Azure portal.

이벤트 트리거

다음 표에서는 eventTypeprovisioningState의 가능한 모든 조합과 해당 트리거에 대해 설명합니다.

EventType ProvisioningState 알림 트리거
PUT Accepted 애플리케이션 PUT 후 (관리되는 리소스 그룹 내부 배포를 시작하기 전에) 관리되는 리소스 그룹을 성공적으로 만들고 프로젝션했습니다.
PUT 성공 PUT 후에 관리형 애플리케이션의 전체 프로비전이 성공했습니다.
PUT 실패함 어떤 지점에서든 애플리케이션 인스턴스 프로비전 PUT이 실패했습니다.
PATCH 성공 관리형 애플리케이션 인스턴스에서 성공적으로 패치한 후 태그, JIT 액세스 정책 또는 관리 ID를 업데이트합니다.
Delete 삭제 중 사용자가 관리형 앱 인스턴스의 삭제를 시작하는 즉시.
Delete 삭제됨 관리형 애플리케이션 전체를 성공적으로 삭제한 후.
Delete 실패함 프로비전 해제 프로세스 중에 삭제를 차단하는 오류가 발생한 후.

알림 스키마

알림을 처리하기 위해 웹후크 엔드포인트를 만드는 경우 페이로드를 구문 분석하여 중요한 속성을 가져온 다음 알림에 대한 동작을 수행해야 합니다. 서비스 카탈로그 및 Azure Marketplace 관리되는 애플리케이션 알림은 동일한 속성을 많이 제공하지만 몇 가지 차이점이 있습니다. applicationDefinitionId 속성은 서비스 카탈로그에만 적용됩니다. billingDetailsplan 속성은 Azure Marketplace에만 적용됩니다.

Azure는 관리되는 애플리케이션 정의에 제공한 알림 엔드포인트 URI에 /resource를 추가합니다. 웹후크 엔드포인트는 /resource URI에서 알림을 처리할 수 있어야 합니다. 예를 들어 https://fabrikam.com과 같은 알림 엔드포인트 URI를 제공한 경우 웹후크 엔드포인트 URI는 https://fabrikam.com/resource입니다.

서비스 카탈로그 애플리케이션 알림 스키마

다음 샘플은 관리되는 애플리케이션 인스턴스의 성공적인 프로비저닝 후 서비스 카탈로그 알림을 보여 줍니다.

POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1

{
  "eventType": "PUT",
  "applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
  "eventTime": "2019-08-14T19:20:08.1707163Z",
  "provisioningState": "Succeeded",
  "applicationDefinitionId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applicationDefinitions/<appDefName>"
}

프로비전이 실패하면 오류 세부 정보가 포함된 알림이 지정된 엔드포인트로 전송됩니다.

POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1

{
  "eventType": "PUT",
  "applicationId": "subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
  "eventTime": "2019-08-14T19:20:08.1707163Z",
  "provisioningState": "Failed",
  "applicationDefinitionId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applicationDefinitions/<appDefName>",
  "error": {
    "code": "ErrorCode",
    "message": "error message",
    "details": [
      {
        "code": "DetailedErrorCode",
        "message": "error message"
      }
    ]
  }
}

Azure Marketplace 애플리케이션 알림 스키마

다음 샘플은 관리되는 애플리케이션 인스턴스의 성공적인 프로비저닝 후 서비스 카탈로그 알림을 보여 줍니다.

POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1

{
  "eventType": "PUT",
  "applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
  "eventTime": "2019-08-14T19:20:08.1707163Z",
  "provisioningState": "Succeeded",
  "billingDetails": {
    "resourceUsageId": "<resourceUsageId>"
  },
  "plan": {
    "publisher": "publisherId",
    "product": "offer",
    "name": "skuName",
    "version": "1.0.1"
  }
}

프로비전이 실패하면 오류 세부 정보가 포함된 알림이 지정된 엔드포인트로 전송됩니다.

POST https://{your_endpoint_URI}/resource?{optional_parameter}={optional_parameter_value} HTTP/1.1

{
  "eventType": "PUT",
  "applicationId": "/subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.Solutions/applications/<applicationName>",
  "eventTime": "2019-08-14T19:20:08.1707163Z",
  "provisioningState": "Failed",
  "billingDetails": {
    "resourceUsageId": "<resourceUsageId>"
  },
  "plan": {
    "publisher": "publisherId",
    "product": "offer",
    "name": "skuName",
    "version": "1.0.1"
  },
  "error": {
    "code": "ErrorCode",
    "message": "error message",
    "details": [
      {
        "code": "DetailedErrorCode",
        "message": "error message"
      }
    ]
  }
}
속성 설명
eventType 알림을 트리거한 이벤트의 유형입니다. (예: PUT, PATCH, DELETE)
applicationId 알림이 트리거된 관리형 애플리케이션의 정규화된 리소스 식별자입니다.
eventTime 알림을 트리거한 이벤트의 타임스탬프입니다. (UTC ISO 8601 형식의 날짜 및 시간)
provisioningState 관리형 애플리케이션 인스턴스의 프로비전 상태입니다. 예: 성공, 실패, 삭제 중, 삭제됨.
applicationDefinitionId 서비스 카탈로그 관리형 애플리케이션에만 지정됩니다. 관리형 애플리케이션 인스턴스가 프로비전된 애플리케이션 정의의 정규화된 리소스 식별자를 나타냅니다.
billingDetails Azure Marketplace 관리형 애플리케이션에만 지정됩니다. 관리형 애플리케이션 인스턴스의 청구 정보입니다. 사용 세부 정보에 대해 Azure Marketplace를 쿼리하는 데 사용할 수 있는 resourceUsageId를 포함합니다.
plan Azure Marketplace 관리형 애플리케이션에만 지정됩니다. 관리형 애플리케이션 인스턴스의 게시자, 제안, SKU 및 버전을 나타냅니다.
error provisioningState가 실패인 경우에만 지정됩니다. 오류 코드, 메시지 및 오류의 원인이 되는 문제에 대한 세부 정보를 포함합니다.

엔드포인트 인증

웹후크 엔드포인트 보안을 유지하고 알림의 신뢰성을 보장하려면 다음을 수행합니다.

  1. 다음과 같이 웹후크 URI 위에 쿼리 매개 변수를 제공합니다. https://your-endpoint.com?sig=Guid 각 알림에서 쿼리 매개 변수 sig가 필요한 값 Guid를 포함하는지 확인합니다.
  2. applicationId를 사용하여 관리되는 애플리케이션 인스턴스에서 GET을 발급합니다. 일관성을 보장하기 위해 provisioningState가 알림의 provisioningState와 일치하는지 유효성을 검사합니다.

알림 다시 시도

관리형 애플리케이션 알림 서비스는 웹후크 엔드포인트에서 알림으로의 200 OK 응답을 예상합니다. 알림 서비스는 웹후크 엔드포인트가 500 이상의 HTTP 오류 코드를 반환하거나 429 오류 코드를 반환하거나 엔드포인트에 일시적으로 연결할 수 없는 경우 다시 시도합니다. 웹후크 엔드포인트를 10시간 이내에 사용할 수 없게 되면 알림 메시지가 삭제되고 다시 시도가 중지됩니다.