Google App Engine で始める Go 実践入門 Part 8 【デプロイ】


連載を通して簡単なブログアプリを作成しつつ Go/GAE について学んでいきます。
今回は デプロイ についての説明です。

デプロイ

アプリケーションをクラウド上にデプロイします。

GCP プロジェクトを作成した際に使用した個人の Google アカウントで認証を通してデプロイすることもできますが、後のデプロイ自動化も見据え、デプロイ用サービスアカウントを作成して認証を通します。

サービスアカウントは次の手順で作成します。

まずは GCP のダッシュボードにアクセスし、そこからサービスアカウントの作成画面へ移動します。

[GCPプロジェクトダッシュボード] > [ナビゲーションメニュー] > [API とサービス] > [認証情報] > [認証情報を作成] > [サービスアカウントキー]

サービスアカウントの作成に必要な情報を入力します。入力が完了したら [作成] をクリックします。

サービスアカウント: 新しいサービスアカウント
  サービスアカウント名: (任意)
  役割: 
    - App Engine サービス管理者
    - App Engine デプロイ管理者
  サービスアカウントID: (任意)
キーのタイプ: JSON

[作成] をクリックすると秘密鍵が PC にダウンロードされます。
プロジェクトルートディレクトリ直下に key という名称のディレクトリを作成し、秘密鍵をこのディレクトリ内にリネームしつつ移動させます。

秘密鍵は GitHub 上にはアップしないので、.gitignorekey ディレクトリを追加します。

# ディレクトリ作成
mkdir key

# 秘密鍵をリネームしつつ移動
mv /path/to/secret-key.json ./key/deploy.json

# key ディレクトリを .gitignore に追記
echo 'key' >> .gitignore

次に App Engine Admin API を有効化します。

[GCPプロジェクトダッシュボード] > [ナビゲーションメニュー] > [API とサービス] > [ライブラリ] > [App Engine Admin API] > [有効にする]

デプロイを実施します。

プロジェクト ID と バージョン番号が必要になります。
プロジェクト ID はダッシュボードのプロジェクト選択画面から確認できます。バージョン番号は任意です。

# 秘密鍵を使って認証を通す
gcloud auth activate-service-account --key-file key/deploy.json

# デプロイを実行する
appcfg.py update -A <your-project-id> -V <version> --oauth2_access_token=$(gcloud auth print-access-token 2> /dev/null) module/blog/main

index.yaml ファイルが残っている場合はここで 403 エラーが発生します。
index.yaml を削除するか、サービスアカウントに対して [Datastore インデックス管理者] の権限を付与することでエラーは出なくなります。

デプロイが完了したら App Engine ダッシュボードの右上のリンクからアプリケショーンにアクセスできます。

2 回目以降のデプロイでは、トラフィックの移行といった作業も必要になります。

App Engine は Immutable Infrastructure を実践しているので、デプロイの度に新しいインスタンスが作成されます。そのため、ソースコードをデプロイするだけではなく、ルーティングを新しいインスタンスへと変更するといった工程も必要です。

少しソースコードを書き換えて再度デプロイしてみます。
バージョン番号は 1 回目のデプロイとは違うものにします。

# デプロイを実行する
appcfg.py update -A <your-project-id> -V <version> --oauth2_access_token=$(gcloud auth print-access-token 2> /dev/null) module/blog/main

# ルーティングを切り替える
appcfg.py migrate_traffic -A <your-project-id> -V <version> --oauth2_access_token=$(gcloud auth print-access-token 2> /dev/null) module/blog/main

migrate_traffic を実行すると、徐々にルーティングが切り替わっていきます。切り替わっていく様子は [App Engine ダッシュボード] > [バージョン] から確認できます。

トラフィックの移行が完全に完了したら、再度ブラウザでアプリケーションにアクセスしてみます。

サービス アカウントを使用して承認する | Google Cloud
appcfg.py コマンドライン引数 | Google Cloud
プロジェクト アクセス権の付与

おわりに

次回のテーマは『Makefile』です。

よかったら Twitter フォローしてね。@_rema424