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

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

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

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

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

以下示例演示如何:

  • 使用签署请求Amazon使用签名协议签名 v4.

Amazon SDK for PHPGitHub 上提供了的所有示例代码。

凭证

运行示例代码之前,请配置您的Amazon凭证,如中所述设置 凭证. 然后导入Amazon SDK for PHP,如中所述基本用法.

为 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();