このページでは、Service Infrastructure を使用してサービス構成を段階的にロールアウトする方法について説明します。
本番環境のサービス構成を更新することはリスクを伴い、停止の原因となる可能性があります。Service Management API を使用すると構成の変更を段階的にロールアウトできるため、不適切なサービス構成による影響が軽減されます。
複数のサービス構成バージョンをデプロイし、それらのバージョンを実行時にどのように使用するかを定義した後、services.rollouts.create
メソッドを呼び出してロールアウトを開始します。一度にロールアウトできるサービス構成は最大 5 つです。
始める前に
このガイドの例を実行するには、Service Management API スタートガイドの指示に沿って、初期セットアップを完了してください。
ロールアウトの実施
Service Management API でマネージド サービス endpointsapis.appspot.com
が作成されている場合、次の手順に従って、サービス構成の変更を段階的かつ制御された方法でロールアウトできます。
たとえば、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"
}
}
新しいサービス構成が正常に機能することを確認したら、トラフィックの 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"
},
...
]
}