kmoney12
kmoney12

Reputation: 4480

Amazon PHP Rest API with CURL

I am trying to write a script to automatically update the nameservers that I registered in Route 53.

This can be done via Amazon Rest API:

http://docs.aws.amazon.com/Route53/latest/APIReference/api-update-domain-name-servers.html

Up to this point, I have been using the Amazon PHP SDK...but this SDK doesn't even have support for this command (or a majority of Route 53 commands).

I've spent hours trying to form a request using php+curl. I have everything I need - an acesskeyID, secret key, etc. No matter what I do I can NOT seem to get the signature to be valid. The docs are a nightmare...everything related to PHP immediately points you to the SDK, which is no help here.

Please show me how to make a REST request with PHP, sign it using my key, and get a response.

Edit: Here is what I tried to follow to sign the request.

Upvotes: 1

Views: 2205

Answers (2)

kmoney12
kmoney12

Reputation: 4480

Thanks to @Dekel, I was able to solve this problem. Here is my final code.

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")
    )
]);

Upvotes: 0

Dekel
Dekel

Reputation: 62536

Which version of the SDK are you using?

According to api v3 docs you can use this:

$result = $client->updateDomainNameservers([/* ... */]);
$promise = $client->updateDomainNameserversAsync([/* ... */]);

And these are the relevant parameters:

$result = $client->updateDomainNameservers([
    'DomainName' => '<string>', // REQUIRED
    'FIAuthKey' => '<string>',
    'Nameservers' => [ // REQUIRED
        [
            'GlueIps' => ['<string>', ...],
            'Name' => '<string>', // REQUIRED
        ],
        // ...
    ],
]);

If you are not using the latest version of the sdk you can install it using composer:

php composer.phar require aws/aws-sdk-php

or use any of the installation methods here.

I really think its best for you to stick with the SDK, unless really not possible (which I don't think is the case here, correct me if I'm wrong).


If installed using composer you can update your composer.json file to contain:

{
    "require": {
        "aws/aws-sdk-php": "3.*"
    }
}

and run composer update

If you just want to check which version of the sdk you are working with you can run composer info (inside that directory):

> 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

Or check the content of the composer.lock file. You should have there the version of the sdk you are using:

"packages": [
    {
        "name": "aws/aws-sdk-php",
        "version": "3.18.32",
        "source": {
            "type": "git",
            "url": "https://github.com/aws/aws-sdk-php.git",
            "reference": "84b9927ee116b30babf90a9fc723764672543e29"
        },

Make sure you use the last one.

Upvotes: 1

Related Questions