Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pola penggunaan dasar AWS SDK for PHP Versi 3
Topik ini berfokus pada pola penggunaan dasar AWS SDK for PHP.
Prasyarat
-
Sebelum Anda menggunakan AWS SDK for PHP, Anda harus mengautentikasi dengan AWS. Untuk informasi tentang menyiapkan autentikasi, lihat Otentikasi SDK dengan AWS
Termasuk SDK dalam kode Anda
Apa pun teknik yang Anda gunakan untuk menginstalSDK, Anda dapat memasukkan SDK dalam kode Anda hanya dengan satu require
pernyataan. Lihat tabel berikut untuk PHP kode yang paling sesuai dengan teknik instalasi Anda. Ganti setiap instance /path/to/
dengan jalur aktual di sistem Anda.
Teknik Instalasi | Memerlukan Pernyataan |
---|---|
Menggunakan Komposer |
|
Menggunakan phar |
|
Menggunakan ZIP |
|
Dalam topik ini, kita mengasumsikan metode instalasi Composer. Jika Anda menggunakan metode instalasi yang berbeda, Anda dapat merujuk kembali ke bagian ini untuk menemukan require
kode yang benar untuk digunakan.
Ringkasan penggunaan
Untuk menggunakan SDK untuk berinteraksi dengan AWS layanan, buat instance objek Klien. Objek klien memiliki metode yang sesuai dengan operasi dalam layananAPI. Untuk menjalankan operasi tertentu, Anda memanggil metode yang sesuai. Metode ini mengembalikan objek Result seperti array pada keberhasilan, atau melempar Exception pada kegagalan.
Membuat klien
Anda dapat membuat klien dengan meneruskan array pilihan asosiatif ke konstruktor klien.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
Kode Sampel
//Create an S3Client $s3 = new Aws\S3\S3Client([ 'region' => 'us-east-2' // Since version 3.277.10 of the SDK, ]); // the 'version' parameter defaults to 'latest'.
Informasi tentang parameter “versi” opsional tersedia di topik opsi konfigurasi.
Perhatikan bahwa kami tidak secara eksplisit memberikan kredensyal kepada klien. Itu karena SDK harus mendeteksi kredensi dari variabel lingkungan, Berbagi config dan credentials file di HOME direktori Anda, kredenal profil instance AWS Identity and Access Management (IAM), atau penyedia kredensi.
Semua opsi konfigurasi klien umum dijelaskan secara rinci diKonfigurasi untuk AWS SDK for PHP Versi 3. Array opsi yang diberikan kepada klien dapat bervariasi berdasarkan klien mana yang Anda buat. Opsi konfigurasi klien kustom ini dijelaskan dalam APIdokumentasi untuk setiap klien.
Menggunakan Sdk
Kelas
Aws\Sdk
Kelas bertindak sebagai pabrik klien dan digunakan untuk mengelola opsi konfigurasi bersama di beberapa klien. Banyak opsi yang dapat diberikan kepada konstruktor klien tertentu juga dapat diberikan ke Aws\Sdk
kelas. Opsi ini kemudian diterapkan ke setiap konstruktor klien.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
Kode Sampel
// The same options that can be provided to a specific client constructor can also be supplied to the Aws\Sdk class. // Use the us-west-2 region and latest version of each client. $sharedConfig = [ 'region' => 'us-west-2' ]; // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Create an Amazon S3 client using the shared configuration data. $client = $sdk->createS3();
Opsi yang dibagikan di semua klien ditempatkan dalam pasangan nilai kunci tingkat root. Data konfigurasi khusus layanan dapat disediakan dalam kunci yang sama dengan namespace layanan (misalnya, “S3", “”, dll.)DynamoDb.
$sdk = new Aws\Sdk([ 'region' => 'us-west-2', 'DynamoDb' => [ 'region' => 'eu-central-1' ] ]); // Creating an Amazon DynamoDb client will use the "eu-central-1" AWS Region $client = $sdk->createDynamoDb();
Nilai konfigurasi khusus layanan adalah gabungan dari nilai spesifik layanan dan nilai tingkat root (yaitu, nilai khusus layanan digabungkan secara dangkal ke nilai tingkat root).
catatan
Kami sangat menyarankan agar Anda menggunakan Sdk
kelas untuk membuat klien jika Anda menggunakan beberapa instance klien dalam aplikasi Anda. Sdk
Kelas secara otomatis menggunakan HTTP klien yang sama untuk setiap SDK klien, memungkinkan SDK klien untuk layanan yang berbeda untuk melakukan HTTP permintaan nonblocking. Jika SDK klien tidak menggunakan HTTP klien yang sama, maka HTTP permintaan yang dikirim oleh SDK klien mungkin memblokir orkestrasi janji antar layanan.
Melaksanakan operasi layanan
Anda dapat menjalankan operasi layanan dengan memanggil metode dengan nama yang sama pada objek klien. Misalnya, untuk melakukan PutObjectoperasi Amazon S3, Anda harus memanggil metode. Aws\S3\S3Client::putObject()
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client;
Kode Sampel
// Use the us-east-2 region and latest version of each client. $sharedConfig = [ 'profile' => 'default', 'region' => 'us-east-2' ]; // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3(); // Send a PutObject request and get the result object. $result = $s3Client->putObject([ 'Bucket' => 'my-bucket', 'Key' => 'my-key', 'Body' => 'this is the body!' ]); // Download the contents of the object. $result = $s3Client->getObject([ 'Bucket' => 'my-bucket', 'Key' => 'my-key' ]); // Print the body of the result by indexing into the result object. echo $result['Body'];
Operasi yang tersedia untuk klien dan struktur input dan output didefinisikan pada runtime berdasarkan file deskripsi layanan. Saat membuat klien, Anda harus memberikan versi (misalnya, “2006-03-01" atau “terbaru”). SDKMenemukan file konfigurasi yang sesuai berdasarkan versi yang disediakan.
Metode operasi seperti putObject()
semua menerima argumen tunggal, array asosiatif yang mewakili parameter operasi. Struktur array ini (dan struktur objek hasil) didefinisikan untuk setiap operasi dalam API Dokumentasi (misalnya, lihat API dokumen untuk putObjectoperasi). SDK
HTTPopsi handler
Anda juga dapat menyempurnakan cara HTTP handler yang mendasari mengeksekusi permintaan dengan menggunakan parameter khusus. @http
Opsi yang dapat Anda sertakan dalam @http
parameter sama dengan yang dapat Anda atur saat Anda membuat instance klien dengan opsi klien “http”.
// Send the request through a proxy $result = $s3Client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'my-key', 'Body' => 'this is the body!', '@http' => [ 'proxy' => 'http://192.168.16.1:10' ] ]);
Permintaan asinkron
Anda dapat mengirim perintah secara bersamaan menggunakan fitur asinkron dari file. SDK Anda dapat mengirim permintaan secara asinkron dengan akhiran nama operasi dengan. Async
Ini memulai permintaan dan mengembalikan janji. Janji dipenuhi dengan objek hasil pada keberhasilan atau ditolak dengan pengecualian pada kegagalan. Ini memungkinkan Anda membuat beberapa janji dan meminta mereka mengirim HTTP permintaan secara bersamaan saat HTTP penangan yang mendasari mentransfer permintaan.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
Kode Sampel
// Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk([ 'region' => 'us-west-2' ]); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3(); //Listing all S3 Bucket $CompleteSynchronously = $s3Client->listBucketsAsync(); // Block until the result is ready. $CompleteSynchronously = $CompleteSynchronously->wait();
Anda dapat memaksakan janji untuk menyelesaikan secara serempak dengan menggunakan wait
metode janji. Memaksa janji untuk menyelesaikan juga “membuka” status janji secara default, yang berarti itu akan mengembalikan hasil janji atau membuang pengecualian yang ditemui. Saat memanggil wait()
janji, proses memblokir sampai HTTP permintaan selesai dan hasilnya diisi atau pengecualian dilemparkan.
Saat menggunakan library loop SDK with an event, jangan blokir hasil. Sebagai gantinya, gunakan then()
metode hasil untuk mengakses janji yang diselesaikan atau ditolak saat operasi selesai.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
Kode Sampel
// Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk([ 'region' => 'us-west-2' ]); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3();
$promise = $s3Client->listBucketsAsync(); $promise ->then(function ($result) { echo 'Got a result: ' . var_export($result, true); }) ->otherwise(function ($reason) { echo 'Encountered an error: ' . $reason->getMessage(); });
Bekerja dengan objek hasil
Mengeksekusi operasi yang berhasil mengembalikan Aws\Result
objek. Alih-alih mengembalikan mentah XML atau JSON data layanan, memaksa data respons ke SDK dalam struktur array asosiatif. Ini menormalkan beberapa aspek data berdasarkan pengetahuannya tentang layanan spesifik dan struktur respons yang mendasarinya.
Anda dapat mengakses data dari AWSResult objek seperti PHP array asosiatif.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
Kode Sampel
// Use the us-east-2 region and latest version of each client. $sharedConfig = [ 'profile' => 'default', 'region' => 'us-east-2', ]; // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Use an Aws\Sdk class to create the S3Client object. $s3 = $sdk->createS3(); $result = $s3->listBuckets(); foreach ($result['Buckets'] as $bucket) { echo $bucket['Name'] . "\n"; } // Convert the result object to a PHP array $array = $result->toArray();
Isi objek hasil tergantung pada operasi yang dijalankan dan versi layanan. Struktur hasil dari setiap API operasi didokumentasikan dalam API dokumen untuk setiap operasi.
SDKIni terintegrasi dengan JMESPathsearch()
metode yang dapat Anda gunakan untuk mengekstrak data secara lebih deklaratif dari hasilnya.
Kode Sampel
$s3 = $sdk->createS3(); $result = $s3->listBuckets();
$names = $result->search('Buckets[].Name');
Menangani kesalahan
Penanganan Kesalahan Sinkron
Jika terjadi kesalahan saat melakukan operasi, pengecualian dilemparkan. Untuk alasan ini, jika Anda perlu menangani kesalahan dalam kode Anda, gunakantry
/catch
blok di sekitar operasi Anda. SDKMelempar pengecualian khusus layanan saat terjadi kesalahan.
Contoh berikut menggunakanAws\S3\S3Client
. Jika ada kesalahan, pengecualian yang dilemparkan akan menjadi tipeAws\S3\Exception\S3Exception
. Semua pengecualian khusus layanan yang diberikan oleh SDK lemparan dari kelas. Aws\Exception\AwsException
Kelas ini berisi informasi yang berguna tentang kegagalan, termasuk request-id, kode kesalahan, dan jenis kesalahan. Catatan untuk beberapa layanan yang mendukungnya, data respons dipaksa menjadi struktur array asosiatif (mirip dengan Aws\Result
objek), yang dapat diakses seperti array asosiatif normalPHP. toArray()
Metode ini akan mengembalikan data tersebut, jika ada.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; use Aws\S3\Exception\S3Exception;
Kode Sampel
// Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk([ 'region' => 'us-west-2' ]); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3(); try { $s3Client->createBucket(['Bucket' => 'my-bucket']); } catch (S3Exception $e) { // Catch an S3 specific exception. echo $e->getMessage(); } catch (AwsException $e) { // This catches the more generic AwsException. You can grab information // from the exception using methods of the exception object. echo $e->getAwsRequestId() . "\n"; echo $e->getAwsErrorType() . "\n"; echo $e->getAwsErrorCode() . "\n"; // This dumps any modeled response data, if supported by the service // Specific members can be accessed directly (e.g. $e['MemberName']) var_dump($e->toArray()); }
Penanganan kesalahan asinkron
Pengecualian tidak dilemparkan saat mengirim permintaan asinkron. Sebagai gantinya, Anda harus menggunakan then()
atau otherwise()
metode janji yang dikembalikan untuk menerima hasil atau kesalahan.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; use Aws\S3\Exception\S3Exception;
Kode Sampel
//Asynchronous Error Handling $promise = $s3Client->createBucketAsync(['Bucket' => 'my-bucket']); $promise->otherwise(function ($reason) { var_dump($reason); }); // This does the same thing as the "otherwise" function. $promise->then(null, function ($reason) { var_dump($reason); });
Anda dapat “membuka” janji dan menyebabkan pengecualian dilemparkan sebagai gantinya.
Impor
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; use Aws\S3\Exception\S3Exception;
Kode Sampel
$promise = $s3Client->createBucketAsync(['Bucket' => 'my-bucket']);
//throw exception try { $result = $promise->wait(); } catch (S3Exception $e) { echo $e->getMessage(); }