事例研究3 - シティ・パワー&ライト
背景
City Power & Light社は、家庭や企業向けに電力インフラ監視ソリューションを提供しています。同社は現在、ソリューションをAzureに移行中です。
現在の環境
アーキテクチャの概要
同社はhttp://www.cpandl.com/に公開ウェブサイトを構えています。このサイトは、Linux上のAzure App Serviceで動作するシングルページWebアプリケーションです。静的コンテンツの配信には、Azure Storageに保存され、Azureコンテンツ配信ネットワーク(CDN)にキャッシュされたファイルを使用します。
API ManagementとAzure Function Appの関数は、データを処理してAzure Database for PostgreSQLに保存するために使用されます。API Managementは、Logic Appとの統合のためにAzure Function App関数への通信を仲介するために使用されます。Logic Appはデータ処理のオーケストレーションに使用され、Service BusとEvent Gridはメッセージングとイベントを処理します。
このソリューションは、Application Insights、Azure Monitor、およびAzure Key Vaultを使用します。
アーキテクチャ図
同社は事業を支える複数のアプリケーションとサービスを運用している。同社は可能な限りサーバーレスコンピューティングを導入する予定である。全体のアーキテクチャは以下の図に示す。

ユーザー認証
ユーザー認証プロセスの詳細は以下のとおりです。
19. ユーザーはウェブサイトで「サインイン」を選択します。
20. ブラウザはユーザーを Azure Active Directory (Azure AD) のサインインページにリダイレクトします。
21.ユーザーがサインインします。
22. Azure AD はユーザーのセッションを Web アプリケーションにリダイレクトします。URL にはアクセス トークンが含まれます。
23.ウェブアプリケーションはAPIを呼び出し、認証ヘッダーにアクセストークンを含めます。
アプリケーションIDは、アクセストークン内のオーディエンス('aud')クレームとして送信されます。
24.バックエンドAPIはアクセストークンを検証します。
要件
企業ウェブサイト
* 通信およびコンテンツはSSLを使用して保護する必要があります。
* 通信にはHTTPSを使用する必要があります。
データは、セカンダリリージョンと3つの可用性ゾーンに複製する必要があります。
* データ保存コストは最小限に抑えなければならない。
Azure Database for PostgreSQL
データベース接続文字列は、以下の属性とともにAzure Key Vaultに保存されます。
* Azure Key Vault 名: cpandlkeyvault
* シークレット名: PostgreSQLConn
* ID: 80df3e46ffcd4f1cb187f79905e9a1e8
接続情報は頻繁に更新されます。アプリケーションは常に最新の情報を使用してデータベースに接続する必要があります。
Azure Service Bus と Azure Event Grid
* Azure Event Grid は、キューベースの負荷平準化のために Azure Service Bus を使用する必要があります。
* Azure Event Grid のイベントは、バッファリングに使用するために、Service Bus キューに直接ルーティングする必要があります。
* Azure Service Bus およびその他の Azure サービスからのイベントは、引き続き Azure にルーティングされる必要があります。
処理用のイベントグリッド。
安全
* すべての SSL 証明書と認証情報は、Azure Key Vault に保存する必要があります。
* ファイルへのアクセスは、IPアドレス、プロトコル、およびAzure ADの権限によって制限する必要があります。
* すべてのユーザーアカウントとプロセスは、
本来の機能を果たす。
コンプライアンス
一般データ保護規則(GDPR)を遵守するためには、ファイル更新および転送の監査を有効にする必要があります。ファイル更新は読み取り専用とし、発生順に保存し、作成、更新、削除、コピー操作のみを含み、コンプライアンス上の理由から保持する必要があります。
問題
企業ウェブサイト
サイトをテスト中に、以下のエラーメッセージが表示されます。
CryptographicException: 指定されたファイルが見つかりません。
機能アプリ
RequestUserApproval関数のローカルテストを実行すると、次のエラーメッセージが表示されます。
「関数 RequestUserApproval によってタイムアウト値 00:10:00 が超過しました」
Azure開発環境で以下のKustoクエリを実行して関数をテストすると、同じエラーメッセージが表示されます。
FunctionAppLogs
| ただし、FunctionName = = "RequestUserApproval"
ロジックアプリ
開発環境でロジックアプリをテストすると、次のエラーメッセージが表示されます。
「400 Bad Request」
エラーのトラブルシューティングの結果、RequestUserApproval関数を呼び出すHttpTriggerアクションが原因であることが分かりました。
コード
企業ウェブサイト
Security.cs:

機能アプリ
RequestUserApproval.cs:

ホットスポットに関する質問
企業ウェブサイトのAzureストレージアカウントについて、アカウントの種類、レプリケーション、およびアクセス階層のオプションを設定する必要があります。
設定を完了するにはどうすればよいでしょうか?回答するには、ダイアログボックスの回答欄で適切なオプションを選択してください。
注:正解ごとに1ポイントが加算されます。

正解:

Explanation:
Account Kind: StorageV2 (general-purpose v2)
Scenario: Azure Storage blob will be used (refer to the exhibit). Data storage costs must be minimized.
General-purpose v2 accounts: Basic storage account type for blobs, files, queues, and tables.
Recommended for most scenarios using Azure Storage.
Replication: Geo-zone-redundant storage (GZRS)
Geo-zone-redundant storage (GZRS) copies your data synchronously across three Azure availability zones in the primary region using ZRS. It then copies your data asynchronously to a single physical location in the secondary region. Within the secondary region, your data is copied synchronously three times using LRS.
Access tier: Cool
Cool - Optimized for storing data that is infrequently accessed and stored for at least 30 days.
Reference:
https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview
https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers?tabs=azure-portal