Laravel Scout配置AWS elasticSearch服务

时间:2016-11-17 10:07:24

标签: laravel amazon-web-services elasticsearch 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',
                ],
            ],
        ],
    ],

我配置了我的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/*"
    }
  ]
}

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

群集中找不到活动节点

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

1 个答案:

答案 0 :(得分:3)

如上所述here如果您想在您的ES索引中使用IAM凭据,您需要使用AWS签名版本4对请求进行签名。幸运的是,已经有a package可以为您处理此问题Scout使用的elasticsearch/elasticsearch包。

所以你需要做的就是创建一个扩展ElasticsearchEngine并在处理程序中加载的新引擎。示例:https://gist.github.com/threesquared/65f90c5dda7f6a6fd1afbb6b5089b4ec

然后在您的应用提供商中添加custom engine,如下所示:

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

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

'driver' => 'signed-elasticsearch'