使用对自定义 Amazon CloudSearch 域请求进行签名AmazonSDK for PHP 版本 3 - Amazon适用于 PHP 的开发工具包
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用对自定义 Amazon CloudSearch 域请求进行签名AmazonSDK for PHP 版本 3

可以在支持的范围之外对 Amazon CloudSearch 域请求进行自定义AmazonSDK for PHP。当您需要向受 IAM 身份验证保护的域发出自定义请求时,可以使用开发工具包的凭证提供程序和签署人对任何PSR-7 请求

例如,如果您要按照 Cloud Search 的入门指南操作,并想在第 3 步中使用受 IAM 保护的域,则需要按以下方式签署并执行请求。

以下示例演示如何:

  • 对请求进行签名Amazon使用签名协议签名

所有示例代码AmazonSDK for PHP 版本 3GitHub 上的

Credentials

运行示例代码之前,请配置Amazon凭证,如的凭证AmazonSDK for PHP 版本 3。然后导入Amazon适 SDK for PHP 软件开发工具包,如基本使用模式AmazonSDK for PHP 版本 3

为 CSlong 域请求签名

导入

require './vendor/autoload.php'; use Aws\Credentials\CredentialProvider; use Aws\Signature\SignatureV4; use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request;

示例代码

function searchDomain($client, $domainName, $domainId, $domainRegion, $searchString) { $domainPrefix = 'search-'; $cloudSearchDomain = 'cloudsearch.amazonaws.com'; $cloudSearchVersion = '2013-01-01'; $searchPrefix = 'search?'; // Specify the search to send. $request = new Request( 'GET', "https://{$domainPrefix}{$domainName}-{$domainId}.{$domainRegion}." . "{$cloudSearchDomain}/{$cloudSearchVersion}/" . "{$searchPrefix}{$searchString}" ); // Get default AWS account access credentials. $credentials = call_user_func(CredentialProvider::defaultProvider())->wait(); // Sign the search request with the credentials. $signer = new SignatureV4('cloudsearch', $domainRegion); $request = $signer->signRequest($request, $credentials); // Send the signed search request. $response = $client->send($request); // Report the search results, if any. $results = json_decode($response->getBody()); $message = ''; if ($results->hits->found > 0) { $message .= 'Search results:' . "\n"; foreach($results->hits->hit as $hit) { $message .= $hit->fields->title . "\n"; } } else { $message .= 'No search results.'; } return $message; } function searchADomain() { $domainName = 'my-search-domain'; $domainId = '7kbitd6nyiglhdtmssxEXAMPLE'; $domainRegion = 'us-east-1'; $searchString = 'q=star+wars&return=title'; $client = new Client(); echo searchDomain($client, $domainName, $domainId, $domainRegion, $searchString); } // Uncomment the following line to run this code in an AWS account. // searchADomain();