使用无服务器框架

时间:2020-02-12 13:49:13

标签: node.js aws-lambda amazon-cognito serverless-framework aws-elasticsearch

我正在使用无服务器框架来实现无服务器项目。我在serverless.yml文件中添加了一些配置,以创建成功创建的aws elasticsearch服务的实例。然后,我在处理程序中创建了一个Elasticsearch客户端,并对其进行ping操作以进行测试。 因此,当我从本地系统上的无服务器脱机ping通弹性搜索客户端时,它工作正常并得到了“真实”响应,但是当我在aws lambda上部署相同的代码时,直到30秒钟没有响应后,它才超时。

已提供了所有必需的政策,但没有成功。

Serverless.yml:-

ElasticSearchInstance:
  Type: AWS::Elasticsearch::Domain
  Properties:
    EBSOptions:
      EBSEnabled: true
      VolumeType: gp2
      VolumeSize: 10
    ElasticsearchClusterConfig:
      InstanceType: t2.small.elasticsearch
      InstanceCount: 1
      DedicatedMasterEnabled: false
      ZoneAwarenessEnabled: false
    ElasticsearchVersion: 7.1

Handler.js:-

var {Client} = require('elasticsearch');
var client = new Client({
 host: 'Aws elasticsearch endpoint',
 log: 'trace'
});

module.exports.elasticSearchPing = async () => {
  try {
  console.log('Inside elasticSearchPing function!!!!');
  const res = await client.ping({requestTimeout: 900000});
  console.log('Res: ', res);
  return {
  statusCode: 200,
  body: JSON.stringify({ message: 'Connection successful with elasticSearch.' })
 }
} catch (err) {
  console.log('err: ', err);
  return {
    statusCode: err.statusCode || 500,
    headers: { 'Content-Type': 'text/plain' },
    body: 'Error connecting elasticsearch.'
    }
 }
}

1 个答案:

答案 0 :(得分:0)

这样,aws elasticsearch便无法知道您是谁。您需要先签署请求,然后再将其发送到aws elasticsearch。您可以使用名为http-aws-es的软件包,该软件包基本上从ec2 / lambda中读取aws凭证并为您签名请求。您的代码将如下所示

const {Client} = require("elasticsearch");
const esConnectionClass = require("http-aws-es");

const client = new Client({
  "host": "Aws elasticsearch endpoint",
  "log": "trace",
  "connectionClass": esConnectionClass
});

module.exports.elasticSearchPing = async () => {
  try {
    console.log("Inside elasticSearchPing function!!!!");
    const res = await client.ping({"requestTimeout": 900000});
    console.log("Res: ", res);
    return {
      "statusCode": 200,
      "body": JSON.stringify({"message": "Connection successful with elasticSearch."})
    };
  } catch (err) {
    console.log("err: ", err);
    return {
      "statusCode": err.statusCode || 500,
      "headers": {"Content-Type": "text/plain"},
      "body": "Error connecting elasticsearch."
    };
  }
};

相关问题