⏱️
Boto3でRDSの利用可能/停止完了状態を待つ
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
}
)
参考
Discussion