今回は、AWS OpsWoks が残した Security Group 群を CLI でサクっと消去してみます。
また、消去したセキュリティグループを OpsWorks 自身に再生成させる方法も記載しています。


・OpsWorksが残す残骸...
AWS自身が提供する機能で OpsWorks というものがあり、簡単な手順で WEBサーバやロードバランサー、DBなど準備できるようです。チラっとしか使っていないので、それぐらいしか分からないのですが…。

しかし、使ってみたは良いものの、セキュリティグループに大量の設定が残されてしまいました。

※IAM Role も残されていますが、IAM は未だ使っていないので気にしていないです(^^;



・AWS OpsWorks のスタックを消去する
ここではOpsWorksをCLIで操作するわけではないので、残っているOpsWorksのスタックがあるようなら、AWS Management Console で消去しておいてください。
「利用中のセキュリティグループは消去できない」という制約があるので、スタックが残っているとセキュリティグループが消去できないのです…。


・AWS OpsWorks が作成したセキュリティグループを特定する
OpsWorks自身は Region を超えて使用されるものらしく、すべての Region にセキュリティグループが作成されています。
まず、全 Region に設定されているセキュリティグループから AWS-OpsWorks- で始まる名前のものを抽出します。
$ ec2-describe-regions \
     | cut --field=2 \
     | xargs -i \
          ec2-describe-group \
          --region {} \
          --filter 'group-name=AWS-OpsWorks-*' \
     | grep '^GROUP'

OpsWorksを使ったことがあるのなら、大量のセキュリティグループが表示されるハズです。
⇒ ルールも確認したいなら、最後の grep の行を外してください。



AWS OpsWorks が作成したセキュリティグループを消去する
ここから先は bash の 1ライナーで処理するのは困難で、見栄えも悪いので bash のバッチ化します。
#!/bin/bash

REGIONS=`ec2-describe-regions | cut --field=2`

for R in ${REGIONS}
do
  ec2-describe-group --region ${R} \
                     --filter 'group-name=AWS-OpsWorks-*' \
  | grep '^GROUP' \
  | cut --field=2 \
  | xargs -i  ec2-delete-group --region ${R}  {}
done
バッチ化しておきながら、ほとんど1ライナー…。
まぁ、動けばよいんです!!!


実行すると、以下のようなエラーがガンガン出力されます。
Client.InvalidGroup.InUse: Group 488224276535:AWS-OpsWorks-Memcached-Server is used by groups: 488224276535:AWS-OpsWorks-Monitoring-Master-Server
エラーが出るのはセキュリティグループ同士に依存関係があるからで、他から依存されているものは消せない…というコトです。
とりあえず、エラーを無視して何度か実行し続けると、そのうち全部消えてしまいます。



・改善案
ec2-delete-group のエラー出力を解析すれば、依存しているセキュリティグループが分かるので、先にソチラを消去する…というように改修すれば、エラーを見ることなくキレイにセキュリティグループを消去できると思われます。
もっとも、このバッチプログラム自体、そんなに頻繁に使うものでもなく、また何度か実行すれば 期待通りの動作になるため、そこまで対応する必要は無いのかなー…と思ったり。



・問題発生!!!
消すのはいいけど、復活できない!!! (x_x;
AWS OpsWorks の Security Group を消してしまうと、AWS Management Conolse から OpsWorks を差ウ指しても、セキュリティグループを復活させることが出来ないようです。

AWS公式のフォーラムなどを読むと、「新しいスタックを作成された時」「完全新規のIAMロールがスタックに適用された時(使用された時)」に、セキュリティグループが再生成されるらしいのですが…。
とりあえず、困ってないなら OpsWorks が作成した セキュリティグループは消去しない方が良いかもしれません。
そのうち、AWS側でセキュリティグループを再生成する方法を提供してくれるかもしれませんが…。

↓↓↓

何度かトライ&エラーを繰り返したところ、AWS OpsWorks が使用するセキュリティグループの復元に成功しました☆ AWS Management Conolse の OpsWokrs から操作します。

  1. OpsWorks の Add Stack メニューから、新しいスタックをデフォルト設定のまま作成する(作成したスタックは使わないので、何でもOK)
  2. もう一度、OpsWorks の Add Stack メニューから、二つ目の新しいスタックを作成する画面を呼び出す(続く)。
  3. 二つ目のスタックを作成する際、「Advanced≫」オプションから「IAM Role ⇒ New IAM Role」「Default IAM Instance Profile ⇒ New IAM Instance Profile」と指定しておく。
opsworks_stack

スタックが生成されてからしばらく(数分?)待つと、IAM Role と SecurityGroup がじわじわ作成されていきます。
一通りセキュリティグループが生成されてしまえば、IAM Role もスタックも削除して構わない…ハズ。


IAM Role については「aws-opsworks-ec2-role」と「aws-opsworks-service-role」があれば足りるようです。二番目のスタックを生成する際に「aws-opsworks-ec2-role.何か数字列」「aws-opsworks-service-role.何か数字列」というIAMが作成されているので、それらを消してしまえばよいでしょう。

opsworks_iam




役に立つのか立たないのか分からないビミョーな内容ですが、「OpsWorksを試したら、セキュリティグループがたくさんできて気持ち悪い!!!」あるいは「消してしまった OpsWorksのセキュリティグループを復活させたい!」という人には良いかもしれません(^^;


今回ここまで。