[小ネタ]AWS IoTの構築した環境を削除するRake
はじめに
以前[AWS IoT]クライアントからのメッセージをS3へ保存する環境をRakeで構築するという記事で、AWS IoTの環境を構築するRakeを記述しました。今回はこの環境を削除するRakeを書きました。
IoT端末からデータを送り、正しくAWS IoTに連携できるかを試行錯誤している時など、作成した環境の一部を削除して作り直したいことは多いかと思います。また環境全てを削除することもあるでしょう。これらを考慮し、AWS IoTのThingや証明書などを個別で削除する処理と、全体を削除する処理の両方をRakeで記述しました。
Rakefile
では、作成したRakefileです。
require_relative "rake_helper" THING_NAME = "t-honda-thing" POLICY_NAME = "t-honda-dsl-policy" ROLE_NAME = "t_honda_dsl_role" ROLE_POLICY_NAME = "t-honda-dsl-role-policy" RULE_NAME = "t_honda_dsl_rule" TABLE_NAME = "t_honda_dsl_table" @region = "ap-northeast-1" task :clean => [ :delete_certificate, :delete_rule, :delete_policy, :delete_thing, :delete_role, ] task :delete_role do iam.delete_role_policy({ role_name: ROLE_NAME, policy_name: ROLE_POLICY_NAME, }) iam.delete_role({ role_name: ROLE_NAME, }) end task :delete_thing do iot.delete_thing({ thing_name: THING_NAME, }) end task :delete_policy do iot.delete_policy({ policy_name: POLICY_NAME, }) end task :delete_rule do iot.delete_topic_rule({ rule_name: RULE_NAME, }) end task :delete_certificate do raise "certificate_id is required." if !ENV["certificate_id"] certificate_id = ENV["certificate_id"] cetificate_arn = nil resp = iot.list_certificates resp.certificates.each do |certificate| cetificate_arn = certificate.certificate_arn if certificate_id == certificate.certificate_id end raise "certificate_id is not found." if !cetificate_arn iot.update_certificate({certificate_id: certificate_id, new_status: "INACTIVE", }) iot.detach_principal_policy({policy_name: POLICY_NAME, principal: cetificate_arn, }) iot.detach_thing_principal({thing_name: THING_NAME, principal: cetificate_arn, }) iot.delete_certificate({certificate_id: certificate_id}) end
「clean」タスクが全体を削除するタスク、それ以下が個々のThingやPolicyなどを削除するタスクです。各タスク内ではAWS SDK for Rubyの「delete・・・」メソッドを呼び出しています。
「clean」および「delete_certificate」タスクを実行するには、引数としてcertificate idを渡すようにしました。引数のチェックは60行目で行っています。例えば全体を削除する場合、以下の様なコマンドを実行すると以前の記事で作成した環境が削除される筈です。
$ bundle exec rake clean certificate_id=YourCertificateID -t
「rake_helper」や「Gemfile」については、以前の記事を参考にしてください。
まとめ
環境の構築・削除を繰り返す時などは、その処理をスクリプト化することで非常に楽になると感じました。また証明書を削除する「delete_certificate」タスクなどにおいては、削除前にデタッチを行うという処理の流れが一目で分かることもスクリプト化するメリットかと思います。