翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
のバージョン 2 からのアップグレード AWS SDK for PHP
このトピックでは、 のバージョン 3 AWS SDK for PHP を使用するようにコードを移行する方法と、新しいバージョンが のバージョン 2 とどのように異なるかについて説明しますSDK。
注記
の基本的な使用パターン SDK ( など$result = $client->operation($params);
) がバージョン 2 からバージョン 3 に変更されていないため、移行がスムーズになります。
序章
のバージョン 3 AWS SDK for PHP は、 の機能を改善しSDK、2 年以上にわたる顧客からのフィードバックを取り入れ、依存関係をアップグレードし、パフォーマンスを向上させ、最新のPHP標準を採用するための多大な努力を表しています。
バージョン 3 の新機能
のバージョン 3 は PSR-4 および PSR-7 標準
その他の新機能は次のとおりです。
-
サービスクライアントの動作をカスタマイズするためのミドルウェアシステム
-
ページ分割された結果を反復処理するための柔軟なページネーター
-
で結果オブジェクトとページネーターオブジェクトからデータをクエリする機能 JMESPath
-
'debug'
設定オプションによる簡単なデバッグ
デカップリングHTTPレイヤー
-
デフォルトではリクエストの送信に Guzzle 6
が使用されますが、Guzzle 5 もサポートされています。 -
SDK は、cURL が利用できない環境で動作します。
-
カスタムHTTPハンドラーもサポートされています。
非同期リクエスト
-
ウェーターやマルチパートアップローダーなどの機能は非同期でも使用できます。
-
promise およびコルーチン を使用して非同期ワークフローを作成できます。
-
同時処理やバッチ処理されるリクエストのパフォーマンスが向上しました。
バージョン 2 との相違点
プロジェクトの依存関係が更新されました
このバージョンでは、 の依存関係が変更されSDKました。
-
SDK には PHP 5.5 以降が必要です。SDK コード内でジェネレーター
を自由に使用します。 -
Guzzle 6
(または 5) を使用するSDKように をアップグレードしました。これは、 が AWS サービスにリクエストを送信SDKするために使用する基盤となるHTTPクライアント実装を提供します。Guzzle の最新バージョンには、非同期リクエスト、スワップ可能なHTTPハンドラー、PSR-7 コンプライアンス、パフォーマンスの向上など、さまざまな改善点があります。 -
PSR- (
psr/http-message
) の PHP-FIG7 パッケージは、HTTPリクエスト、HTTPレスポンス、URLs、ストリームを表すインターフェイスを定義します。これらのインターフェイスは、 SDKおよび Guzzle 全体で使用され、他の PSR-7 準拠パッケージとの相互運用性を提供します。 -
Guzzle の PSR-7 実装 (
guzzlehttp/psr7
) は、PSR-7 でのインターフェイスの実装と、いくつかの役立つクラスと関数を提供します。SDK と Guzzle 6 の両方がこのパッケージに大きく依存しています。 -
Guzzle の Promises/A+
実装 ( guzzlehttp/promises
) は、 SDKおよび Guzzle 全体で使用され、非同期リクエストとコロチンを管理するためのインターフェイスを提供します。Guzzle のマルチ cURL HTTPハンドラーは、最終的に非同期リクエストを許可するノンブロッキング I/O モデルを実装しますが、このパッケージは、そのパラダイム内でプログラムする機能を提供します。詳細については、 AWS SDK for PHP バージョン 3 の Promises を参照してください。 -
JMESPath
( mtdowling/jmespath.php
) のPHP実装はSDK、Aws\Result::search()
およびAws\ResultPaginator::search()
メソッドのデータクエリ機能を提供するために で使用されます。詳細についてはJMESPath、 AWS SDK for PHP バージョン 3 の式を参照してください。
リージョンオプションとバージョンオプションは必須オプションになりました
任意のサービスに対してクライアントをインスタンス化する際に、'region'
オプションと 'version'
オプションを指定します。バージョン 2 では AWS SDK for PHP、 'version'
は完全にオプションであり、場合によってはオプション'region'
でした。バージョン 3 では、どちらも常に必要です。これらのオプションの両方について明示的であるため、コーディングするAPIバージョンと AWS リージョンをロックできます。新しいAPIバージョンが作成されるか、新しい AWS リージョンが利用可能になると、設定を明示的に更新する準備ができるまで、変更が中断される可能性から隔離されます。
注記
使用しているAPIバージョンが気にならない場合は、 'version'
オプションを に設定してください'latest'
。ただし、API本番コードのバージョン番号を明示的に設定することをお勧めします。
すべての サービスがすべての AWS リージョンで利用できるわけではありません。利用可能なリージョンの一覧については、「リージョンとエンドポイント」を参照してください。
単一のグローバルエンドポイント (Amazon Route 53、、Amazon など CloudFront) を介してのみ利用可能なサービスの場合、設定されたリージョンを に設定 AWS Identity and Access Managementしてクライアントをインスタンス化us-east-1
します。
重要
には、コマンドパラメータとして指定されたパラメータ (@region
) に基づいて異なる AWS リージョンにリクエストをディスパッチできるマルチリージョンクライアントSDKも含まれています。このクライアントでデフォルトで使用されるリージョンは、クライアントコンストラクタで指定する region
オプションを使用して指定します。
クライアントのインスタンス化でコンストラクタを使用します
のバージョン 3 では AWS SDK for PHP、クライアントをインスタンス化する方法が変わりました。バージョン 2 での factory
メソッドの代わりに、new
キーワードを使用するだけでクライアントをインスタンス化できます。
use Aws\DynamoDb\DynamoDbClient; // Version 2 style $client = DynamoDbClient::factory([ 'region' => 'us-east-2' ]); // Version 3 style $client = new DynamoDbClient([ 'region' => 'us-east-2', 'version' => '2012-08-10' ]);
注記
factory()
メソッドを使用したクライアントのインスタンス化も引き続き機能します。ただし、この方法は非推奨と見なされています。
クライアント設定が変更されています
のバージョン 3 のクライアント設定オプションは、バージョン 2 から少し変更 AWS SDK for PHP されました。サポートされているすべてのオプションの説明については、 AWS SDK for PHP 「バージョン 3 の設定」ページを参照してください。
重要
バージョン 3 では、'key'
と 'secret'
はルートレベルでは有効なオプションではなくなりましたが、'credentials'
オプションの一部として渡すことはできます。これを行った理由の 1 つは、デベロッパーが AWS 認証情報をプロジェクトにハードコーディングしないようにすることでした。
Sdk オブジェクト
のバージョン 3 では、 Aws\Sdk
オブジェクトを の代替として AWS SDK for PHP 導入しますAws\Common\Aws
。Sdk
オブジェクトは、クライアントファクトリとして機能し、複数のクライアント間で共有される設定オプションを管理するために使用されます。
のバージョン 2 のAws
クラスはサービスロケーターのようにSDK機能しましたが (常にクライアントの同じインスタンスが返されました)、バージョン 3 のSdk
クラスは、使用されるたびにクライアントの新しいインスタンスを返します。
Sdk
オブジェクトは、 のバージョン 2 と同じ設定ファイル形式もサポートしていませんSDK。バージョン 2 の設定ファイル形式は、Guzzle 3 固有であったため、廃止されました。設定は、基本的な配列を使用してよりシンプルに行うことができ、詳細については「Sdk クラスの使用」に記載されています。
一部のAPI結果が変更されました
API オペレーションの結果を SDK が解析する方法を一貫性を持たせるために、Amazon ElastiCache、Amazon RDS、および Amazon Redshift では、一部のAPIレスポンスに追加のラッピング要素が追加されました。
例えば、Amazon RDSDescribeEngineDefaultParameters結果をバージョン 3 で呼び出すと、ラッピングEngineDefaults「」要素が含まれるようになりました。この要素はバージョン 2 では存在しませんでした。
$client = new Aws\Rds\RdsClient([ 'region' => 'us-west-1', 'version' => '2014-09-01' ]); // Version 2 $result = $client->describeEngineDefaultParameters(); $family = $result['DBParameterGroupFamily']; $marker = $result['Marker']; // Version 3 $result = $client->describeEngineDefaultParameters(); $family = $result['EngineDefaults']['DBParameterGroupFamily']; $marker = $result['EngineDefaults']['Marker'];
以下のオペレーションが影響を受け、結果の出力にラップ要素が含まれるようになりました (括弧内は追加されたラップ要素)。
-
Amazon ElastiCache
-
AuthorizeCacheSecurityGroupIngress (CacheSecurityGroup)
-
CopySnapshot (スナップショット)
-
CreateCacheCluster (CacheCluster)
-
CreateCacheParameterGroup (CacheParameterGroup)
-
CreateCacheSecurityGroup (CacheSecurityGroup)
-
CreateCacheSubnetGroup (CacheSubnetGroup)
-
CreateReplicationGroup (ReplicationGroup)
-
CreateSnapshot (スナップショット)
-
DeleteCacheCluster (CacheCluster)
-
DeleteReplicationGroup (ReplicationGroup)
-
DeleteSnapshot (スナップショット)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
ModifyCacheCluster (CacheCluster)
-
ModifyCacheSubnetGroup (CacheSubnetGroup)
-
ModifyReplicationGroup (ReplicationGroup)
-
PurchaseReservedCacheNodesOffering (ReservedCacheNode)
-
RebootCacheCluster (CacheCluster)
-
RevokeCacheSecurityGroupIngress (CacheSecurityGroup)
-
-
Amazon RDS
-
AddSourceIdentifierToSubscription (EventSubscription)
-
A uthorizeDBSecurityGroupIngress (DBSecurityGroup)
-
C opyDBParameterグループ (DBParameterGroup)
-
C opyDBSnapshot (DBSnapshot)
-
CopyOptionGroup (OptionGroup)
-
C reateDBInstance (DBInstance)
-
C reateDBInstanceReadReplica (DBInstance)
-
C reateDBParameterグループ (DBParameterGroup)
-
C reateDBSecurityグループ (DBSecurityGroup)
-
C reateDBSnapshot (DBSnapshot)
-
C reateDBSubnetグループ (DBSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateOptionGroup (OptionGroup)
-
D eleteDBInstance (DBInstance)
-
D eleteDBSnapshot (DBSnapshot)
-
DeleteEventSubscription (EventSubscription)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
M odifyDBInstance (DBInstance)
-
M odifyDBSubnetグループ (DBSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifyOptionGroup (OptionGroup)
-
PromoteReadReplica (DBInstance)
-
PurchaseReservedDBInstancesOffering (R eservedDBInstance)
-
R ebootDBInstance (DBInstance)
-
RemoveSourceIdentifierFromSubscription (EventSubscription)
-
R estoreDBInstanceF romDBSnapshot (DBInstance)
-
R estoreDBInstanceToPointInTime (DBInstance)
-
R evokeDBSecurityGroupIngress (DBSecurityGroup)
-
-
Amazon Redshift
-
AuthorizeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
AuthorizeSnapshotAccess (スナップショット)
-
CopyClusterSnapshot (スナップショット)
-
CreateCluster (クラスター)
-
CreateClusterParameterGroup (ClusterParameterGroup)
-
CreateClusterSecurityGroup (ClusterSecurityGroup)
-
CreateClusterSnapshot (スナップショット)
-
CreateClusterSubnetGroup (ClusterSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateHsmClientCertificate (HsmClientCertificate)
-
CreateHsmConfiguration (HsmConfiguration)
-
DeleteCluster (クラスター)
-
DeleteClusterSnapshot (スナップショット)
-
DescribeDefaultClusterParameters (DefaultClusterParameters)
-
DisableSnapshotCopy (クラスター)
-
EnableSnapshotCopy (クラスター)
-
ModifyCluster (クラスター)
-
ModifyClusterSubnetGroup (ClusterSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifySnapshotCopyRetentionPeriod (クラスター)
-
PurchaseReservedNodeOffering (ReservedNode)
-
RebootCluster (クラスター)
-
RestoreFromClusterSnapshot (クラスター)
-
RevokeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
RevokeSnapshotAccess (スナップショット)
-
RotateEncryptionKey (クラスター)
-
Enum クラスが削除されました
AWS SDK for PHPバージョン 2 に存在していた Enum
クラスを削除しました (例: Aws\S3\Enum\CannedAcl
)。列挙は、有効なパラメータ値のグループを表す定数SDKを含む APIのパブリック内の具体的なクラスでした。これらの列挙はAPIバージョンに固有であり、時間の経過とともに変化し、PHP予約語と競合し、結果的にあまり役に立たなくなる可能性があるため、バージョン 3 では削除しました。これにより、APIバージョン 3 のデータ駆動型およびバージョンに依存しない性質がサポートされます。
Enum
オブジェクトからの値を使用するのではなく、リテラル値を直接使用します (例: CannedAcl::PUBLIC_READ
→ 'public-read'
)。
きめ細かな例外クラスが削除されました
各サービスの名前空間に存在していた、きめ細かな例外クラス (例: Aws\Rds\Exception\{SpecificError}Exception
) を、Enum を削除したのと同様の理由で削除しました。サービスまたはオペレーションによってスローされる例外は、使用されるAPIバージョンによって異なります (バージョンごとに変更される可能性があります)。また、特定のオペレーションでスローされる可能性がある例外の完全な一覧は提供していないため、バージョン 2 のきめ細かな例外クラスは不完全でした。
各サービスのルート例外クラス (例:Aws\Rds\Exception\RdsException
) をキャッチしてエラーを処理します。例外の getAwsErrorCode()
メソッドを使用して、特定のエラーコードをチェックできます。これは、機能的には異なる例外クラスをキャッチするのと同等ですが、 にブロートを追加せずにその関数を提供しますSDK。
静的 Facade クラスが削除されました
のバージョン 2 では AWS SDK for PHP、Laravel にヒントを得たあいまいな機能があり、さまざまなサービスクライアントへの静的アクセスを有効にするために enableFacades()
Aws
クラスを呼び出すことができました。この機能はPHPベストプラクティスに反しており、1 年以上前にドキュメント化を停止しました。バージョン 3 では、この機能は完全に削除されています。Aws\Sdk
オブジェクトからクライアントオブジェクトを取得して、それを静的クラスとしてではなくオブジェクトインスタンスとして使用します。
イテレーターはページネーターで置き換えられています
のバージョン 2 には、* イテレータ* という機能 AWS SDK for PHP がありました。イテレーターは、ページ分割された結果を反復処理するために使用されるオブジェクトでした。イテレーターに関して、イテレーターでは各結果から特定の値のみが出力されるため、十分な柔軟性がないという苦情がありました。結果内の他の値が必要であっても、イベントリスナーを使用してその値を取得することはできませんでした。
バージョン 3 では、イテレーターはページネーターで置き換えられています。目的は似ていますが、ページネーターの方が柔軟性があります。それは、レスポンスから値ではなく、結果オブジェクトが生成されるためです。
以下の例は、バージョン 2 とバージョン 3 の両方で S3 ListObjects
オペレーションのページ分割された結果を取得する方法を示すことで、ページネーターがイテレーターとどのように異なるかを示しています。
// Version 2 $objects = $s3Client->getIterator('ListObjects', ['Bucket' => 'amzn-s3-demo-bucket']); foreach ($objects as $object) { echo $object['Key'] . "\n"; }
// Version 3 $results = $s3Client->getPaginator('ListObjects', ['Bucket' => 'amzn-s3-demo-bucket']); foreach ($results as $result) { // You can extract any data that you want from the result. foreach ($result['Contents'] as $object) { echo $object['Key'] . "\n"; } }
パジネーターオブジェクトには、JMESPath式を使用して結果セットからデータを簡単に抽出できるsearch()
メソッドがあります。
$results = $s3Client->getPaginator('ListObjects', ['Bucket' => 'amzn-s3-demo-bucket']); foreach ($results->search('Contents[].Key') as $key) { echo $key . "\n"; }
注記
バージョン 3 にスムーズに移行できるように、getIterator()
メソッドは引き続きサポートされていますが、コードを移行してページネーターを使用することをお勧めします。
多くの高レベル抽象化が変更されています
全般的に、多くの高レベル抽象化 (クライアントは別として、サービス固有のヘルパーオブジェクト) が改善または更新されています。削除されたものもあります。
-
- Updated:
-
-
Amazon S3 マルチパートアップロードの使用方法が変更されました。Amazon S3 Glacier マルチパートアップロードも同様の方法で変更されています。
-
Amazon S3 署名付きURLsの作成方法が変わりました。
-
Aws\S3\Sync
名前空間がAws\S3\Transfer
クラスに置き換えられています。S3Client::uploadDirectory()
メソッドとS3Client::downloadBucket()
メソッドは引き続き利用できますが、オプションが異なっています。AWS SDK for PHP バージョン 3 の Amazon S3 Transfer Manager のドキュメントを参照してください。 -
Aws\S3\Model\ClearBucket
とAws\S3\Model\DeleteObjectsBatch
が、Aws\S3\BatchDelete
とS3Client::deleteMatchingObjects()
に置き換えられています。 -
AWS SDK for PHP バージョン 3 で DynamoDB セッションハンドラーを使用する のオプションと動作が少し変わりました。
-
Aws\DynamoDb\Model\BatchRequest
名前空間がAws\DynamoDb\WriteRequestBatch
に置き換えられています。DynamoDB WriteRequestBatch のドキュメントを参照してください。 -
Aws\Ses\SesClient
は、SendRawEmail
オペレーションを使用するときに、RawMessage
の base64 エンコーディングを処理するようになりました。
-
-
- 削除済み:
-
-
Amazon DynamoDB の
Item
、Attribute
、ItemIterator
クラス - これらのクラスはバージョン 2.7.0ですでに非推奨になっています。 -
Amazon SNS メッセージ検証ツール - これは、依存関係SDKとして を必要としない別の軽量プロジェクト
になりました。ただし、このプロジェクトは、 の Phar とZIPディストリビューションに含まれていますSDK。「開発ブログ」で AWS PHP 入門ガイドを確認できます。 -
Amazon S3 の
AcpBuilder
とその関連オブジェクトが削除されました。
-
の両方のバージョンからのコードサンプルの比較 SDK
次の例は、 のバージョン 3 を使用する方法がバージョン 2 と AWS SDK for PHP 異なる場合があります。
例: Amazon S3 ListObjects Operation
のバージョン 2 から SDK
<?php require '/path/to/vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $s3 = S3Client::factory([ 'profile' => 'my-credential-profile', 'region' => 'us-east-1' ]); try { $result = $s3->listObjects([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'my-object-key' ]); foreach ($result['Contents'] as $object) { echo $object['Key'] . "\n"; } } catch (S3Exception $e) { echo $e->getMessage() . "\n"; }
のバージョン 3 から SDK
主な相違点:
-
クライアントのインスタンス化に
new
ではなくfactory()
を使用します。 -
インストール時に
'version'
と'region'
オプションが必須です。
<?php require '/path/to/vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $s3 = new S3Client([ 'profile' => 'my-credential-profile', 'region' => 'us-east-1', 'version' => '2006-03-01' ]); try { $result = $s3->listObjects([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'my-object-key' ]); foreach ($result['Contents'] as $object) { echo $object['Key'] . "\n"; } } catch (S3Exception $e) { echo $e->getMessage() . "\n"; }
例: グローバル構成によるクライアントのインスタンス化
のバージョン 2 から SDK
<?php return array( 'includes' => array('_aws'), 'services' => array( 'default_settings' => array( 'params' => array( 'profile' => 'my_profile', 'region' => 'us-east-1' ) ), 'dynamodb' => array( 'extends' => 'dynamodb', 'params' => array( 'region' => 'us-west-2' ) ), ) );
<?php require '/path/to/vendor/autoload.php'; use Aws\Common\Aws; $aws = Aws::factory('path/to/my/config.php'); $sqs = $aws->get('sqs'); // Note: SQS client will be configured for us-east-1. $dynamodb = $aws->get('dynamodb'); // Note: DynamoDB client will be configured for us-west-2.
のバージョン 3 から SDK
主な相違点:
-
Aws\Common\Aws
ではなくAws\Sdk
クラスを使用します。 -
設定ファイルはありません。代わりに、設定の配列を使用します。
-
インストール時に
'version'
オプションが必須です。 -
create<Service>()
ではなくget('<service>')
メソッドを使用します。
<?php require '/path/to/vendor/autoload.php'; $sdk = new Aws\Sdk([ 'profile' => 'my_profile', 'region' => 'us-east-1', 'version' => 'latest', 'DynamoDb' => [ 'region' => 'us-west-2', ], ]); $sqs = $sdk->createSqs(); // Note: Amazon SQS client will be configured for us-east-1. $dynamodb = $sdk->createDynamoDb(); // Note: DynamoDB client will be configured for us-west-2.