Google CloudメインのエンジニアがAzureに入門してみた記録 【Part 1：概念理解編】

## はじめに
京セラコミュニケーションシステムの谷本です。

仕事ではGoogle Cloud（GCP）をメインで利用してます。そのため今までAzureを触る機会がなかったのですが、
「ChatGPTを始めとしたOpenAIのサービスを使うならAzureでしょ？」みたいな感じで、LLMブームとともについにAzureで開発をするチャンスが到来しました。

早速、無料のサブスクリプションアカウントで勉強しようと軽く触った際に、「？？？」になったポイントがたくさんあったので、備忘録＆きっと同じ悩みを持つだろうAzure入門者のみなさんに向けて記事を残そうかと思います。


:::note info
私の理解が追い付いていない部分も多分にありますので、むむっ？と思う記述があれば是非コメントください。
:::


:::note info
各種クラウドの提供サービスを横並びで比較は公式含めていろんなところで記事があるので、ここでは触れません。
概念的な部分を中心に、AzureとGoogle Cloudを比較した内容にしようと思います。
:::

各クラウドのサービス比較が気になる方は公式ドキュメントをご参照ください。

https://cloud.google.com/docs/get-started/aws-azure-gcp-service-comparison?hl=ja

https://learn.microsoft.com/ja-jp/azure/architecture/gcp-professional/services

## この記事の対象者

* Azureに興味がある方
* Google Cloudの知識がある方

## SKU？サブスクリプション？

まずよく分からなかったのが”SKU”と”サブスクリプション”でした。
Microsoftっぽいキーワードですね。SKUなんて聞いたらWindows OSのBuild毎に割り当てわれてる番号くらいしか思いつかなかったです。

サブスクリプションも「あぁ月額請求だからサブスクね～」くらいにしか思ってなかったんですが、どうやら違う模様でした。

ということで、私なりの理解はこんな感じです。

### SKUとは？

”SKU : Stock Keeping Unit”の略称だそうです。

https://learn.microsoft.com/ja-jp/partner-center/developer/product-resources#sku


Azureリソースのグレードのようなものを指しており、選択するSKUによってできることできないことが変わってきます。
たとえば、API Managementサービスであれば[こんな感じ](https://learn.microsoft.com/ja-jp/rest/api/apimanagement/api-management-service-skus/list-available-service-skus?view=rest-apimanagement-2022-08-01&tabs=HTTP#skutype)でSKUが分かれてて、DeveloperとPremiumでしかVnet統合が出来ないなどの制約があります。

もちろん金額も選択するSKUによって違ってきます。

SKUとは別に、[価格レベル](https://azure.microsoft.com/ja-jp/pricing/details/api-management/)というコトバも出てきます。
きっとSKUと同じ意味だと信じているので、表記を統一してくれると嬉しいなと思ってます。


### サブスクリプションとは？

[サブスクリプション](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3)と言えば月額定額課金のサービスを指すことが多いと思うのですが、AzureのサブスクリプションはGoogle Cloudの[請求先アカウント](https://cloud.google.com/billing/docs/how-to/manage-billing-account?hl=ja)に近いような概念のように思います。

https://learn.microsoft.com/ja-jp/partner-center/developer/subscription-resources


サブスクリプションと請求情報が紐づいているイメージなので、利用する部門ごとにサブスクリプションを分けることで各部門の請求金額が分かりやすくなります。

AzureのサブスクリプションはGoogle Cloudのプロジェクトと似たような概念だと理解しています。

<img width="700" alt="image01.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/1a809543-6acf-59b3-fb64-d636bbc945aa.png>


## リソース管理の考え方の違い

クラウドリソースをまとめる考え方にも違いがあります。
Google Cloudの場合はプロジェクトの配下にリソースがぶら下がっているイメージですが、Azureではサブスクリプションの配下にもう一段階[リソースグループ](https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/overview#resource-groups)という管理単位を作成してリソースを配置します。

<img width="700" alt="image02.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/4b3be386-d2ce-f1ea-7a20-179dfe12e057.png>



### サブスクリプションとリソースグループの関係

リソースグループはサブスクリプション配下に複数作成が可能です。

<img width="700" alt="image04.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/0bded10c-503d-aa3e-8883-76a55d22f5e7.png>

利用者ごとにリソースグループを分ける、提供するサービスごとにリソースグループを分けるなど、いろいろな区分でリソースグループを使うことが可能です。

<img width="700" alt="image05.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/55cb6f86-27a4-0963-fb91-df913502a665.png>


Azureでシステムを開発するうえで土台になる設定になりますので、どのようにリソースグループを分割するか事前に設計しておくことが重要だと思います。
リソースグループを乱立させてしまうと、「このリソースグループって何だっけ？」問題が発生することにもなりますので、ネーミング・ルール含めて事前にちゃんと考えて作成しましょう。

Azureの公式に[ガイド](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging)もあるので参考にするのが良いと思います

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging

### リソースグループの便利ポイント

Azureのリソースは必ずどれかのリソースグループに属することになります。
PoC用にリソースグループを分けている場合などは、PoC完了とともにリソースグループを削除すれば配下のAzureリソース含めて削除することが可能です。

Google Cloudの場合はリソースグループのような仕組みがないため、不要なリソースを削除するときに消し漏らしてしまったりしちゃうのですが、一括で要らないリソースを消すことができるのは便利です。
（プロジェクトごと消してしまう場合は別です）

<img width="700" alt="image08.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/9f19f2de-0910-fce9-131d-29a861735b81.png>


ただし、外部リソースとの依存関係がある場合はリソースグループの削除に失敗することもあります。
エラーメッセージを追いかけながら事前にリソースロックの解除、依存関係リソースの削除が必要なこともありました。



## リソースの作成

リソースの作成方法はGoogle Cloudと同様にたくさんの方法が提供されています。

https://learn.microsoft.com/ja-jp/azure/developer/intro/azure-developer-create-resources

Azure入門したばかりの初心者（わたし）はAzure Portal上でポチポチ設定することが多いのですが、
リソースグループを複製したい時などは[ARMテンプレート](https://azure.microsoft.com/ja-jp/products/arm-templates)を使うことで、比較的簡単にリソースグループを複製することもできます。

リソースの作成はウィザード形式となっているため、事前に依存関係があるリソースを作成しておかなくてもメニュー遷移なしで設定できる部分はMicrosoft製品ぽいなと感じます。



## 終わりに
押さえておきたい概念的な部分としては、他にも[Azure Entra ID（旧称 Azure AD）](https://www.microsoft.com/ja-jp/security/business/identity-access/microsoft-entra-id)等もあるのですが、
そこは別記事で触れたいと思います。ADって聞くだけで記事読むのやめちゃう人もたくさんいると思うので。

無料アカウントでAzureお試しする際にも、請求情報登録して本格的に使うにしても避けては通れない部分かなと思いますので、これからAzure入門される方は参考にしてもらえると嬉しいです。