Azure Metadata 서비스: Linux VM의 예약된 이벤트Azure Metadata Service: Scheduled Events for Linux VMs

예약된 이벤트는 애플리케이션이 VM(가상 머신) 유지 관리를 준비할 시간을 부여하는 Azure Metadata Service입니다.Scheduled Events is an Azure Metadata Service that gives your application time to prepare for virtual machine (VM) maintenance. 향후 유지 관리 이벤트(예: 재부팅)에 대한 정보를 제공하여 애플리케이션이 이에 대비하고 서비스 중단을 제한할 수 있도록 합니다.It provides information about upcoming maintenance events (for example, reboot) so that your application can prepare for them and limit disruption. 이 기능은 Windows와 Linux 모두에서 PaaS 및 IaaS를 포함한 모든 Azure Virtual Machines 유형에 사용할 수 있습니다.It's available for all Azure Virtual Machines types, including PaaS and IaaS on both Windows and Linux.

Windows에서 예약된 이벤트에 대한 자세한 내용은 Windows VM에 예약된 이벤트를 참조하세요.For information about Scheduled Events on Windows, see Scheduled Events for Windows VMs.

참고

예약된 이벤트는 모든 Azure 지역에서 일반 공급됩니다.Scheduled Events is generally available in all Azure Regions. 최신 릴리스 정보는 버전 및 지역 가용성을 참조하세요.See Version and Region Availability for latest release information.

예약된 이벤트를 사용하는 이유는?Why use Scheduled Events?

많은 애플리케이션에서 VM 유지 관리를 준비하는 시간을 활용할 수 있습니다.Many applications can benefit from time to prepare for VM maintenance. 이 시간은 가용성, 안정성 및 서비스 가능성을 향상시키는 다음을 비롯한 특정 애플리케이션 작업을 수행하는 데 사용할 수 있습니다.The time can be used to perform application-specific tasks that improve availability, reliability, and serviceability, including:

  • 검사점 및 복원Checkpoint and restore.
  • 연결 드레이닝Connection draining.
  • 주 복제본 장애 조치(failover)Primary replica failover.
  • 부하 분산 장치 풀에서 제거Removal from a load balancer pool.
  • 이벤트 로깅Event logging.
  • 정상 종료Graceful shutdown.

예약된 이벤트를 사용하면 애플리케이션에서 유지 관리가 발생하는 시간을 검색하고 이로 인한 영향을 제한하는 작업을 트리거할 수 있습니다.With Scheduled Events, your application can discover when maintenance will occur and trigger tasks to limit its impact.

예약된 이벤트는 다음과 같은 경우에 이벤트를 제공합니다.Scheduled Events provides events in the following use cases:

  • 플랫폼 시작 유지 관리 (예를 들어, VM 다시 부팅, 실시간 마이그레이션 또는 호스트에 대 한 업데이트를 유지 하는 메모리)Platform initiated maintenance (for example, VM reboot, live migration or memory preserving updates for host)
  • 성능이 저하 된 하드웨어Degraded hardware
  • 사용자가 시작하는 유지 관리(예: 사용자가 VM을 다시 시작하거나 다시 배포)User-initiated maintenance (for example, a user restarts or redeploys a VM)
  • 우선 순위가 낮은 VM 제거 크기 조정 설정Low-Priority VM eviction in scale sets

기본 사항The Basics

메타데이터 서비스는 VM 내에서 액세스할 수 있는 REST 엔드포인트를 사용하여 VM을 실행하는 정보를 공개합니다.Metadata Service exposes information about running VMs by using a REST endpoint that's accessible from within the VM. 이 정보는 라우팅할 수 없는 IP를 통해 사용할 수 있으므로 VM 외부에 공개되지 않습니다.The information is available via a nonroutable IP so that it's not exposed outside the VM.

ScopeScope

예약된 이벤트는 다음으로 전달됩니다.Scheduled events are delivered to:

  • 독립 실행형 가상 머신입니다.Standalone Virtual Machines.
  • 클라우드 서비스의 모든 VMAll the VMs in a cloud service.
  • 가용성 집합의 모든 VMAll the VMs in an availability set.
  • 확장 집합 배치 그룹의 모든 VMAll the VMs in a scale set placement group.

따라서 이벤트의 Resources 필드를 확인하여 영향을 받는 VM을 식별합니다.As a result, check the Resources field in the event to identify which VMs are affected.

엔드포인트 검색Endpoint Discovery

VNET 사용 VM의 경우 메타데이터 서비스를 정적 경로 조정 불가능 IP 169.254.169.254에서 사용할 수 있습니다.For VNET enabled VMs, Metadata Service is available from a static nonroutable IP, 169.254.169.254. 예약된 이벤트의 최신 버전에 대한 전체 엔드포인트는 다음과 같습니다.The full endpoint for the latest version of Scheduled Events is:

http://169.254.169.254/metadata/scheduledevents?api-version=2017-11-01

클라우드 서비스 및 클래식 VM의 기본 사례처럼 VM이 가상 네트워크에 생성되지 않은 경우 사용할 IP 주소를 검색하려면 추가 논리가 필요합니다.If the VM is not created within a Virtual Network, the default cases for cloud services and classic VMs, additional logic is required to discover the IP address to use. 호스트 엔드포인트를 검색하는 방법을 알아보려면 이 샘플을 참조하세요.To learn how to discover the host endpoint, see this sample.

버전 및 지역 가용성Version and Region Availability

예약된 이벤트 서비스의 버전이 지정됩니다.The Scheduled Events service is versioned. 버전은 필수이며 현재 버전은 2017-11-01입니다.Versions are mandatory; the current version is 2017-11-01.

VersionVersion 릴리스 종류Release Type 영역Regions 릴리스 정보Release Notes
2017-11-012017-11-01 일반 공급General Availability 모두All
  • 우선 순위가 낮은 VM 제거 EventType 'Preempt'에 대 한 지원 추가Added support for Low-priority VM eviction EventType 'Preempt'
  • 2017-08-012017-08-01 일반 공급General Availability 모두All
  • IaaS VM의 리소스 이름에서 앞에 붙은 밑줄이 제거됨Removed prepended underscore from resource names for IaaS VMs
  • 모든 요청에 대해 메타데이터 헤더 요구 사항이 적용됨Metadata header requirement enforced for all requests
  • 2017-03-012017-03-01 미리 보기Preview 모두All
  • 최초 릴리스Initial release
  • 참고

    예약된 이벤트의 이전 미리 보기 릴리스는 api-version으로 {latest}를 지원했습니다.Previous preview releases of Scheduled Events supported {latest} as the api-version. 이 형식은 더 이상 지원되지 않으며 향후 사용되지 않을 예정입니다.This format is no longer supported and will be deprecated in the future.

    예약된 이벤트 사용 및 사용 안 함Enabling and Disabling Scheduled Events

    예약된 이벤트는 이벤트에 대한 요청을 처음 수행하는 서비스에 대해 사용할 수 있습니다.Scheduled Events is enabled for your service the first time you make a request for events. 최대 2분인 첫 번째 호출에서 지연된 응답을 예상해야 합니다.You should expect a delayed response in your first call of up to two minutes.

    24시간 동안 요청을 수행하지 않으면 예약된 이벤트를 서비스에 사용할 수 없습니다.Scheduled Events is disabled for your service if it does not make a request for 24 hours.

    사용자 시작 유지 관리User-initiated Maintenance

    Azure Portal, API, CLI 또는 PowerShell을 통한 사용자 시작 VM 유지 관리로 인해 예정된 이벤트가 발생합니다.User-initiated VM maintenance via the Azure portal, API, CLI, or PowerShell results in a scheduled event. 그러면 애플리케이션에서 유지 관리 준비 논리를 테스트할 수 있으며 애플리케이션에서는 사용자 시작 유지 관리를 준비할 수 있습니다.You then can test the maintenance preparation logic in your application, and your application can prepare for user-initiated maintenance.

    VM을 다시 시작하는 경우 Reboot 형식인 이벤트가 예약됩니다.If you restart a VM, an event with the type Reboot is scheduled. VM을 다시 배포하는 경우 Redeploy 형식인 이벤트가 예약됩니다.If you redeploy a VM, an event with the type Redeploy is scheduled.

    API 사용Use the API

    헤더Headers

    메타데이터 서비스를 쿼리할 때 요청이 실수로 리디렉션되지 않도록 Metadata:true 헤더를 제공해야 합니다.When you query Metadata Service, you must provide the header Metadata:true to ensure the request wasn't unintentionally redirected. Metadata:true 헤더는 모든 예약된 이벤트 요청에 필요합니다.The Metadata:true header is required for all scheduled events requests. 헤더를 요청에 포함하지 않으면 메타데이터 서비스에서 "잘못된 요청" 응답이 발생합니다.Failure to include the header in the request results in a "Bad Request" response from Metadata Service.

    이벤트 쿼리Query for events

    다음과 같이 호출하여 예약된 이벤트를 쿼리할 수 있습니다.You can query for scheduled events by making the following call:

    BashBash

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2017-08-01
    

    응답에는 예약된 이벤트의 배열이 포함됩니다.A response contains an array of scheduled events. 빈 배열은 현재 예약된 이벤트가 없음을 의미합니다.An empty array means that currently no events are scheduled. 예약된 이벤트가 있는 경우 응답에 다음과 같은 이벤트의 배열이 포함됩니다.In the case where there are scheduled events, the response contains an array of events.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},              
            }
        ]
    }
    

    이벤트 속성Event Properties

    자산Property 설명Description
    EventIdEventId 이 이벤트의 GUID(Globally Unique Identifier)입니다.Globally unique identifier for this event.

    예제:Example:
    • 602d9444-d2cd-49c7-8624-8643e7171297602d9444-d2cd-49c7-8624-8643e7171297
    이벤트 유형EventType 이 이벤트로 인해 발생하는 결과입니다.Impact this event causes.

    값:Values:
    • Freeze: 가상 머신은 몇 초간 일시 중지 되도록 예약 됩니다.Freeze: The Virtual Machine is scheduled to pause for a few seconds. CPU 및 네트워크 연결을 일시 중단할 수 있습니다, 있지만 메모리 나 열린 파일에 영향을 주지 않습니다.CPU and network connectivity may be suspended, but there is no impact on memory or open files.
    • Reboot: Virtual Machine을 다시 부팅하도록 예약합니다(비영구 메모리가 손실됨).Reboot: The Virtual Machine is scheduled for reboot (non-persistent memory is lost).
    • Redeploy: Virtual Machine을 다른 노드로 이동하도록 예약합니다(임시 디스크가 손실됨).Redeploy: The Virtual Machine is scheduled to move to another node (ephemeral disks are lost).
    • Preempt: 우선 순위가 낮은 가상 컴퓨터를 삭제 하는 중 (임시 디스크 손실 됨).Preempt: The Low-priority Virtual Machine is being deleted (ephemeral disks are lost).
    ResourceTypeResourceType 이 이벤트가 영향을 주는 리소스 형식입니다.Type of resource this event affects.

    값:Values:
    • VirtualMachine
    리소스Resources 이 이벤트가 영향을 주는 리소스 목록입니다.List of resources this event affects. 이 목록은 하나의 업데이트 도메인에서 컴퓨터를 포함하도록 보장하지만 UD의 모든 컴퓨터를 포함할 수는 없습니다.The list is guaranteed to contain machines from at most one update domain, but it might not contain all machines in the UD.

    예제:Example:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatusEventStatus 이 이벤트의 상태입니다.Status of this event.

    값:Values:
    • Scheduled: NotBefore 속성에 지정된 시간 이후 시작하도록 이 이벤트를 예약합니다.Scheduled: This event is scheduled to start after the time specified in the NotBefore property.
    • Started: 이 이벤트가 시작되었습니다.Started: This event has started.
    Completed 또는 유사한 상태가 제공되지 않았습니다.No Completed or similar status is ever provided. 이벤트가 완료되면 더 이상 반환되지 않습니다.The event is no longer returned when the event is finished.
    NotBeforeNotBefore 이 시간이 지난 후 이 이벤트가 시작될 수 있습니다.Time after which this event can start.

    예제:Example:
    • 2016년 9월 19일 월요일 18:29:47 GMTMon, 19 Sep 2016 18:29:47 GMT

    이벤트 예약Event Scheduling

    각 이벤트는 이벤트 유형에 따라 향후 최소한의 시간으로 예약됩니다.Each event is scheduled a minimum amount of time in the future based on the event type. 이 시간은 이벤트의 NotBefore 속성에 반영됩니다.This time is reflected in an event's NotBefore property.

    이벤트 유형EventType 최소 공지Minimum notice
    중지Freeze 15분15 minutes
    다시 부팅Reboot 15분15 minutes
    재배포Redeploy 10분10 minutes
    선점Preempt 30초30 seconds

    이벤트 시작Start an event

    예정된 이벤트에 대해 알게 되고 정상 종료를 위한 논리를 완료한 후에 EventId로 메타데이터 서비스에 대한 POST 호출을 실행하여 처리 중인 이벤트를 승인할 수 있습니다.After you learn of an upcoming event and finish your logic for graceful shutdown, you can approve the outstanding event by making a POST call to Metadata Service with EventId. 이 호출은 가능한 경우 Azure에 최소 알림 시간을 단축할 수 있음을 나타냅니다.This call indicates to Azure that it can shorten the minimum notification time (when possible).

    다음과 같은 JSON 샘플은 POST 요청 본문에 필요합니다.The following JSON sample is expected in the POST request body. 요청에 StartRequests 목록이 포함되어야 합니다.The request should contain a list of StartRequests. StartRequest는 빠르게 처리할 이벤트의 EventId를 포함합니다.Each StartRequest contains EventId for the event you want to expedite:

    {
        "StartRequests" : [
            {
                "EventId": {EventId}
            }
        ]
    }
    

    Bash 샘플Bash sample

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2017-11-01
    

    참고

    이벤트를 승인하면 해당 이벤트를 승인한 VM뿐만 아니라 이벤트의 모든 Resources에 대해 이벤트가 진행됩니다.Acknowledging an event allows the event to proceed for all Resources in the event, not just the VM that acknowledges the event. 따라서 승인을 조정할 리더를 선택할 수 있으며, 이는 Resources 필드의 첫 번째 컴퓨터처럼 간단할 수 있습니다.Therefore, you can choose to elect a leader to coordinate the acknowledgement, which might be as simple as the first machine in the Resources field.

    Python 샘플Python sample

    다음 샘플은 예약된 이벤트에 대한 메타데이터 서비스를 쿼리하고 처리 중인 각 이벤트를 승인합니다.The following sample queries Metadata Service for scheduled events and approves each outstanding event:

    #!/usr/bin/python
    
    import json
    import urllib2
    import socket
    import sys
    
    metadata_url = "http://169.254.169.254/metadata/scheduledevents?api-version=2017-11-01"
    headers = "{Metadata:true}"
    this_host = socket.gethostname()
    
    def get_scheduled_events():
       req = urllib2.Request(metadata_url)
       req.add_header('Metadata', 'true')
       resp = urllib2.urlopen(req)
       data = json.loads(resp.read())
       return data
    
    def handle_scheduled_events(data):
        for evt in data['Events']:
            eventid = evt['EventId']
            status = evt['EventStatus']
            resources = evt['Resources']
            eventtype = evt['EventType']
            resourcetype = evt['ResourceType']
            notbefore = evt['NotBefore'].replace(" ","_")
            if this_host in resources:
                print "+ Scheduled Event. This host " + this_host + " is scheduled for " + eventtype + " not before " + notbefore
                # Add logic for handling events here
    
    
    def main():
       data = get_scheduled_events()
       handle_scheduled_events(data)
    
    if __name__ == '__main__':
      main()
      sys.exit(0)
    

    다음 단계Next steps