【一発合格】AZ-204: Developing Solutions for Microsoft Azureの勉強記録

# 概要
AZ-204を無事一発合格しました。記録として残します。
点数は780/1000点。
勉強期間は約1週間。実施内容はすべて以下に記録しています。

# Microsoft Learning Path
https://learn.microsoft.com/ja-jp/credentials/certifications/azure-developer/?practice-assessment-type=certification

# 参考
以下記事の勉強方法を参考にしました。
https://hirahira.blog/az-204/#toc7



# 模擬試験ログ

## 勉強サイト
https://www.examtopics.com/exams/microsoft/az-204/

https://it-concepts-japan.com/az-204-azure-developer-associate

## Udemy英語テスト
https://www.udemy.com/course/azure-certification-1/?utm_source=aff-campaign&LSNPUBID=%2FNCY0s64yk4&utm_medium=udemyads&ranMID=47984&ranSiteID=_NCY0s64yk4-_CxZRNl9H.75TPJ09L_5rw

1回目：2025/1/4

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/6c9b328f-d00a-3999-c135-653ec3e3fa46.png)


## Microsoft公式Practice

5回目：2025/1/6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/032bb3bd-7711-d388-382c-ea968b88de4b.png)


4回目：2025/1/5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/020aa8d0-d609-ff87-7c80-ce2119c3bb81.png)


3回目：2025/1/5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/63e3d0cb-7c4f-1e4b-3458-3c6cfa196d60.png)


2回目：2025/1/4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/82f82e4d-8b18-4bb9-819f-1a286d73dbd2.png)


1回目：2025/1/3
状態：Udemy模擬試験受講後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/e684ba96-ee8d-a2b1-2503-41abdcbdb6ad.png)

## Udemy日本語テスト
https://www.udemy.com/course/az-204-developing-solutions-for-microsoft-azure-fp/?utm_source=aff-campaign&LSNPUBID=%2FNCY0s64yk4&utm_medium=udemyads&ranMID=47984&ranSiteID=_NCY0s64yk4-580nt1PtQcccepBv6IXUmA

3回目：2025/1/5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/37d02cfa-216a-c733-5676-3779d5dbdd17.png)


2回目：2025/1/3
状態：Microsoft Learn一周
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/1b3ee1e4-109a-5d29-1f8d-68d0640ed5b3.png)


1回目：2024/12/30
状態：ノー勉強
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3973326/03d87a98-84bc-7403-28b3-ea062ebd2633.png)

# コンテナソリューションの実装

## Azure Container Registry
- ACRと呼ばれる
- Dockerイメージを保存する倉庫的な役割
- レジストリへのイメージアップロードとダウンロードが可能
- EntraIDを使用して認証が可能
- イメージの高可用性を確保
- マネージドIDでの認証も可能
- 価格レベル：Basic, Standard, Premium
    -  Basic: ストレージとスループットの速度が限られる
    -  Standard: Basicと同様の機能。ストレージとスループットの速度が増える
    -  Premium: 自動レプリケーションなどが追加
-  ロールとアクセス許可
    -  細かな権限付与が可能
    -  ACRプッシュ：イメージのプッシュ/プルが可能
    -  ACRプル：イメージのプルしか出来ない

## Azure Container Instance
- ACIと呼ばれる
- 最も高速かつシンプルにコンテナを実行する方法
- フルマネージドでスケーラブルな環境を提供
- 必要な時のみ課金される
- Linux、Windowsコンテナをサポート
- 利用シナリオ
    - アプリコンテナとログ記録コンテナ
    - アプリコンテナと監視コンテナ
    - フロントエンドコンテナとバックエンドコンテナ
- 再起動ポリシー
    - Always:停止すると自動的に再起動
    - OnFailure:エラーで停止した場合のみ再起動
    - Never:再起動しない

## Azure Container Apps
- AKS上で動作するアプリを実行可能
- 主な機能
    - APIエンドポイントのデプロイ
    - バックグラウンド処理アプリケーションのホスティング
    - イベント駆動型の処理
    - マイクロサービスの実行
    - 認証と認可の実装
- 利用シナリオ
    - 複数のコンテナリビジョンを実行
    - HTTPSイングレスを有効
    - 任意レジストリからコンテナを実行する
- 単一のコンテナではACI
- 複数コンテナではACAを利用

## acr, aci, acaの違い by chatGPT
AzureのACR (Azure Container Registry)、ACI (Azure Container Instances)、**ACA (Azure Container Apps)**は、コンテナの管理やデプロイに関連するサービスですが、それぞれ役割が異なり、補完的な関係を持っています。

### ACR (Azure Container Registry) 🏢
役割: コンテナイメージの保存・管理

特徴:
コンテナイメージを格納するプライベートなレジストリ。
Docker Hub のようなイメージ管理ツールだが、Azure環境に統合されている。
CI/CD パイプラインやデプロイで利用。

利用シーン:
コンテナイメージをビルドして、ACIやACAにデプロイする際に利用。

### ACI (Azure Container Instances) 🚀
役割: シンプルなコンテナ実行環境

特徴:
コンテナを単独で実行するサービス。
VMを使わず、すばやくコンテナを起動できる。
シンプルなアプリケーションや短期的なジョブに適している。

利用シーン:
単一コンテナアプリのテストや開発。
バッチ処理や一時的なタスクの実行。

### ACA (Azure Container Apps) 🛠️
役割: サーバーレスコンテナプラットフォーム

特徴:
マイクロサービスや複数のコンテナをスケーリングして実行。
Kubernetesの概念を抽象化して簡略化。
自動スケール（イベントドリブン）やセキュリティを提供。

利用シーン:
Web アプリやバックエンドサービスのデプロイ。
複数コンテナ間の連携が必要なアプリケーション。
関係性

ACR:
コンテナイメージを保存。ACIやACAのデプロイ元として利用される。

ACI:
ACRに保存されたイメージを取得してシンプルな実行環境を提供。

ACA:
ACRのイメージを利用して、スケーラブルなマイクロサービスを構築可能。

まとめ
ACR = コンテナイメージの保存場所 🛢️
ACI = 簡易的なコンテナ実行環境 🚀
ACA = 複雑なアプリケーション向けのサーバーレスプラットフォーム 🛠️
状況によって使い分けるのがポイントだよ

## Azure App Service
- Webアプリケーション、REST API、モバイルバックエンドをホストするためのHTTPベースのサービス
- 主な機能
    - 任意の言語で開発可能
    - 自動スケール
        - スケールアップ、スケールダウン
        - スケールアウト、スケールイン
    - CICDのサポート
    - デプロイスロット
        - スロット間でスワイプ可能
- 価格レベル
    - Free
    - Shared
    - Basic
    - Standard
    - Premium
    - PremiumV2
    - PremiumV3
- 価格レベルカテゴリ
    - 共有コンピューティング
    - 専用のコンピューティング
    - Isolated
        - 専用のAzureVMが専用のAzureVirtualNetwork上で動く
- 診断ログの有効化をAzurePortal上から可能
- セキュリティ証明書の作成、アップロード、インポートが可能
    - プライベート証明書
    - パブリック証明書
    - Key Vaultから証明書をインポート

## Azure App Serviceのスケーリング
- スケールアップ：性能を上げること
- スケールダウン：性能を下げること
- スケールアウト：仮想マシンの台数を増やす
- スケールイン：仮想マシンの台数を減らす
- メトリックがルールで設定された閾値を超えるとアクションの事項が可能
- 自動スケーリングのベストプラクティス
    - 最大値と最小値が異なっており、十分な差があること
    - 診断メトリックに適切な統計を選択する
        - 平均、最小、最大、合計・・・
    - 閾値を慎重に選択する
    - 常に安全な既定のインスタンス数を選択する
    - 自動スケールの通知を構成する

## Azure App Serviceのデプロイスロット
- Standard以上の場合、デプロイスロットの利用が可能
- stagingスロットとproductionスロットを任意のタイミングでスワップ可能


## Azure Functions
- サーバー不要のアプリ作成が可能
- サーバーレスソリューション
- 最新リソースがすべて提供されるためデプロイや管理を心配する必要がない
- ホスティングオプション
    - 従量課金プラン：自動スケーリング、コンピューティングリソースのみに課金
    - Premiumプラン：アイドル状態でも遅延なく実行
    - 専用プラン：実行時間の長いシナリオに最適
- Functionsをスケーリング
    - インスタンス数を増やすことでCPUおよびメモリリソースをスケーリング

### Azure Functionsの開発
‐ トリガー：関数実行のトリガー
    - HTTPトリガー：リクエストがあった場合に実行される 
- バインディング
    - BlobStorageバインド：Blobにファイルが入った場合に実行される
    - CosmosDBバインド：CosmosDBの値が変化した際に実行される

# ここまでのセクションのMicrosoft Learn
- https://learn.microsoft.com/ja-jp/training/paths/az-204-implement-iaas-solutions/
- https://learn.microsoft.com/ja-jp/training/paths/create-azure-app-service-web-apps/
- https://learn.microsoft.com/ja-jp/training/paths/implement-azure-functions/

## Azure Blob Starate
- オブジェクトストレージソリューション
- 大量の非構造化データを格納可能
    - テキストデータ
    - バイナリデータ
- 利用用途
    - 画像
    - ビデオ
    - ログファイルに書き込む
    - アーカイブデータ格納
- ストレージアカウントの種類
    - Standard
        - 汎用V2
    - Premium
        - ブロックBLOB
        - ページBLOB
- 暗号化が可能
- 静的Webサイトのホスティングも可能

### Blob Strageのライフサイクル
- データが古くなると急激にアクセス数が低下する
- データアクセス層
    - ホット
        - 頻繁にアクセスされる
    - クール
        - 頻度が少ない。30日以上保管される大量のデータ
    - コールド
        - 90日間保存
    - アーカイブ
        - 180日以上保存
        - 取得に数時間かかる可能性がある
- ライフサイクルのルールはJson形式で定義
- リハイドレート
    - アーカイブ層からホット層に戻すこと
    - 読み込み専用なためリハイドレートが必要

## Azure CosmosDB
- グローバル分散データベースシステム
- 整合性レベル
    - 強固
        - 書き込み順が保証される
    - 有界整合性制約
    - セッション
    - 一貫性のあるプレフィックス
    - 最終的
        - SNSのいいねボタンなど、順番は気にしなくてよいもの
- 要求ユニット（RU）
    - プロビジョニングスループットモード
        - Azureポータルから変更
    - サーバーレスモード
    - 自動スケーリングモード
        - 使用状況に合わせて瞬時にスケーリング

# ここまでのセクションのMicrosoft Learn
- [AZ-204: BLOB ストレージを使用するソリューションを開発する](https://learn.microsoft.com/ja-jp/training/paths/develop-solutions-that-use-blob-storage/)

‐ [AZ-204: Azure Cosmos DB を使用するソリューションを開発する](https://learn.microsoft.com/ja-jp/training/paths/az-204-develop-solutions-that-use-azure-cosmos-db/)

## Azure Key Vault
- シークレットを安全に保管し、アクセスするためのクラウドサービス
    - APIキー
    - 証明書
    - 暗号化キー
- 利用用途
    - シークレット管理
    - 証明書管理
    - キー管理
- マネージドID
    - Azure Key Vaultにアクセスする手段
    - EntraID認証をサポートするリソースに接続するときに使用される
- 種類
    - システム割り当て
        - Azureリソースの一部として作成
    - ユーザー割り当て
        - スタンドアローンとして作成

## Azure App Configuration
- アプリケーション設定と機能フラグを一元的に管理
- アプリケーションのすべての設定を一か所に保存し保護可能
- 利点
    - 数分で設定可能なフルマネージドサービス
    - 特定時点の設定の再生
    - etc...

## ユーザー認証と承認
- Mictosoft IDプラットフォーム
    - 各自のMicrosoftIDやソーシャルアカウントを使用してサインイン可能
    - 職場または学校アカウント
    - 個人用Microsoftアカウント
    - AADB2Cアカウント
- サービスプリンシパル
    - 特定の権限を持つIDのみ割り当てが可能
    - 認証・認可に使用される
- メリット
    - セキュリティ向上
    - 認証の自動化
    - IDの一元管理（AADで管理される）
- 条件付きアクセス
    - 多要素認証
    - Intune登録されているデバイスのみ特定のサービスへのアクセスを許可
    - ユーザーの場所とIPを制限

## Shared Access Signature(SAS)
- ストレージサービスのリソースへの委任アクセス許可を付与する方法
- アクセス許可の例
    - リソース種類と開始時刻、有効期限
    - アクセス許可のレベル
    - IP
    - プロトコル
- SASの種類
    - ユーザー委任SAS
    - サービスSAS
    - アカウントSAS

## Microsoft Graph
- RESTAPIを介してアクセス
    - AzureEntraID
    - MicrosoftTeams
    - etc...

# ここまでのセクションのMicrosoft Learn
- [AZ-204: ユーザー認証と承認を実装する](https://learn.microsoft.com/ja-jp/training/paths/az-204-implement-authentication-authorization/)

- [AZ-204: セキュリティで保護された Azure ソリューションを実装する](https://learn.microsoft.com/ja-jp/training/paths/az-204-implement-secure-cloud-solutions/)

## Application Insights
- アプリケーションの監視
- 分散トレーシング
- ライブメトリクス
- 高度な分析
- アラートとインシデント管理
- 統合（Azureサービスやサードパーティーサービスと統合可能）

## Azure Cache for Redis
- フルマネージド
- 高パフォーマンス
- レプリケーション
- セキュリティ
- リッチなキャッシュ機能
- メリット
    - 運用の手間が不要
    - 高パフォーマンスかつ高可用性のキャッシュ環境が簡単に構築可能
    - Azure製品との密な統合性

## Azure Content Delively Network
- コンテンツ配信ネットワーク
- ユーザーにWebコンテンツを効率的に配信できるサーバーの分散ネットワーク
- Webコンテンツのキャッシュとグローバルな配信を最適化するクラウドサービス
- 特徴
    - コンテンツのキャッシュと高速配信
    - 動的コンテンツの最適化
    - グローバル配信
    - 静的Webサイトのホスティング
    - HTTPSカスタムドメイン
    - ジオフィルタリング（特定のエリアからのアクセスをブロック）
    - レイヤー7のトラフィック最適化
- メリット
    - Webアプリのパフォーマンス向上
    - 短い応答時間によるエンドユーザー体験の向上
    - etc...

## API Management
- APIゲートウェイサービス
- APIをセキュアかつスケーラブルに公開
- 機能
    - APIの公開と管理
    - APIバージョン管理
    - 開発者エンゲージメント
    - セキュリティコントロール
        - 相互認証
        - EntraIDとの連携
    - モニタリングと分析
    - スケーラビリティ
        - 大量のトラフィックに対応
    - マルチクラウド対応
- メリット
    - セキュアなAPI公開が容易になる
    - 一元管理と制御が可能
    - 開発ライフサイクルを効率化
    - APIのモニタリングと分析が容易になる

## Azure Event Grid
- イベントを受け取り他のサービスやアプリにルーティングする
- Topicsを受け取りトリガーを発行する

## Azure Event Hubs
- 大規模なデータストリームをクラウド内で受信、処理、保存
- 特徴
    - スケーラビリティ
    - 信頼性と耐障害性
    - セキュリティ
    - イベントキャプチャ
    - パーティションキュー
        - 並列処理が可能
    - バッファリング
        - 配信先が利用できなくなった場合、一時的にバッファされる

## Event GridとEvent Hubsの違い
- Event Gridは軽量イベント
- Event Hubsは大規模データの取り込みと処理

## Azure Service Bus
- クラウドベースのメッセージングサービス
- 特徴
    - メッセージキュートトピック
    - 信頼性の高いメッセージ配信
        - 永続化、重複検出、遅延キュー
    - セキュアな通信
    - セッション管理
        - 特定のクライアントに対する順序付けが可能
    - 自動パーティションと負荷分散
    - AMQP、HTTPS通信
- ユースケース
    - 高スループットクラウドメッセージング
    - 順序付け配信がメッセージングシナリオ
    - 

## Azure Queue Storage
- 多数のメッセージを格納するためのサービス
- 最大サイズ64KB
- ユースケース
    - 非同期メッセージングに最適
    - バックグラウンド処理
    - イベントキューイングと処理
- 堅牢でスケーラブルなソリューションを手軽に構築可能

# ここまでのMicrosoft Learn
- [AZ-204: API Management の実装](https://learn.microsoft.com/ja-jp/training/paths/az-204-implement-api-management/)

- [AZ-204: イベントベースのソリューションの開発](https://learn.microsoft.com/ja-jp/training/paths/az-204-develop-event-based-solutions/)

- [AZ-204: メッセージ ベースのソリューションを開発する](https://learn.microsoft.com/ja-jp/training/paths/az-204-develop-message-based-solutions/)