AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
版本 3 具有 Amazon CloudSearch 对自定义 AWS SDK for PHP 域请求进行签名
可以在AWS SDK for PHP支持的范围之外对 Amazon CloudSearch 域请求进行自定义。当您需要向受 IAM 身份验证保护的域发出自定义请求时,可以使用开发工具包的凭证提供程序和签署人对任何
PSR-7 请求进行签名。
例如,如果您要按照 Cloud Search 的入门指南操作,并想在第 3 步中使用受 IAM 保护的域,则需要按以下方式签署并执行请求。
以下示例演示如何:
使用 SignatureV4 通过 AWS 签名协议对请求签名。
版本 3 的所有示例代码在 AWS SDK for PHP 上的此处提供。GitHub
Credentials
签署 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)
{undefined
$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) {undefined
$message .= 'Search results:' . "\n";
foreach($results->hits->hit as $hit)
{undefined
$message .= $hit->fields->title . "\n";
}
} else {undefined
$message .= 'No search results.';
}
return $message;
}
function searchADomain()
{undefined
$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();