Azure Functionsとは何でしょうか?
Azure Functionsは、Microsoftが提供するサーバーレスコンピューティングサービスであり、IoTシステムへの注文到着や特定のキューへの新規メッセージ受信など、あらかじめ定義されたイベントや条件(トリガー)に応じてコードを実行します。これらのプロセスに必要なすべてのコンピューティングリソースを自動的に管理します。
Azure Functionsは、サーバーレスコンピューティングの利点を活用しようとする組織にとって大きなメリットを提供しますが、複数のクラウド環境、オープンソース技術、コンテナ化されたマイクロサービスへの依存度が高まることで複雑さが増し、アプリケーションのパフォーマンスやエンドユーザーエクスペリエンスの監視を担当するDevOpsチームにとって、可観測性の問題を引き起こす可能性があります。
Azure Functions は、AWS LambdaやGoogle Cloud Functions などの他の機能としてのサービス (FaaS)プラットフォームと類似しています。
Azureクラウドコンピューティングの成長
Azureは、大規模かつ成長を続けるクラウドコンピューティングエコシステムであり、ユーザーはデータベースへのアクセス、仮想サーバーの起動、ウェブサイトやモバイルアプリケーションの作成、Kubernetesクラスターの実行、機械学習モデルのトレーニングなど、さまざまな作業を実行できます。数多くのサーバーレスオプションにより、クラウド上でほぼあらゆるものを構築することが可能であり、Azureのサービスは専用リソースとオンデマンドリソースにおいて、現在ではAWSとほぼ同等の機能を提供しています。このプラットフォームは基本数の仮想マシンを確保し、利用が集中する期間には必要に応じて自動的にインスタンスを追加します。
これほど多くの機能を備えるAzureは、企業や政府機関の間で人気を集め続けています。早くも2015年には、カナダ放送協会(CBC)がウェブアプリ構築のマネージドプラットフォームであるAzure App Servicesを採用し、選挙夜のリアルタイムウェブサイトを数百万ユーザーのリクエストに対応できるよう拡張しました。2019年には米国国防総省が、100億ドル規模のクラウドコンピューティングプロジェクト「JEDI」にAzureを選択しています。
AWSとAzureは同様の機能、そしておそらくは類似した究極のビジョンを掲げていますが、そのアーキテクチャは同一ではありません。アプリケーションを管理するには、選択したプロバイダーの複雑な仕組みを理解する必要があります。
Azure Functionsの仕組み
Azure Functionsのサーバーレスプラットフォームは、チームがイベント駆動型アプリケーションを構築することを可能にします。これらのアプリケーションは、事前に設定されたシステム条件やイベントによってトリガーされるとコードを実行します。プラットフォームは、これらのプロセスに必要なすべてのコンピューティングリソースを自動的に管理するため、DevOpsチームは機能の開発と提供に集中できます。
Azure Functions では、JavaScript、C#、Python、PHP で記述されたカスタムコードを、コンテナ化された環境で必要に応じて実行し、複数のサービスを連携させることも可能です。
Azure Functions を最大限に活用する
AWS Lambdaと同様に、Azure Functionsはクラウドのエッジで動作し、他のウェブサイトから独立して動作可能な小規模なアプリケーションに最適です。注文処理やIoTデータの処理、メール・メッセージ・通知の送信、バックアップ開始やデータベースクリーンアップなどのタスクのスケジュール設定など、一般的なタスクを効率的に実行します。
Azure App Serviceの関数アプリ上で Web アプリや API を作成し、アプリケーションユーザーの設定やデータベースのクエリといった日常的なタスクに関数を活用できます。Microsoft は、個々の製品ベースのクラウド環境内でサーバーレスコードをデプロイすることを可能にしております。例えば Azure IoT Functions は、Azure IoT Edge 向けのリクエストを処理します。
Azure Functionsを使用すべきでない場合
ルーチンタスクには適していますが、Azure Functionsは計算負荷の高いタスクの実行にはあまり向いていません。クラウド上で継続的なCPU負荷の高いプロセスを処理すると、非常に高額になる可能性があるためです。組織がAzure Functionsの最適な適用方法を選択する際には、コストが必ず考慮事項となるため、使用目的を慎重に検討し、その利便性が価格に見合うかどうかを判断することが重要です。
また、Azure Functions は頻度の低い時間制約のあるタスクにも推奨されません。コンテナがコールドスタート(新規リクエストを処理するために初めて起動する状態)を行う際、通常の応答時間にわずかな遅延が生じます。大規模な環境では、こうした小さな遅延が積み重なり、内部 IT チームやエンドユーザーに認識される貴重な秒単位の遅延となり、最終的に生産性やビジネス成果に影響を及ぼす可能性があります。
関数と他サービス間の大規模な依存関係が複数存在する場合、状況はさらに悪化します。このようなタスクには仮想マシンや専用フレームワークのご利用をご検討ください。
サーバーレスアプローチにおける可観測性の課題
コンピューティングコストやコールドスタート遅延に加え、この技術を検討するチームにはもう一つの注意点があります。Azure内での関数監視は、Azureアプリケーションおよびそれらが直接やり取りするオンプレミスサービスに限定されます。関数単位やサービス単位でログを有効化し検索することは可能ですが、アラートやバグの調査には、各ログを手動で確認する必要があります。
Azure Monitorの機能は分散トレースには拡張されません。分散トレースとは、Azureエコシステム内外およびその直近のサポートインフラストラクチャ内で発生する、特定のリクエスト経路上の全イベントの開始から終了までの記録を指します。
分散トレースにより、チームはソフトウェアスタック全体の依存関係を可視化し理解することが可能となります。現代のIT環境では、他のクラウド環境やオープンソース技術を含む多様な技術が採用されているため、チームは複数の監視ソリューションに依存せざるを得ず、これにより複雑さが増し、DevOpsチームやSREチームにとっての死角が生じます。
今日のクラウドネイティブアプリケーションは、イベントデータを分析サービスにプッシュする、データベース接続を確立する、プッシュ通知やその他のメッセージを送信するといったプロセスを実行する、数多くの異なるマイクロサービスに依存しています。例えば、メディアストリーミング大手のNetflixは、自社のマイクロサービスアーキテクチャにおいて最大700もの個別のAPIを使用していると推定しています。
ソフトウェアスタック全体のエンドツーエンドの可観測性を維持することは、パフォーマンスの問題が発生した時点(あるいはそれ以前)に特定し解決するために、極めて重要です。
可観測性を損なうことなく Azure Functions を最大限に活用する方法
Azure は、必要なインフラストラクチャの管理を考慮することなく、クラウドのエッジで実行される関数に基づいて動的なサーバーレス アプリケーションを作成することを組織に可能にします。
しかしながら、Azureの内部ロギングサービスやその他の分散したインサイトのみに依存している場合、アプリケーションワークフロー全体における関数の最適化、パフォーマンスの監視、エラーの捕捉は不可能です。複雑化するマルチクラウド環境全体で稼働するすべてのマイクロサービス間の依存関係を理解するには、組織のクラウドスタック全体を統合的に把握することが不可欠です。
Azure Functions およびそれらが連携するシステムを最大限に活用するためには、チームはエンドツーエンドの可観測性を必要とします。これは自動化と AI 支援を活用し、メトリクス、ログ、トレースを超え、オープンソース・イニシアチブからのデータやエンドユーザー視点の追加コンテキストを含むものです。
Dynatraceソフトウェアインテリジェンスプラットフォームは、この自動的かつインテリジェントな可観測性を提供し、Azure Functionsの2.xおよび3.xランタイムバージョンの両方をサポートします。これにより、チームはAzure Functionsで実行されているあらゆるコードを深く可視化できます。この可視性は、ユーザーエクスペリエンスとビジネス成果の完全なコンテキストを得るために、Azure Functionsの上流および下流のプロセスにまで及びます。
また、ユーザーに影響が出る前に、リクエストが遅延している理由を把握する必要があります。Dynatrace の自動サービスフローにより、チームは、Azure 関数がトリガーされたときに実行されたサービス呼び出しの完全なシーケンスを確認することで、アプリケーションのトランザクションをエンドツーエンドで即座に把握し、容易に理解することができます。Dynatraceのデイヴィス AIエンジンは、プログラミング言語に関係なく、トリガー、リクエスト、エラー、コールドスタートを完全なコンテキストでシームレスに監視し、問題を自動的にフラグ付けします。これにより、DevOps チームは、問題の修正、自動化の設定、ワークフローの最適化など、明確なアクションパスを得ることができます。
Azure Functions アプリケーションを活用し、それと相互作用するすべてのサービスを 1 つのビューで把握することで、チームは、どの関数の失敗率や処理時間が最も高く、どの関数が最も多く実行されているかを把握することができます。これにより、チームは、エンドユーザーエクスペリエンスにメリットをもたらし、ビジネス成果を向上させる、スムーズで効率的なアプリケーションの提供に注力することができます。
Dynatraceプラットフォームが、御社のサーバーレスコンピューティングの取り組みを最大限に活用するお手伝いができる方法について、詳しくはAzure Functionsの監視に関する記事をご覧ください。
さっそく始めてみませんか?
ご質問がございましたら
新しいディスカッションを開始するか、Q&A フォーラムでお問い合わせください。
フォーラムへ移動