この記事は、求ム!Cloud Nativeアプリケーション開発のTips!【PR】日本マイクロソフト Advent Calendar 2020 初日です。
$\huge{ありがとうございます!}$
日本マイクロソフト賞 ④受賞記事です
もう一度言います。
$\huge{日本マイクロソフト賞 ④ 受賞記事です}$
はじめに
- 求ム!Cloud Nativeアプリケーション開発のTips!【PR】日本マイクロソフト Advent Calendar 2020 に参加してみます
- 記事執筆直前にAzureのアカウントを作成した、「クラウドネイティブ」
て言葉は見聞きしたことあるけれどどんなものかさっぱりわかっていませんが、アドベントカレンダーをきっかけになにかやってみようとおもいました- 私は
@outlook.jp
のメールアドレスをもっていたのでそのメールアドレスでAzureのアカウントを作成しました
- 私は
クラウドネイティブの ASP.NET Core マイクロサービスを作成してデプロイする
- リンク先の演習をやってみることにします
- このリンク先にどうやってたどり着いたのかについては
クラウドネイティブ Azure
等でグーグル先生に聞いて、https://docs.microsoft.com/ja-jp/dotnet/architecture/にたどり着きましてLEARN
ってところに目をつけた次第です
https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/
共通点!?
-
中級
=>中年
-
ソリューション アーキテクト
=>AWS ソリューションアーキテクト(アソシエイト)
なら取得済(ギリギリ ) - Dockerは使った事があるといえばありますが、もっぱらローカルマシンでの開発環境用として使う程度でございまして、(またAWSの話をして申し訳ありません が)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 マイクロサービスを作成してデプロイする
- それではあらためて進めていきます!
- 基本的には書いてある通りに進めていけばこんな素敵なものができあがります!
アーキテクチャ
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
Web SPA アプリケーション
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 追記: 日本語訳のほうにもソースコードの変更箇所が明示されているようです
- 英語版を読んだほうがいいだろうとおもいましたがどこで英語に切り替えるかすぐにはわかりませんでした
- アドレスバーをよくみると
https://docs.microsoft.com/ja-jp/learn/modules/microservices-aspnet-core/6-add-coupon-service
- ですので、
ja-jp
をen-us
にでも変えればいいだろう! → 🎯でした! - https://docs.microsoft.com/en-us/learn/modules/microservices-aspnet-core/6-add-coupon-serviceを参照すると、どこをどう修正すればよいのかばっちりわかります
Container Registry でクーポン サービスを構築する
- 同じページの下のほうに、↑節があります
- そこで
az acr build --registry eshoplearn \...
というコマンドを実行するように指示されているのですがそのまま実行するとエラーになります
-
eshoplearn
なんて知らぬと言われています-
The --registry parameter specifies the name of the container registry to use.
と書いてあるので、自身の環境にあわせて名前を指定する必要があるということが示唆されています
-
-
Azureのコンソールで
サブスクリプション > サブスクリプション名 > リソース
と進みます
- こういうページにたどり着くのでコンテナレジストリの名前を指定します
- 上記例では
eshoplearn20201122150006222
となります
- 上記例では
- (私はこれに気づく前にサブスクリプションのプランを
無料プラン
から従量課金制
に変えてしまいましたが、変える必要はなかったのかもしれません。)
Wrapping Up
- 求められているTips! とは異なるでしょうし、そんな当たり前のことを今さらいわれてもねー 感はあるとおもいますが、Tipsをまとめておきます
-
公式ドキュメントを読むのは良い学習法ーーほとんどの場合において最良だと私はおもいます
- とっかかりはやさしめの記事や書籍だとしても、いずれはやっぱり公式ドキュメント
- 日本語訳がおかしいとおもったら英語版を探してみると答えがあるかもね
-
公式ドキュメントを読むのは良い学習法ーーほとんどの場合において最良だと私はおもいます
- **この演習では、次のことを行いました。**とのことです!
- Azure Kubernetes Service (AKS) で実行される既存の ASP.NET Core マイクロサービスを調べました。
- 新しい ASP.NET Core マイクロサービスを実装し、コンテナー化しました。
- Docker イメージを Azure Container Registry に発行しました。
- Docker コンテナーを AKS 内の既存のアプリにデプロイしました。
- 私にはまだピンと来ていませんが、分かる人にはわかるのでしょう
- ↑と当初はおもっていたのですがその後、PhoenixアプリをAzure コンテナーサービスで動かすということを通じてなんとなくわかってきました(詳細後述)
- この記事では、「なんとなく雰囲気触ってみましたー!」しかできませんでしたし、クラウドネイティブは何者だ? カラオケはあるけれどかける機械を見だごとア無エなのですが、いつか触ろう触ろうと思っていてなかなか手がでなかったAzureを触ってみることはできましたし、最近のシステム開発ってこうやるんだー という雰囲気を私自身はつかめました
- こういう設計をするものって、それを取りまとめる人はたいへんなのじゃないかなあー
- 責務といいますかインターフェースといいますか、これはぼく、ここから先はあなたねの境界が重要なのだろうなあ
- とおもいました
- 「ソースコードを書き換える演習」のところは日本語訳を
en-us
の記述に寄せたほうがよさそうなことについては、問題を報告から報告をしておきました
おまけ ①
- 途中、サブスクリプションのプランを
無料プラン
から従量課金制
に変えてしまって、元に戻せないかとがちゃがちゃ、「サブスクリプションの取り消し」や「再アクティブ化」を繰り返したりしました - 「サブスクリプションの取り消し」で
無料プラン
へ戻るのかとおもったりしたのですが、これはそんな私の都合にあわせてくれるものではなく、文字通りサブスクリプションを取り消すもの → コマンド実行しようとしてもRead Onlyで書き込み不可みたいなことになる ものでした - そのときの話を少し書いておきます
- 「再アクティブ化」は反映されるまで10分〜30分かかるようです
- 「再アクティブ化」後、もう一回やり直そうとファイルを消そうとしたのですが、パーミッションも所有権も特に不審なところはないのに消せないファイルが残ってしまいました
- Azure Cloud Shellの再起動で解決しました
- もう一回やり直したいときには、ユニット 2/9 演習 - 環境を設定するに書いてあるスクリプトでリセットできます
おまけ ②
- ユニット 1/9 はじめににこの演習に必要な料金の見積もりが書いてあります
- おそらくデプロイしたものを4h稼働し続けた場合の料金だとおもいます
- 見積もりでは$0.63(≒72円)となっています
- 演習の最後に「Azure リソースを削除する」という節があるので、不要な料金の発生を回避するためには忘れずに行ってください
- で、私の場合はいくらかかったのかというと、11.81円でした
- (ややみるタイミングが早すぎたのかもしれません。他の用途でも使いはじめてどこまでが本演習の分かはよくわからなくなっているのですが70円はかかっていないとおもいます)
- はじめてAzureアカウントを作成した場合には、30日間つかえる¥22,500のクーポンをいただけるようで十分まかなえています
Elixir
- ここで突然ですが、私はElixirという言語が好きです
- Umbrella projectというものがあるのですが、マイクロサービスの考え方に似ているところがあるようにおもいました
- Programming Phoenix >= 1.41という本の中では次のような説明があります
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.
- 私の感じ方は全然的外れなのかもしれませんが、とにかく**Elixirという言語は素敵な言語**です
- この記事を書くことでなんとなくつかめてきた感があるので勢いそのままに、Azureとからめて下記の記事を書きました
アドベントカレンダー
- ということで、Elixirが気になったというかたはぜひアドベントカレンダーをご覧になってください
- まだ空いている日もありますのでぜひご参加ください!
2日目は @changeworld さんの「Docker 化する際に大事なこと!」です。引き続きお楽しみください。