이 페이지에서는 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"
},
...
]
}