Laravel Scout 配置 AWS elasticSearch 服务

r.f*_*ipo 2 amazon-web-services elasticsearch laravel laravel-5

使用我的 AWS ES 配置 Scout 时遇到一些问题,

这是我的 scout.php 配置:

'elasticsearch' => [
        'index' => 'yyy',

        'config' => [
            'hosts' => [
                [
                    'host' => search-yyy.eu-west-1.es.amazonaws.com,
                    'port' => 80,
                    'scheme' => 'https',
                    'user' => 'myIAM-UserName',
                    'pass' => 'myIAM-secret',
                ],
            ],
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

我像这样配置了我的 ES 访问策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::XXX:user/myIAM-user",
          "arn:aws:iam::XXX:root"
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:eu-west-1:XXX:domain/yyy/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

看起来我无法连接(我收到以下错误):

在您的集群中找不到活动节点

任何做过这项工作的人都可以帮助我吗?

b3n*_*b3n 5

如此处所述如果您想将 IAM 凭证与 ES 索引一起使用,则需要使用 AWS 签名版本 4 对请求进行签名。幸运的是,已经有一个包可以elasticsearch/elasticsearch使用 Scout 使用的包为您处理此问题。

所以你需要做的就是制作一个新的引擎来扩展ElasticsearchEngine和加载处理程序。这里的例子:https : //gist.github.com/threesquared/65f90c5dda7f6a6fd1afbb6b5089b4ec

然后在您的应用程序提供程序中添加一个自定义引擎,如下所示:

resolve(EngineManager::class)->extend('signed-elasticsearch', function () {
  return new SignedElasticsearchEngine;
});
Run Code Online (Sandbox Code Playgroud)

然后设置 scout 以使用新驱动程序:

'driver' => 'signed-elasticsearch'
Run Code Online (Sandbox Code Playgroud)