是否可以使用 AWS PHP SDK 将子域添加到 Route53?
Is it possible to add a subdomain to Route53 using the AWS PHP SDK?
我正在开展一个项目,我们将在 Route53 中创建子域和域。我们希望有一种方法可以以编程方式执行此操作。 PHP 文档的 SDK 似乎有点简单,但似乎 createHostedZone 可用于创建域或子域记录,而 changeResourceRecordSets 可用于创建必要的 DNS 记录。有没有人有如何实际完成此操作的示例?
是的,这可以使用 changeResourceRecordSets
调用,正如您已经指出的那样。但这有点笨拙,因为即使您 changing/creating 只有一个记录,您也必须像批处理一样构造它,甚至创建也是更改。这是一个完整的示例,没有凭证方法:
<?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',
),
),
),
),
),
),
));
可以找到此方法的文档here。您需要非常仔细地注意必填字段以及其他字段的可能值。例如,name
字段必须是以点 (.) 结尾的 FQDN。
还值得注意:默认情况下,此调用后您不会从 API 返回任何响应,即没有确认或交易 ID。 (虽然它肯定会在出现问题时返回错误。)所以这意味着如果你希望你的代码是防弹的,你应该编写一个 Guzzle 响应处理程序并且你可能想要等待几秒钟然后 运行检查 new/changed 记录是否确实存在。
希望对您有所帮助!
是的,我使用 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) 服务器环境。
我正在开展一个项目,我们将在 Route53 中创建子域和域。我们希望有一种方法可以以编程方式执行此操作。 PHP 文档的 SDK 似乎有点简单,但似乎 createHostedZone 可用于创建域或子域记录,而 changeResourceRecordSets 可用于创建必要的 DNS 记录。有没有人有如何实际完成此操作的示例?
是的,这可以使用 changeResourceRecordSets
调用,正如您已经指出的那样。但这有点笨拙,因为即使您 changing/creating 只有一个记录,您也必须像批处理一样构造它,甚至创建也是更改。这是一个完整的示例,没有凭证方法:
<?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',
),
),
),
),
),
),
));
可以找到此方法的文档here。您需要非常仔细地注意必填字段以及其他字段的可能值。例如,name
字段必须是以点 (.) 结尾的 FQDN。
还值得注意:默认情况下,此调用后您不会从 API 返回任何响应,即没有确认或交易 ID。 (虽然它肯定会在出现问题时返回错误。)所以这意味着如果你希望你的代码是防弹的,你应该编写一个 Guzzle 响应处理程序并且你可能想要等待几秒钟然后 运行检查 new/changed 记录是否确实存在。
希望对您有所帮助!
是的,我使用 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) 服务器环境。