서비스 출시 관리

이 페이지에서는 Service Infrastructure를 사용하여 점진적으로 서비스 구성출시하는 방법을 설명합니다.

프로덕션 서비스를 위해 서비스 구성을 업데이트하는 것은 위험이 크며 중단을 일으킬 수 있습니다. Service Management API를 사용하면 구성 변경사항을 점진적으로 출시할 수 있어, 잘못된 서비스 구성으로 인한 영향을 완화할 수 있습니다.

여러 개의 서비스 구성 버전을 배포하고 해당 버전이 런타임에 사용되는 방법을 정의할 수 있습니다. services.rollouts.create 메서드를 호출하여 출시를 시작하기만 하면 됩니다. 최대 5개의 서비스 구성을 한 번에 출시할 수 있습니다.

시작하기 전에

이 가이드의 예를 실행하려면 먼저 Service Management API 시작하기의 안내를 따라 초기 설정을 완료해야 합니다.

출시 수행

관리형 서비스 endpointsapis.appspot.com이 Service Management API를 기반으로 한다고 가정할 때, 다음 단계를 수행하여 단계적이고 제어된 방식으로 서비스 구성 변경사항을 배포할 수 있습니다.

예를 들어 endpointsapis.appspot.com은 현재 서비스 구성 old를 사용 중이고, 서비스 구성 new를 사용하도록 이를 변경해야 합니다. 모든 프로덕션 트래픽에서 새로운 구성을 즉시 사용하도록 하는 대신, 출시판을 만들어서 전체 트래픽의 10%에서 새로운 서비스 구성을 테스트할 수 있습니다.

# Create rollout to test the new configuration with 10% traffic.
$ gcurl -d '{
  "rolloutId": "canary-rollout",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "new": 10,
      "old": 90
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout"
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/canary-rollout"
    ],
    "startTime": ...
  },
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "canary-rollout",
    "createTime": ...
    "trafficPercentStrategy": {
      "percentages": {
        "old": 90,
        "new": 10,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

출시가 생성된 다음에는 다음 명령어를 실행하고 자신의 출시 ID로 바꿔서 출시 상태를 가져올 수 있습니다.

# Get rollout status of `operations/rollouts.endpointsapis.appspot.com:canary-rollout`.
$ gcurl https://servicemanagement.googleapis.com/v1/operations/rollouts.endpointsapis.appspot.com:canary-rollout
{
  "name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/canary-rollout"
    ],
    "steps": [
      {
        "description": "update Service Controller",
        "status": "DONE"
      }
    ],
    "progressPercentage": 100,
    "startTime": ...
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "canary-rollout",
    "createTime": ...
    "status": "SUCCESS",
    "trafficPercentStrategy": {
      "percentages": {
        "old": 90,
        "new": 10,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

Canary 출시가 완료되었고 새로운 서비스 구성이 올바른 것이 확인된 다음에는 트래픽을 100% 제공할 수 있도록 출시를 만들 수 있습니다.

# Create rollout to let new configuration serve 100% traffic.
$ gcurl -d '{
  "rolloutId": "full-rollout",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "new": 100,
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "name": "operations/rollouts.endpointsapis.appspot.com:full-rollout",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/rollouts/full-rollout"
    ],
    "startTime": ...
  },
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
    "rolloutId": "full-rollout",
    "createTime": ...
    "trafficPercentStrategy": {
      "percentages": {
        "new": 100,
      }
    },
    "serviceName": "endpointsapis.appspot.com"
  }
}

테스트 단계에서 문제를 발견하는 경우에는 다음을 수행하여 이전 구성으로 롤백할 수 있습니다.

# Rollback to the old configuration.
$ gcurl -d '{
  "rolloutId": "rollout-to-old",
  "serviceName": "endpointsapis.appspot.com",
  "trafficPercentStrategy": {
    "percentages": {
      "old": 100,
    }
  }
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
 "name": "operations/rollouts.endpointsapis.appspot.com:rollout-to-old",
 "metadata": {
   "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
   "resourceNames": [
     "services/endpointsapis.appspot.com/rollouts/rollout-to-old"
   ],
   "startTime": ...
 },
 "response": {
   "@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
   "rolloutId": "rollout-to-old",
   "createTime": ...
   "trafficPercentStrategy": {
     "percentages": {
       "old": 100,
     }
   },
   "serviceName": "endpointsapis.appspot.com"
 }

}

출시 기록 보기

Service Management API는 출시 기록을 유지합니다. endpointsapis.appspot.com의 출시 기록을 보려면 다음을 수행하세요.

# List rollout history for `endpointsapis.appspot.com`.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
  "rollouts": [
    {
      "rolloutId": "canary-rollout",
      "createTime": ...
      "status": "IN_PROGRESS",
      "trafficPercentStrategy": {
        "percentages": {
          "old": 90,
          "new": 10
         }
      },
      "serviceName": "endpointsapis.appspot.com"
    },
    {
      "rolloutId": "old-rollout",
      "createTime": ...
      "status": "SUCCESS",
      "trafficPercentStrategy": {
        "percentages": {
          "old": 100
         }
      },
      "serviceName": "endpointsapis.appspot.com"
    },
    ...
  ]
}