BETA

ついでにDocker Desktop for WindowsからGAEにもdeployしたかった

投稿日:2020-04-08
最終更新:2020-04-08

なにこれ

GAEにもDockerからスマートにデプロイしたかった。

辛いこと

Firebaseと違ってCloud SDKが同梱されたイメージが公式から提供されているので、そんなに面倒でもないし、gcloud自体はCloud Shellからも叩けるので、もともとそんなにポータビリティが悪いわけではない。また、認証方法もローカルへのリダイレクトだけじゃなくトークンのコピー&ペーストで対応できるので、ポートマッピングも基本は不要。だからと言って記憶に残るわけでもないので書き残す。

つらい。

できたこと

  • 公式のDockerイメージからgcloud app deployできる。
  • ユーザアカウントでのログインとサービスアカウントでのログインに対応
  • CI/CDでも多分大丈夫

つまずいたとこ

多分そんなにない

面倒なこと一覧

  • Firebaseの時と同様にWindowsのファイルパスは変換が必要なので基本はpwd使っていきたい
  • 認証済みの設定がどこに保存されるのかが不明

手順

gcloud sdkはユーザカウントとサービスアカウントでログインが可能なので任意で選択する。

①ユーザアカウントでログイン処理する場合

既存のプロジェクトフォルダに移動して、コマンドプロンプトかPowerShellから色々オプションつけてDockerコンテナを起動する。-vでカレントフォルダをマウントするので、Shared Drivesは設定しておく。

docker run -ti -w /workspace -v "$(pwd):/root/.config/gcloud" -v "$(pwd):/workspace" gcr.io/google.com/cloudsdktool/cloud-sdk bash  

オプションの説明

Firebaseと共通の部分は割愛。

-v "$(pwd):/root/.config/gcloud"

認証情報とかプロジェクト情報等が$HOME/.config/gcloud/に格納されるので、カレントフォルダをDockerコンテナにマウントする。ローカルフォルダは任意の場所でok。

gcr.io/google.com/cloudsdktool/cloud-sdk

Debianベースのイメージを利用。

ユーザアカウントで認証

bashのプロンプトになるので続けてコマンド叩く。

gcloud auth login  

コンソールに認証用のOAuth2のリンクが表示されるのでブラウザでログイン処理を行う。
ログインに成功するとトークンが表示されるのでEnter verification code:にコピー&ペーストする。

Go to the following link in your browser:  

    # OAuthのリンクが表示される  

Enter verification code:   

②サービスアカウントでログイン処理する場合

基本はユーザアカウントでログインの場合と同様。サービスアカウントでログイン処理するため、-v "$(pwd):/root/.config/gcloud"は無くてもok。ただし事前にサービスアカウントを作成し、カレントディレクトリにファイルを設置しておく。

docker run -ti -w /workspace -v "$(pwd):/workspace" gcr.io/google.com/cloudsdktool/cloud-sdk bash  

サービスアカウントで認証

bashのプロンプトになるので続けてコマンド叩く。
サービスアカウントはkey.jsonで作成しているという想定。

gcloud auth activate-service-account --key-file ./key.json  

プロジェクトの確認

いずれかの方法で認証が完了するとgcloudでプロジェクト情報が取得できるようになる。

gcloud projects list  

デプロイ

カレントディレクトリのapp.yamlでデプロイする。

# npm installとかでいい感じに依存関係解消しとく  
gcloud app deploy --project YOUR_PROJECT --version X  .  

デプロイ後のローカルフォルダのファイルの扱い

認証情報やプロジェクト設定が下記のファイルとして出力されるのでいい感じに扱う。

  • credentials
  • active_config
  • configurations

おまけ

ローカル開発したい

nodeならなんでもいい気がするけど、Google App Engine Flexible向けにイメージが公開されてるので多分利用すると良い。

docker run -it -p 8080:8080 -v "$(pwd):/workspace" -w /workspace gcr.io/google-appengine/nodejs bash  

まとめ

サービスアカウントってGCPコンソールじゃ無く、CLIからも作成できるんですね!!!
知らんかった!!!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

okd.shのTechのフリしたポエム

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう