gga
github.com/qushot/go-gae-app-version-rotate
go get github.com/qushot/go-gae-app-version-rotate
gga

github.com/qushot/go-gae-app-version-rotate

by unknownv0.0.0-20191223103141-6ce1b4b7f5d1 (see all)License:Apache-2.0
go get github.com/qushot/go-gae-app-version-rotate
Readme

go-gae-app-version-rotate

  • GAEサービスの最新から指定した世代のバージョンを残し、それ以外の古いバージョンを消すGCFのコードです。
  • GAEバージョンが210を超えてデプロイできなくなる事故を防ぐ目的で利用する想定です。
  • GCPアーキテクチャとしては、Scheduler → Pub/Sub → GCF を想定しています。

注意事項

  • あくまでサービス内のバージョンを削除するためのコードなので、サービス自体の削除には未対応です。
  • GAEの仕様としてサービス内には必ずトラフィック割り当て済みのバージョンが存在し、そのバージョンは削除不可のため、keep_version_countを0とすることはできません。(リクエストとしては通りますが、GCF内でエラーとなります)
  • トラフィック割り当て済みのバージョンが削除対象となった場合、そのバージョンの削除はスキップし、keep_version_countに達するまで処理を続行します。
  • 分割トラフィック数 > keep_version_count だった場合は分割トラフィックを全て残します。

環境構築

変数表

変数名説明
YOUR_MANAGE_PROJECTバージョン管理プロジェクト
YOUR_TOPIC_NAMEバージョン管理プロジェクトに作成するPub/Subトピックの名前
YOUR_JOB_NAMEバージョン管理プロジェクトに作成するSchedulerジョブの名前
YOUR_TARGET_PROJECT管理対象プロジェクト
YOUR_TARGET_PROJECT_ID管理対象プロジェクトの名前
YOUR_TARGET_SERVICE_NAME管理対象プロジェクトのGAEサービス名

バージョン管理プロジェクト

APIの有効化

  • App Engine Admin APIを有効にする。

Pub/Subトピック作成

gcloud --project=YOUR_MANAGE_PROJECT \
pubsub topics create YOUR_TOPIC_NAME

Functionsデプロイ

gcloud functions deploy GAEAppVersionRotate \
--project=YOUR_MANAGE_PROJECT \
--trigger-topic=YOUR_TOPIC_NAME \
--region=asia-northeast1 \
--runtime=go111 \
--env-vars-file=env.yaml

Cloud Schedulerの設定

gcloud --project=YOUR_MANAGE_PROJECT \
scheduler jobs create pubsub YOUR_JOB_NAME \
--schedule="0 */3 * * *" \
--topic=YOUR_TOPIC_NAME \
--time-zone="Asia/Tokyo" \
--message-body='{"project_id": "YOUR_TARGET_PROJECT_ID", "service_name": "YOUR_TARGET_SERVICE_NAME", "keep_version_count": 3}'

管理対象プロジェクト

IAMの追加

  • バージョン管理プロジェクトの関数で指定されているサービスアカウントを管理対象プロジェクトのIAMに追加し、App Engine サービス管理者の役割を付与する。

動作確認

動作確認用GAEアプリのデプロイ

このリポジトリを利用することで指定した個数のサービス&バージョンのデプロイが可能。

関数の動作確認

gcloud --project=YOUR_MANAGE_PROJECT \
pubsub topics publish YOUR_TOPIC_NAME \
--message '{"project_id": "YOUR_TARGET_PROJECT_ID", "service_name": "YOUR_TARGET_SERVICE_NAME", "keep_version_count": 3}'

GitHub Stars

12

LAST COMMIT

2yrs ago

MAINTAINERS

0

CONTRIBUTORS

1

OPEN ISSUES

0

OPEN PRs

0
VersionTagPublished
v0.0.0-20191223103141-6ce1b4b7f5d1
2yrs ago
No alternatives found
No tutorials found
Add a tutorial