Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Upgrade von Version 2 der AWS SDK for PHP
In diesem Thema erfahren Sie, wie Sie Ihren Code zur Verwendung von Version 3 von migrieren AWS SDK for PHP und wie sich die neue Version von Version 2 von unterscheidetSDK.
Anmerkung
Das grundlegende Nutzungsmuster von SDK (d. h.,$result = $client->operation($params);
) hat sich von Version 2 auf Version 3 nicht geändert, was zu einer reibungslosen Migration führen sollte.
Einführung
Version 3 von AWS SDK for PHP stellt eine erhebliche Anstrengung dar, um die Funktionen von zu verbessernSDK, Kundenfeedback aus mehr als zwei Jahren einzubeziehen, unsere Abhängigkeiten zu erweitern, die Leistung zu verbessern und die neuesten PHP Standards zu übernehmen.
Was ist neu in Version 3?
Version 3 von AWS SDK for PHP folgt den Standards PSR -4 und PSR -7
Zu den weiteren neuen Funktionen zählen:
-
Middleware-System zum Anpassen des Service-Client-Verhaltens
-
Flexible Umbrüche zum Durchlaufen paginierter Ergebnisse
-
Fähigkeit, Daten aus Ergebnis - und Paginator-Objekten abzufragen mit JMESPath
-
Einfache Fehlersuche über die
'debug'
-Konfigurationsoption
Entkoppelte Ebene HTTP
-
Standardmäßig wird Guzzle 6
zum Senden von Anforderungen verwendet, aber Guzzle 5 wird ebenfalls unterstützt. -
Das SDK funktioniert in Umgebungen, in denen c nicht URL verfügbar ist.
-
Benutzerdefinierte HTTP Handler werden ebenfalls unterstützt.
Asynchrone Anfragen
-
Funktionen wie Waiter und mehrteilige Uploads können ebenfalls asynchron verwendet werden.
-
Asynchrone Workflows können mithilfe von Promises und Co-Routinen erstellt werden.
-
Die Performance von gleichzeitigen oder im Stapel verarbeiteten Anfragen wurde verbessert.
Was sind die Unterschiede gegenüber Version 2?
Projektabhängigkeiten wurden aktualisiert
Die Abhängigkeiten von SDK haben sich in dieser Version geändert.
-
Das benötigt SDK jetzt PHP 5.5+. Wir verwenden Generatoren
großzügig innerhalb des Codes. SDK -
Wir haben das aktualisiertSDK, um Guzzle 6
(oder 5) zu verwenden, das die zugrunde liegende HTTP Client-Implementierung bereitstellt, mit der Anfragen SDK an die AWS Dienste gesendet werden. Die neueste Version von Guzzle bringt eine Reihe von Verbesserungen mit sich, darunter asynchrone Anfragen, austauschbare HTTP Handler, PSR -7-Konformität, bessere Leistung und mehr. -
Das Paket PSR -7 aus der Datei PHP - FIG (
psr/http-message
) definiert Schnittstellen zur Darstellung von HTTP Anfragen, Antworten und Streams. HTTP URLs Diese Schnittstellen werden überall in Guzzle SDK und Guzzle verwendet, wodurch die Interoperabilität mit anderen PSR -7-kompatiblen Paketen gewährleistet ist. -
Die PSR -7-Implementierung (
guzzlehttp/psr7
) von Guzzle bietet eine Implementierung der Schnittstellen in PSR -7 sowie mehrere hilfreiche Klassen und Funktionen. Sowohl Guzzle 6 als SDK auch Guzzle 6 verlassen sich stark auf dieses Paket. -
Die Promises/A+-Implementierung
( guzzlehttp/promises
) von Guzzle wird überall in Guzzle verwendet, um Schnittstellen für die SDK Verwaltung asynchroner Anfragen und Coroutinen bereitzustellen. Während der URL HTTP Multi-C-Handler von Guzzle letztlich das blockierungsfreie I/O-Modell implementiert, das asynchrone Anfragen ermöglicht, bietet dieses Paket die Möglichkeit, innerhalb dieses Paradigmas zu programmieren. Weitere Informationen finden Sie unter Versprechen in der AWS SDK for PHP Version 3. -
Die PHP Implementierung von JMESPath
( mtdowling/jmespath.php
) wird verwendetSDK, um die Datenabfragefähigkeit derAws\ResultPaginator::search()
MethodenAws\Result::search()
und bereitzustellen. Weitere Informationen finden Sie unter JMESPathAusdrücke in AWS SDK for PHP Version 3.
Regions- und Versionsoptionen sind jetzt erforderlich
Bei der Instanziierung eines Clients für beliebige Services müssen Sie die Optionen 'region'
und 'version'
angeben. In Version 2 von 'version'
war AWS SDK for PHP, völlig optional und 'region'
war manchmal optional. In Version 3 sind beide immer erforderlich. Wenn Sie beide Optionen explizit angeben, können Sie sich auf die API Version und AWS Region festlegen, für die Sie programmieren. Wenn neue API Versionen erstellt werden oder neue AWS Regionen verfügbar werden, sind Sie vor potenziell schwerwiegenden Änderungen geschützt, bis Sie bereit sind, Ihre Konfiguration explizit zu aktualisieren.
Anmerkung
Wenn Sie sich keine Gedanken darüber machen, welche API Version Sie verwenden, können Sie die 'version'
Option einfach auf setzen'latest'
. Wir empfehlen jedoch, dass Sie die API Versionsnummern explizit für den Produktionscode festlegen.
Nicht alle Dienste sind in allen AWS Regionen verfügbar. Eine Liste der verfügbaren Regionen finden Sie Regionen und Endpunkte.
Für Dienste, die nur über einen einzigen, globalen Endpunkt verfügbar sind (z. B. Amazon Route 53 und Amazon CloudFront) AWS Identity and Access Management, instanziieren Sie Clients mit der konfigurierten Region auf. us-east-1
Wichtig
Dazu gehören SDK auch Clients mit mehreren Regionen, die Anfragen auf der Grundlage eines Parameters (@region
), der als Befehlsparameter bereitgestellt wird, an verschiedene AWS Regionen senden können. Die von diesen Clients standardmäßig verwendete Region wird mit der Option region
angegeben, die dem Client-Konstruktor übergeben wird.
Client-Instanziierung verwendet den Konstruktor
In Version 3 von hat sich die Art und Weise AWS SDK for PHP, wie Sie einen Client instanziieren, geändert. Anstelle der factory
-Methoden in Version 2, können Sie einen Client einfach mithilfe des Schlüsselworts new
instanziieren.
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' ]);
Anmerkung
Das Instanziieren eines Clients mithilfe der factory()
-Methode funktioniert weiterhin. Es gilt jedoch als veraltet.
Die Client-Konfiguration hat sich geändert
Die Client-Konfigurationsoptionen in Version 3 von AWS SDK for PHP haben sich gegenüber Version 2 geringfügig geändert. Eine Beschreibung aller unterstützten Optionen finden Sie auf der Seite Konfiguration für AWS SDK for PHP Version 3.
Wichtig
In Version 3 sind 'key'
und 'secret'
keine gültigen Optionen auf der Stammebene mehr, aber Sie können sie als Teil der 'credentials'
-Option übergeben. Ein Grund, warum wir das gemacht haben, war, Entwickler davon abzuhalten, ihre AWS Anmeldeinformationen fest in ihren Projekten zu programmieren.
Das Sdk-Objekt
Version 3 von AWS SDK for PHP führt das Aws\Sdk
Objekt als Ersatz für ein. Aws\Common\Aws
Das Sdk
-Objekt fungiert als Client-Factory und wird verwendet, um gemeinsame Konfigurationsoptionen für mehrere Clients zu verwalten.
Obwohl die Aws
Klasse in Version 2 von wie ein Service Locator SDK funktionierte (sie gab immer dieselbe Instanz eines Clients zurück), gibt die Sdk
Klasse in Version 3 bei jeder Verwendung eine neue Instanz eines Clients zurück.
Das Sdk
Objekt unterstützt auch nicht dasselbe Konfigurationsdateiformat wie Version 2 von. SDK Dieses Konfigurationsformat war spezifisch für Guzzle 3 und ist jetzt veraltet. Die Konfiguration kann einfacher mit grundlegenden Arrays erfolgen und ist in Verwendung der Sdk-Klasse dokumentiert.
Einige API Ergebnisse haben sich geändert
Um eine einheitliche Art und Weise zu gewährleisten, wie das Ergebnis eines API Vorgangs SDK analysiert wird, verfügen Amazon ElastiCacheRDS, Amazon und Amazon Redshift jetzt bei einigen API Antworten über ein zusätzliches Wrapping-Element.
Zum Beispiel beinhaltet der Aufruf des RDS DescribeEngineDefaultParametersAmazon-Ergebnisses in Version 3 jetzt ein umschließendes „EngineDefaults“ -Element. In Version 2 war dieses Element nicht vorhanden.
$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'];
Die folgenden Operationen sind betroffen und enthalten jetzt ein Wrapping-Element in der Ausgabe des Ergebnisses (nachfolgend in Klammern gezeigt):
-
Amazon ElastiCache
-
AuthorizeCacheSecurityGroupIngress (CacheSecurityGroup)
-
CopySnapshot (Schnappschuss)
-
CreateCacheCluster (CacheCluster)
-
CreateCacheParameterGroup (CacheParameterGroup)
-
CreateCacheSecurityGroup (CacheSecurityGroup)
-
CreateCacheSubnetGroup (CacheSubnetGroup)
-
CreateReplicationGroup (ReplicationGroup)
-
CreateSnapshot (Schnappschuss)
-
DeleteCacheCluster (CacheCluster)
-
DeleteReplicationGroup (ReplicationGroup)
-
DeleteSnapshot (Schnappschuss)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
ModifyCacheCluster (CacheCluster)
-
ModifyCacheSubnetGroup (CacheSubnetGroup)
-
ModifyReplicationGroup (ReplicationGroup)
-
PurchaseReservedCacheNodesOffering (ReservedCacheNode)
-
RebootCacheCluster (CacheCluster)
-
RevokeCacheSecurityGroupIngress (CacheSecurityGroup)
-
-
Amazon RDS
-
AddSourceIdentifierToSubscription (EventSubscription)
-
Ein uthorizeDBSecurity GroupIngress (DBSecurityGroup)
-
opyDBParameterC-Gruppe (DBParameterGroup)
-
C opyDBSnapshot (DBSnapshot)
-
CopyOptionGroup (OptionGroup)
-
C reateDBInstance (DBInstance)
-
C reateDBInstance ReadReplica (DBInstance)
-
reateDBParameterC-Gruppe (DBParameterGroup)
-
reateDBSecurityC-Gruppe (DBSecurityGroup)
-
C reateDBSnapshot (DBSnapshot)
-
reateDBSubnetC-Gruppe (DBSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateOptionGroup (OptionGroup)
-
D eleteDBInstance (DBInstance)
-
D eleteDBSnapshot (DBSnapshot)
-
DeleteEventSubscription (EventSubscription)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
M odifyDBInstance (DBInstance)
-
odifyDBSubnetM-Gruppe (DBSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifyOptionGroup (OptionGroup)
-
PromoteReadReplica (DBInstance)
-
PurchaseReservedDBInstancesOffering(ReservedDBInstance)
-
R ebootDBInstance (DBInstance)
-
RemoveSourceIdentifierFromSubscription (EventSubscription)
-
R estoreDBInstance F romDBSnapshot (DBInstance)
-
R estoreDBInstance ToPointInTime (DBInstance)
-
R evokeDBSecurity GroupIngress (DBSecurityGroup)
-
-
Amazon-Redshift
-
AuthorizeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
AuthorizeSnapshotAccess (Schnappschuss)
-
CopyClusterSnapshot (Schnappschuss)
-
CreateCluster (Cluster)
-
CreateClusterParameterGroup (ClusterParameterGroup)
-
CreateClusterSecurityGroup (ClusterSecurityGroup)
-
CreateClusterSnapshot (Schnappschuss)
-
CreateClusterSubnetGroup (ClusterSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateHsmClientCertificate (HsmClientCertificate)
-
CreateHsmConfiguration (HsmConfiguration)
-
DeleteCluster (Cluster)
-
DeleteClusterSnapshot (Schnappschuss)
-
DescribeDefaultClusterParameters (DefaultClusterParameters)
-
DisableSnapshotCopy (Cluster)
-
EnableSnapshotCopy (Cluster)
-
ModifyCluster (Cluster)
-
ModifyClusterSubnetGroup (ClusterSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifySnapshotCopyRetentionPeriod (Cluster)
-
PurchaseReservedNodeOffering (ReservedNode)
-
RebootCluster (Cluster)
-
RestoreFromClusterSnapshot (Cluster)
-
RevokeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
RevokeSnapshotAccess (Schnappschuss)
-
RotateEncryptionKey (Cluster)
-
Aufzählungsklassen wurden entfernt
Wir haben die Enum
-Klassen entfernt (z. B. Aws\S3\Enum\CannedAcl
), die es in Version 2 des AWS SDK for PHP gab. Enums waren konkrete Klassen innerhalb der Öffentlichkeit API von, die Konstanten enthieltenSDK, die Gruppen gültiger Parameterwerte repräsentierten. Da diese Aufzählungen versionsspezifisch sind, sich im Laufe der Zeit ändern können, Konflikte mit PHP reservierten Wörtern verursachen können und sich letztlich als nicht sehr nützlich erwiesen haben, haben wir sie in API Version 3 entfernt. Dies unterstützt den datengesteuerten und API versionsunabhängigen Charakter von Version 3.
Verwenden Sie anstelle von Werten aus Enum
-Objekten direkt die literalen Werte (z. B. CannedAcl::PUBLIC_READ
→ 'public-read'
).
Differenzierte Ausnahmeklassen wurden entfernt
Wir haben die differenzierten Ausnahmeklassen entfernt, die es in den Namespaces jedes Services gab (zum Beispiel Aws\Rds\Exception\{SpecificError}Exception
). Die Gründe dafür sind sehr ähnlich denjenigen, aus denen wir Enums entfernt haben. Die von einem Dienst oder einer Operation ausgelösten Ausnahmen hängen davon ab, welche API Version verwendet wird (sie können sich von Version zu Version ändern). Außerdem ist die vollständige Liste der Ausnahmen, die durch eine bestimmte Operation ausgegeben werden können, nicht verfügbar, wodurch die differenzierten Ausnahmeklassen der Version 2 unvollständig wurden.
Verarbeiten Sie Fehler, indem Sie die Root-Ausnahmeklasse für jeden Service abfangen (z. B. Aws\Rds\Exception\RdsException
). Sie können die getAwsErrorCode()
-Methode der Ausnahme verwenden, um auf bestimmte Fehlercodes zu prüfen. Dies entspricht funktionell dem Abfangen verschiedener Ausnahmeklassen, bietet diese Funktion jedoch, ohne die Datei zu überladen. SDK
Statische Fassadenklassen wurden entfernt
In Version 2 von gab es eine obskure AWS SDK for PHP, von Laravel inspirierte Funktion, mit der Sie die Aws
Klasse aufrufen konnten, um den statischen Zugriff enableFacades()
auf die verschiedenen Service-Clients zu aktivieren. Diese Funktion widerspricht den PHP bewährten Methoden, und wir haben vor über einem Jahr aufgehört, sie zu dokumentieren. In Version 3 wurde diese Funktion vollständig entfernt. Rufen Sie Ihre Client-Objekte aus dem Aws\Sdk
-Objekt ab und verwenden Sie sie als Objekt-Instances, nicht als statische Klassen.
Paginatoren ersetzen Iteratoren
Version 2 von AWS SDK for PHP hatte eine Funktion namens * Iterators*. Dies waren Objekte, die zur Iteration paginierter Ergebnisse verwendet wurden. Eine Beschwerde, die wir dazu hatten, war, dass sie nicht flexibel genug waren, da der Iterator nur bestimmte Werte von jedem Ergebnis ausgab. Wenn es andere Werte gab, die Sie aus den Ergebnissen brauchten, konnten Sie diese nur über Ereignis-Listener abrufen.
In Version 3 wurden Iteratoren durch Paginatoren ersetzt. Ihr Zweck ist ähnlich, aber Paginatoren sind viel flexibler. Dies liegt daran, dass sie Ergebnisobjekte anstelle von Werten aus einer Antwort liefern.
Die folgenden Beispiele zeigen, wie sich Paginatoren von Iteratoren unterscheiden, indem demonstriert wird, wie paginierte Ergebnisse für die S3 ListObjects
-Operation in Version 2 und Version 3 abgerufen werden.
// 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"; } }
Paginator-Objekte verfügen über eine search()
Methode, mit der Sie JMESPathAusdrücke verwenden können, um Daten einfacher aus der Ergebnismenge zu extrahieren.
$results = $s3Client->getPaginator('ListObjects', ['Bucket' => 'amzn-s3-demo-bucket']); foreach ($results->search('Contents[].Key') as $key) { echo $key . "\n"; }
Anmerkung
Die getIterator()
-Methode wird weiterhin unterstützt, damit ein reibungsloser Übergang zu Version 3 möglich ist, aber wir möchten Sie bitten, ab jetzt Paginatoren in Ihrem Code zu verwenden.
Viele übergeordnete Abstraktionen haben sich geändert
Generell wurden viele der übergeordneten Abstraktionen (neben den Clients auch Service-spezifische Helferobjekte) verbessert oder aktualisiert. Einige wurden sogar entfernt.
-
- Aktualisiert:
-
-
Die Art und Weise, wie Sie mehrteilige Uploads in Amazon S3 verwenden, hat sich geändert. Amazon S3 Glacier Multipart Upload wurde auf ähnliche Weise geändert.
-
Die Art und Weise, Amazon S3 vorsigniert zu erstellen, URLs hat sich geändert.
-
Der
Aws\S3\Sync
-Namespace wurde durchAws\S3\Transfer
ersetzt. Die MethodenS3Client::uploadDirectory()
undS3Client::downloadBucket()
sind noch verfügbar, verwenden aber andere Optionen. Weitere Informationen finden Sie in der Dokumentation für Amazon S3 Transfer Manager mit AWS SDK for PHP Version 3. -
Aws\S3\Model\ClearBucket
undAws\S3\Model\DeleteObjectsBatch
wurden durchAws\S3\BatchDelete
undS3Client::deleteMatchingObjects()
ersetzt. -
Die Optionen und das Verhalten für die Verwendung des DynamoDB-Sessionshandlers mit AWS SDK for PHP Version 3 haben sich geringfügig geändert.
-
Der
Aws\DynamoDb\Model\BatchRequest
-Namespace wurde durchAws\DynamoDb\WriteRequestBatch
ersetzt. Weitere Informationen finden Sie in der Dokumentation für DynamoDB WriteRequestBatch. -
Der
Aws\Ses\SesClient
verarbeitet jetzt die base64-Verschlüsselung derRawMessage
, wenn die OperationSendRawEmail
verwendet wird.
-
-
- Entfernt:
-
-
Amazon SNS Message Validator — Dies ist jetzt ein separates, leichtes Projekt
, das nicht SDK als Abhängigkeit benötigt. Dieses Projekt ist jedoch im Phar und in den ZIP Distributionen von enthalten. SDK Eine Anleitung für die ersten Schritte finden Sie im AWS PHP Development-Blog . -
Amazon S3
AcpBuilder
und verwandte Objekte wurden entfernt.
Vergleich von Codebeispielen aus beiden Versionen von SDK
Die folgenden Beispiele zeigen einige der Möglichkeiten, in denen sich die Verwendung von Version 3 von von Version 2 unterscheiden AWS SDK for PHP kann.
Beispiel: Amazon S3 ListObjects S3-Betrieb
Ab Version 2 des 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"; }
Ab Version 3 des SDK
Wichtigste Unterschiede:
-
Verwendung von
new
anstelle vonfactory()
zur Instanziierung des Clients. -
Die Optionen
'version'
und'region'
sind bei der Instanziierung erforderlich.
<?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"; }
Beispiel: Instanziieren eines Clients mit globaler Konfiguration
Ab Version 2 des 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.
Ab Version 3 des SDK
Wichtigste Unterschiede:
-
Verwendung der
Aws\Sdk
-Klasse stattAws\Common\Aws
. -
Es gibt keine Konfigurationsdatei. Verwenden Sie stattdessen ein Array für die Konfiguration.
-
Die Option
'version'
ist bei der Instanziierung erforderlich. -
Verwendung der
create<Service>()
-Methoden stattget('<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.