Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Mise à niveau depuis la version 2 du AWS SDK for PHP
Cette rubrique explique comment migrer votre code pour utiliser la version 3 du AWS SDK for PHP et en quoi la nouvelle version diffère de la version 2 duSDK.
Note
Le modèle d'utilisation de base du SDK (c'est-à-dire$result = $client->operation($params);
) n'a pas changé entre la version 2 et la version 3, ce qui devrait permettre une migration fluide.
Introduction
La version 3 AWS SDK for PHP représente un effort important pour améliorer les capacités duSDK, intégrer plus de deux ans de commentaires des clients, mettre à niveau nos dépendances, améliorer les performances et adopter les dernières PHP normes.
Nouveautés de la version 3
La version 3 AWS SDK for PHP suit les normes PSR -4 et PSR -7
Les autres nouvelles fonctions sont les suivantes :
-
Système Middleware pour personnaliser le comportement du client de service
-
Programmes de pagination flexibles pour l’itération sur les résultats paginés
-
Possibilité d'interroger des données à partir d'objets de résultat et de paginateur avec JMESPath
-
Débogage facile via l'option de configuration
'debug'
Couche découplée HTTP
-
Guzzle 6
est utilisé par défaut pour envoyer des demandes, mais Guzzle 5 est également pris en charge. -
Cela SDK fonctionnera dans des environnements où c n'URLest pas disponible.
-
Les HTTP gestionnaires personnalisés sont également pris en charge.
Requêtes asynchrones
-
Des fonctions telles que les programmes d’attente et le chargement partitionné peuvent également être utilisées de manière asynchrone.
-
Il est possible de créer des workflows asynchrones à l’aide de promesses et coroutines.
-
Les performances des demandes simultanées ou par lots sont améliorées.
Changements par rapport à la version 2
Dépendances du projet mises à jour
Les dépendances du SDK ont changé dans cette version.
-
SDKIl nécessite désormais PHP 5,5 ou plus. Nous utilisons généreusement des générateurs
dans le SDK code. -
Nous l'avons mis SDK à niveau pour utiliser Guzzle 6
(ou 5), qui fournit l'implémentation HTTP client sous-jacente utilisée par le SDK pour envoyer des demandes aux AWS services. La dernière version de Guzzle apporte un certain nombre d'améliorations, notamment des requêtes asynchrones, des HTTP gestionnaires échangeables, la conformité PSR -7, de meilleures performances, etc. -
Le package PSR -7 de PHP - FIG (
psr/http-message
) définit des interfaces pour représenter les HTTP demandesURLs, HTTP les réponses et les flux. Ces interfaces sont utilisées à travers le SDK et Guzzle, qui assure l'interopérabilité avec d'autres packages conformes à PSR -7. -
L'implémentation PSR -7 (
guzzlehttp/psr7
) de Guzzle fournit une implémentation des interfaces de PSR -7, ainsi que plusieurs classes et fonctions utiles. Le SDK et Guzzle 6 s'appuient fortement sur ce package. -
L'implémentation Promises/A+
( guzzlehttp/promises
) de Guzzle's est utilisée dans l'ensemble de Guzzle pour fournir des interfaces permettant de gérer les requêtes asynchrones SDK et les coroutines. Alors que le URL HTTP gestionnaire multi-C de Guzzle implémente finalement le modèle d'E/S non bloquant qui permet les requêtes asynchrones, ce package permet de programmer selon ce paradigme. Voir Promises dans la AWS SDK for PHP version 3 pour plus de détails. -
L'PHPimplémentation de JMESPath
( mtdowling/jmespath.php
) est utilisée dans le SDK pour fournir la capacité d'interrogation de données desAws\ResultPaginator::search()
méthodesAws\Result::search()
et. Voir JMESPathExpressions dans la AWS SDK for PHP version 3 pour plus de détails.
Les options Région et Version sont maintenant obligatoires
Lors de l'instanciation d'un client pour n'importe quel service, spécifiez les options 'region'
et 'version'
. Dans la version 2 du AWS SDK for PHP, 'version'
était totalement optionnel, et 'region'
était parfois facultatif. Dans la version 3, les deux sont toujours requis. Le fait d'être explicite au sujet de ces deux options vous permet de vous connecter à la API version et à AWS la région dans lesquelles vous codez. Lorsque de nouvelles API versions sont créées ou que de nouvelles AWS régions sont disponibles, vous êtes isolé des modifications potentiellement importantes jusqu'à ce que vous soyez prêt à mettre à jour explicitement votre configuration.
Note
Si vous n'êtes pas préoccupé par API la version que vous utilisez, vous pouvez simplement définir l''version'
option sur'latest'
. Toutefois, nous vous recommandons de définir les numéros de API version de manière explicite pour le code de production.
Les services ne sont pas tous disponibles dans toutes les AWS régions. Pour connaître la liste des régions disponibles, consultez le document de référence Régions et points de terminaison.
Pour les services disponibles uniquement via un seul point de terminaison global (par exemple, Amazon Route 53 et Amazon CloudFront) AWS Identity and Access Management, instanciez les clients avec leur région configurée définie sur. us-east-1
Important
Cela inclut SDK également les clients multirégionaux, qui peuvent envoyer des demandes à différentes AWS régions en fonction d'un paramètre (@region
) fourni en tant que paramètre de commande. La région utilisée par défaut par ces clients est spécifiée avec l'option region
fournie au constructeur client.
L'instantiation client utilise le Constructeur
Dans la version 3 de AWS SDK for PHP, la façon dont vous instanciez un client a changé. A la place des méthodes factory
de la version 2, vous pouvez simplement instancier un client à l'aide du mot clé 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' ]);
Note
L'instanciation d'un client à l'aide de la méthode factory()
fonctionne toujours. Cependant, elle est considérée comme obsolète.
Modification de la configuration du client
Les options de configuration du client dans la version 3 du AWS SDK for PHP ont légèrement changé par rapport à la version 2. Consultez la page Configuration pour la AWS SDK for PHP version 3 pour une description de toutes les options prises en charge.
Important
Dans la version 3, les options 'key'
et 'secret'
ne sont plus valides au niveau de la racine, mais vous pouvez les transmettre dans le cadre de l'option 'credentials'
. L'une des raisons pour lesquelles nous l'avons fait était de décourager les développeurs de coder en dur leurs AWS informations d'identification dans leurs projets.
L'objet Sdk
La version 3 de AWS SDK for PHP introduit l'Aws\Sdk
objet en remplacement deAws\Common\Aws
. L'objet Sdk
fonctionne comme une fabrique de clients. Il permet de gérer des options de configuration partagées sur plusieurs clients.
Bien que la Aws
classe de la version 2 SDK fonctionnait comme un localisateur de services (elle renvoyait toujours la même instance de client), la Sdk
classe de la version 3 renvoie une nouvelle instance d'un client à chaque fois qu'elle est utilisée.
L'Sdk
objet ne prend pas non plus en charge le même format de fichier de configuration que dans la version 2 duSDK. Ce format de configuration a été spécifique à Guzzle 3 et est désormais obsolète. La configuration peut être effectuée plus simplement avec des tableaux de base. Elle est documentée dans la section Utilisation de la Classe Sdk.
Certains API résultats ont changé
Pour garantir la cohérence de l'SDKanalyse du résultat d'une API opération, Amazon ElastiCache, Amazon et Amazon RDS Redshift disposent désormais d'un élément d'encapsulage supplémentaire sur API certaines réponses.
Par exemple, l'appel du RDS DescribeEngineDefaultParametersrésultat Amazon dans la version 3 inclut désormais un élément d'emballage « EngineDefaults ». Dans la version 2, cet élément n'était pas présent.
$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'];
Les opérations suivantes sont impactées et contiennent désormais un élément d'encapsulage dans la sortie du résultat (fournis ci-dessous entre parenthèses) :
-
Amazon ElastiCache
-
AuthorizeCacheSecurityGroupIngress (CacheSecurityGroup)
-
CopySnapshot (Instantané)
-
CreateCacheCluster (CacheCluster)
-
CreateCacheParameterGroup (CacheParameterGroup)
-
CreateCacheSecurityGroup (CacheSecurityGroup)
-
CreateCacheSubnetGroup (CacheSubnetGroup)
-
CreateReplicationGroup (ReplicationGroup)
-
CreateSnapshot (Instantané)
-
DeleteCacheCluster (CacheCluster)
-
DeleteReplicationGroup (ReplicationGroup)
-
DeleteSnapshot (Instantané)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
ModifyCacheCluster (CacheCluster)
-
ModifyCacheSubnetGroup (CacheSubnetGroup)
-
ModifyReplicationGroup (ReplicationGroup)
-
PurchaseReservedCacheNodesOffering (ReservedCacheNode)
-
RebootCacheCluster (CacheCluster)
-
RevokeCacheSecurityGroupIngress (CacheSecurityGroup)
-
-
Amazon RDS
-
AddSourceIdentifierToSubscription (EventSubscription)
-
Un uthorizeDBSecurity GroupIngress (DBSecurityGroup)
-
opyDBParameterGroupe C (DBParameterGroup)
-
C opyDBSnapshot (DBSnapshot)
-
CopyOptionGroup (OptionGroup)
-
C reateDBInstance (DBInstance)
-
C reateDBInstance ReadReplica (DBInstance)
-
reateDBParameterGroupe C (DBParameterGroup)
-
reateDBSecurityGroupe C (DBSecurityGroup)
-
C reateDBSnapshot (DBSnapshot)
-
reateDBSubnetGroupe C (DBSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateOptionGroup (OptionGroup)
-
D eleteDBInstance (DBInstance)
-
D eleteDBSnapshot (DBSnapshot)
-
DeleteEventSubscription (EventSubscription)
-
DescribeEngineDefaultParameters (EngineDefaults)
-
M odifyDBInstance (DBInstance)
-
odifyDBSubnetGroupe M (1DBSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifyOptionGroup (OptionGroup)
-
PromoteReadReplica (DBInstance)
-
PurchaseReservedDBInstancesOffering(ReservedDBInstance)
-
R ebootDBInstance (DBInstance)
-
RemoveSourceIdentifierFromSubscription (EventSubscription)
-
R romDBSnapshot (estoreDBInstanceFDBInstance)
-
R estoreDBInstance ToPointInTime (DBInstance)
-
R evokeDBSecurity GroupIngress (DBSecurityGroup)
-
-
Amazon Redshift
-
AuthorizeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
AuthorizeSnapshotAccess (Instantané)
-
CopyClusterSnapshot (Instantané)
-
CreateCluster (Cluster)
-
CreateClusterParameterGroup (ClusterParameterGroup)
-
CreateClusterSecurityGroup (ClusterSecurityGroup)
-
CreateClusterSnapshot (Instantané)
-
CreateClusterSubnetGroup (ClusterSubnetGroup)
-
CreateEventSubscription (EventSubscription)
-
CreateHsmClientCertificate (HsmClientCertificate)
-
CreateHsmConfiguration (HsmConfiguration)
-
DeleteCluster (Cluster)
-
DeleteClusterSnapshot (Instantané)
-
DescribeDefaultClusterParameters (DefaultClusterParameters)
-
DisableSnapshotCopy (Cluster)
-
EnableSnapshotCopy (Cluster)
-
ModifyCluster (Cluster)
-
ModifyClusterSubnetGroup (ClusterSubnetGroup)
-
ModifyEventSubscription (EventSubscription)
-
ModifySnapshotCopyRetentionPeriod (Cluster)
-
PurchaseReservedNodeOffering (ReservedNode)
-
RebootCluster (Cluster)
-
RestoreFromClusterSnapshot (Cluster)
-
RevokeClusterSecurityGroupIngress (ClusterSecurityGroup)
-
RevokeSnapshotAccess (Instantané)
-
RotateEncryptionKey (Cluster)
-
Suppression des classes Enum
Nous avons supprimé les classes Enum
(par exemple, Aws\S3\Enum\CannedAcl
) qui existaient dans la version 2 du kit AWS SDK for PHP. Les énumérations étaient des classes concrètes destinées au public SDK qui contenaient API des constantes représentant des groupes de valeurs de paramètres valides. Comme ces énumérations sont spécifiques aux API versions, qu'elles peuvent changer au fil du temps, qu'elles peuvent entrer en conflit avec des mots PHP réservés et qu'elles finissent par ne pas être très utiles, nous les avons supprimées dans la version 3. Cela confirme le caractère indépendant des API versions et piloté par les données de la version 3.
Au lieu d'utiliser des valeurs provenant d'objets Enum
, utilisez directement les valeurs littérales (par exemple, CannedAcl::PUBLIC_READ
→ 'public-read'
).
Les classes Exception affinée ont été supprimées
Nous avons supprimé les classes Exception affinée qui existaient dans les espaces de noms de chaque service (par exemple, Aws\Rds\Exception\{SpecificError}Exception
) pour des raisons similaires à celles pour lesquelles nous avons supprimé Enums. Les exceptions émises par un service ou une opération dépendent de la API version utilisée (elles peuvent changer d'une version à l'autre). De plus, la liste complète des exceptions qui peuvent être émises par une opération donnée n'est pas disponible, ce qui rend les classes d'Exception affinées de la version 2 incomplètes.
Gérez les erreurs en interceptant la classe d'exception racine pour chaque service (par exemple, Aws\Rds\Exception\RdsException
). Vous pouvez utiliser la méthode getAwsErrorCode()
de l'exception pour rechercher des codes d'erreur spécifiques. Cela équivaut fonctionnellement à la capture de différentes classes d'exceptions, mais fournit cette fonction sans ajouter de surcharge au. SDK
Les Classes de Façade statique ont été supprimées
Dans la version 2 du AWS SDK for PHP, il y avait une fonctionnalité obscure inspirée de Laravel qui vous permettait d'appeler enableFacades()
la Aws
classe pour activer un accès statique aux différents clients du service. Cette fonctionnalité va à l'encontre des PHP meilleures pratiques, et nous avons cessé de la documenter il y a plus d'un an. Dans la version 3, cette fonction est complètement supprimée. Récupérez vos objets de client à partir de l'objet Aws\Sdk
et utilisez-les en tant qu'instances de l'objet, et non en tant que classes statiques.
Les programmes de pagination prévalent sur les itérateurs
La version 2 de AWS SDK for PHP avait une fonctionnalité nommée * iterators*. Il s'agissait d'objets qui étaient utilisés pour itérer sur des résultats paginés. On nous faisait souvent remarquer qu'ils n'étaient pas suffisamment flexibles, car l'itérateur émettait uniquement des valeurs spécifiques à partir de chaque résultat. Si vous aviez besoin d'autres valeurs à partir des résultats, il était possible de les récupérer uniquement via des écouteurs d'événements.
Dans la version 3, les itérateurs ont été remplacés par des programmes de pagination. Leurs objectifs sont similaires, mais les programmes de pagination sont plus flexibles. En effet, ils génèrent des objets de résultats au lieu de valeurs d'une réponse.
Les exemples suivants illustrent la façon dont les programmes de pagination sont différents des itérateurs, en démontrant comment récupérer des résultats paginés pour l'opération S3 ListObjects
à la fois dans la version 2 et la version 3.
// 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"; } }
Les objets Paginator possèdent une search()
méthode qui vous permet d'utiliser des JMESPathexpressions pour extraire plus facilement les données du jeu de résultats.
$results = $s3Client->getPaginator('ListObjects', ['Bucket' => 'amzn-s3-demo-bucket']); foreach ($results->search('Contents[].Key') as $key) { echo $key . "\n"; }
Note
La méthode getIterator()
est toujours prise en charge pour permettre une transition en douceur vers la version 3, mais nous vous encourageons à migrer votre code pour permettre l'utilisation des programmes de pagination.
De nombreuses abstractions de niveau supérieur ont changé
En général, la plupart des abstractions de niveau supérieur (objets d'assistant spécifiques au service, hormis les clients) ont été améliorées ou mises à jour. Certaines ont été supprimées.
-
- Mis à jour:
-
-
La façon d’utiliser la fonction de chargement partitionné Amazon S3 a changé. Le téléchargement partitionné sur Amazon S3 Glacier a été modifié de la même manière.
-
La façon de créer une version pré-signée d'Amazon S3 URLs a changé.
-
L'espace de noms
Aws\S3\Sync
a été remplacé par la classeAws\S3\Transfer
. Les méthodesS3Client::uploadDirectory()
etS3Client::downloadBucket()
sont toujours disponibles, mais présentent des options différentes. Consultez la documentation d'Amazon S3 Transfer Manager AWS SDK for PHP version 3. -
Aws\S3\Model\ClearBucket
etAws\S3\Model\DeleteObjectsBatch
ont été remplacés parAws\S3\BatchDelete
etS3Client::deleteMatchingObjects()
. -
Les options et les comportements relatifs à l'utilisation du gestionnaire de session DynamoDB AWS SDK for PHP avec la version 3 ont légèrement changé.
-
L'espace de noms
Aws\DynamoDb\Model\BatchRequest
a été remplacé parAws\DynamoDb\WriteRequestBatch
. Consultez la documentation de DynamoDB WriteRequestBatch. -
Le
Aws\Ses\SesClient
gère désormais l'encodage base64 pour leRawMessage
lors de l'utilisation de l'opérationSendRawEmail
.
-
-
- Supprimés :
-
-
Amazon SNS Message Validator : il s'agit désormais d'un projet distinct et léger
qui n'en a pas besoin SDK en tant que dépendance. Ce projet est toutefois inclus dans le Phar et les ZIP distributions duSDK. Vous trouverez un guide de démarrage sur le blog AWS PHP de développement . -
Amazon S3
AcpBuilder
et les objets associés ont été supprimés.
Comparaison d'échantillons de code provenant des deux versions du SDK
Les exemples suivants montrent en quoi l'utilisation de la version 3 AWS SDK for PHP peut différer de la version 2.
Exemple : ListObjects opération Amazon S3
À partir de la version 2 du 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"; }
À partir de la version 3 du SDK
Principales différences :
-
Utilisation de
new
au lieu defactory()
pour instancier le client. -
Les options
'version'
et'region'
sont requises durant l'instanciation.
<?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"; }
Exemple : Instanciation d'un Client avec une configuration globale
À partir de la version 2 du 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.
À partir de la version 3 du SDK
Principales différences :
-
Utilisation de la classe
Aws\Sdk
au lieu de la classeAws\Common\Aws
. -
Il n'y a pas de fichier de configuration. À la place, utilisation d'un tableau pour la configuration.
-
L'option
'version'
est requise durant l'instanciation. -
Utilisation des méthodes
create<Service>()
au lieu de la méthodeget('<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.