sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

GCP の GAE (App Engine) + C# (.NET) を試す

今回は Google Cloud Platform の Google App Engine .NET 環境構築を試してみるテストです。コンピュートプラットフォームの選択肢を考えるところでは

このあたりから考えをスタートをするのが今風なのか。マイクロサービスの適用可否を次に考えて……みたいな話ですが、App Engine で開発できそうなら、手軽な App Engine にするとよいですよ、という回答もあるある。(GCP 系のイベントでも Google 関係者は、この回答を好む気がする)要件の単純さで決めてもいいのか。

  1. Cloud Functions
  2. App Engine
  3. Kubernetes Engine
  4. Compute Engine

Google Cloud OnBoard アーキテクトデザイン参考

ともかく、そんなわけで技術規模でいえば2つめの GAE のサンプルプログラムを展開してみたときに、小一時間手こずったところをメモしてる記事です。

GAE の準備

前準備として、 GCP を使える状態にします。 これは、「C# で GCP (無料トライアル) の画像認識をする (VisualStuio 2015)」でやったので割愛します。(課金の設定まで必要ですが、もちろん無料枠で遊びます)

サンプルプログラムは Google が公開している下記リンクのところから利用します。(リファレンスもこれ)

展開したフォルダーは、わかりやすい場所に展開。私はデスクトップで作業しましたが、パスがややこしくなったり、ワイド文字を含んだりすると、問題が発生することもあるみたいです。注意。

サンプルプログラムのデバッグとパブリッシュ

f:id:shikaku_sh:20190701151252p:plain:w300
デバッグ環境 Hello World!

リファレンスにあるとおり、F5 キーで一度プログラムをデバッグしてみて、「Hello World!」を表示してから、パブリッシュをしてみるだけ。

f:id:shikaku_sh:20190701151039p:plain:w400
Failed to deploy...

簡単なはずなんだけど、こんな感じで ERROR になってしまった。

ERROR: (gcloud.app.deploy) User [****@gmail.com] does not have permission to access project [****] (or it may not exist): Access Not Configured. Cloud Build has not been used in project **** before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudbuild.googleapis.com/overview?project=**** then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
Failed to deploy project HelloWorld to App Engine Flex.

このユーザーが gcloud.app.deploy の権限を持っていないのなら、IAM の画面を開いて権限を与えればいいのだけれど、今回は権限を持っているようなのにうまくパプリッシュできませんでした。

f:id:shikaku_sh:20190701151154p:plain:w300
IAM の問題なら権限を追加する

Google Cloud SDK Shell でパブリッシュしてみる

原因がよくわからないので、シェルを使ってパブリッシュしてみます。シェルを使うとき(使い慣れないとき)は、下記の環境を確認するコマンドを最初にやっておくといいかも。

cd プロジェクトの release フォルダー  
gcloud app deploy  

f:id:shikaku_sh:20190701151532p:plain:w400
シェルでやってみる

うまくパブリッシュできました。もう一回 Visual Studio でパブリッシュをやってみると、今度は成功。

f:id:shikaku_sh:20190701153051p:plain:w300
Hello World!

Cloud Shell の確認コマンド

Google Cloud SDK Shell を動かすときは、変なミスを避けるために最初に以下のようなコマンドを叩くことが多いです。というか、心配性なので config list は必ず確認してます。

f:id:shikaku_sh:20190701151340p:plain:w400
gcloud config list

現在のアカウント情報をリスト表示します。(HELP

f:id:shikaku_sh:20190701151431p:plain:w400
gcloud projects list

現在認識しているプロジェクトをリスト表示します。(HELP

f:id:shikaku_sh:20190701151455p:plain:w400
gcloud app instances list

現在の GAE のインスタンスをリスト表示します。(HELP

おわりに

GAE をやってみてわかったことは、.NET はフレキシブル環境にしか対応していませんでした。なので、おそらく通常の GAE よりもややコストは高くなるんだろうと。そのぶんできることもあるみたい。

スタンダード環境では、アプリケーションはサンドボックス内の軽量なインスタンス上で実行されます。このサンドボックスでは、アプリケーションにできることが制限されます。
フレキシブル環境ではアプリケーションは制限の少ない Google Compute Engine 仮想マシンVM)上の Docker コンテナで実行されます。例えば、任意のプログラミング言語の使用、ディスクへの書き込み、任意のライブラリの使用、さらに複数プロセスの実行が可能です。

通常であれば環境の選択をしたいところですが、このあたりが悩ましい。好み・得意の言語で環境を選ぶとコストがあがる。ミニマムにスタートしたかったな。

参考

独習ASP.NET 第5版

独習ASP.NET 第5版