LoginSignup
14
4

More than 3 years have passed since last update.

「クラウドネイティブの ASP.NET Core マイクロサービスを作成してデプロイする」 をやってみる

Last updated at Posted at 2020-11-30

この記事は、求ム!Cloud Nativeアプリケーション開発のTips!【PR】日本マイクロソフト Advent Calendar 2020 初日です。

$\huge{ありがとうございます!}$
日本マイクロソフト賞 ④受賞記事です:tada::tada::tada:
もう一度言います。
$\huge{日本マイクロソフト賞 ④ 受賞記事です}$


はじめに

クラウドネイティブの ASP.NET Core マイクロサービスを作成してデプロイする

  • リンク先の演習をやってみることにします
  • このリンク先にどうやってたどり着いたのかについてはクラウドネイティブ Azure等でグーグル先生に聞いて、https://docs.microsoft.com/ja-jp/dotnet/architecture/にたどり着きましてLEARNってところに目をつけた次第です

スクリーンショット 2020-11-23 12.31.08.png

https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/

共通点!?

  • 中級 => 中年
  • ソリューション アーキテクト => AWS ソリューションアーキテクト(アソシエイト)なら取得済(ギリギリ :sweat_smile:)
  • Dockerは使った事があるといえばありますが、もっぱらローカルマシンでの開発環境用として使う程度でございまして、(またAWSの話をして申し訳ありません :bow:)ECSを使って本番運用をした経験はございません
  • 他は聞いたことがあるくらい
  • なレベル感ですがとりあえずやっていきます

急がばまわれ

Hello World マイクロサービスのチュートリアル

  • LEARNの並び的には先にこちらをやるような感じなのでやってみました
  • .NET SDKをローカルマシンにインストールしてすべてローカルで行う演習です
  • .NET SDKをインストールしてHello, World的アプリ(API)を作成してローカルで動作確認したところで、Docker imageを作り、そのイメージから起動したコンテナでAPIアプリが動作することを確認します
  • リンク先は英語ですが、特につまるところはありませんでした
  • These are the fundamental building blocks of microservices. を身につけたのであります!
  • 私の環境
    • macOS Catalina(10.15.7)で行いました
    • Dockerは演習前にインストール済でした
      • Docker version 19.03.13, build 4484c46d9d

クラウドネイティブの ASP.NET Core マイクロサービスを作成してデプロイする

  • それではあらためて進めていきます!
  • 基本的には書いてある通りに進めていけばこんな素敵なものができあがります!

アーキテクチャ

eshop-architecture.png
https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/3-solution-architecture

  • マイクロサービス アーキテクチャでは、マイクロサービスごとに、ワークロード、ストレージ ニーズ、読み取りまたは書き込みパターンに最適化されたデータ ストアを実装する。 とのことです
  • Each microservice implements its own data store that's best optimized for its workload, storage needs, and read/write patterns.

WebStatus

スクリーンショット 2020-11-23 0.46.40.png

Web SPA アプリケーション

eshop-spa.png
https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/4-review-code-verify-deployment

  • 以下、私が詰まったところを書いておきます

ユニット 6/9 演習 - クーポン サービスを追加する

  • ここはソースコードを書き換える演習があります
  • 「2. Startup.cs で次の変更を適用して、リアルタイムの HTTP 正常性チェックをクーポン サービスに追加します。」のところが日本語版だと一体何をしたらいいのか私にはさっぱりわかりませんでした
    • C#に堪能な方であれば周辺、関連するところ(探すのがたいへんそう)を読むことでわかるのかもしれません
    • 2021/01/15 追記: 日本語訳のほうにもソースコードの変更箇所が明示されているようです :tada::tada::tada:
  • 英語版を読んだほうがいいだろうとおもいましたがどこで英語に切り替えるかすぐにはわかりませんでした
  • アドレスバーをよくみると
    • https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/6-add-coupon-service
  • ですので、ja-jpen-usにでも変えればいいだろう! → 🎯でした!
  • https://docs.microsoft.com/en-us/learn/modules/microservices-aspnet-core/6-add-coupon-serviceを参照すると、どこをどう修正すればよいのかばっちりわかります

Container Registry でクーポン サービスを構築する

  • 同じページの下のほうに、↑節があります
  • そこでaz acr build --registry eshoplearn \...というコマンドを実行するように指示されているのですがそのまま実行するとエラーになります

スクリーンショット 2020-11-23 0.25.59.png

  • eshoplearnなんて知らぬと言われています
    • The --registry parameter specifies the name of the container registry to use.と書いてあるので、自身の環境にあわせて名前を指定する必要があるということが示唆されています
  • Azureコンソールサブスクリプション > サブスクリプション名 > リソースと進みます

スクリーンショット 2020-11-23 0.26.52.png

  • こういうページにたどり着くのでコンテナレジストリの名前を指定します
    • 上記例ではeshoplearn20201122150006222となります
  • (私はこれに気づく前にサブスクリプションのプランを無料プランから従量課金制に変えてしまいましたが、変える必要はなかったのかもしれません。)

Wrapping Up :santa: :santa_tone1: :santa_tone2: :santa_tone3: :santa_tone4: :santa_tone5:

  • 求められているTips! とは異なるでしょうし、そんな当たり前のことを今さらいわれてもねー 感はあるとおもいますが、Tipsをまとめておきます
    • 公式ドキュメントを読むのは良い学習法ーーほとんどの場合において最良だと私はおもいます
      • とっかかりはやさしめの記事や書籍だとしても、いずれはやっぱり公式ドキュメント
    • 日本語訳がおかしいとおもったら英語版を探してみると答えがあるかもね
  • この演習では、次のことを行いました。とのことです!
    • Azure Kubernetes Service (AKS) で実行される既存の ASP.NET Core マイクロサービスを調べました。
    • 新しい ASP.NET Core マイクロサービスを実装し、コンテナー化しました。
    • Docker イメージを Azure Container Registry に発行しました。
    • Docker コンテナーを AKS 内の既存のアプリにデプロイしました。
      • 私にはまだピンと来ていませんが、分かる人にはわかるのでしょう
      • ↑と当初はおもっていたのですがその後、PhoenixアプリをAzure コンテナーサービスで動かすということを通じてなんとなくわかってきました(詳細後述)
  • この記事では、「なんとなく雰囲気触ってみましたー!」しかできませんでしたし、クラウドネイティブは何者だ? カラオケはあるけれどかける機械を見だごとア無エなのですが、いつか触ろう触ろうと思っていてなかなか手がでなかったAzureを触ってみることはできましたし、最近のシステム開発ってこうやるんだー という雰囲気を私自身はつかめました
    • こういう設計をするものって、それを取りまとめる人はたいへんなのじゃないかなあー
    • 責務といいますかインターフェースといいますか、これはぼく、ここから先はあなたねの境界が重要なのだろうなあ
    • とおもいました
  • 「ソースコードを書き換える演習」のところは日本語訳をen-usの記述に寄せたほうがよさそうなことについては、問題を報告から報告をしておきました

スクリーンショット 2020-11-23 1.04.59.png

おまけ ①

  • 途中、サブスクリプションのプランを無料プランから従量課金制に変えてしまって、元に戻せないかとがちゃがちゃ、「サブスクリプションの取り消し」や「再アクティブ化」を繰り返したりしました
  • 「サブスクリプションの取り消し」で無料プランへ戻るのかとおもったりしたのですが、これはそんな私の都合にあわせてくれるものではなく、文字通りサブスクリプションを取り消すもの → コマンド実行しようとしてもRead Onlyで書き込み不可みたいなことになる ものでした
  • そのときの話を少し書いておきます
  • 「再アクティブ化」は反映されるまで10分〜30分かかるようです
  • 「再アクティブ化」後、もう一回やり直そうとファイルを消そうとしたのですが、パーミッションも所有権も特に不審なところはないのに消せないファイルが残ってしまいました
    • Azure Cloud Shellの再起動で解決しました
  • もう一回やり直したいときには、ユニット 2/9 演習 - 環境を設定するに書いてあるスクリプトでリセットできます

おまけ ②

  • ユニット 1/9 はじめににこの演習に必要な料金の見積もりが書いてあります
  • おそらくデプロイしたものを4h稼働し続けた場合の料金だとおもいます
  • 見積もりでは$0.63(≒72円)となっています
  • 演習の最後に「Azure リソースを削除する」という節があるので、不要な料金の発生を回避するためには忘れずに行ってください
  • で、私の場合はいくらかかったのかというと、11.81円でした
    • (ややみるタイミングが早すぎたのかもしれません。他の用途でも使いはじめてどこまでが本演習の分かはよくわからなくなっているのですが70円はかかっていないとおもいます)
  • はじめてAzureアカウントを作成した場合には、30日間つかえる¥22,500のクーポンをいただけるようで十分まかなえています

スクリーンショット 2020-11-23 11.08.48.png

Elixir

We'll extract the web-centered and backend pieces of our application into their own projects called child applications. When we're done, we'll be able to test, develop and deploy each child app independently.
...
In Elixir, that notion is called the umbrella project. Each application under an umbrella is called a child application.

アドベントカレンダー :santa: :santa_tone1: :santa_tone2: :santa_tone3: :santa_tone4: :santa_tone5:

2日目は @changeworld さんの「Docker 化する際に大事なこと!」です。引き続きお楽しみください。


  1. Phoenixとは、Elixirを使ってWebアプリケーションを作っていくフレームワークです 

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4