我正在从事一个项目,其中我们将创建Route53中的子域和域名。 我们希望有一种编程方式来实现此操作。 PHP SDK文档似乎有点简略,但似乎可以使用createHostedZone来创建域名或子域名记录,并且可以使用changeResourceRecordSets来创建所需的DNS记录。 有人有如何实际完成此操作的示例吗?
我正在从事一个项目,其中我们将创建Route53中的子域和域名。 我们希望有一种编程方式来实现此操作。 PHP SDK文档似乎有点简略,但似乎可以使用createHostedZone来创建域名或子域名记录,并且可以使用changeResourceRecordSets来创建所需的DNS记录。 有人有如何实际完成此操作的示例吗?
是的,这可以通过使用changeResourceRecordSets
调用来实现,就像您已经指出的那样。但是,这有点笨拙,因为即使您只更改/创建一个记录,您也必须将其结构化为批处理,而即使是创建也是更改。以下是一个完整的示例,不包含凭据方法:
<?php
// Include the SDK using the Composer autoloader
require 'vendor/autoload.php';
use Aws\Route53\Route53Client;
use Aws\Common\Credentials\Credentials;
$client = Route53Client::factory(array(
'credentials' => $credentials
));
$result = $client->changeResourceRecordSets(array(
// HostedZoneId is required
'HostedZoneId' => 'Z2ABCD1234EFGH',
// ChangeBatch is required
'ChangeBatch' => array(
'Comment' => 'string',
// Changes is required
'Changes' => array(
array(
// Action is required
'Action' => 'CREATE',
// ResourceRecordSet is required
'ResourceRecordSet' => array(
// Name is required
'Name' => 'myserver.mydomain.com.',
// Type is required
'Type' => 'A',
'TTL' => 600,
'ResourceRecords' => array(
array(
// Value is required
'Value' => '12.34.56.78',
),
),
),
),
),
),
));
该方法的文档可以在此处找到。您需要非常注意必填字段以及其他字段的可能值。例如,name
字段必须是以点(.)结尾的FQDN。
还值得注意的是:默认情况下,在此调用后,API不会返回任何响应,即没有确认或事务ID。(尽管如果出现问题,它肯定会返回错误。)因此,这意味着如果您希望您的代码无懈可击,您应编写一个Guzzle响应处理程序,并且您可能需要等待几秒钟,然后运行检查以确保新/更改的记录确实存在。
希望这有所帮助!
changeResourceRecordSets
方法。<?php
require 'vendor/autoload.php';
use Aws\Route53\Route53Client;
use Aws\Exception\CredentialsException;
use Aws\Route53\Exception\Route53Exception;
//To build connection
try {
$client = Route53Client::factory(array(
'region' => 'string', //eg . us-east-1
'version' => 'date', // eg. latest or 2013-04-01
'credentials' => [
'key' => 'XXXXXXXXXXXXXXXXXXX', // eg. VSDFAJH6KXE7TXXXXXXXXXX
'secret' => 'XXXXXXXXXXXXXXXXXXXXXXX', //eg. XYZrnl/ejPEKyiME4dff45Pds54dfgr5XXXXXX
]
));
} catch (Exception $e) {
echo $e->getMessage();
}
/* Create sub domain */
try {
$dns = 'yourdomainname.com';
$HostedZoneId = 'XXXXXXXXXXXX'; // eg. A4Z9SD7DRE84I ( like 13 digit )
$name = 'test.yourdomainname.com.'; //eg. subdomain name you want to create
$ip = 'XX.XXXX.XX.XXX'; // aws domain Server ip address
$ttl = 300;
$recordType = 'CNAME';
$ResourceRecordsValue = array('Value' => $ip);
$client->changeResourceRecordSets([
'ChangeBatch' => [
'Changes' => [
[
'Action' => 'CREATE',
"ResourceRecordSet" => [
'Name' => $name,
'Type' => $recordType,
'TTL' => $ttl,
'ResourceRecords' => [
$ResourceRecordsValue
]
]
]
]
],
'HostedZoneId' => $HostedZoneId
]);
}
如果您遇到任何错误,请检查服务器的error.log文件。如果您从SDK库中获得了错误,则可能是PHP版本不受支持。 如果您从本地计算机上运行此代码,则可能会收到“SignatureDoesNotMatch”错误,请确保在相同的(AWS)服务器环境中运行此代码。