Amazon Web Services ブログ

Lambda 関数をモニタリングし、AWS Chatbot で通知を受け取る

AWS Lambda は、ハードウェアのプロビジョニングや管理を行わずにコードを実行できるサーバーレスコンピューティングサービスです。データやシステム状態の変化をトリガーに Lambda 関数を起動し、コードを実行できます。例えば、Amazon S3 へのデータアップロード直後に、そのデータを処理するための Lambda 関数を起動できます。 Lambda を他の AWS サービスと組み合わせることで、開発者は高可用性構成で自動的にスケールアップおよびスケールダウンするウェブアプリケーションを構築できます。その一時的な性質と手軽さのために Lambda は多くのソリューションやアーキテクチャに用いられており、不可欠なサービスとなっています。しかし、コードのロジックまたは条件の不備、または他のサービスとの接続問題により、 Lambda は実行に失敗する可能性があります。このような Lambda 関数の実行時のエラーは、ワークフローとアーキテクチャ全体に多大な影響を与える可能性があります。

このブログ記事では、Lambda で実行時のエラーが発生した場合に、AWS Chatbot を利用してSlack に通知する設定手順について説明します。AWS Chatbot を使って、Slack または Amazon Chime でリアルタイムに通知を受け取ることができます。また、Slack チャンネル内でコマンドを発行することができるため、迅速な対応が実現できます。

このブログ記事では、Lambda の包括的なモニタリングソリューションについては説明していません。Lambda の包括的なモニタリングの詳細については、こちらを参照してください。この記事では、Lambda の実行時のエラーをすばやく検知して、Slack に通知することにフォーカスしています。このソリューションには、CloudWatch アラームを設定するための Lambda 関数も含まれ、Lambda 関数の名前もしくはタグに基づいて構成します。

Lambda 関数は Amazon CloudWatch と統合されています。ランタイムログに加えて呼び出し回数、期間、エラー数などのメトリクスを表示できます。これらのメトリクスを使用して、Lambda 関数の稼働状況を監視し、実行の可用性を高めることができます。ここでは、Lambda の実行時のエラーをキャッチするためのエラーカウントメトリクスのみに焦点を当てます。

ソリューション概要

このソリューションでは、以下に示すように CloudWatch、Amazon SNS、および AWS Chatbot を使用し、 CloudWatch に保存されている Lambda 関数のメトリクスを活用します。エラーカウントが閾値を超えた場合、CloudWatch アラームがトリガーされます。アラームがトリガーされるとすぐに、Amazon SNS のトピックに通知します。SNS トピックをサブスクライブしている AWS Chatbot は、情報を取得して Slack チャンネルに通知します。

Figure 1: Services used in the solution
図 1: ソリューションで使用されるサービス

それでは、個々のサービスを詳しく見ていきましょう。
CloudWatch は、ログ、メトリクス、イベントの形式でデータを収集するように構築されたオブザーバビリティを持つ監視サービスです。Lambda はユーザーに代わって Lambda 関数を自動的に監視し、CloudWatch を通じてメトリクスを報告します。コードの実行時にモニタリングできるように、Lambda はリクエスト数、リクエストあたりの呼び出し時間、エラーになったリクエスト数を自動的に追跡します (図 2 を参照)。

Figure 2: CloudWatch metrics
図 2: Lambda の CloudWatch メトリクス

Lambda 関数の実行時のエラーを監視するには、エラーカウントの値が 0 を超えたときにトリガーされる CloudWatch アラームを作成する必要があります。アラームの詳細については、図 3 を参照してください。

Figure 3: CloudWatch alarm
図 3: CloudWatch アラーム

Amazon SNS は、完全マネージド型のメッセージングサービスです。SNS トピックを使用して、Amazon SQS、 Lambda、HTTPS エンドポイント、または E メールにメッセージを発行できます。このソリューションでは、Amazon SNS を使用して Slack とメールで通知します。

Figure 4: SNS topic
図 4: SNS トピック

AWS Chatbot は、AWS サービスとお客様の Slack チャンネルまたは Amazon Chime チャットルームを統合するサービスです。数回クリックするだけで、Slack チャンネル内で通知の受信を開始します。また、Slack チャンネルに aws App を追加することで、AWS CLI コマンドを発行してオペレーションすることもできるようになります。

Figure 5: aws cli command
図 5: aws cli コマンド

ソリューションはここ からダウンロードできます。CloudWatch アラームを作成する Lambda 関数が埋め込まれた AWS CloudFormation テンプレートです。ソリューション全体が 1 つの CloudFormation スタックとしてデプロイされます。名前もしくはタグに基づいて多くの Lambda 関数で Cloud Watch アラームを有効にするオプションがあります。この Lambda 関数を拡張して、アラームの作成中に他の機能を実行できます。

前提条件

AWS Chatbot から Slack への接続を確立し、目的のチャンネルにメッセージを送信するには、ワークスペース ID と Slack チャンネル ID が必要です。

ワークスペース ID を取得するには、コンソールの AWS Chatbot サービスにアクセスしてください。

  • チャットクライアントで AWS Chatbot の設定を開始するには、AWS Chatbot コンソールで [Configure new client] を選択し、[Amazon Chime] または [Slack] を選択します。
  • セットアップウィザードで Slack OAuth 2.0 のページにリダイレクトされます。右上隅で設定する Slack ワークスペースを選択し、「Agree」を選択します。Slack ワークスペースが AWS Slack アプリをインストールします。
  • ワークスペース ID を書き留めておきます (例:T01UXHUCRMW)。これは、後で CloudFormation テンプレートをデプロイするときに必要になります。

Slack チャンネル ID を取得するため、デスクトップアプリまたはウェブ上の Slack にアクセスしてください。チャンネルを右クリックして、リンクをコピーします。コピーされたリンクの最後の部分がチャネル ID です(たとえば、C01U80K9KPD)。

Lambda 関数の名前またはタグ名を入力して、Lambda 関数のグループを監視するようにソリューションをデプロイできます。後で使用する場合、目的の Lambda 関数に同じタグを付けるようにしてください。

ソリューションのデプロイ

ソリューションをデプロイするには、次の手順に従います。

  1. CloudFormation テンプレートはこちらからダウンロードしてください。
  2. AWS マネジメントコンソールにサインインし、CloudFormation コンソールを開きます。
  3. [Create Stack with new resources (standard)] を選択します。
  4. [Templates] で、ローカルドライブからテンプレートファイル (CloudFormationTemplate.yml) をアップロードすることを選択し、[Next] を選択します。
  5. 次のパラメータを入力します。
    • AlarmEMail: AWS Lambda の実行時エラーの E メールを受信することを選択した場合は、ここにメールアドレスを入力します。
    • LambdaFunctionNames: リージョン内の Lambda 関数名のカンマ区切りリスト。このパラメータは、LambdaFunctionTags および LambdaFunctionTagsValue パラメータに値を指定すると、オプションになります。
    • LambdaFunctionTags: アカウントでモニタリング用の Lambda 関数を見つけて追加するために評価されるタグの名前。LambdaFunctionNames で関数の名前を指定した場合、このパラメータは LambdaFunctionTagsValue とともにオプションになります。
    • LambdaFunctionTagsValue: モニタリング用の Lambda 関数を見つけて追加するために照合されるタグの値。このパラメータは、LambdaFunctionTags でタグキーを指定した場合に必要です。
    • SlackWorkspaceId: Slack ワークスペース ID を入力します。
    • SlackChannelId: チャンネル ID を入力します。

Figure 6: Parameters
図 6: パラメータ

  1. CloudFormation スタックをデプロイします。3 ~ 4 分ほど時間がかかります。
  2. リソース (Lambda 関数、Lambda 実行ロール、SNS トピック、AWS Chatbot の設定) が CloudFormation スタックによって作成されていることを確認してください。CloudWatch メトリクスアラームが、パラメータに記載されているタグ値を持つすべての Lambda 関数に対して作成されていることがわかります。

Figure 7: Tags
図 7: タグ

CloudWatch コンソールの [Alarms] ページで、CloudWatch アラームが作成されたことを確認できます。

Figure 8: CloudWatch alarm
図 8: CloudWatch アラーム

CloudFormation のデプロイ中に email-id を指定して E メールを受信することを選択した場合は、サブスクリプションを確認するための E メールが送信されます。メールボックスを確認し、リンクをクリックしてください。

クリーンアップ

アカウントに課金され続けないように、AWS CloudFormation スタックと AWS リソースを削除します。詳細については、AWS CloudFormation ユーザーガイドの「Deleting a stack on the AWS CloudFormation console」を参照してください。

結論

このブログ記事では、AWS Chatbot を活用して AWS Lambda の実行時にエラーが発生した場合に Slack 通知を取得する方法を説明しました。AWS Lambda はサーバーレスで他のサービスと統合されているため、AWS Lambda はすべての組織で広く使用されています。何らかの理由で AWS Lambda の実行に失敗すると、運用に影響を与えたり、サービスが中断したりする可能性があります。AWS Chatbot を活用することで、あなたやあなたのチームはリアルタイムで通知を受け取り、Slack チャンネルから AWS コマンドを実行してトラブルシューティングすることができます。

このソリューションは AWS Lambda 実行時のエラーを追跡するのに役立つだけでなく、変更または拡張して重要な他のメトリクスをモニタリングすることもできます。

著者について

Parag Nagwekar

Parag Nagwekar

Parag Nagwekar は、アマゾンウェブサービスのクラウドインフラストラクチャアーキテクトです。お客様と協力して、複数のサービスに基づくイベント駆動型ソリューションの設計と構築を行っています。

Arindom Sarkar

Arindom Sarkar

Arindom Sarkar は GSV アプリケーションアーキテクトです。彼はサーバーレスアプリケーションのフレームワークとインフラストラクチャに重点を置いています。

翻訳はソリューションアーキテクトの村田が担当しました。原文はこちら