ウェーター - AWS SDK for Ruby

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ウェーター

ウェーターは、クライアントに発生する特定の状態をポーリングするユーティリティメソッドです。ウェーターはサービスクライアントに対して定義されたポーリング間隔で何度か試行した後に失敗する場合があります。ウェイターの使用例については、AWS コードサンプルリポジトリの Amazon DynamoDB Encryption Client の create_table メソッドを参照してください。

ウェーターの呼び出し

ウェーターを呼び出すには、クライアントサービスで wait_until を呼び出します。次の例では、ウェーターは、続行する前にインスタンス i-12345678 が実行するまで待機します。

ec2 = Aws::EC2::Client.new begin ec2.wait_until(:instance_running, instance_ids:['i-12345678']) puts "instance running" rescue Aws::Waiters::Errors::WaiterFailed => error puts "failed waiting for instance running: #{error.message}" end

最初のパラメータがウェーターの名前で、サービスクライアントに対して固有であり、どのオペレーションを待機しているかを示します。2 番目のパラメータは、ウエーターに呼び出されたクライアントメソッドに渡されるパラメータのハッシュで、ウェーター名に応じて異なります。

待機できるオペレーションの一覧および各オペレーションに必要なクライアントメソッドについては、「waiter_names」および、使用しているクライアント用の「wait_until」フィールドドキュメントを参照してください。

待機の失敗

待機処理は、以下の例外のいずれかで失敗する場合があります。

Aws::Waiters::Errors::FailureStateError

待機中にエラー状態が発生しました。

Aws::Waiters::Errors::NoSuchWaiterError

指定されたウェーター名は使用しているクライアントに対して定義されていません。

Aws::Waiters::Errors::TooManyAttemptsError

試行数がウェーターの max_attempts 値を超えています。

Aws::Waiters::Errors::UnexpectedError

予期しないエラーが待機中に発生しました。

Aws::Waiters::Errors::WaiterFailed

待機中に待機状態の 1 つが超過、または別のエラーが発生しました。

これらのすべてのエラー (NoSuchWaiterError を除く) は、WaiterFailed に基づいています。ウェーターのエラーを見つけるには、次の例に示すように、WaiterFailed を使用します。

rescue Aws::Waiters::Errors::WaiterFailed => error puts "failed waiting for instance running: #{error.message}" end

ウェーターの設定

各ウェーターにはデフォルトのポーリング間隔とプログラムへコントロールを返す前の試行回数の上限があります。これらの値を設定するには、max_attempts および delay: パラメータを wait_until 呼び出しで使用します。以下の例では、5 秒間隔でポーリングして、最大 25 秒待機します。

# Poll for ~25 seconds client.wait_until(...) do |w| w.max_attempts = 5 w.delay = 5 end

待機の失敗を無効にするには、これらのパラメータのいずれかの値を nil に設定します。

ウェーターの拡張

ウェーターの動作を変更するには、各ポーリング試行の前および待機の前にトリガーされたコールバックを登録できます。

次の例は、各試行の待機時間を 2 倍にすることにより、ウェーターのエクスポネンシャルバックオフを実装します。

ec2 = Aws::EC2::Client.new ec2.wait_until(:instance_running, instance_ids:['i-12345678']) do |w| w.interval = 0 # disable normal sleep w.before_wait do |n, resp| sleep(n ** 2) end end

以下の例では、最大試行回数を無効にし、代わりに、エラーとなるまでの待機時間を 1 時間 (3,600 秒) に設定します。

started_at = Time.now client.wait_until(...) do |w| # Disable max attempts w.max_attempts = nil # Poll for one hour, instead of a number of attempts w.before_wait do |attempts, response| throw :failure if Time.now - started_at > 3600 end end