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
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
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