2019年9月19日木曜日

aws cliでインターネットゲートウェイを削除するコマンド

一つのVPCの中、インターネットゲートウェイが一つしか作れないです。

自分が間違って2回作成コマンドを押してしまいました。そしたら以下のようにエラーが起きました。
* aws_internet_gateway.gw: error attaching EC2 Internet Gateway (igw-094efbee9f367a97a): Error attaching internet gateway: InvalidParameterValue: Network vpc-43332a1a already has an internet gateway attached
status code: 400, request id: befcb4ad-c9a6-4a08-9622-0686b048a69b



detached状態なインテーネットゲートウェイを削除するには、もちろんコンソール上からできますが、いちいちコンソールにログインするのは少し手間なので、コマンドで削除します。
コマンドは以下の通りになります。
$ aws ec2 delete-internet-gateway --internet-gateway-id igw-c0a643a8
おまけに、本操作ではなく事前動作検証をしたいなら、--dry-run をつければ動作可能かどうかをチェックしてくれます。

2019年9月18日水曜日

aws 失敗したNATゲートウェイを削除する方法

AWSのNATゲートウェイ作成に失敗すると、コンソールから削除できなくなります。

削除するにはaws cliからするしかないです。
削除するコマンドは以下の通りです。


aws ec2 delete-nat-gateway --nat-gateway-id nat-04ae55e711cec5680

2019年9月17日火曜日

Pythonでselenium 要素の存在を判定する方法

Seleniumで存在しない要素を使うと、Message: Unable to locate element:xxx のエラーが起きます。
事前に要素の存在をチェックしておきたいですね。

たまに以下のようなtryで例外処理をする方法をみかけますが、実はlenでも判定することはできます。

try:
    driver.find_element_by_id('test').click()
except:
  # 存在しない
ポイントはdriver.find_element_by_idの代わり、driver.find_elements_by_idを使います。一見同じように見えますが、前者の場合は要素が存在しない時に異常が発生します。後者なら、要素が存在しなくでも異常が発生しないです。
具体的に以下ように使います。

if len(driver.find_elements_by_id('test') > 0) :
    ele = driver.find_element_by_id('test')
 # 存在する時の処理
else:
  # 存在しない時の処理
driver.find_elements_by_idの他、driver.find_elements_by_namedriver.find_elements_by_xpathdriver.find_elements_by_class_namedriver.find_elements_by_css_selectordriver.find_elements_by_link_textdriver.find_elements_by_tag_nameなどなどが存在します。基本的にfind_element_by_xxとセットとなっています。