今回は Google Cloud Platform の Google App Engine を .NET 環境構築を試してみるテストです。コンピュートプラットフォームの選択肢を考えるところでは
- PaaS から進化したサーバーレス基盤
- コンテナのデファクト標準 Kubernetes 基盤
このあたりから考えをスタートをするのが今風なのか。マイクロサービスの適用可否を次に考えて……みたいな話ですが、App Engine で開発できそうなら、手軽な App Engine にするとよいですよ、という回答もあるある。(GCP 系のイベントでも Google 関係者は、この回答を好む気がする)要件の単純さで決めてもいいのか。
- Cloud Functions
- App Engine
- Kubernetes Engine
- Compute Engine
Google Cloud OnBoard アーキテクトデザイン参考
ともかく、そんなわけで技術規模でいえば2つめの GAE のサンプルプログラムを展開してみたときに、小一時間手こずったところをメモしてる記事です。
GAE の準備
前準備として、 GCP を使える状態にします。 これは、「C# で GCP (無料トライアル) の画像認識をする (VisualStuio 2015)」でやったので割愛します。(課金の設定まで必要ですが、もちろん無料枠で遊びます)
サンプルプログラムは Google が公開している下記リンクのところから利用します。(リファレンスもこれ)
展開したフォルダーは、わかりやすい場所に展開。私はデスクトップで作業しましたが、パスがややこしくなったり、ワイド文字を含んだりすると、問題が発生することもあるみたいです。注意。
サンプルプログラムのデバッグとパブリッシュ
リファレンスにあるとおり、F5 キーで一度プログラムをデバッグしてみて、「Hello World!」を表示してから、パブリッシュをしてみるだけ。
簡単なはずなんだけど、こんな感じで 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 の画面を開いて権限を与えればいいのだけれど、今回は権限を持っているようなのにうまくパプリッシュできませんでした。
Google Cloud SDK Shell でパブリッシュしてみる
原因がよくわからないので、シェルを使ってパブリッシュしてみます。シェルを使うとき(使い慣れないとき)は、下記の環境を確認するコマンドを最初にやっておくといいかも。
cd プロジェクトの release フォルダー
gcloud app deploy
うまくパブリッシュできました。もう一回 Visual Studio でパブリッシュをやってみると、今度は成功。
Cloud Shell の確認コマンド
Google Cloud SDK Shell を動かすときは、変なミスを避けるために最初に以下のようなコマンドを叩くことが多いです。というか、心配性なので config list は必ず確認してます。
現在のアカウント情報をリスト表示します。(HELP)
現在認識しているプロジェクトをリスト表示します。(HELP)
現在の GAE のインスタンスをリスト表示します。(HELP)
おわりに
GAE をやってみてわかったことは、.NET はフレキシブル環境にしか対応していませんでした。なので、おそらく通常の GAE よりもややコストは高くなるんだろうと。そのぶんできることもあるみたい。
スタンダード環境では、アプリケーションはサンドボックス内の軽量なインスタンス上で実行されます。このサンドボックスでは、アプリケーションにできることが制限されます。
フレキシブル環境ではアプリケーションは制限の少ない Google Compute Engine 仮想マシン(VM)上の Docker コンテナで実行されます。例えば、任意のプログラミング言語の使用、ディスクへの書き込み、任意のライブラリの使用、さらに複数プロセスの実行が可能です。
通常であれば環境の選択をしたいところですが、このあたりが悩ましい。好み・得意の言語で環境を選ぶとコストがあがる。ミニマムにスタートしたかったな。
参考
プログラミングASP.NET Core (マイクロソフト関連書)
- 作者:Dino Esposito
- 発売日: 2019/05/23
- メディア: 単行本
- 作者:山田 祥寛
- 発売日: 2016/01/22
- メディア: 大型本