【AZ-305】Azure Solutions Architect Expertになるための勉強メモ

こんにちは。タイトル通りですが、先日(2022/07/15)、AZ-305試験: Microsoft Azure Infrastructure Solutions の設計に合格してきたので、そのときの勉強メモを公開します。
試験に受かるために必要と思う項目やサービスについてメモを抜粋しているので、参考になれば幸いです。
(浅学のため、間違っていたらすいません。。。)

## 目次(試験のスコープ)
公式サイト(https://docs.microsoft.com/ja-jp/certifications/exams/az-305 )に書かれている通り、試験のスコープ、出題割合は以下の通りです。

- ID、ガバナンス、および監視ソリューションを設計する (25-30%)
    - Azure ADやそれ以外の認証の仕組みを使ったアクセス制限の方法
    - BlueprintやAzureポリシーを使用したガバナンスやポリシーの決定
    - Azure Log AnalyticsやAzure Monitorなどを使用した監視の方法
- データ ストレージ ソリューションを設計する (25-30%)
    - Standard v1/v2/BLOB、Premium等のストレージアカウントの種類や作成
    - Azure Storageの冗長性(LRS、ZRS、GRS、GZRSなど)
    - Azure SQL Database、Azure SQL Managed Instance、Cosmos DB等のデータベースの比較
- ビジネス継続性ソリューションを設計する (10-15%)
    - Azure Front Door、Azure Traffic Managerなどを使用したリージョンまたはゾーン障害時の設計(Azure Load BalancerやAzure Application Gatewayなどとの差も理解要)
    - Azure BackupやSite Recoveryを使用したビジネス継続性
    - 仮想マシンの可用性セット、ペアリージョンなどの概念(忘れていたら要復習)
- インフラストラクチャ ソリューションを設計する (25-30%)
    - Azure Batch、Azure App Service、Azure FunctionなどのPaaSを含めたサービス
    - Azure Kubernetes、Azure Container Instancesなどのコンテナサービス
    - Azure Queue Storage、Azure Service Bus、Azure Event Hubsなどを使用したメッセージングサービス
    - Azure AD Application Proxy、VPN Gateway、ExpressRouteを使用したAzure内での接続や、オンプレとの接続
    - Azure Migrate、Migrate Assistant、File Sync、Azure Import/Export、Azure Data Boxなどの移行ツール全般

いやー、自分で書いてみてもうんざりしてきますね！
けっきょくのところ、 **浅く(？)広くAzureのサービスや概念について知らないといけない** ってことです。アーキテクトとして認定されるための試験なので、単にサービスの概念や仕組みを知っているだけでなく **こういう目的を達成するためにこのサービスとこのサービスを組み合わせる、といったベストプラクティス的な知識を知っている** ことを問う問題も多いと感じました。

以下がもっと細かい勉強メモです。(認識誤りがあればお手数ですがご指摘ください)
とはいえ、人の勉強メモなんて読んでもだいたい面白くないことが多いので、つまらないと感じられたらさっさと最後までスクロールして、受験時の感想だけ読んでください。

## ID、ガバナンス、および監視ソリューションを設計する
Azure AD Privileged Identity Management(PIM)
- リソースに対するアクセス権限について、必要な時に特別権限を付与できる機能。使用のためにはにMFA(2要素認証)設定が必要。必要な時に特定のユーザーに対してJust In Timeアクセス権限などを付与できる。この機能を使用するにはAzure AD Premium P2ライセンスが必要。

Conditional Access Policies
- ユーザーがアクセスする際、条件を設定する機能。MFAの使用必須、IPアドレス制限、デバイス制限などを指定できる。

Blueprint
- Azure Resource Managerのように、Azureリソースを定義し、デプロイできる機能。
- ARMとの違いは、Blueprintはデプロイ済みリソースへの接続を維持できること。つまり、Blueprintを使ってどのリソースがデプロイされたかという結びつきが維持されること。ARMではデプロイ後、その関係はわからなくなる。

Azureポリシー
- 組織のコンプライアンス強制などを行う。具体的には、リソースのデプロイや変更の際、定めたポリシーによってデプロイや変更を拒否したり、ポリシーに沿っていないことを警告できる。Blueprintを定義する要素の一つとしても使われる。

Azure Log Analytics
- リソース利用状況やパフォーマンスデータ収集をするためのクエリを実行できる。クエリの投げ先はAzure Monitorのログ。

Azure Application Insight
- Application Mapという機能で、コンポーネント(リソース)間の関係を可視化したり、パフォーマンス低下や障害発生を監視できる。


## データ ストレージ ソリューションを設計する
ストレージアカウントの種類や作成
 - Standard：
    - Standard v1：古いアカウントのタイプ。使わなくてよい。
    - Standard v2：汎用型。通常はこれを使用すればよい。
    - Standard blob：古いアカウントのタイプ。使わなくてよい。
 - Premium：
    - Premium Block blobs：Block blobsストレージ用のストレージアカウント。
    - Premium File shares：Azure Files用のストレージアカウント。
    - Premium Page blobs：Page blobsストレージ用のストレージアカウント。

Standanrdのアカウントで使用されるディスクはHDD。PremiumにするとSSDになる。

Azure Storageの冗長性
 - LRS(Local Redundant Storage)：どのストレージアカウントでも利用可能。
 - ZRS(Zone Redundant Storage)：Premium Page blobs以外のどのストレージアカウントでも利用可能。
 - GRS(Geo Redundant Storage)/RA-GRS(Read Access-Geo Redundant Storage)
 - GZRS(Geo-Zone Redundant Storage)/RA-GRS(Read Access-Geo-Zone Redundant Storage)

LRS、ZRS、GRSについてはわざわざ書かなくても理解しているはず。どのサービスでどの冗長性を選択できるか理解しておくこと。

参考：
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-account-overview

BlobストレージにおけるTierに関する概念
- Hot：頻繁にアクセスされるデータの保管先。
- Cold：あまりアクセスされないが、即アクセス可能である必要があるデータの保管先。最低30日間はデータ保存する必要がある。
- Archive：あまりアクセスされず、即アクセスできなくてもよい(一度HotまたはColdにリカバリーさせる必要がある)データの保管先。最低180日間はデータ保存する必要がある。

参考： 
https://docs.microsoft.com/ja-jp/azure/storage/blobs/access-tiers-overview

Azure SQL Database
- マネージドSQL Server利用サービス。Single DatabaseとElastic poolの二種類のデプロイモデルがある。Elastic  poolでは、複数のデータベースでリソースを共有する形でデプロイをすることができ、コストを削減できる。

Azure SQL Managed Instance
- SQL Serverが稼働するインスタンス(VM)の利用サービス。Azure SQL Databaseは完全なPaaSだが、それよりややIaaSに近い。こちらもElastic poolのデプロイモデルを利用可能。

参考：
https://docs.microsoft.com/ja-jp/azure/azure-sql/database/features-comparison?view=azuresql

Cosmos DB
- (たぶん)Azureのイチオシのサービス。
- グローバルで分散されているNoSQLベータベース。高速なレスポンス、オートスケーリングなどの便利な機能を兼ね揃えている。KVS、ドキュメント、グラフ型などがある。大量データ処理に向いている。

## ビジネス継続性ソリューションを設計する
Azure Load Balancer
- 最もベーシックなロードバランサー。L4レイヤー。パブリックロードバランサーと内部ロードバランサーの二種類がある。L4レイヤーであり、他のL7レイヤーのロードバランサーサービスより低レイヤー。
- リージョン内で完結しており、リージョンを跨いだ振り分けはできない。

Azure Application Gateway
- アプリケーションのロードバランサー。L7レイヤー。URIパスによる振り分けなどが可能。
- リージョン内で完結しており、リージョンを跨いだ振り分けはできない。

Azure Front Door
- CDN(Content Delivery Network)。ロードバランサー機能とWAF機能が統合されており、振り分け先を異なるリージョンのVMやオンプレにするなどのグローバルレベルの負荷分散(L7レベル)を行った上で、WAFによってセキュリティを向上させることができる。
- グローバルレベルの機能であり、リージョンを跨ぐことが可能。

Azure Traffic Manager
- DNSベースのロードバランサー。L4レイヤー。DNSベースであるため、FQDNでなくドメインレベルでの振り分けしかできない。
- グローバルレベルの機能であり、リージョンを跨ぐことが可能。

参考：
https://docs.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/load-balancing-overview


Azure Backup
- マネージドバックアップソリューション。
- VMの丸ごとバックアップ以外に、SQL Serverファイル単位のバックアップなども可能。
- オンプレ上のデータもバックアップ可能。
- 利用の際はBackup Agentの導入が必要。

Site Recovery
- DRサービス。あるリージョンが被災した際、別リージョンのバックアップを使用してビジネスを継続利用することができる。
- オンプレ上のVMwareのVMをレプリケーションすることもできる。 (参考：https://docs.microsoft.com/ja-jp/azure/site-recovery/vmware-azure-tutorial)


## インフラストラクチャ ソリューションを設計する

Azure Batch
- ハイパフォーマンスコンピューティングのバッチ処理をAzure上で実行するソリューション。
- VMプールに対してジョブを実行し、並列コンピューティングを実現する。

Azure App Service
- Webアプリケーションを構築・デプロイできるマネージドプラットフォーム。
- 一時的な内部ディスクも利用可能。

Azure Function
- Azure上でさまざまな言語(C#.Powershell,JavaScript,pythonなどなど)のコードを実行できるPaaS.
- サーバーレス。従量課金プランであればサービス時間のみの課金であり安価。

Azure Kubernetes
- Azureにおけるマネージドkubernetes(コンテナオーケストレーションツール)サービス。

Azure Container Instances
- Kubernetesと違い、コンテナ単体を提供するサービス。
- オートスケーリング機能はない。

Azure Event Grid
- イベンドドリブンアーキテクチャのメッセージング(厳密にはメッセージでなく、データを保持しない単なる"イベント"の配信)サービス。低コスト。
- Publish-Subscribe型のメッセージングモデル。
  - メッセージの送信側をPublisher、受信側をSubscriberといい、トピックにイベントを送付すると、トピックに登録されたSubscriberにイベントが送信される仕組み。つまりPublisherとSubscriberは互いを意識しないため、動的に変更することが可能。

Azure Event Hubs
- ビッグデータ処理のためのメッセージング(こちらも厳密にはメッセージでなくイベント配信)サービス。
- 1 秒間に何百万ものイベントを受信して処理することができ、ストリーミングデータのキャプチャなどに使用する。

Azure Service Bus
- メッセージキューやトピックの機能を備えたメッセージングサービス。
- ポーリングが必要な信頼性の高い非同期メッセージ配信が可能。

Azure Queue Storage
- 大容量のメッセージキューを保存できるメッセージングサービス。HTTP/HTTPSによって呼び出しできる。
- 非同期的に作業ログをメッセージとしてやりとりする時などに利用する。

参考：メッセージングサービスの比較
https://docs.microsoft.com/ja-jp/azure/event-grid/compare-messaging-services

Azure AD Application Proxy
- オンプレWebアプリケーションへの安全なアクセスを提供するプロキシ機能。オンプレ環境にアクセスするためにAzure ADの認証機能を使用させることができる。シングルサインオンにも対応。
- Proxyコネクタと呼ばれるエージェントをオンプレWindows Serverにインストールする必要がある。冗長性のために複数Proxyコネクタを作成することもできる。

VPN Gateway
- VPN接続をするためのサービス。
- Site-to-Site VPN(顧客のオンプレ拠点に存在するVPNデバイスからのVPN)、Site-to-Point VPN(個々のクライアント端末からのVPN)、VNET間通信の3パターンが可能。
- Site-to-Site VPNとExpressRoute接続を共存させ、障害時のフェイルオーバー先として使用することもできる。

ExpressRoute
- Azureとオンプレを接続すると言ったらまずコレ。VPNでなく専用線。
- BGPを利用しており、Azure側のEdgeルーターは冗長化されている。帯域ももちろん選択可能。
- Azure側では、GatewayサブネットとGatewayを作成する必要がある。

Azure Migrate
Azureへの移行を支援するツール群。
- Data Migration Assistant：Azure SQL DatabaseやAzure SQL Managed Instanceの移行に関する評価を行うツール。
- Azure Database Migration Service：データベースのフルマネージドオンラインデータ移行ソリューション。ダウンタイムゼロが特徴。
- Azure Data Box：Gatewayと呼ばれるオンプレからデータをAzureに送付するための仮想デバイスや、Edgeと呼ばれるデータ分析や処理を行うための物理NW機器がある。

Azure Data Factory
- データ変換やCI/CDパイプラインを作るソリューション。それらアクティビティを実行したり、監視したりできる。

Azure File Sync
- Azure Filesのファイルをキャッシュとして提供することができる。またオンプレWindows Server上のファイルを共有し、Azure上のVMなどに共有すルコともできる。
- 導入の際はAgent導入が必要。

Azure Import/Export
- Azureのデータセンターに物理ストレージを接続させ、オンプレミス環境と大量データのImportまたはExportを行うためのサービス。物理ストレージとやりとりするためには、Azure上のBlob StorageまたはAzure Files経由でのやりとりが必要。(ただしAzure Filesはインポートのみ)ImportまたはExportジョブの実行を行うことになる。



## 受験の感想
最後になりますが、以下が私が感じた受験の感想です。(つーか、結局ほとんどの人がここしか読まないような・・・・・・)

- 正直、難しかったです。出題範囲が広いので、知らない、使ったことがないサービスが出題範囲にどうしても含まれます。真面目に勉強するのであれば公式ラーニングパス(https://docs.microsoft.com/ja-jp/certifications/exams/az-305 )を勉強すべきですが、非常に時間がかかります・・・・・・。
- ESI(Enterprise Skills Initiative)にて受験できる模擬試験はあくまで雰囲気やレベルを理解するためのものでした。同じ問題はほとんど出題されないと考えてよさそうです。(全くゼロではないような気もしますが)
- 一方、いろいろなところ(udemyとか)に転がっているdump問題集を丸暗記すればそれだけで合格できてしまうのでは・・・？とも思いました(とは言え、問題は一定の割合で入れ替えしている様子でしたが)
- 全問題を採点しているのではなく、採点されない問題がいくつかあるようなので、実感と採点結果が乖離しているようにも感じるかもしれません。(私は落ちたかもと思っていましたが結構余裕で合格してました)

以上です。