翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
リアルタイム分析と視覚化のために から OpenSearch AWS Lambda にテレメトリデータを送信する
Tabby Ward、Guy Bachar、David Kilzer、Amazon Web Services
概要
最新のアプリケーションはますます分散され、イベント駆動型になり、リアルタイムのモニタリングとオブザーバビリティの必要性が強化されています。 AWS Lambda は、スケーラブルでイベント駆動型のアーキテクチャを構築する上で重要な役割を果たしているサーバーレスコンピューティングサービスです。ただし、Amazon CloudWatch Logs のみに依存すると、Lambda 関数のモニタリングとトラブルシューティングが難しくなり、レイテンシーと保持期間が限られる可能性があります。
この課題に対応するために、Lambda Telemetry API AWS を導入しました。これにより、Lambda 関数はテレメトリデータをサードパーティーのモニタリングおよびオブザーバビリティツールに直接送信できます。この API は、ログ、メトリクス、トレースのリアルタイムストリーミングをサポートし、Lambda 関数のパフォーマンスと状態を包括的かつタイムリーに表示します。
このパターンでは、オープンソースの分散検索および分析エンジンである OpenSearch
このパターンでは、Lambda Telemetry API と OpenSearch の統合を設定および設定する方法を説明し、セキュリティ、コスト最適化、スケーラビリティに関するベストプラクティスが含まれています。目的は、Lambda 関数をより深く理解し、サーバーレスアプリケーションの全体的なオブザーバビリティを向上させることです。
注: このパターンは、Lambda Telemetry API とマネージド OpenSearch の統合に焦点を当てています。ただし、説明されている原則と手法は、セルフマネージド OpenSearch と Elasticsearch にも適用されます。 |
---|
前提条件と制限
統合プロセスを開始する前に、次の前提条件が設定されていることを確認してください。
AWS アカウント: 次の AWS リソースを作成および管理するための適切なアクセス許可 AWS アカウント を持つアクティブな 。
AWS Lambda
AWS Identity and Access Management (IAM)
Amazon OpenSearch Service (マネージド OpenSearch クラスターを使用している場合)
OpenSearch クラスター:
既存のセルフマネージド OpenSearch クラスターまたは OpenSearch Service などのマネージドサービスを使用できます。
OpenSearch Service を使用している場合は、OpenSearch Service ドキュメントの「Amazon OpenSearch Service の開始方法」の手順に従って OpenSearch クラスターを設定します。
OpenSearch クラスターが Lambda 関数からアクセス可能であり、アクセスポリシー、暗号化、認証などの必要なセキュリティ設定で設定されていることを確認します。
Lambda テレメトリデータを取り込むために必要なインデックスマッピングと設定で OpenSearch クラスターを設定します。詳細については、OpenSearch Service ドキュメントの「Amazon OpenSearch Service へのストリーミングデータのロード」を参照してください。 OpenSearch
ネットワーク接続:
Lambda 関数に OpenSearch クラスターにアクセスするために必要なネットワーク接続があることを確認します。Virtual Private Cloud (VPC) の設定方法のガイダンスについては、OpenSearch Service ドキュメントの「VPC 内での Amazon OpenSearch Service ドメインの起動」を参照してください。 OpenSearch
IAM ロールとポリシー:
Lambda 関数が OpenSearch クラスターにアクセスし、 に保存されている認証情報にアクセスするために必要なアクセス許可を持つ IAM ロールを作成します AWS Secrets Manager。
ポリシーや OpenSearch を操作するために必要な追加のアクセス許可など、適切な IAM
AWSLambdaBasicExecutionRole
ポリシーをロールにアタッチします。Lambda 関数に付与された IAM アクセス許可でOpenSearch クラスターへのデータの書き込みが許可されていることを確認します。IAM アクセス許可の管理の詳細については、Lambda ドキュメントの「実行ロールを使用した Lambda 関数のアクセス許可の定義」を参照してください。
プログラミング言語の知識:
Lambda 関数と Lambda 拡張機能のサンプルコードを理解して変更するには、Python (または選択したプログラミング言語) に関する基本的な知識が必要です。
開発環境:
Lambda 関数と拡張機能を構築およびデプロイするために必要なツールと依存関係を使用して、ローカル開発環境を設定します。
AWS CLI または AWS Management Console:
AWS Command Line Interface (AWS CLI) をインストールして設定するか、適切な認証情報 AWS Management Console で を使用して必要な を操作します AWS のサービス。
モニタリングとログ記録:
Amazon CloudWatch や などのサービスを含む AWS、 のモニタリングとログ記録 AWS CloudTrail のベストプラクティスに精通し、モニタリングと監査を行います。
Lambda 関数の CloudWatch Logs をチェックして、Lambda Telemetry API 統合に関連するエラーや例外を特定します。トラブルシューティングのガイダンスについては、Lambda Telemetry API ドキュメントを参照してください。
アーキテクチャ
このパターンでは、OpenSearch Service を使用して、Lambda 関数によって生成されたログとテレメトリデータを保存します。このアプローチにより、OpenSearch クラスターに直接ログをすばやくストリーミングできるため、CloudWatch Logs を仲介として使用する際のレイテンシーとコストを削減できます。
注記Lambda 拡張機能コードは、OpenSearch API を直接使用するか、OpenSearch クライアントライブラリを使用して、テレメトリを OpenSearch |
---|
次のワークフロー図は、エンドポイントとして OpenSearch クラスターを使用する場合の Lambda 関数のログワークフローを示しています。

アーキテクチャには以下のコンポーネントが含まれています。
Lambda 関数: 実行中にログとテレメトリデータを生成するサーバーレス関数。
Lambda 拡張機能: Lambda Telemetry API を使用して OpenSearch クラスターと直接統合する Python ベースの拡張機能。この拡張機能は、同じ実行環境で Lambda 関数と一緒に実行されます。
Lambda Telemetry API: Lambda 拡張機能がログ、メトリクス、トレースなどのテレメトリデータをサードパーティーのモニタリングおよびオブザーバビリティツールに直接送信できるようにする API。
Amazon OpenSearch Service クラスター: ホストされているマネージド OpenSearch クラスター AWS。このクラスターは、Lambda 拡張機能を介して Lambda 関数からストリーミングされたログデータの取り込み、保存、インデックス作成を行います。
ワークフローは、以下のステップで構成されます。
Lambda 関数が呼び出され、実行中にログとテレメトリデータが生成されます。
Lambda 拡張機能は 関数と一緒に実行され、Lambda Telemetry API を使用してログとテレメトリデータをキャプチャします。
Lambda 拡張機能は、OpenSearch Service クラスターとの安全な接続を確立し、ログデータをリアルタイムでストリーミングします。
OpenSearch Service クラスターは、Kibana やその他の互換性のあるアプリケーションなどのツールを使用して、ログデータを取り込み、インデックスを作成し、保存して、検索、分析、視覚化できるようにします。
CloudWatch Logs を回避し、ログデータを OpenSearch クラスターに直接送信することで、このソリューションにはいくつかの利点があります。
リアルタイムのログストリーミングと分析により、トラブルシューティングが迅速になり、オブザーバビリティが向上します。
CloudWatch Logs に関連するレイテンシーの短縮と潜在的な保持制限。
Lambda 拡張機能をカスタマイズしたり、特定の出力形式や追加の処理用に独自の拡張機能を作成したりする柔軟性。
ログ分析とモニタリングのための OpenSearch Service の検索、分析、視覚化機能との統合。
エピックセクションでは、Lambda 拡張機能の設定、Lambda 関数の設定、OpenSearch Service クラスターとの統合の手順step-by-step。セキュリティ上の考慮事項、コスト最適化戦略、ソリューションのモニタリングとトラブルシューティングのヒントについては、「ベストプラクティス」セクションを参照してください。
ツール
AWS サービス
AWS Lambda
はサーバーのプロビジョニングや管理をする必要がなく、コードを実行できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。 Amazon OpenSearch Service
は、 が提供するフルマネージドサービス AWS であり、OpenSearch クラスターをクラウドに簡単にデプロイ、運用、スケーリングできます。 Lambda 拡張機能は、カスタムコードを一緒に実行することで、Lambda 関数の機能を拡張します。Lambda 拡張機能を使用して、Lambda をさまざまなモニタリング、オブザーバビリティ、セキュリティ、ガバナンスツールと統合できます。
AWS Lambda Telemetry API を使用すると、拡張機能を使用して、Lambda から直接拡張モニタリングおよびオブザーバビリティデータをキャプチャし、任意の送信先に送信できます。
AWS CloudFormation
では、 AWS リソースをモデル化してセットアップできるため、それらのリソースの管理に費やす時間が減り、アプリケーションに集中する時間が増えます。
コードリポジトリ
AWS Lambda 拡張機能
には、独自の拡張機能の構築を開始するのに役立つ AWS および AWS パートナーからのデモとサンプルプロジェクトが含まれています。 OpenSearch の Lambda テレメトリ統合の例
には、Lambda 関数から OpenSearch クラスターにログを送信する方法を示すサンプル Lambda 拡張機能が用意されています。
その他のツール
OpenSearch
は、大量のデータを取り込み、保存、分析するための強力なプラットフォームを提供するオープンソースの分散検索および分析エンジンです。 Kibana は、OpenSearch で使用できるオープンソースのデータ可視化および探索ツールです。視覚化と分析の実装はこのパターンの範囲外であることに注意してください。詳細については、Kibana ドキュメント
およびその他のリソースを参照してください。
ベストプラクティス
Lambda Telemetry API を OpenSearch と統合するときは、次のベストプラクティスを検討してください。
セキュリティとアクセスコントロール
安全な通信: Lambda 関数と OpenSearch クラスター間のすべての通信を HTTPS を使用して暗号化します。Lambda 拡張機能と OpenSearch 設定で必要な SSL/TLS 設定を構成します。
IAM アクセス許可:
拡張機能は Lambda 関数と同じ実行環境で実行されるため、ファイルシステム、ネットワーク、環境変数などのリソースへの同じレベルのアクセスを継承します。
Lambda Telemetry API にアクセスして OpenSearch クラスターにデータを書き込むために必要な最小限の IAM アクセス許可を Lambda 関数に付与します。最小権限の原則を使用して、アクセス許可の範囲を制限します。
OpenSearch アクセスコントロール: OpenSearch クラスターにきめ細かなアクセスコントロールを実装して、機密データへのアクセスを制限します。OpenSearch では、ユーザー認証、ロールベースのアクセスコントロール、インデックスレベルのアクセス許可などの組み込みのセキュリティ機能を使用します。
信頼できる拡張機能: 常に信頼できるソースからのみ拡張機能をインストールします。などのInfrastructure as Code (IaC) ツールを使用して、IAM アクセス許可を含む同じ拡張機能設定を複数の Lambda 関数にアタッチするプロセス AWS CloudFormation を簡素化します。IaC ツールは、以前に使用された拡張機能とバージョンの監査レコードも提供します。
機密データの処理: 拡張機能を構築するときは、機密データのログ記録を避けてください。監査目的でログ記録または保持する前に、ペイロードとメタデータをサニタイズします。
コスト最適化
モニタリングとアラート: Lambda 関数から OpenSearch に送信されるデータの量を追跡するモニタリングとアラートのメカニズムを設定します。これにより、潜在的なコストオーバーランを特定して対処できます。
データ保持: OpenSearch の Lambda テレメトリデータに適したデータ保持期間を慎重に検討してください。保持期間が長くなるとストレージコストが増加する可能性があるため、オブザーバビリティのニーズとコスト最適化のバランスを取ります。
圧縮とインデックス作成: データ圧縮を有効にし、OpenSearch インデックス作成戦略を最適化して、Lambda テレメトリデータのストレージフットプリントを削減します。
CloudWatch への依存を減らす: Lambda Telemetry API を OpenSearch と直接統合することで、CloudWatch Logs への依存を減らすことができ、コスト削減につながる可能性があります。これは、Lambda Telemetry API を使用して OpenSearch に直接ログを送信できるため、CloudWatch にデータを保存して処理する必要がなくなります。
スケーラビリティと信頼性
非同期処理: Amazon Simple Queue Service (Amazon SQS) や Amazon Kinesis などの非同期処理パターンを使用して、Lambda 関数の実行を OpenSearch データ取り込みから切り離します。これにより、Lambda 関数の応答性を維持し、システムの全体的な信頼性を向上させることができます。
OpenSearch クラスターのスケーリング: OpenSearch クラスターのパフォーマンスとリソース使用率をモニタリングし、必要に応じてスケールアップまたはスケールダウンして、Lambda テレメトリデータの増加を処理します。
フェイルオーバーとディザスタリカバリ: OpenSearch クラスターに堅牢なディザスタリカバリ戦略を実装します。これには、定期的なバックアップや、障害発生時にデータをすばやく復元する機能が含まれます。
オブザーバビリティとモニタリング
ダッシュボードと視覚化: Kibana または他のダッシュボードツールを使用して、OpenSearch のテレメトリデータに基づいて Lambda 関数のパフォーマンスと状態に関するインサイトを提供するカスタムダッシュボードと視覚化を作成します。
アラートと通知: Lambda 関数の異常、エラー、パフォーマンスの問題を積極的にモニタリングするようにアラートと通知を設定します。これらのアラートと通知を既存のインシデント管理プロセスと統合します。
トレースと相関関係: Lambda テレメトリデータにリクエスト IDs や相関 IDs などの関連するトレース情報が含まれていることを確認し、分散サーバーレスアプリケーション全体でend-to-endのオブザーバビリティとトラブルシューティングを有効にします。
これらのベストプラクティスに従うことで、Lambda Telemetry API と OpenSearch の統合の安全性、コスト効率、スケーラビリティを確保し、サーバーレスアプリケーションに包括的なオブザーバビリティを提供できます。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
ソースコードをダウンロードします。 | 拡張機能リポジトリからサンプルAWS Lambda 拡張機能 | アプリ開発者、クラウドアーキテクト |
| ダウンロードした AWS Lambda Extensions | アプリ開発者、クラウドアーキテクト |
拡張機能エンドポイントを実行するアクセス許可を追加します。 | 次のコマンドを実行して、拡張エンドポイントを実行可能にします。
| アプリ開発者、クラウドアーキテクト |
拡張機能の依存関係をローカルにインストールします。 | 次のコマンドを実行して、Python コードのローカル依存関係をインストールします。
これらの依存関係は、拡張コードとともにマウントされます。 | アプリ開発者、クラウドアーキテクト |
拡張機能の .zip パッケージを作成して、レイヤーとしてデプロイします。 | 拡張 .zip ファイルには 拡張機能の .zip パッケージを作成します。
| アプリ開発者、クラウドアーキテクト |
拡張機能を Lambda レイヤーとしてデプロイします。 | 拡張子 .zip ファイルと次のコマンドを使用して Layer を発行します。
| アプリ開発者、クラウドアーキテクト |
タスク | 説明 | 必要なスキル |
---|---|---|
レイヤーを関数に追加します。 |
Lambda 関数にレイヤーを追加する方法の詳細については、Lambda ドキュメントを参照してください。 | アプリ開発者、クラウドアーキテクト |
関数の環境変数を設定します。 | 関数ページで、設定タブを選択し、次の環境変数を関数に追加します。
| アプリ開発者、クラウドアーキテクト |
タスク | 説明 | 必要なスキル |
---|---|---|
関数にログ記録ステートメントを追加します。 | 組み込みのログ記録メカニズムのいずれかまたは任意のログ記録モジュールを使用して、関数にログ記録ステートメントを追加します。 Python でのメッセージのログ記録の例を次に示します。
| アプリ開発者、クラウドアーキテクト |
関数をテストします。 |
関数の実行: すべてが正しく機能すると成功と表示されます。 | アプリ開発者、クラウドアーキテクト |
タスク | 説明 | 必要なスキル |
---|---|---|
インデックスをクエリします。 | OpenSearch で、次のコマンドを実行してインデックスをクエリします。
ログはクエリ結果に表示されます。 | クラウドアーキテクト |
トラブルシューティング
問題 | ソリューション |
---|---|
接続の問題 |
|
データ取り込みエラー |
|
関連リソース
OpenSearch の Lambda テレメトリ統合の例
(GitHub リポジトリ) Lambda 拡張機能を使用した Lambda 関数の拡張 (Lambda ドキュメント)
Lambda Telemetry API (Lambda ドキュメント)
AWS Lambda Telemetry API の
紹介 (AWS ブログ記事) AWS Lambda Telemetry API と Prometheus および OpenSearch の統合
(AWS ブログ記事)
追加情報
ログ構造の変更
拡張機能は、デフォルトでネストされたドキュメントとしてログを OpenSearch に送信します。これにより、ネストされたクエリを実行して個々の列値を取得できます。
デフォルトのログ出力が特定のニーズを満たさない場合は、 が提供する Lambda 拡張機能のソースコードを変更することでカスタマイズできます AWS。 AWS は、出力をビジネス要件に合わせて調整するようお客様にお勧めします。ログ出力を変更するには、拡張機能のソースコード内の telemetry_dispatcher.py
ファイルで dispatch_to_opensearch
関数を見つけ、必要な変更を行います。