Microsoft のクラウド Azure の入門講座を和訳した (後編) Azure について - どんなサービスがあるの？ #MSIgniteTheTour

Microsoft の公式大型技術カンファレンス『Microsoft Ignite 2019』が、アメリカで開催されました。
そこで実際にデリバーされた **Azure 入門編セッション** (英語) を、私が和訳して日本の『[Microsoft Ignite The Tour Tokyo](https://www.microsoft.com/ja-jp/ignite-the-tour/Tokyo?WT.mc_id=Ignite-blog-machiy)』で発表することになったので、その登壇資料をもとにした記事をここに書いて公開します。
また、スライドを和訳したさい、(スペースが空いていれば) なるべく原文も併記するようにしています。

[Christina Warren](https://twitter.com/film_girl) さんによるオリジナルのセッション (英語)『**Discovering Microsoft Azure**』の動画は [こちら](https://myignite.techcommunity.microsoft.com/sessions/83201?WT.mc_id=Ignite-blog-machiy) で見られます！ 
→ [https://myignite.techcommunity.microsoft.com/sessions/83201](https://myignite.techcommunity.microsoft.com/sessions/83201?WT.mc_id=Ignite-blog-machiy)


![Azure 入門](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/475d3410-3ffd-4a08-a650-f178ea504909.png)

ちなみに、この記事に書いてあることは、
マイクロソフト公式の無料オンライン学習サイト『 [**Microsoft Learn**](https://docs.microsoft.com/ja-jp/learn/) 』の、
[こちらのコース](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/184c8d4w2mjy?WT.mc_id=docs-blog-machiy)にもよくまとまっているので、
ぜひ自主学習にどうぞ！
→ [https://docs.microsoft.com/ja-jp/users/msignite2019](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/184c8d4w2mjy?WT.mc_id=docs-blog-machiy)

 (スライドは [こちら](https://www.slideshare.net/chomado/azure-at-microsoft-ignite-the-tour-tokyo-2019))

## もくじ

あまりに長くなってしまったので、
前編後編に分けました。

1. 前編：[「クラウドについて」](https://qiita.com/chomado/items/032454af29e3eb6a2c57) (前回の記事)
    - 「**クラウド コンピューティング**」
    - 「**IaaS**」, 「**PaaS**」, 「**SaaS**」
    - クラウドへの移行
    - 「**Lift and Shift**」
    - 「**クラウド ネイティブ**」
     
2. 後編：「マイクロソフトのクラウド Azure について」(← この記事)
    - 「**Microsoft Azure**」 とは
    - Azure のサービスの種類（カテゴリ）
    - ID 管理サービス「**Azure Active Directory**」
    - 「**リソースグループ**」
    - 「**リソースプロパイダー**」
    - 「**Azure リソースマネージャー**」 (ARM)
    - 「**ARM テンプレート**」
    - 色々なスペックの仮想マシンのシリーズ
    - 「**コンテナ**」
    - 「**Windows Server コンテナ**」
    - 「**Hyper-V コンテナ**」
    - 「**サーバーレス**」-「**Azure Functions**」
    - アプリのホスティングサービス「**Azure App Service**」
    
この記事では、後編の「マイクロソフトのクラウド Azure について」お話しします。
どんなサービスがあるのかな～って。

# 事前の注意

今回 Microsoft Azure にはこんなサービスがあるよ！～って紹介していますが、
このセッションだと、本当に一部しか触れられていません。（入門編だからかな）

他にも大量の AI サービスとか k8s のとか色々充実してるので、この記事だけではなく、色々他のも見てみてください！（とくに AI サービスについてはこのセッションでは一切触れられていない）

それでは本題に入ります。

# Microsoft Azure について

前述の通り、**Microsoft Azure** (アジュール) とは、
マイクロソフトによる、 **クラウド・コンピューティング・プラットフォーム** です。

![Microsoft Azure](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/dc295f1f-dd42-470b-4bd5-00d3bca0ef97.png)

めっちゃ沢山サービスがありますね！ここに載っているのは一部だけで、実際もっとあります。とても巨大なエコシステムです。

Azure の全サービスが気になる方は[こちら](https://azure.microsoft.com/ja-jp/services/)から！

とくに Azure 初めての方は混乱すると思うので、ここでは基本的な大カテゴリについてお話しします。

## Azure のサービスのカテゴリ分け

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/e91f5c8a-87f7-438b-f1a7-9a35e645d169.png)

Azure の提供するサービスは、いくつかのカテゴリに分類されます：

1. Compute（コンピューティング）
2. Networking（ネットワーク）
3. Storage（ストレージ）

それぞれのカテゴリにどんなサービスがあるのか見てみましょう。

### 1. Azure の Compute （コンピューティング）のサービス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/79bc4c09-acb5-7166-552d-95cdb8aecc9e.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8163abd0-03fa-7a16-5aed-2748cce5c802.png)

* VM 立てよう [**Azure Virtual Machines**](https://docs.microsoft.com/ja-jp/azure/virtual-machines/?WT.mc_id=docs-blog-machiy)
    - Windows と Linux
* [**Azure Kubernetes service**](https://docs.microsoft.com/ja-jp/azure/aks/?WT.mc_id=docs-blog-machiy) (AKS)
    - ホストされている Kubernetes 環境を管理。
    - コンテナー化されたアプリケーションを迅速かつ簡単にデプロイおよび管理できる
* サーバレスのサービス [**Azure Functions**](https://docs.microsoft.com/ja-jp/azure/azure-functions/?WT.mc_id=docs-blog-machiy)
    - イベントドリブンのサーバレスコンピューティング

などなど

### 2. Azure の Networking（ネットワーク）のサービス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/0725384d-f71f-dc15-0d65-182e09b92c62.png)

* **Azure Virtual Network**
    - Azure 上に構築出来る、仮想的なプライベートなネットワーク 
    - Azure VM を VPN に繋げる
* **Azure Load Balancer**
    - ロードバランサとは、Web サイトなどへのアクセスを各サーバに振り分けて負荷分散してくれるサービス。
    - Azure Load Balancer はクラウドで提供されるロードバランサーで、簡単に負荷分散環境を構築することが可能
* **Azure Traffic Manager**
    - あるエンドポイントへのアクセスを、Azureリージョン全体に渡りネットワークトラフィックを分散できる

などなど

### 3. Azure の Storage（ストレージ）のサービス

* **Azure blob storage**
    - 動画、JSON、画像、IoT データなどのオブジェクトをストアする
* **Azure file storage**
    - ファイルをシェアするファイルサーバーとして使える
* **Azure table storage**
    - NoSQL の構造化データをクラウド内に格納するサービス

などなど

### Azure Active Directory


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/49d85ce0-5d9c-0d1b-51ea-0453eda2efd7.png)

[Azure Active Directory](https://docs.microsoft.com/ja-jp/azure/active-directory/?WT.mc_id=docs-blog-machiy) (Azure AD) は、マルチテナントに対応したクラウドベースの ID およびアクセスの管理サービスです。

* 「認証」と「認可」の機能を提供するサービス
* ID 管理を一箇所にまとめる事ができる 
* Azure や Office 365 で使われている
* 組織内のユーザーのすべての ID が含まれる 

## Azure のポータル画面 `portal.azure.com`

Azure のポータル画面はこのようになります。

![Azure のポータル画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/301f9041-298a-e86c-a856-888b3b568ea7.png)

左にメニューがポップアップします。（固定も可能）
左上の「リソースの作成」から (VM やサーバなど) リソースを作っていくことになります。
（セッションでは実際に動かすデモをしました）

## どの Azure コンピューティングサービス使えばいい？
Compute service decision tree も和訳しました

![Azure コンピューティングサービス](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8823fe92-22b1-5eeb-e910-2091354954da.png)


# 覚えておきたい Azure リソース用語

覚えておくと便利な、リソース周りの Azure 用語をいくつかご紹介します。（本当はもっとたくさんあるけど、このセッションでは５つに絞ってご紹介しました）

![サブスクリプション、リソースグループ、リソース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/17d288d4-9859-370d-0cb5-ae5371fa3658.png)


## 01「リソース」

「**リソース**」とは、Azure で利用できる、管理可能なアイテムのこと。
VM (仮想マシン)、Web アプリ、データベースなど。

## 02「リソースグループ」

「**リソースグループ**」とは、複数のリソースを入れる箱。
うまくグループ分けして管理すると良い。私はプロジェクトごとに分けてる

![サブスクリプション、リソースグループ、リソース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/20799918-6e29-0629-1108-9991bbf2c251.png)



## 03「リソースプロバイダー (Resource provider)」
「**リソースプロバイダー** (Resource provider)」とは、リソースを管理できるようにする API のようなもの。
よく見るリソースプロパイダーの例としては、以下のものがあります。

* `Microsoft.Compute`
    - VM のリソースを提供
* `Microsoft.Storage`
    - storage account のリソースを提供
* `Microsoft.Web`
    - web アプリに関連するリソースを提供


## 04「Azure リソースマネージャー (Resource Manager)」 (ARM)

「**Azure Resource Manager** (リソースマネージャー) 」(**ARM**)(アーム) は、Azure のデプロイおよび管理サービスです。 
すべてのリソースをグループとしてまとめて、構築や管理、デプロイ、監視ができます。

> Azure サブスクリプション内のリソースを作成、更新、および削除できる管理レイヤーを提供します。 
アクセス制御、ロック、タグなどの管理機能を使用して、デプロイ後にリソースを保護および整理します。

公式ドキュメント： [Azure Resource Manager のドキュメント](https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-overview?WT.mc_id=docs-blog-machiy)

![Azure Resource Manager](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/ea3bbe4d-91c4-6c9a-4656-b364ccfb1c1c.png)


たとえば、私は普段は Azure ポータル画面でポチポチ Azure のリソース (立てた VM とか) を作成・管理していますが、
これはポータル画面が Azure Resource Manager を叩いているわけです。

一方、世の中は Infrastructure as Code の風潮でして、なんでもコードで管理したい！(便利だからね) ということで、この Azure のリソースを好きにいじれる Azure Resource Manager を CLI から (SDK を介し) 叩くこともできます。（上の図参照）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/bcdb41f0-a4e2-cb36-b161-8157709331b2.png)

## 05「ARM テンプレート」

「**ARM テンプレート** (**Azure Resource Manager Template**) 」は、
JSON 形式のテンプレートで、
何のリソースをデプロイするかとかを管理できます。

公式ドキュメント：
→ [Azure Resource Manager テンプレートの構造と構文の詳細 | Microsoft docs](https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-authoring-templates?WT.mc_id=docs-blog-machiy)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/30877420-b73f-8832-75ba-a92e911b23fe.png)

### ARM テンプレートの構造

ARM テンプレートの構造は、これが大きな枠組みです。

(それぞれの項目に具体的に何を入れるかは[ 公式ドキュメント ](https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-authoring-templates?WT.mc_id=docs-blog-machiy)を参照のこと。)


````json
{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "テンプレートのバージョン (1.0.0.0 など)",
  "apiProfile": "",
  "parameters": { リソースをデプロイするときにどのような値を入力できるかを指定 },
  "variables": { 変数を定義したかったらここで定義する },
  "functions": [ テンプレート内で使う独自の関数を定義 ],
  "resources": [ デプロイやアップデートする Azure リソースを定義 ],
  "outputs": { 出力されるアウトプットを指定。通常はデプロイされたリソースからの値を定義 }
}
````

# Virtual Machine (仮想マシン)

## Compute Options – 色々な VM のスペック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/363c3517-0305-32c0-ae6d-a459fbdaa763.png)

Deep Learning などで GPU ぶん回す人用の N シリーズなど。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/bdbb7a5d-9fb4-17d7-6ca9-6c3aab684095.png)

メモリ 4 TB (テラバイト) の マシンなんてあるの！すごいなあ。

## 仮想マシンの立て方

当日は Linux (Ubuntu) の仮想マシンを立てるデモをしました。

GUI (Azure ポータル画面ポチポチ) と
Azure CLI (Cloud Shell) での
両方をやりました。

詳しいやり方はこちら → 「[クイック スタート:Azure portal で Linux 仮想マシンを作成する](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/quick-create-portal?WT.mc_id=docs-blog-machiy)」

CLI 版の詳しいやり方はこちら → 「[クイック スタート:Azure CLI で Linux 仮想マシンを作成する](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/quick-create-cli?WT.mc_id=docs-blog-machiy)」

### デモ画面のキャプチャ

↓ 立てる VM サイズ選んでるところ

![azureCLI10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/9f6b0572-e6c3-5775-e384-c8e7038d9c1b.png)

↓ 立てる VM のネットワーク設定を見てるところ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/2068f4f1-9f4a-74ee-5303-bb586cd2b37a.png)

↓ ARM テンプレートも吐き出してくれるので、例えば全く同じ設定の VM を自動で量産することもできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/227e3ce0-f97a-0092-6d52-b9054145df58.png)

↓ デプロイ中

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/09e834b3-7d95-cddf-be86-253c7e2e7543.png)


↓ Azure CLI で VM 立ててるところ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f1af5d17-bac0-81c5-6d2c-d0ebb3ea3c25.png)

````bash
az vm create \
  --resource-group AFUN10_chomado \
  --name myVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys 
````

# サーバーレス

## サーバーレスとは何か

スライドコピペ。（私の和訳の隣にオリジナルの英語をそのまま残しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/6ae33040-65b8-5556-672b-023924624d6a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/36a21068-3fd5-a714-6b3d-3a18aa4d5faf.png)

## Azure での サーバーレスのサービス

* [**Power Automate**](https://docs.microsoft.com/ja-jp/power-automate/?WT.mc_id=docs-blog-machiy) (以前の Microsoft Flow): 「承認」など、人の絡むアクションが得意。個人の生産性を上げるシステム間連携を作るのによく使われる。交通費の精算や、上長の承認を絡むものなど。 非開発者も開発者も誰でも使えるツール。O365 があれば使える
* [**Azure Logic Apps**](https://docs.microsoft.com/ja-jp/azure/logic-apps/?WT.mc_id=docs-blog-machiy): IT部門やエンジニア向け。(Azure 上で動くので、Azure の面倒見れる人がマネージするのが良いため。) 売上データを本社へ連携するとか、商品の注文をどこかに送るとかの処理をノンコーディングで作ることができる。アプリケーションやWebサービスを結合して連携が可能。 Azure のサブスクリプションで作れる
* [**Azure Functions**](https://docs.microsoft.com/ja-jp/azure/azure-functions/?WT.mc_id=docs-blog-machiy): 私の恋人。使いまくってる。推し。C# や Python, node.js などのコードを書いて、イベント駆動でローカルやクラウドなどで気軽に実行させられる。

## Azure Functions はいいぞ。

スライドコピペ。（私の和訳の隣にオリジナルの英語をそのまま残しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/aea4e347-bfca-0840-0f1d-7a31175e2106.png)

# アプリのホスティング

## Azure App Service

* 私もよく ASP.NET 製の web アプリデプロイしてる。
* 裏側が Windows のも Linux のも使える。
* Web App もしくは Web App for Containers 
* Visual Studio Code のエクステンションがある

スライドコピペ。（私の和訳の隣にオリジナルの英語をそのまま残しています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/4fa9a408-2fee-6cc8-ee3d-927d431aaf6f.png)

# 復習しよう

この記事で書いたことは
マイクロソフト公式の無料オンライン学習サイト『 [**Microsoft Learn**](https://docs.microsoft.com/ja-jp/learn/) 』の
[こちらのコース](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/184c8d4w2mjy?WT.mc_id=docs-blog-machiy)にもよくまとまっているので、
ぜひ自主学習にどうぞ！
→ [https://docs.microsoft.com/ja-jp/users/msignite2019](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/184c8d4w2mjy?WT.mc_id=docs-blog-machiy)