質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1033閲覧

“No Living connections node” のエラーがLambdaからElasticsearch Service接続時に発生する

solt0723

総合スコア67

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/02/28 10:03

編集2021/03/01 13:20

概要

  • こちらの記事を参考に、tweetの感情分析を行おうとしています
  • Lambda、Elasticsearch Serviceを終えて、Lambdaをテスト実行すると、掲題のエラーが発生します
  • このエラーを解消したいものの、解決方法を見つけられず。。お力をお貸しください

エラー概要

エラー内容

Lambdaをテスト実行すると下記のエラーが発生します

e to revive connection: ESのエンドポイント Elasticsearch WARNING: 2021-02-28T09:55:05Z No living connections 以下略

実行内容

記事内容通り、下記のコードを実行しています。
(実際には、node modulesなどもLambdaにアップしています。また環境変数を利用しています)

/** モジュールのimport */ const twitter = require('twitter'); const elasticSearch = require('elasticsearch'); const AWS = require('aws-sdk'); /** 各クライアントの生成 */ // elasticsearch用のクライアント const elasticsearchClient = new elasticSearch.Client({ service : 'es', region : process.env.ES_REGION, host : process.env.ES_HOST }); // Twitter用のクライアント const twitterClient = new twitter({ consumer_key : process.env.TW_CONSUMER_KEY, // API Key consumer_secret : process.env.TW_CONSUMER_SECRET, // API Secret Key access_token_key : process.env.TW_ACCESS_TOKEN_KEY, // Access Token access_token_secret : process.env.TW_ACCESS_TOKEN_SECRET, // Access Token Secret }); // 翻訳用 const translate = new AWS.Translate(); const translateParams = { SourceLanguageCode: 'ja', TargetLanguageCode: 'en', Text: '' }; // 感情分析用 const comprehend = new AWS.Comprehend({region: 'us-east-1'}); /** * Elasticsearchにデータを登録します。 */ var createIndexAndStreamDataOnES = function(indexName, id, body) { // Elasticsearchに登録 elasticsearchClient.create({ index : indexName, type : 'test', id : id, body : body }, function(err, data) { if (err) { console.log("Error on creating data", err); } else { console.log("data reply received", data); } }); }; /** * 与えられた文字列の感情分析をします。 */ const detectSentiment = function (text) { return new Promise((resolve, reject) => { let params = { LanguageCode: "en", Text: text }; comprehend.detectSentiment(params, function (err, data) { if (err) { console.log(err, err.stack); reject(err); } else { resolve(data.Sentiment); } }); }); }; /** * 引数に与えられた文字列を含むTweetを検索し、 * 検索結果をElasticsearchに登録します。 */ function searchTweet(queryArg, nextResultsMaxIdArg = null) { // Tweetを検索 twitterClient.get('search/tweets', { q: queryArg, count: 100, max_id: nextResultsMaxIdArg }, (error, searchData, response) => { // エラーが発生した場合 if (error) { console.log(error); return 1; } // Tweetの検索結果が存在していた場合 if (searchData !== undefined) { var item = null; for (item in searchData.statuses) { // tweet情報 let tweet = searchData.statuses[item]; // タイムスタンプ情報を保持 tweet["@timestamp"] = new Date(tweet["created_at"]); // 検索条件を保持 tweet["searchParam"] = queryArg; // 英語に翻訳 translateParams["Text"] = tweet.text; translate.translateText(translateParams, function(err, translateResult) { if (err) { console.log(err, err.stack); // an error occurred } else { // 英訳したテキストの感情を分析 detectSentiment(translateResult.TranslatedText).then(function(sentiment) { // 分析結果を保持して、elaseticsearchに登録 tweet["sentiment"] = sentiment; createIndexAndStreamDataOnES("twitter", tweet["id_str"], tweet); }); } }); } if (searchData.search_metadata == undefined) { return 0; } else if (searchData.search_metadata.next_results) { let maxId = searchData.search_metadata.next_results.match(/?max_id=(\d*)/); if (maxId[1] == null) { return 0; } searchTweet(queryArg, maxId[1]); } else { return 0; } } }); } /** * Lambdaのハ![イメージ説明](d050a7c1514e5fcffb15e0354f7afc05.png)です。 */ exports.handler = function (event) { // ツイートを検索 searchTweet(event.keyword); // レスポンスを返す const response = { statusCode: 200, body: JSON.stringify('Success!'), }; return response; };

確認したこと

  • ESのステータスはアクティブでした

イメージ説明

  • コード内で指定しているESのホストは、ESのホストの下記の画像の網掛けと一致していました

イメージ説明

  • ES側のアクセスポリシーはオープンアクセスになっています
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Resource": "ARN" } ] }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問