しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

App Engine Flexible Environment で ASP.NET Core アプリケーションを動かしてみる

少し前に Google Cloud Platform の App Engine Flexible Environment でも ASP.NET Core アプリケーションの実行に対応したと聞いたので、一通り作成からデプロイまで試しておきました。

App Engine Flexible Environment については良くわかってなかったですが、任意の Docker Image を実行できる App Engine に管理された VM ということらしいです。

Flexible Environment は正式リリースされてますが、ASP.NET Core サポートはまだベータです。

Visual Studio 2017 向けの拡張機能が用意されているので、これを使えば簡単に GCP に対応した ASP.NET Core アプリケーションを作成することが出来ます。

AWS / Azure / GCP の 3 大パブリッククラウドは、Visual Studio から簡単にリソースを作成したり、アプリケーションのデプロイが行えるようになっているので、非常に便利ですね。

Cloud Tools for Visual Studio をインストールすると、プロジェクトテンプレートが追加されます。ここから始めるのが一番簡単な方法だと思いました。

f:id:shiba-yan:20170626132704p:plain

通常の ASP.NET Core アプリケーションのテンプレートとは異なり、最初から GCP 向けのロギングなどの設定がされているので、設定ファイルを修正するだけで機能を使えるようになってます。

デプロイ自体もソリューションエクスプローラーの右クリックメニューから行えます。

f:id:shiba-yan:20170626133416p:plain

Dockerfile を使ったカスタマイズや app.yaml で設定の変更を行いたい場合は、一つ下の項目を選ぶと必要なファイルが生成されます。

Publish を選択するとダイアログが表示され、App Engine Flexible Environment と Container Engine のどちらにデプロイするか確認されるので、今回は App Engine Flex を選びます。

f:id:shiba-yan:20170626132231p:plain

今度、時間があるときに Container Engine へのデプロイも試してみたいところです。

バージョンなどが表示されますが、デフォルトのままデプロイを行います。作成されたイメージは Google Container Registry に自動でプッシュされます。

f:id:shiba-yan:20170626132243p:plain

Docker Image のビルドなどは全てリモートで行ってくれるので、開発環境には Docker は不要なのが良いですね。このあたり App Service on Linux とは異なる部分です。*1

Flexible Environment は毎回新しい VM を立ち上げるみたいなので、トラフィックを受信できるようになるまでに 5 分ぐらいかかりました。

f:id:shiba-yan:20170626151451p:plain

Docker ベースなので当たり前といえば当たり前なのですが、すんなりと App Engine 上で ASP.NET Core アプリケーションは動作しました。

次に Visual Studio からアプリケーションの更新を試してみます。同じように Publish を行うだけです。

f:id:shiba-yan:20170612163106p:plain

常に新しい VM を作成するので Immutable な更新になっています。デプロイ完了までには少し時間はかかりますが、新しい VM が用意されるので安心感はあります。

新しいバージョンの用意が出来たタイミングで、トラフィックが古いバージョンから切り替えられます。

f:id:shiba-yan:20170612163116p:plain

使っていて良いなと思ったのは、複数のバージョンを用意してトラフィックを任意の割合で分割できる機能がデフォルトで用意されていることでした。

あと、デフォルトで組み込まれている Stackdriver によるロギングが便利でした。

f:id:shiba-yan:20170626141747p:plain

ちゃんと ASP.NET Core のログにも対応しているので、カテゴリでの絞り込みも行えます。

f:id:shiba-yan:20170626142756p:plain

アプリケーション開発に必要なものが最初から用意されているのが、GCP というか App Engine の強みなんだなと実感しました。これまで ASP.NET Core を各パブリッククラウドで動かしてみましたが、それぞれのサービスで特徴があって面白いです。

AWS / Azure / GCP に関して ASP.NET Core の視点から、今度まとめてみようかなと思います。

*1:Visual Studio 2017 からデプロイするには Docker for Windows が必要になる