{GCP App Engine}新しいバージョンへのトラフィックの移行

 

https://cloud.google.com/appengine/docs/standard/migrating-traffic?hl=ja&tab=java#gcloud
https://qiita.com/tsunet111/items/5ffcdbddf1feeebac4da
https://dev.classmethod.jp/articles/gae-webapp/

スタンダード環境とフレキシブル環境がある。

通常はスタンダード環境を選択する

フレキシブル環境を使用する場合、app.yamlに「env: flex」を設定する

 

 

macで実行したところ、なぜかうまくデプロイできなかったので、VMインスタンスで作業


-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

 

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999


-- 2. VMインスタンス作成

gcloud compute instances create vm01 \
--machine-type=e2-micro \
--image-project=centos-cloud \
--image=centos-7-v20221004 \
--network-interface=network-tier=STANDARD

gcloud compute ssh vm01

gcloud init

sudo yum install google-cloud-sdk-app-engine-go

-- 3. App Engine 用の基本的なウェブサービスを作成する

rm -rf go-app
mkdir go-app

cd go-app

vim app.yaml

runtime: go115  # or another supported version


vim main.go

package main

import (
        "fmt"
        "log"
        "net/http"
        "os"
)

func main() {
        http.HandleFunc("/", indexHandler)

        port := os.Getenv("PORT")
        if port == "" {
                port = "8080"
                log.Printf("Defaulting to port %s", port)
        }

        log.Printf("Listening on port %s", port)
        if err := http.ListenAndServe(":"+port, nil); err != nil {
                log.Fatal(err)
        }
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
        if r.URL.Path != "/" {
                http.NotFound(w, r)
                return
        }
        fmt.Fprint(w, "Hello, World! version 1")
}

 

-- 4. ウェブサービスを App Engine にデプロイする

gcloud app create


デプロイ時にアクティブなバージョンが勝手に切り替わらないようにデフォルト設定を変更

gcloud config set app/promote_by_default false

バージョンを指定してデプロイ

gcloud app deploy -v v1


gcloud app describe

gcloud app services list

gcloud app versions list

gcloud app instances list

curl https://project01-9999999.an.r.appspot.com


-- 5. version 2のデプロイ

cat main.go

sed -i 's/Hello, World! version 1/Hello, World! version 2/' main.go

cat main.go

gcloud app deploy -v v2
gcloud app versions list


curl https://project01-9999999.an.r.appspot.com
curl https://v1-dot-project01-9999999.an.r.appspot.com
curl https://v2-dot-project01-9999999.an.r.appspot.com

 

-- 6. 複数のバージョン間のトラフィック分割


gcloud app services set-traffic default --splits v1=0.5,v2=0.5 --split-by random
gcloud app versions list

curl https://project01-9999999.an.r.appspot.com


-- 7. 新しいバージョンへのトラフィックの移行

gcloud app services set-traffic default --splits v2=1
gcloud app versions list

curl https://project01-9999999.an.r.appspot.com

 

-- 8. クリーンアップ

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet