我正在尝试编写一个脚本来自动更新我在Route 53中注册的名称服务器。
这可以通过Amazon Rest API完成:
http://docs.aws.amazon.com/Route53/latest/APIReference/api-update-domain-name-servers.html
到目前为止,我一直在使用AmazonPHPSDK。。。但是这个SDK甚至不支持这个命令(或者大多数Route 53命令)。
我花了几个小时试图使用php+ccurl来形成一个请求。我有我需要的一切-一个acesskeyID,密钥等。无论我做什么,我似乎都无法获得有效的签名。医生是一场噩梦。。。与PHP相关的一切都会立即将您指向SDK,这在这里没有任何帮助。
请告诉我如何用PHP发出REST请求,用我的密钥签名,然后得到响应。
编辑:以下是我在签署请求时尝试遵循的内容。
您使用的是哪个版本的SDK?
根据api v3文档,您可以使用以下内容:
$result = $client->updateDomainNameservers([/* ... */]);
$promise = $client->updateDomainNameserversAsync([/* ... */]);
这些是相关参数:
$result = $client->updateDomainNameservers([
'DomainName' => '<string>', // REQUIRED
'FIAuthKey' => '<string>',
'Nameservers' => [ // REQUIRED
[
'GlueIps' => ['<string>', ...],
'Name' => '<string>', // REQUIRED
],
// ...
],
]);
如果您没有使用最新版本的sdk,您可以使用composer
:进行安装
php composer.phar require aws/aws-sdk-php
或者使用这里的任何安装方法。
我真的认为你最好坚持使用SDK,除非真的不可能(我认为这里不是这样,如果我错了,请纠正我)。
如果使用composer安装,您可以更新composer.json文件以包含:
{
"require": {
"aws/aws-sdk-php": "3.*"
}
}
并运行composer update
如果你只想检查你正在使用的sdk的哪个版本,你可以运行composer info
(在该目录中):
> composer info
aws/aws-sdk-php 3.18.32 AWS SDK for PHP - Use Amazon Web Services in your PHP project
guzzlehttp/guzzle 6.2.1 Guzzle is a PHP HTTP client library
guzzlehttp/promises 1.2.0 Guzzle promises library
guzzlehttp/psr7 1.3.1 PSR-7 message implementation
mtdowling/jmespath.php 2.3.0 Declaratively specify how to extract elements from a JSON document
psr/http-message 1.0 Common interface for HTTP messages
或者检查composer.lock
文件的内容。你应该有你正在使用的sdk的版本:
"packages": [
{
"name": "aws/aws-sdk-php",
"version": "3.18.32",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "84b9927ee116b30babf90a9fc723764672543e29"
},
确保使用最后一个。
多亏了@Dekel,我才得以解决这个问题。这是我的最终代码。
require_once '/vendor/autoload.php';
$access_key="XXXXX";
$secret_key="XXXXXXXXXXXX";
$client = Aws'Route53Domains'Route53DomainsClient::factory(array(
'region'=> "us-east-1",
'version'=>'2014-05-15',
'credentials' => array(
'key' => $access_key,
'secret' => $secret_key,
)));
$result = $client->updateDomainNameservers([
'DomainName' => 'example.com',
"Nameservers"=>array(
array("Name"=>"ns.1.com"),
array("Name"=>"ns.2.com")
)
]);