Azure の ハンズオン・ワークショップ・ハッカソン 運営者のための環境の作り方

# 背景

Azure のハンズオンやハッカソンは、世界中のあちらこちらで行われています。
Azure のポータルに、ご自身のアカウントでログイン出来る方は、それで参加するのが一番良いです。ハンズオン中に作った**環境を残せます**し、ご自身の判断で削除も出来ますので。

ハンズオンやハッカソンを実施する側は大変です。アカウントを持っている人と、そうでない人の双方に対応できる必要があります。「無料がアカウントがあるので、作成してきてください。」と募集要項に明文化して参加者に通知しても、アカウントの作成が出来ず、その場でアカウント作成などが必要になる場合もあります。最悪の場合は、その方はハンズオン・ハッカソンに参加できなくなってしまうかもしれません。

もし、運営側で Azure の Subscription を持っていて、それを参加者に提供するとしても、青天井で使われないか、予算も心配になります。
Azure の仮想マシンの費用は、価格帯は様々ですが、1時間10円足らずのものが殆どです。**無料**のものもあります。それでも、ハンズオン・ハッカソン終了後は、速やかに削除してしまいたいです。ムダは最小限にしたいですからね。貴重なコンピューター資源ですから。お金だけではなく、Sustainability の観点でも。

Azure には**無償トライアル**があります。

https://azure.microsoft.com/ja-jp/free/

ただこれは時間と金額に期限がある事。それに加えて、1つのアカウントで何度も無償トライアルは出来ません。イベントのために無償トライアルにサインインしてしまうと、次回のハンズオンやハッカソン参加時に、無償トライアルでの参加が出来ない場合が殆どです。

また、Azure のリソースによっては依存関係があるため、正しい順番に削除しないと、削除しきれないものが残る可能性があります。例えば、仮想マシンは、NICやディスクなどに依存をしています。

個々人で行うハンズオンとは違って、ハッカソンの場合は**チーム**で挑みます。競争の意味合いが出てくるハッカソンの場合は、他のチームの状況が見えないようにしたい事もあります。

つまり、以下を実現したいです。

- 運営側の Azure Subscription に簡単に参加者を追加・削除したい
- ハンズオンやハッカソンの期間中だけ、参加者が使えるようにしたい
- チーム単位でも、アクセスできるコンピューターリソースの設定を用意に管理したい

ここでは、そんな ハンズオンやハッカソンを企画したい方々のために、その効率的な環境の作り方を説明します。

# 用意するもの

- Azure Subscription
    - 出来れば、PoC や ハンズオン など特定のプロジェクトに紐づかないものが良い
- ハンズオンのテキスト
    - こちら、どうぞ😊

https://github.com/dahatake/Azure-Workshops

# 作戦

Azure には **Resource Group** という Regionを問わず、様々なクラウドのコンピューター リソースを纏めて管理できるものがあります。この Resource Groupの素晴らしい点は、Resource Group を幾つも作成でき、その Resource Group の単位毎に **外部のユーザー** を追加できる事です。
PC/Mac上でファイルを管理する際のフォルダーと同様の管理が出来ます。

つまり:
- ハンズオン・ハッカソン開始前
    - Resource Group 作成。ユーザー追加。
- ハンズオン・ハッカソン終了
    - Resource Group 削除

これだけなんです。
作業手順が少ないので、手作業で行っても大して時間を使いません。50名規模であれば、30分もあれば十分です。
トレーニング事業を考えている方は、それこそシステム連携などの全自動化も出来ます。これが Azure の良いところ。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/manage-resource-groups-portal

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-external-users

# 1. Resource Group 作成

Azure の Portal から行います。

Resource Group 作成時に必要なパラメーターは極めて少ないです。作成は1-2秒で終わります。
以下は入力例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/5e0d6dbd-fdfc-a9ee-c4d2-190ef344c79c.png)

| 項目 | 値 | メモ |
| --- | --- | --- |
| リソースグループ | <任意の名前> | ハンズオン・ハッカソンはイベントの類です。私は例の様に**日付**を付与して通常利用と分けています。 <br /> ハッカソンの場合は **Team 1** の様にチーム名にするのが吉です。|

# 2. ユーザーの追加

- 作成した Resource Group の **[アクセス制御 (IAM)]** よりユーザーを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/f8bd3bb0-fea5-51b7-17b1-813eb72785c8.png)

- [+追加] から [ロールの割り当ての追加] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/588443c6-597a-2a49-57c9-084c20eb8001.png)

- ロールの選択画面になります。
[共同作成者]を選択して[次へ]を押します。
特にこれ以外でも構いませんが、ハンズオン・ハッカソンでは、頻繁に仮想マシンなどの作成・削除を行いますから。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/a22ffead-156b-b844-a006-64eac648d5a0.png)

- ユーザーを追加します。[+メンバーを選択する] を選択すると、画面の右側に[メンバーを選択する]画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/c6d7291c-7408-fc4c-51f5-cd612583c23e.png)

- この画面で、参加者のメールアドレスを入力します。すると、画面の一番下で、[選択]ボタンが選べるようになりますので、それを選択します。
- 全ユーザーを追加します。つまり繰り返します。チーム分けする場合は、チームメンバーのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/1399458f-d8ed-a8c9-a60b-da530daf78ec.png)

- 全ユーザー追加後、[次へ]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/585f48c3-af7b-1966-8aad-2d427d84b0a2.png)

- [レビューと割り当て]画面になります。全ユーザーが追加されている事を確認した後に[レビューと割り当て]ボタンを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/2d6c868f-6668-8047-aa57-38c473b752fb.png)

- 追加が終わると、画面右上にポップアップが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/11540585-6ff1-885b-9648-46e2021c35d7.png)

当該 Resource Group に誰がどのロール(権限)を持っているかは、[ロールの割り当て]画面で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/6ccaf99e-ba82-0860-5ef9-9b222b81fb31.png)

この作業が終わると、ユーザーに Active Directory への参加の招待のメールが送信されます。
Azure へのログインは内部では Azure Active Directory B2B の機構を利用してのユーザー登録が行われています。つまり、アカウントが別途作成されるのではなく、リンク情報を持っているだけです。アカウントの管理は参加者が所属している組織あるいは個人で管理する事になります。ハンズオンやハッカソンの運営側が、アカウントの管理を綿密に行う必要性は低いです。勿論、必要なら、ハンズオンやハッカソン終了後に、ご自身の Azure Active Directoryで、参加者アカウントの削除を行ってください。

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-external-users

# 3. Dry-Run 事前チェック: 参加者アカウント相当[外部ユーザー]で事前にハンズオンを実施

特に外部ユーザーを初めて招待してのハンズオンなどでは、必ずこの手順はやった方が良いです。

- 参加者がログインができるのか?
- コンピューターリソースの作成が出来るのか?
- テキスト・ファイル・データなどは本当に存在しているのか?

良くあるのが、以下になります。

## 3.1. リソースプロバイダーが登録されていない

コンピューターリソースの作成時に「**リソースプロバイダー**が登録されていない」といった類のエラーメッセージが出て、作成が出来ない場合があります。
こちらのドキュメントを参考に、Subscription にリソースプロバイダーの登録作業を行います。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/resource-providers-and-types

以下、リソースプロバイダーの一覧です。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/azure-services-resource-providers


# 4. ハンズオンやハッカソン実施

参加者に出来れば**前日まで**に Azure の Portal にログインできるか確認をしてもらった方が良いです。
当日朝でもいいのですが、何か問題が発生した場合に対応に時間がかかる可能性があります。その分、皆さんで確保している時間が無駄になってしまうかもしれません。

# 5. コストの確認

Resource Group の単位でコストの確認が出来ます。
以下は、私が普段使っている Data Warehouse 用のResource Group の例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/c10ddf81-35d5-aae8-126f-b9c668bd9223.png)

画面右上のフィルタリング項目などを変更する事で、何がどれくらいのコストになっているのかを確認できます。私は**日単位**の積み上げを良く見ています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/7a483145-7c44-4660-46b7-55528acf9c5b.png)

数日間のハッカソンの場合、これを毎日見るのは辛いと思います。
Azure では、特定金額を超えたらメールなどで通知してくれる[予算]機能があります。勿論、Resource Group にも設定できます。これで、各チームが毎日どれくらい使っているのかがわかりますし、特定金額を超えたらメールなどで通知を受け取る機能も設定できます。

チュートリアル:Azure の予算を作成して管理する:
https://docs.microsoft.com/ja-jp/azure/cost-management-billing/costs/tutorial-acm-create-budgets

# 6. ハッカソン終了後に。Resource Group の削除

これは、本当に簡単です😊

- 当該 Resource Group を選択し、[概要]から[リソースグループの削除]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/2c8adb84-aa6e-e665-3f53-464fd1364b52.png)

- 削除の確認画面が、画面右側に表示されます。リソースグループ名を入力して、画面下の[削除]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/6d542876-76ce-50b7-7d5c-cd84539432a4.png)

これで、Resource Group の中にある全てが綺麗さっぱり削除されます。

- Resource Group で何が残っているかは、Azure の Portal の[リソースグループ]から以下の様に一覧で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/59e95b31-c264-e651-6df4-406bc5ccec40.png)

# 7. 参加者が皆さんの会社・組織のAzure Subscription に入るために

参加者のアカウントが所属している会社・組織はバラバラです。皆さんが作成した Resource Group のある会社・組織には**外部ユーザー**として登録されています。それには、Azure の Portal にログイン後、**ディレクトリー**を切り替える必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/c7deded6-08a5-b306-4995-5efe58db0528.png)

この様な画面が表示されますので、運営側のディレクトリーを選択してもらってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/b921b834-5bb5-dec3-33c8-5bc601b00330.png)

# まとめ

Could の良いところは、使った分だけの支払いです。こうしたイベント的な短期間の利用との相性は本当に良いです。Azure の Resource Group の機能を活用する事で、それは更に簡便になります。Resource Groupは Azure Policy を適用する事で会社・組織としてのガバナンスを効かせることも出来ます。

100名規模で2時間のハンズオンをやったとして。1時間10円程度のコストだったら、

2 (時間) x 100 (名) x 10 (1時間あたりのコスト) = 2,000 円

という予算感です。
勿論、1円でも費用には変わりありませんが、殆どの企業・組織で大した問題にならないと思います。それよりは、実際に**体験**して短期間で Azure を理解できた方が価値は高いのではないでしょうか? 学生時代にCloudを触る事の出来なかった方。そして、毎週の様に機能が増えるため、マニュアル整備よりは、**常に**触る事の出来る環境を提供できる事の強み。Azureを使うために申請が必要になる会社・組織が多いですが、その申請に必要な時間や利用者の心理的なストレスを考えたいものです。

ちなみに、私の場合は**会社から Subscription が割り当てられています**ので、Azureのほとんどの事が出来ます。

是非この環境作成を身に着けていただき、気軽に Azure を楽しんでください😎