无法使用AWS lambda连接到elasticsearch服务

7rfyedvj  于 2022-12-26  发布在  ElasticSearch
关注(0)|答案(1)|浏览(135)

我正在使用localstack在端口4566上运行lambdas,如下图所示

version: "2.1"
services:
  localstack:
    image: "localstack/localstack"
    container_name: "localstack"
    ports:
      - "4566-4620:4566-4620"
      - "127.0.0.1:8055:8080"
    environment:
      - SERVICES=s3,es,dynamodb,apigateway,lambda,sns,sqs,sloudformation
      - DEBUG=1
      - EDGE_PORT=4566
      - DATA_DIR=/var/lib/localstack/data
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOST_TMP_FOLDER=${TMPDIR}
      - LAMBDA_EXECUTOR=docker
      - DYNAMODB_SHARE_DB=1
      - DISABLE_CORS_CHECKS=1
      - AWS_DDB_ENDPOINT=http://localhost:4566

    volumes:
      - "${TMPDIR:-/var/lib/localstack}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
      - "local"

  elasticsearch:
    container_name: tqd-elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    # volumes:
    #   - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    depends_on:
      - "localstack"
    logging:
      driver: none
    ports:
      - 9300:9300
      - 9200:9200
    networks:
      - "local"

networks:
  local:
    driver: "bridge"
    • 问题:从lambda调用elasticsearch时没有得到任何响应**这是我的lambda代码

x一个一个一个一个x一个一个二个x
在此之后,即使我转到bash并验证是否已创建此索引,它也会返回空索引集,即未创建任何索引

    • 但是**,相同的代码工作正常,即从httpserver @port 3000和独立javascript文件独立服务器代码调用时,在port 9200的elasticsearch上创建索引
const express = require('express')

const app = express();
const { Client } = require('@elastic/elasticsearch');

const elasticClient = new Client({
  node: "http://localhost:9200"
});

app.listen(3000, () => {
    console.log('listening to the port 3000')
})

const getIndices = async () =>
{
  return await elasticClient.cat.indices()
}

console.log(getIndices().then(res => { console.log(res) }).catch(err => {
  console.log(err)
}))

这是独立的js脚本

const { Client } = require('@elastic/elasticsearch');

const elasticClient = new Client({
  node: "http://localhost:9200"
});

const getIndices = async () =>
{
  return await elasticClient.cat.indices()
}

console.log(getIndices().then(res => { console.log(res) }).catch(err => {
  console.log(err)
}))

这是任何类型的网络错误或docker图像错误吗?

93ze6v8z

93ze6v8z1#

这个问题已经被列在here中,问题出在端点上。所以localhost实际上是寻址你的docker容器,而不是你的主机。如果你在主机上运行你的express服务器,请使用host.docker.internal作为主机名,它将从你的docker容器寻址主机。Elasticsearch图像也是如此。现在代码变成,

elasticClient = new Client({
    node:"http://host.docker.internal:9200"
})

其余部分保持不变。

相关问题