当在EC2上使用laravel5.8和Amazon Elasticsearch Service时,遇到了困难
概述
想要将AWS的EC2和Elasticsearch Service连接起来,但却不料陷入了困境的故事。
很多人在EC2上安装和使用Elasticsearch,但是很少有关于建立Elasticsearch服务并连接的文章。
我在AWS EC2上安装了ElasticSearch。
在AWS上使用EC2和Amazon Elasticsearch Service一起创建时遇到了一些问题。
由于网络上没有关于当前流行的Laravel的文章,所以我写了这篇文章。
在中文中利用环境。
基礎設施章节
-
- EC2(centOS7)
- elasticsearch Service
行动环境
-
- laravel5.8(php7.2)
-
- elasticsearch Service 6.7
-
- mysql8.0
- nginx1.17
本地开发环境
本地开发环境使用Docker搭建Elasticsearch容器进行开发。由于使用Laravel框架,因此顺便使用Scout工具。
这里是关于本地.env配置的设置。
SCOUT_DRIVER=elasticsearch
ELASTICSEARCH_HOST=http://elasticsearch:9200
只要改变ELASTICSEARCH_HOST的终端,就可以了!
尝试将Elasticsearch Service与EC2连接起来。
当我在ec2上使用curl进行调用时,得到了正常的响应!
[centos@ip-***-**-**-* ****]$ curl https://エンドポイント.es.amazonaws.com
{
"name" : "WNwU_Bn",
"cluster_name" : "*********:********",
"cluster_uuid" : "*****************",
"version" : {
"number" : "6.7.0",
"build_flavor" : "oss",
"build_type" : "zip",
"build_hash" : "b8dfb4c",
"build_date" : "2019-05-22T06:01:36.852084Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
互相联系的意思是
SCOUT_DRIVER=elasticsearch
ELASTICSEARCH_HOST=http://elasticsearch:9200
把 を 解释成母语的中文
SCOUT_DRIVER=elasticsearch
ELASTICSEARCH_HOST=エンドポイントのURL
只要修改.env文件,应该就可以了!
Laravel和Elasticsearch服务无法连接!
即使我修改了.env文件,php artisan migrate:refresh –seed仍然无法通过!虽然RDS连接正常,但是似乎无法成功进行填充测试数据。
Artisan::call('scout:import', ["model" => User::class]);
出现错误的地方。
Elasticsearch\Common\Exceptions\NoNodesAvailableException : No alive nodes found in your cluster
当我尝试调查时,发现在超时情况下会出现此错误消息,建议将超时时间延长并尝试。
然而,测试记录只有一条。
不应该发生超时。
curl仍然能够正常通行。
本地环境也没有问题。
谜团变得更加深奥,只有时间在流逝…
站在那里的是端口号。
毫无头绪地盯着电脑屏幕,追踪vendor以下的源代码时,发现了一个奇怪的描述。
/**
* @throws InvalidArgumentException
*/
private function extractURIParts(string $host): array
{
$parts = parse_url($host);
if ($parts === false) {
throw new InvalidArgumentException("Could not parse URI");
}
if (isset($parts['port']) !== true) {
$parts['port'] = 9200;
}
return $parts;
}
那个?
如果没有写端口号,会自动连接到9200号端口?
哎呀哎呀。。。
如果真的有使用HTTPS的话,那肯定是连接到443端口了吧、、、、。
试着追踪,但没有这样的处理。
总而言之,
SCOUT_DRIVER=elasticsearch
ELASTICSEARCH_HOST=エンドポイントのURL:443
似乎需要写下主机和端口号!
被一些微小的配置文件弄得彻底迷茫了。果然还是要好好追踪源代码才行呀!