This package provides a signing handler for use with the official
Elasticsearch-PHP (elasticsearch/elasticsearch
) client. By default, the
handler will load AWS credentials from the environment and send requests using a
RingPHP cURL handler.
Instances of Aws\ElasticsearchService\ElasticsearchPhpHandler
are callables
that fulfill Elasticsearch-PHP's handler contract. They can be passed to
Elasticsearch\ClientBuilder
's setHandler
method:
use Aws\ElasticsearchService\ElasticsearchPhpHandler;
use Elasticsearch\ClientBuilder;
// Create a handler (with the region of your Amazon Elasticsearch Service domain)
$handler = new ElasticsearchPhpHandler('us-west-2');
// Use this handler to create an Elasticsearch-PHP client
$client = ClientBuilder::create()
->setHandler($handler)
->setHosts(['https://search-foo-3gn4utxfus5cqpn89go4z5lbsm.us-west-2.es.amazonaws.com:443'])
->build();
// Use the client as you normally would
$client->index([
'index' => $index,
'type' => $type,
'id' => $id,
'body' => [$key => $value]
]);
By default, the handler will attempt to source credentials from the environment as described in the AWS SDK for PHP documentation. To use custom credentials, pass in a credential provider:
use Aws\Credentials\CredentialProvider;
use Aws\Credentials\Credentials;
use Aws\ElasticsearchService\ElasticsearchPhpHandler;
$provider = CredentialProvider::fromCredentials(
new Credentials('foo', 'bar', 'baz')
);
$handler = new ElasticsearchPhpHandler('us-west-2', $provider);
By default, the handler will use Elasticsearch\ClientBuilder::defaultHandler()
to dispatch HTTP requests, but this is customizable via an optional constructor
parameter. For example, this repository's tests use a custom handler to mock
network traffic:
class ElasticsearchPhpHandlerTest extends \PHPUnit_Framework_TestCase
{
public function testSignsRequestsPassedToHandler()
{
$toWrap = function (array $ringRequest) {
$this->assertArrayHasKey('X-Amz-Date', $ringRequest['headers']);
$this->assertArrayHasKey('Authorization', $ringRequest['headers']);
$this->assertStringStartsWith(
'AWS4-HMAC-SHA256 Credential=',
$ringRequest['headers']['Authorization'][0]
);
return $this->getGenericResponse();
};
$handler = new ElasticsearchPhpHandler('us-west-2', null, $toWrap);
$client = \Elasticsearch\ClientBuilder::create()
->setHandler($handler)
->build();
$client->get([
'index' => 'index',
'type' => 'type',
'id' => 'id',
]);
}
...
}
composer require jsq/amazon-es-php