設定

パラメータの配列を Aws\Common\Aws::factory() に第1引数として渡すと、 サービスビルダはデフォルト設定が記述された aws-config.php ファイルをロードし、 この設定に、パラメータ配列で指定された設定をマージします。

src/Aws/Common/Resources/aws-config.php から抜粋:

<?php return array(
    'services' => array(
        'default_settings' => array(
            'params' => array()
        ),
        'dynamodb' => array(
            'alias'   => 'DynamoDb',
            'extends' => 'default_settings',
            'class'   => 'Aws\DynamoDb\DynamoDbClient'
        ),
        's3' => array(
            'alias'   => 'S3',
            'extends' => 'default_settings',
            'class'   => 'Aws\S3\S3Client'
        )
    )
);

aws-config.php ファイルには、サービス名に関連づけられたクライアントクラスのデフォルト設定を記述します。 このファイルには、 Aws\Common\Aws サービスビルダに対して、クライアントが名前で指定されたとき、 どのクラスのインスタンスを生成するか指定する役割があります。

証明書その他の設定事項をサービスビルダに渡し、この設定に従って、各クライアントのインスタンスを生成させることができます。 ( key および secret を含む) 設定事項の配列を、 Aws\Common\Aws::factory() の第1引数として渡してください。

カスタム設定ファイルの使い方

カスタム設定ファイルを用意して、あらかじめ指定した設定に基づき、独自の名前のクライアントを生成することができます。

例えば、 aws-config.php に記述されたデフォルト設定を援用し、キーは別途、設定ファイルで指定することを考えてみましょう。 デフォルト設定ファイルに定義されている各サービスは、 default_settings サービスを拡張したものです。 カスタム設定ファイルを用意すれば、デフォルト設定ファイルを上書きし、 default_settings サービスに証明書を追加することができます。

<?php return array(
    'includes' => array('_aws'),
    'services' => array(
        'default_settings' => array(
            'params' => array(
                'key'    => 'your-aws-access-key-id',
                'secret' => 'your-aws-secret-access-key',
                'region' => 'us-west-2'
            )
        )
    )
);

設定ファイルには 'includes' => array('_aws'), という行が不可欠です。 この行を置くことにより、あらゆるサービスクライアントがサービスビルダから取得できるようになるからです。 この記述をせずにサービスクライアントを取得しようとすると、例外が発生します。

カスタム設定ファイルを Aws\Common\Aws クラスに適用するためには、 このファイルの完全パスを factory() メソッドの第1引数として渡します。

<?php

require 'vendor/autoload.php';

use Aws\Common\Aws;

$aws = Aws::factory('/path/to/custom/config.php');

独自の名前をつけたサービスを生成すれば、複数のアカウントが同じサービスを共用できるようになります。

<?php return array(
    'includes' => array('_aws'),
    'services' => array(
        'foo.dynamodb' => array(
            'extends' => 'dynamodb',
            'params'  => array(
                'key'    => 'your-aws-access-key-id-for-foo',
                'secret' => 'your-aws-secret-access-key-for-foo',
                'region' => 'us-west-2'
            )
        ),
        'bar.dynamodb' => array(
            'extends' => 'dynamodb',
            'params'  => array(
                'key'    => 'your-aws-access-key-id-for-bar',
                'secret' => 'your-aws-secret-access-key-for-bar',
                'region' => 'us-west-2'
            )
        )
    )
);

JSONの構文の方が書きやすければ、PHPではなくJSON形式で設定を記述してもよいでしょう。

{
    "includes": ["_aws"],
    "services": {
        "default_settings": {
            "params": {
                "key": "your-aws-access-key-id",
                "secret": "your-aws-secret-access-key",
                "region": "us-west-2"
            }
        }
    }
}

証明書を指定しなかった場合の動作

SDKがニフティクラウド・AWSに対して要求を行うためには、ニフティクラウド・AWSアクセスキーIDと秘密アクセスキーが必要です。 もっとも、SDKやサービスクライアントのインスタンスを生成する時点では、証明書はなくても構いません。

証明書を環境変数で指定する方法

証明書を渡さなければ、SDKは実行環境を調べて証明書を見つけようとします。 すなわち、 $_SERVER にチェックインし、 getenv() 関数で、 環境変数 AWS_ACCESS_KEY_ID および AWS_SECRET_KEY の値を調べます。

AWS Elastic Beanstalk上で動作するアプリケーションの場合、AWS Elastic Beanstalkコンソール上で 環境変数 AWS_ACCESS_KEY_ID および AWS_SECRET_KEY の値を設定しておけば、 SDKは自動的に、この値で指定される証明書を使います。

インスタンスプロファイル証明書を用いる方法

Note

ニフティクラウド エンジニアリングパーツではインスタンスプロファイルには対応しておりません

証明書を渡さず、環境変数も設定されていない場合、 SDKは IAMインスタンスプロファイル証明書 を取得しようと試みます。 この証明書が使えるのは、IAMロールで設定したAmazon EC2インスタンスに限ります。

この方法でも証明書が見つからなければ、要求を試みる時点で Aws\Common\Exception\InstanceProfileCredentialsException 例外が発生します。

インスタンスプロファイル証明書はすべてのサービスでサポートされているわけではありません。 利用しているサービスがサポートしているテンポラリ証明書をチェックして下さい

手入力による証明書の設定

サービスクライアントのインスタンス生成後、手入力で証明書を設定することも可能です。 setCredentials() メソッドを使って、当該クライアント用の Credentials オブジェクトを新規に設定してください。

<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\Common\Credentials\Credentials;

$s3 = S3Client::factory();

$newCredentials = new Credentials('your-aws-access-key-id', 'your-aws-secret-access-key');
$s3->setCredentials($newCredentials);

リージョンの設定

クライアントによっては リージョン の設定が必要です。 実際にリージョンが必要か、必要なのはどのようなリージョンか、については、 該当するクライアントの資料を参照してください (参照 supported-niftycloud_services)。

us-west-1 リージョンを用いるAmazon DynamoDBクライアントの生成例を示します。

require 'vendor/autoload.php';

use Aws\DynamoDb\DynamoDbClient;

// Create a client that uses the us-west-1 region
$client = DynamoDbClient::factory(array(
    'key'    => 'abc',
    'secret' => '123',
    'region' => 'us-west-1'
));

独自のエンドポイントの設定

クライアントの base_url オプションを使って、当該クライアント用に完全にカスタマイズしたエンドポイントを指定できます。 その場合でも、当該クライアントがリージョンを用いるならば、 region オプションでリージョン名を指定しなければなりません。 独自のエンドポイントが役に立つ状況としては、ウェブサービスをエミュレートする評価用のウェブサーバを使っている場合、 ベータ版のエンドポイントで非公開にテストする場合、SDKが未対応のリージョンを試しに使ってみる場合、などがあります。

まったく独自のエンドポイントを使うAmazon DynamoDBクライアントの生成例を示します。

require 'vendor/autoload.php';

use Aws\DynamoDb\DynamoDbClient;

// Create a client that that contacts a completely customized base URL
$client = DynamoDbClient::factory(array(
    'base_url' => 'http://my-custom-url',
    'region'   => 'my-region-1',
    'key'      => 'abc',
    'secret'   => '123'
));

認証に署名 (Version 4) を用いる独自のエンドポイントで、独自の署名検査値で署名する必要がある場合は、 signature.service (適用されるサービス名) および signature.region (やり取りするリージョン) を使って 検査値を指定してください。通常であればこの値は不要です。

プロキシの利用

クライアントの "request options" を使うとプロキシを通して、 ニフティクラウド SDK for PHP を利用してリクエストを送ることができます。 "request options" 設定したクライアントからのは個々の HTTP リクエスト送信に適用されます。 オプションを指定するうちのひとつが proxy です。

リクエストオプションはクライアントファクトリメソッドを通してクライアントに渡されます。

use Aws\S3\S3Client;

$s3 = S3Client::factory(array(
    'request.options' => array(
        'proxy' => '127.0.0.1:123'
    )
));

上記の例では、すべてのリクエストがポート 123 のIPアドレス 127.0.0.1 というHTTP proxy でプロキシされる様になります。

必要に応じて、下記のフォーマットでユーザ名とパスワードをプロキシサーバに渡すことができます。 username:password@host:port.