Azureを初めてさらった時に、リソースグループとという概念に惑わされている方は少なくないでしょうか。
リソースグループはAzureの最も基礎的なものの一つで、どのリソースでも指定の必要なものです。
本記事では、リソースグループに関して、少し分かりやすく、詳しく説明していきたいと思います。
Azure リソースグループとは
まず公式のドキュメント からの引用です。
リソース グループは、Azure でデプロイされているリソース用の論理コンテナーです。 仮想マシン、Application Gateway、Cosmos DB インスタンスなど、Azure サブスクリプションで作成するあらゆるものがリソースです。
「論理コンテナー」という言い方をされていますが、分かりやすくいうと、Azureのリソースを格納するための”フォルダー”みたいなものです。
リソースグループの特徴
リソースグループは以下の特徴があります。
- すべてのAzureリソースは必ずリソースグループに属ス必要がある
- リソースグループとAzureリソースは一対多の関係
- 一つのリソースグループは複数のリソースを格納できるが、一つのリソースは複数のリソースグループに所属できない
- リソースグループをリソースグループの入れ子にすることはできない
- 多くのAzureリソースはリソースグループ間の移動が可能
- 一部不可のリソースもある
- リソースグループ単位で権限(RBACの権限付与範囲)、課金の管理(レポート)が可能
- リソースグループ削除することで、配下のリソースもすべて削除される(ライフサイクルの管理)
- リソースグループで、過去リソースグループのデプロイ履歴を確認可能
- 「リソースグループ」>「概要」>「デプロイ」のリンクで確認可能
リソースグループはリソースを格納するものなので、基本リソースを分けるために使用されます。(テストでは、リソースを一括削除するためにも役に立ちます。)
リソースグループの命名規則
リソースグループだけの話ではないですが、リソースを作成する際に、できれば意味のある名前にしておくと管理、運用がしやすくなります。
一例としては、以下のように
<project名>-<環境名>-<用途名>-<リソースの種類>-rg<番号>
リソースグループは組織やシステムによって、様々な分け方が考えられます。
ここで個人が考えているいくつの例をサンプルとして挙げて置きます。
※あくまで参考なので、読んで頂いている方が納得できるように分けて頂ければと思います。
リソースの種類で分ける
- ネットワーク系リソース
- Azure Virtual Network
- Network Security Group
- など...
- 仮想マシン周りのリソース
- Virtual Machine
- Nic
- ディスク
- パブリックIP
- など...
- データベースサービス
- 各種データベースサービス
リソースグループ名もリソースの種類に合わせて、以下のようにする
- network-rg01
- vm-rg01
- db-rg01
環境で分ける
リソースが少ないシステムでしたら、開発の環境でごとにリソースグループで分けることもあります。
リソースグループ名も環境に合わせて、以下のようにする
- 開発環境:dev-rg
- ステージング環境:stg-rg
- 本番環境:prod-rg
そのた、複数子システムで構成したシステムでは、子システムごとに分ける方法もあります。
個人的におすすめの分け方
個人的には、簡単なシステムでしたら、上記の分け方でもいいですが、複雑なシステムの場合、インフラチームで検討して決めたほうがいいかと思います。
ここで、あくまで参考となります。複雑なシステムにおいて、以下のような分け方もあります。
分け方:環境、システム、リソース種類ごとに、リソースグループの命名規則で分ける
例として、以下のようになります。
この例では、開発環境、本番環境が存在します。
環境それぞれ子システムAとBがあり、共通なリソースも存在します。
- 開発環境
- dev-core-vnet-rg01
- dev-Asys-vm-rg01
- dev-Asys-db-rg01
- dev-Bsys-vm-rg01
- dev-Bsys-db-rg01
- 本番環境
- prod-core-vnet-rg01
- prod-Asys-vm-rg01
- prod-Asys-db-rg01
- prod-Bsys-vm-rg01
- prod-Bsys-db-rg01
また、環境(開発/本番)レベルをサブスクリプションで分ける考え方もありますが、下記の内容を確認した上で採用するかどうかを検討していただければと思います。
- サブスクリプション分けのメリット
- 完全に分離した環境のため、権限付与や操作ミスで、他環境への影響が最低限にできる
- 環境ごとに権限の付与が簡単になる
- サブスクリプション分けのデメリット
- サブスクリプションの切り替えが手間かかる
- 複数のサブスクリプションの作成が必要
- 環境間にサービスの連携がある場合、サブスクリプションを跨いでもいいかの確認が必要い(保守監視とか)
※ サブスクリプションを分けるとしても、操作ミス(サブスクリプションの確認漏れ)を避けるために、リソースグループにも環境名を入れたほうが無難かと思います。
タブでのリソース分類
Azureのリソースはタグをつけることも可能です。(一部のリソースはタグを利用できない、例えばクラシックのリソース)
タグはリソースの必須属性ではないですが、タグを付けることでリソースをタグでフィルターすることが可能になります。
タグは<key>:<value>
形式で、日本語も使用可能です。リソース作成時に付与できますが、リソース作成後で一括付与することも可能です。
タグをつけて、リソース一覧でタグ列を表示させてると以下のようになります。
※ここも公式ドキュメントの画像をお借りします(笑)
これもこれで中々使いやすい機能だと思いますね。
一点だけ注意が必要です。タグ機能はほとんどのリソースでは使えますが、クラシックのリソースや一部未対応のリソースには使えないです。
サポート状況
【2021/03/28 追記】
※ タグの付与は継承しないので、タグをリソースグループに付与しても、その配下にあるリソースに、そのタグは付与されません。
リソースのロック
【2021/03/28 追記】
Azure には、リソース保護する機能として、「リソース ロック」があります。
機能名の通り、リソースに対する操作をロックする機能です。
リソース ロックを使用することで、ロックが掛かったリソースに対して、いくら権限を持っていても、ロックを解除しない限り、ロックされた操作はできません。
リソース ロックを使用することで、以下のロックが可能になります。
- リソースを削除不可にする
- リソースを読み取り専用にする
また、設定の範囲について、以下での設定が可能です。
- サブスクリプション全体
- リソースリソース範囲
- リソースごと
※上位が設定されたら、下位に継承されます。
注意点:読み取り専用にした場合、ストレージアカウントのアクセスキー表示ができなくなります。(キー参照はPOSTリクエストでの操作です)
ロックの設定
ロックの設定は簡単です。
サブスクリプション、リソースグループ、若しくは個別のリソースを選択し、左メニューの「設定」セクションで「ロック」を選択して、設定します。
公式資料の設定画面ををお借りします。
※ 現時点、サブスクリプションの設定画面では、「ロック」ではなく「リソースのロック」と表示されています。
最後に
今回はAzureリソースグループについてご紹介しました。ついでにタグというリソース分けの機能をご紹介しました。
これらの機能を活用することで、Azureのリソースがきれいに整理でき、管理がし安くなります。特に大きなシステムや複数人同時に使用する環境では、特に役に立つと思います。
ここまで読んでいただいて、お疲れ様でした。
参考サイト
【2021/03/28 追記】
コメント