連載を通して簡単なブログアプリを作成しつつ Go/GAE について学んでいきます。
今回は デプロイ についての説明です。
- Part 1. 『GO / Cloud SDK のインストール』
- Part 2. 『GOPATH』
- Part 3. 『プロジェクトの作成』
- Part 4. 『ディレクトリ構成』
- Part 5. 『Visual Studio Code』
- Part 6. 『Hello World』
- Part 7. 『リモートデバッグ』
- Part 8. 『デプロイ』 ← イマココ
- Part 9. 『Makefile』
- Part 10. 『Circle CI』
- Part 11. 『Dependency Injection』
- Part 12. 『ローカルDB with Docker』
- Part 13. 『gorm』
- Part 14. 『Cloud SQL』
- Part 15. 『Cloud SQL Proxy』
- Part 16. 『HTML』
- Part 17. 『CSS/JS』
- Part 18. 『Google Analytics』
- Part 19. 『Google Search Console』
- Part 20. 『A/B テスト』
- Part 21. 『ユーザーの作成』
- Part 22. 『Firebase Auth』
- Part 23. 『記事の作成』
- Part 24. 『コメントの作成』
- Part 25. 『ページネーション』
デプロイ
アプリケーションをクラウド上にデプロイします。
GCP プロジェクトを作成した際に使用した個人の Google アカウントで認証を通してデプロイすることもできますが、後のデプロイ自動化も見据え、デプロイ用サービスアカウントを作成して認証を通します。
サービスアカウントは次の手順で作成します。
まずは GCP のダッシュボードにアクセスし、そこからサービスアカウントの作成画面へ移動します。
[GCPプロジェクトダッシュボード] > [ナビゲーションメニュー] > [API とサービス] > [認証情報] > [認証情報を作成] > [サービスアカウントキー]
サービスアカウントの作成に必要な情報を入力します。入力が完了したら [作成] をクリックします。
サービスアカウント: 新しいサービスアカウント
サービスアカウント名: (任意)
役割:
- App Engine サービス管理者
- App Engine デプロイ管理者
サービスアカウントID: (任意)
キーのタイプ: JSON
[作成] をクリックすると秘密鍵が PC にダウンロードされます。
プロジェクトルートディレクトリ直下に key
という名称のディレクトリを作成し、秘密鍵をこのディレクトリ内にリネームしつつ移動させます。
秘密鍵は GitHub 上にはアップしないので、.gitignore
に key
ディレクトリを追加します。
# ディレクトリ作成
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