⏱️

Boto3でRDSの利用可能/停止完了状態を待つ

2021/10/18に公開

RDSをBoto3経由で操作する際、RDSが利用可能/停止完了状態になるまで待つ方法を残す。

どう実現されるか

AWSの各種SDKにはWaitersという機能が存在する。
これは、APIをたたいたあとリソースが指定した状態になるまでポーリングする機能を持つ。

waitersを使えば、ポーリング間隔や、ポーリング最大数を調節することも可能。

パターン

ドキュメントには、下記イベントをwaitできるとある。

  • RDS.Waiter.DBClusterSnapshotAvailable
  • RDS.Waiter.DBClusterSnapshotDeleted
  • RDS.Waiter.DBInstanceAvailable
  • RDS.Waiter.DBInstanceDeleted
  • RDS.Waiter.DBSnapshotAvailable
  • RDS.Waiter.DBSnapshotCompleted
  • RDS.Waiter.DBSnapshotDeleted

実装例

利用完了まで待つ

#!/usr/bin/env python3

import boto3

client = boto3.client('rds')

waiter = client.get_waiter('db_instance_available')
waiter.wait()
print('RDS started')

終了完了まで待つ


import boto3

client = boto3.client('rds')

waiter = client.get_waiter('db_instance_deleted')
waiter.wait()
print('RDS deleted')

ポーリングパラメータを調節する

Delayが試行間隔、単位は秒。デフォルトは30秒。
MaxAttemptsが最大試行回数。デフォルトは60回。

waiter = client.get_waiter('db_instance_deleted')
waiter.wait(
    WaiterConfig={
        'Delay': 123,
        'MaxAttempts': 123
    }
)

参考

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#waiters

GitHubで編集を提案

Discussion