この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
AWS EC2 waiterを使用してEC2起動まで待機する
今回はAWS EC2 waiterAPIを使用して、EC2起動まで待機する方法をご紹介します。
要望
AWS EC2の起動APIは非同期のため、コマンドを発行してもEC2の起動状況がわからないです。AWS EC2起動まで待機し、後続の処理を行う。
使い方
AWS CLIでもwaitのAPIがありますが、リクエストの発行間隔、回数など、コントロールできないので、今回boto3のwaiterの使い方をご紹介します。基本は同じです。AWS CLIに興味ある方はec2 wait apiをご参考ください。
boto3を利用する際に、まず以下のようにwaiterを取得する
waiter = client.get_waiter('instance_running')
今回利用するのは、起動までのwatierなので「instance_running」を利用します。
他にもいろんなステータスがあるので、以下のURLご参考いただければと思います。
上記のページにもありますが、詳細の使い方は以下です。WaiterConfig
を利用して、リクエスト間隔と最大試行回数も指定できます。
waiter.wait(
Filters=[
{
'Name': 'string',
'Values': [
'string',
]
},
],
InstanceIds=[
'string',
],
DryRun=True|False,
MaxResults=123,
NextToken='string',
WaiterConfig={
'Delay': 123,
'MaxAttempts': 123
}
)
実際にコードを書いてみると、以下の感じとなります。
import boto3
import botocore
# get EC2 client
ec2_client = boto3.client("ec2")
# get EC2 waiter
ec2_waiter = ec2_client.get_waiter('instance_running')
# wait until EC2 running
try:
ec2_waiter.wait(
InstanceIds = ['i-xxxxxxxxxxxxxxxxxxxxxx'],
WaiterConfig = {
'Delay':5,
'MaxAttempts':2
}
)
except botocore.exceptions.WaiterError as error :
print("Start EC2 Error", error)
else:
print("Start EC2 END"
これで、EC2起動まで待機してくれます。
もし、EC2が起動されていない場合、異常が発生します。
もちろん、異常処理にEC2の再起動処理を行っても問題ないです。
筆者では、異常処理にEC2再起動処理とEC2待機まで処理を再実行する再帰関数を作って利用しています。
纏め
AWSのCLI、非同期の処理を多く、処理結果を確認するため、処理後にい結果確認の処理を入れたほうが良いと思います。
今回ではEC2起動処理を保証するため、waiter APIの利用方法をご紹介しました。皆さんもぜひ活用してください。