AWS SDK for PHP 버전 3의 웨이터 - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for PHP 버전 3의 웨이터

Waiter를 사용하면 리소스를 폴링하여 리소스가 특정 상태로 전환될 때까지 대기할 수 있는 추상화된 방법을 제공하여 시스템을 더 쉽고 일관되게 사용할 수 있습니다. 클라이언트에서 지원되는 Waiter 목록은 서비스 클라이언트의 API 설명서에서 확인할 수 있습니다. 그곳으로 이동하려면 API 설명서의 클라이언트 페이지로 이동하여 특정 버전 번호 (날짜로 표시) 로 이동한 다음 'Waiters' 섹션으로 스크롤합니다. 이 링크를 클릭하면 S3의 웨이터 섹션으로 이동합니다.

다음 예에서 Amazon S3 클라이언트는 버킷을 생성하는 데 사용됩니다. Waiter는 버킷이 존재할 때까지 대기하는 데 사용됩니다.

// Create a bucket $s3Client->createBucket(['Bucket' => 'my-bucket']); // Wait until the created bucket is available $s3Client->waitUntil('BucketExists', ['Bucket' => 'my-bucket']);

waiter에서 버킷을 지나치게 많이 폴링해야 하는 경우 \RuntimeException 예외를 발생합니다.

Waiter 구성

Waiter는 구성 옵션의 결합형 배열을 기반으로 합니다. 특정 waiter에서 사용되는 모든 옵션은 기본값이 있지만, 다른 대기 전략을 지원하도록 재정의할 수 있습니다.

@waiter 옵션의 결합형 배열을 클라이언트의 waitUntil()getWaiter() 메서드의 $args 인수에 전달하여 waiter 구성 옵션을 수정할 수 있습니다.

// Providing custom waiter configuration options to a waiter $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'my-bucket', '@waiter' => [ 'delay' => 3, 'maxAttempts' => 10 ] ]);
delay (int)

폴링 시도 사이의 지연 시간(초)입니다. 각 waiter에는 기본 delay 구성 값이 있지만, 특정 사용 사례에 대해 이 설정을 수정해야 할 수 있습니다.

maxAttempts (int)

waiter를 실패로 처리하기 이전의 최대 폴링 시도 횟수입니다. 이 옵션은 리소스를 무기한으로 대기하지 않도록 해줍니다. 각 waiter에는 기본 maxAttempts 구성 값이 있지만, 특정 사용 사례에 대해 이 설정을 수정해야 할 수 있습니다.

initDelay (int)

최초 폴링 시도 이전에 대기할 시간(초)입니다. 이 옵션은 원하는 상태로 전환되는 데 시간이 걸릴 것을 알고 잇는 리소스를 대기할 때 유용합니다.

before (callable)

각 시도 전에 호출되는 PHP callable 함수입니다. callable 함수는 실행할 Aws\CommandInterface 명령과 지금까지 실행된 횟수를 기준으로 호출됩니다. before callable 함수를 사용하여 실행되기 전에 명령을 수정하거나 진행률 정보를 제공할 수 있습니다.

use Aws\CommandInterface; $s3Client->waitUntil('BucketExists', [ 'Bucket' => 'my-bucket', '@waiter' => [ 'before' => function (CommandInterface $command, $attempts) { printf( "About to send %s. Attempt %d\n", $command->getName(), $attempts ); } ] ]);

비동기적 대기

비동기적으로 대기하는 이외에 waiter를 호출하여 다른 요청을 보내거나 한 번에 여러 리소스를 대기하면서 비동기적으로 대기할 수 있습니다.

클라이언트의 getWaiter($name, array $args = []) 메서드를 사용하여 클라이언트에서 waiter를 검색하여 waiter promise에 액세스할 수 있습니다. waiter의 promise() 메서드를 사용하여 waiter를 시작합니다. waiter promise는 waiter에서 실행된 마지막 Aws\CommandInterface를 통해 이행되며, 오류 시 RuntimeException과 함께 거부됩니다.

use Aws\CommandInterface; $waiterName = 'BucketExists'; $waiterOptions = ['Bucket' => 'my-bucket']; // Create a waiter promise $waiter = $s3Client->getWaiter($waiterName, $waiterOptions); // Initiate the waiter and retrieve a promise $promise = $waiter->promise(); // Call methods when the promise is resolved. $promise ->then(function () { echo "Waiter completed\n"; }) ->otherwise(function (\Exception $e) { echo "Waiter failed: " . $e . "\n"; }); // Block until the waiter completes or fails. Note that this might throw // a \RuntimeException if the waiter fails. $promise->wait();

일부 강력하고 상대적으로 낮은 오버헤드 사용 사례에서 promise 기반 waiter API를 노출할 수 있습니다. 예를 들어, 여러 리소스를 대기하고, 확인된 첫 번째 waiter를 처리하려는 경우 어떻게 될까요?

use Aws\CommandInterface; // Create an array of waiter promises $promises = [ $s3Client->getWaiter('BucketExists', ['Bucket' => 'a'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'b'])->promise(), $s3Client->getWaiter('BucketExists', ['Bucket' => 'c'])->promise() ]; // Initiate a race between the waiters, fulfilling the promise with the // first waiter to complete (or the first bucket to become available) $any = Promise\any($promises) ->then(function (CommandInterface $command) { // This is invoked with the command that succeeded in polling the // resource. Here we can know which bucket won the race. echo "The {$command['Bucket']} waiter completed first!\n"; }); // Force the promise to complete $any->wait();