Jun 30, 2019
Jun 30, 2019
N/A Views
MD
warning
この記事は2年以上前に更新されたものです。情報が古くなっている可能性があります。

Cloud Foundryに追加されたRevision/Rollback機能を試してみます。

https://docs.cloudfoundry.org/devguide/revisions.html

Droplet (コンテナイメージ)のRevision管理が可能になり、
特定のRevisionへのロールバックが可能になります。

Pivotal Application Serviceでは2.6から利用可能です。

次の環境で動作確認しています。

$ cf curl /v2/info
{
   "name": "Pivotal Application Service",
   "build": "2.6.0-build.214",
   "support": "https://support.pivotal.io",
   "version": 0,
   "description": "https://docs.pivotal.io/pivotalcf/2-6/pcf-release-notes/runtime-rn.html",
   "authorization_endpoint": "https://login.run.pcfone.io",
   "token_endpoint": "https://uaa.run.pcfone.io",
   "min_cli_version": "6.23.0",
   "min_recommended_cli_version": "6.23.0",
   "app_ssh_endpoint": "ssh.run.pcfone.io:2222",
   "app_ssh_host_key_fingerprint": "62:b2:73:9c:c1:c7:4f:c9:79:0c:62:ec:a1:9a:f9:b0",
   "app_ssh_oauth_client": "ssh-proxy",
   "doppler_logging_endpoint": "wss://doppler.run.pcfone.io:443",
   "api_version": "2.135.0",
   "osbapi_version": "2.14",
   "routing_endpoint": "https://api.run.pcfone.io/routing",
   "user": "fe4bac5f-d5e6-488c-b05e-ad3d220066ad"
}

サンプルアプリのレポジトリはこちらです。

cf push --no-start

Revision機能を有効にします。

APP_NAME=rev
cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/features/revisions -X PATCH -d '{"enabled": true}'
cf start ${APP_NAME}

image

Revision一覧を確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions | jq -r '.resources[] | {version, description, guid}'
{
  "version": 1,
  "description": "Initial revision.",
  "guid": "7443df40-a8ed-4b6a-b065-6e1bcc8f546d"
}

デプロイされているRevisionを確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions/deployed | jq -r '.resources[] | {version, description, guid}'
{
  "version": 1,
  "description": "Initial revision.",
  "guid": "7443df40-a8ed-4b6a-b065-6e1bcc8f546d"
}

Revision2をデプロイます。

git checkout rev2
cf push

image

Revision一覧を確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions | jq -r '.resources[] | {version, description, guid}'
{
  "version": 1,
  "description": "Initial revision.",
  "guid": "7443df40-a8ed-4b6a-b065-6e1bcc8f546d"
}
{
  "version": 2,
  "description": "New droplet deployed.",
  "guid": "90a63693-cc28-402c-b9dc-46bdb86cb1ae"
}

デプロイされているRevisionを確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions/deployed | jq -r '.resources[] | {version, description, guid}'
{
  "version": 2,
  "description": "New droplet deployed.",
  "guid": "90a63693-cc28-402c-b9dc-46bdb86cb1ae"
}

Revision3をデプロイます。

git checkout rev3
cf push

image

Revision一覧を確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions | jq -r '.resources[] | {version, description, guid}'
{
  "version": 1,
  "description": "Initial revision.",
  "guid": "7443df40-a8ed-4b6a-b065-6e1bcc8f546d"
}
{
  "version": 2,
  "description": "New droplet deployed.",
  "guid": "90a63693-cc28-402c-b9dc-46bdb86cb1ae"
}
{
  "version": 3,
  "description": "New droplet deployed.",
  "guid": "ccc4f0bc-1dd6-4e7f-b0ff-88e596ba9bce"
}

デプロイされているRevisionを確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions/deployed | jq -r '.resources[] | {version, description, guid}'
{
  "version": 3,
  "description": "New droplet deployed.",
  "guid": "ccc4f0bc-1dd6-4e7f-b0ff-88e596ba9bce"
}

Revision2へロールバックします。

REV_VESION=2
REV_GUID=$(cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions | jq -r ".resources[] | select(.version == ${REV_VESION}) | .guid")
cf curl /v3/deployments -X POST -d "{\"relationships\":{\"app\":{\"data\":{\"guid\":\"$(cf app ${APP_NAME} --guid)\"}}},\"revision\":{\"guid\":\"${REV_GUID}\"}}"

image

Revision一覧を確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions | jq -r '.resources[] | {version, description, guid}'
{
  "version": 1,
  "description": "Initial revision.",
  "guid": "7443df40-a8ed-4b6a-b065-6e1bcc8f546d"
}
{
  "version": 2,
  "description": "New droplet deployed.",
  "guid": "90a63693-cc28-402c-b9dc-46bdb86cb1ae"
}
{
  "version": 3,
  "description": "New droplet deployed.",
  "guid": "ccc4f0bc-1dd6-4e7f-b0ff-88e596ba9bce"
}
{
  "version": 4,
  "description": "Rolled back to revision 2.",
  "guid": "efc86d6c-f6f5-467e-af99-f75045836d83"
}

デプロイされているRevisionを確認します。

$ cf curl /v3/apps/$(cf app ${APP_NAME} --guid)/revisions/deployed | jq -r '.resources[] | {version, description, guid}'
{
  "version": 4,
  "description": "Rolled back to revision 2.",
  "guid": "efc86d6c-f6f5-467e-af99-f75045836d83"
}

Rollbackできました。
Revisionがあっても保存可能なDropletの数は限られているので注意。
RollbackはRolling Updateになっているように見えました。

Found a mistake? Update the entry.
Share this article: