こんにちは、エンジニアの最上です。最近、学生向けに勉強会を開催したりしています。その際に、せっかくなのでAWSを使ってもらうようにしているのですが、事前準備を手作業でやっていました。それが非常に面倒だったので、便利にできるスクリプトをNode.jsで作ってみました。すごいニッチなスクリプトな気がしますが、ニッチ故に意外と転がってないので作っちゃいました。
どこにあるの?
ここにあります。個人用のリポジトリに入れてあるのは、会社関係なく個人で作成したためです。
https://github.com/SeiyaMogami/aws-utils
とりあえず決まり文句を。これらのスクリプトを利用して生じたいかなる問題に対しても一切責任は負いません。予めご了承ください。
使い方
READMEを読んでいただいたほうが早いかと。
どんなときに使える?
API Gateway
API GatewayのRestAPIは1分に1つしか作成/削除できません。これはおそらく、APIGWの裏側にCloudFrontがあるためでしょう。
勉強会の参加者に一斉に作成してもらうことができません。もし20人参加していれば、単純計算で少なくとも20分はかかってしまいます。勉強会開始前に、こちら側で予め作成しておく必要がありますが、1分に1度なので一気に作ってしまうことができません。コツコツやっていると作り漏れとかでてきて笑えません。
また、勉強会終了時にAWSの後片付けをする必要があります。1分に1つしか消せないのは苦痛でしかありません。
上記問題を解決するのが、apigw-*.js
です。nodeの実行環境が必要ではありますが、ローカルで1度実行すると勝手にコツコツ削除してくれます。実際に使ってみましたが、控えめに言って最高でした。ただ、deleteのほうは指定したリージョンに存在する全てのRestAPIが淡々と削除されます。ご利用時はご注意ください。
IAM
参加者にAWSのコンソールから色々やってみてもらう際に、ユーザが必要です。ユーザ作成/削除に時間制限は特にありませんが、一つ一つ手作業でやるのは面倒です。そんなときは、iam-*.js
を使います。
ここで作成されるユーザは、参加者にID/Passwordをお伝えして、初回ログイン時にパスワードを変更してもらうようになっています。ユーザはCSVをもとに作成/削除するため、漏れが起こりにくくなっているはずです。また、権限はグループで一括管理するため、それもまた便利だと思います。
Lambda
Lambdaを触ってもらうようにすると、ものすごい数のLambdaFunctionが作成されます。この前開催した勉強会では参加者20人ほどでしたが、150個くらいできてました。LambdaFunctionは複数選択して削除ができないので、150個とか非常につらいです。そんなときは。lambda-*.js
を使います。
指定したリージョン内のLambdaFunctionを全て削除します。ご利用は計画的に。
ちょっとした後悔
APIGWは時間制限があるため、Intervalを使って制御しました。しかし、IAMユーザやLambdaには時間制限がありません(あまり連続して処理しようとするとエラー起きるけど)。
適当に時間決め打ちで3秒毎とか10秒毎にしましたが、理想は1つの処理が終わったら次の処理するようにかければよかったなーと後から気づきました。もっと賢くならねばなーとちょっと後悔しました。
まとめ
勉強会やインターン開催時に、開催者側がちょっと楽できるスクリプトを作ってみた話でした。1月にも勉強会を開催する予定なので、そこでも今回作ったスクリプトを活用して準備したいと思います。
おわり。