AZ-305になぜ割とラクに受かったのか考えた

# はじめに
2023年11月にMicrosoftが提供するクラウド「Azure」の資格の一つである「AZ-305（Microsoft Azure Infrastructure Solutions）」を取得しました。
当時、そんなに苦労せずに取得できてしまったと記憶しており、そこでのポイントを書いていきたいと思います。
ちなみに、Azureは2022年7月くらいから趣味で使い始め、1年ちょっと触っています。

# 試験概要
### 難易度
Azureの資格には、Fundamentals、Associate、Expertという3つのレベルがあり、本試験は上級のExpertにあたります。
なお、AZ-305を受けるためにはAssociateのAZ-104（Microsoft Azure Administrator）を所持している必要があります。
### 構成
試験時間は150分、問題数は55～60問で固定ではないようです。
### ボーダー
700 / 1000点で、試験終了後すぐに合否がわかります。
私は834点でした。

## ポイントその1　そもそもAzureめっちゃ触ってた
当時ほぼ毎日Azure VMやAzure Functions、Cosmos DB、AKS、ACAなどのサービスを趣味で使っていました。
なので、自分が触っていて慣れている部分は試験問題で出てもラクに解けましたし、知らないことがあってもすぐに覚えられました。

## ポイントその2 知らないサービスもどんどん触ってみた
Service busとEvent Gridを連携させてみたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/2166c60c-9d78-c2f8-3c9f-08712cd06156.png)

参考

https://tech-lab.sios.jp/archives/22210

Logic AppsでWebサイトの死活監視してみたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/735d2008-b919-43d0-ddf6-c72fc776951d.png)
参考

https://tech-blog.cloud-config.jp/2020-05-27-logicapps-websitemonitoring/

ストレージアカウントのSASの設定をいじってみたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/a1d9380e-1271-6d3b-2a8b-b5d77c1d1219.png)

Blobストレージのaccess policyから訴訟ホールドの設定をしてみたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475719/147f909c-aab5-25b9-7d05-3b816c4f0a4a.png)

などなど普段使わないサービスを色々といじってみました。

他参考

https://qiita.com/Tsubasa-Koyama/items/f24f91dab19578d48b3c

https://qiita.com/tetsuya-ooooo/items/3cd4d3d4c7fc1d180cda#ハンズオン

https://zenn.dev/microsoft/articles/5a307963169240

https://qiita.com/YoshiakiOi/items/34e97a0d54d5c068a835#cyclecloudを使ってみる

## ポイントその3 Udemyの問題集優秀すぎる
[AZ-104](https://www.udemy.com/course/30az-104-microsoft-azure-administrator240)、[SAA-C03](https://www.udemy.com/course/aws-knan/)を取得したときに気付いたのですが、Udemyの模擬問題集の効果やばいです。
有料ですが、一発合格したいなら絶対買ったほうがいいと思います。

https://www.udemy.com/course/microsoft-azure-az305-exam/

この問題集を全て100%がとれるようになるまで移動の合間などに少しずつやりました。
ちなみに私は初回から60%以上取れたので、やっぱり普段Azure触ってるおかげなんですかね。

## ポイントその4 学習メモを作った
Udemyなどで勉強したポイントをメモにまとめて試験前に反復して暗記しました。
かなり長いですが、以下に公開します！（2023年11月時点の情報なのでご注意ください）


azure automation

- 運用の自動化。システムの定期的な監視、パッチ管理やリソースの自動デプロイなどに使用する。powershellやpythonで書かれたrunbookを使用して繰り返し処理や複雑なプロセスを自動化できる。

azure batch

- 大規模なデータ分析やレンダリング処理、複雑な計算処理に使用する。

azure functions

- HTTPリクエストに応答して動作するAPI、ファイルのアップロード時のデータ処理、スケジュールされたタスクに使用する。

azure monitor

- 以下のリソースを統合し包括的な監視ソリューションを提供する。

application insights

- アプリケーションのパフォーマンス監視

log analytics

- ログデータの集約、分析、検索

## Compute Service

- VM/VMSS：フルコントロール。IaaSという意味。
- Azure Batch：Hy performance computing.
- App Service：フルマネージド。
- Azure functions：イベントドリブン
- Azure Service Fabric：ARMがAzure導入される前のAzureからWebアプリケーションを移行したいときの移行先として使われる。特殊。
- Azure Container Instance：検証用。

### Size

- 小文字のrが入っているサイズはRDMA対応。RDMAはとても高速なネットワークを使用可能
- infiniBard（RDMA）とシングルルートI/O Vのどちらを選ぶか問題が出る。コスト無視していニュアンスであれば前者を選ぶ。
- シングルルートI/O V（SR-IOV）とは高速ネットワークと同じ意味。20、30%くらいパフォーマンスが増加する。

### VMSS

- 運用を楽にしたい→VMSSを選ぶ。

### Azure Batch

- 金融、IoTデータを高速に処理する、3D画像のレンダリング→Azure Batchを選ぶ。
- プール割り当てモード ユーザサブスクリプション：自前のVMをAzure Batchに登録する。
- プール割り当てモード バッチサービス：Azure Batch側でVMを用意する。リザーブドインスタンス使ってるならこっち。
- 低優先度のVM：スポットVMの前身の仕組み。ユーザサブスクリプションモードでは選べない。

### Azure CycleCloud

- PBS Pro、Slurmなど一般的に利用されるスケジューラが組み込まれたクラスターをオンプレから移行したい場合に使用する

## コンテナサービス

- Azure Container Registry：private docker hub
- Azure pipelines build pipeline：githubにコードやDockerfileがpushされたことをキーとしてACRに自動的にアップロードする仕組み。
- Azure pipelines release pipeline：ACRからAKSなどのContainer Serviceに自動的にデプロイする仕組み。Azure DevOps.
- App service for containers：80,443ポートしかサポートしていない。App Service Planベースの自動スケール
- Azure Container Instance：80,443以外のポートをサポートしている。ただし、スケールアウトできない。
- Azure Kubernetes Service：AKSからACIへのバーストが可能。

### App Service

- SKU：Freeからisolatedまである。VNET統合、プライベートエンドポイントなどの言葉の意味とどのSKUで何がサポートされているかはよく出るので確認する。これがApp Service Planのことだと思われる。
- デプロイメントスロット：ブルーグリーンデプロイメントが可能になる。また、開発時にProduction、Master、Stage、Devなどbranch（枝葉）ごとにスロットを作り、それぞれのbranchのコードをそれぞれのスロットのAppServiceにデプロイして、アジャイルのプロセスを回す。一連の流れをGitflowと呼ぶ。

### Azure functions App

- C#やPowershellで関数が記述可能。イベントドリブン。
- トリガーバインド（何によって関数が起動するのか）の種類を知っていた方が良い。HTTP、Timer、CosmosDB、Event hubsなど
- ホスティングプラン　サーバレス：最大10分でタイムアウトする。
- ホスティングプラン　Premium：タイムアウトは既定で30分だが無制限に設定できる。VNet統合したいときに使う。
- ホスティングプラン　専用プラン：
- Authlevelの種類

### Event Grid

システムイベントを処理する。ほとんどのAzureサービスで（Azure AD以外）イベントサブスクリプションを作成可能で、それはEvent Gridが裏で動いている。

### Event Hubs

膨大な情報（IoT、Twitterのデータなど）を処理するのに使う。

### Service Bus

トランザクション処理をしたいときに使う。バックエンドにAPIがいるときにタイムアウトされると困るので、非同期で処理したいのでService Bus Queueを使ったりする

### Logic Apps

Functions APPと似ていると思うかもしれないが、ノンコーディングがポイント。Power Appsより前からある。

- Logic Appsの接続方式
    - 統合サービス環境による接続:VNetの構成がある場合はこちらを選ぶ。
    - オンプレミスデータソースへの接続：VNetの構成がない場合。接続ゲートウェイリソースというゲートウェイで接続する。

### API Management

ポリシーを構成することで色々できる。レート制限、JWT、応答ヘッダーの修正（API要求の中に隠したいパラメータがある場合にそれを隠す）などがよくでる。

- VNetサポートはPremiumプランだけ

## Network

- プライベートエンドポイントとサービスエンドポイントの違いが出る


### Azure Load Balancer

- レイヤ4の負荷分散

### Azure Application Gateway

- レイヤ7
- 証明書をアップロードできる


### Azure Frontdoor

- WAFが利用できる

### Trafiic Manager

- WAFは利用できない

### Express Route

- パブリックアクセスは旧バージョンなので選んではいけない

### Azure virtual WAN

- planがBasicとStandardがあり、StandardでないとExpress routeがサポートされない。

## identity,Governance

### Azure AD（Microsoft Entra ID）

- パスワードハッシュ同期：オンプレのADDSのパスワードをAzure ADにコピーしてくるようなサービス。パススルー認証との違いが良く出る。
- パススルー認証
- ゲストユーザアカウント：違うAzure ADテナントからユーザを招待するとこう呼ばれる。MFAを適用可能。まとめて複数ユーザに対してMFAを適用したいときはPowershellスクリプトを利用するか、
- オンプレにあるADDSをAzureに拡張する問題がでる。ExpressRouteが必要なのと、Azure上でADDSを冗長化させて構築する必要がある。
- もっと良い方法として、Azure AD Domain Serviceがある。Express RouteがなくてもオンプレのADをAzureに拡張できる。管理負荷が少ないフルマネージドサービス。
- アプリケーションプロキシ：アプリケーションのプロキシとしてAzure ADを使用可能である。portalのエンタープライズアプリケーションからは既存のSaaSなどを登録可能。アプリの登録からは自分で作ったアプリを登録可能。
- Free（無料）のAzure ADのセキュリティ構成として、セキュリティの既定値群という設定値がある。例えば、管理者に多要素認証を要求する、レガシ認証プロトコル（多要素認証がサポートされていない場合に使用する）をブロックする、などの設定が自動的に有効化されている。また、スマートロックアウト設定（アカウントのロックを1分後に解除するなど）を有効化する。
- シグナル（ユーザ、ロケーション、デバイス、アプリケーション）を設定して、特定のシグナルの条件でアクセスを拒否することができる。
- ID保護ポリシー
    - ユーザリスクポリシー：パスワードが漏洩している可能性のあるユーザからのアクセスを拒否する
    - サインインリスクポリシー：普段会社からログインしているユーザが海外からログインしたときなど普段と違うときにアクセスを拒否する

### Azure AD認証

- SQL Server認証だとDBへの接続文字列がportal上平文で見えてしまう（App Serviceであれば「構成」から確認可能）。そんな時はマネージドIDを使用してAzure AD認証することで「ID」から設定可能。
- 試験によく出る組み合わせは以下。
    - アクセス元：App service,VM/VMSS,function
    - アクセス左記：PaaS DB、Key Vault、CosmosDB
- 認証においてMDDS（metadata service）が裏で動いていることを理解しておくこと。
- システム割り当てマネージドIDは複数のリソース間で共有できない。ユーザ割り当てマネージドIDは共有できる。後者は複数のリソースで1つのkeyになるので認証が一回で済む。

### Key Valut

- キー：秘密鍵を置く場所、シークレットは接続文字列を置く場所。
- アクセスポリシーの意味と種類を覚えておくこと。
- Key Valutは重要なのでペアリージョンで冗長化されている。フェイルオーバ中は読み取り専用になる。
- カスタマーマネージドキーについて、StorageAccountとKeyは同一リージョンである必要がある。unlap key（=キーの折り返しを解除）操作によってキーの使用が可能になる。

- Azureのロールにはサブスクリプション、リソースグループ、リソースの世界の”リソースロール”と、Azure ADの世界（管理グループ）の”ディレクトリロール”の2種類ある。
- リソースロールの最大権限は”サービス管理者”（owner）。
- セキュリティプリンシパルの種類
    - ユーザ：人に付与する
    - グループ:ユーザ、サービスプリンシパル、マネージドIDをまとめる。
    - サービスプリンシパル：アプリに付与する
    - マネージドID：アプリに付与できるID。サービスプリンシパルより最近できた。

### Azure Policy

管理グループの単位（サブスクリプションのうえ）で、特定のSKUのみしか許可しないなどの制限が可能。

### Azure Blueprints

リソースグループ、ロール、ポリシー、ARMテンプレートを作成する際にBlueprintの画面で一括で作成できる。これを使用しないとアクティブな結びつきが失われる。

Blueprintsの定義は管理グループに保存されるが、適用するのはサブスクリプションである。

### Azure Monitor

- VMのOSやOS上のアプリケーション、Azureサブスクリプション全体やApp Service（portalのApplication Insightsから設定可能）に対して監視が可能。
- portalの「診断設定」からLog Analyticsワークスペースを作成して監視可能。
- VMに組み込む必要のあるエージェント
    - Log Analytics Agent：
    - Azure Monitor Agent：preview
- Azure Network Watcher
    - IPフロー検証：オンプレミスを含めた構成ではこちらを選ぶ。
    - トラフィック分析
- Azure Load Balancerのメトリックの意味を理解しておく。

### コストの最適化

計画段階でつかうもの

- 料金計算ツール

https://azure.microsoft.com/ja-jp/pricing/calculator

- 総保有コスト（TCO）計算ツール

https://azure.microsoft.com/ja-jp/pricing/tco/calculator/

運用時に使うもの

- Azure Cost management：アラート起動
- Azure Advisor

コスト削減

- Reserved Instance
- ストレージライフサイクルポリシー
- スポットインスタンスなど

## データストレージ設計

### ストレージアカウント

- blob：RESTでアクセスするとき（アプリが使用するとき）
- ファイル：SMBでアクセスすっるとき（人が使用するとき）
- テーブル：NoSQL
- キュー
- すべてのストレージに対応しているのはStandardv2（汎用v2）だがHDDなので高速でない。v1は旧バージョン。アーカイブにすると取り出しに15時間かかる。
- PremiumはSSD。
- セキュリティ
    - 通常はアクセスキーは使用しない。付与される権限が強いから。
    - Shared Access Signatureをよく使う。
    - アクセスポリシー：不変ポリシーをコンテナ単位にかけられる。”時間ベースの保持”は有効期限付きで権限付与したいとき。逆にそうでないときは”訴訟ホールド”を選ぶ。

### Azure Data Lake Storage

ビッグデータの保管先を使用したいときに使う


### Azure Databricks Data Science & Engineering

- 資格情報パススルー：DatabricksのPremiumプラン。

### SQL Serverの移行先

- IaaS（Windows/Linux対応）
    - キャッシュの有効化。ログファイルはキャッシュを有効化するものではない。
- PaaS：管理が楽になる。
    - Azure SQL Managed Instance
    - Azure SQL Database (single Database)
    - Azure SQL Databas (Elastic database pool)
    - synapse analytics：データウェアハウス
- DTUベース：DTUとはDBの処理能力のこと。データベースエンジニアがいないときなどに使用する
- vCoreベース：coreやメモリサイズでプランを選べる。vCoreの”汎用目的”プランのみサーバーレスを選べる。Reserved Instanceが選べる。データベースエンジニアがいるときにオンプレのときと同じサイズでプランを選びたいときなどに使用する。
- セキュリティの構成についてすべての機能を説明できるように理解しておく。エラスティックデータベースプールは複数のDBの課金を束ねることができる。

### NoSQL

- json形式、表形式（リレーショナルでない。キーバリューストア）、Graph（ほとんどAZ-305ではでない。Gremlinなど）
- Cosmos DBでもRDSを選べる。PostgreSQLが最近サポートされた。コア（SQL）というのがJSON形式のDBである。
- どこかのカラムを使ってパーテーションがきられ、DBが分散されて構成されることでパフォーマンスを確保する。該当のカラムには「/year」のようにスラッシュがつく。
- 整合性レベル：CosmosDBの「既定の整合性」からどのリージョンに配置するとどのくらい遅延があるか、どのような順序性で書き込みが行われるかについてデモが音符形式で見られる。
- Azure CDN：静的コンテンツ（htmlなど）のキャッシュを行う。リージョンの近くに配置される。
- Azure Cache for Redis：動的コンテンツ（動画など）のキャッシュを行う。アプリケーションの近くに配置される。

- Azcopy：オンプレミスからのデータ移行において、簡単かつコストがかからない方法。

## ビジネス継続性

### 高可用性構成

- Azure Migrate：大量のVMを移行しなければいけないようなときに使用する。オンプレミスにて仮想アプライアンスをインストールすることで移行できるかどうかを判定してくれる。


# おわりに
皆様も上記を参考にAZ-305挑戦してみてください！！