背景
IAM userをTerraformで管理し始めて、 policyを importして、Roleを。。とやっていたが、policy attachmentや group memberなどもTerraform化しなくてはいけなくなってかなり大変になった。
要件
以下の要件くらいは満たしてほしい
- Userの追加・削除
- User削除時に関連する グループに所属する、UserPolicyAttachmentなどの削除が可能
- Groupの作成と同時にUserの追加
- Policyの作成と同時にUser/Role/GroupへのAttachment
- Role/Group/Userの作成とPolicyのAttachment
材料
terraform import
利点:
- officialで既存のリソースのImportができる
難点: - tfstateはimportできるがtfファイルは準備しないといけない。 → すでに大量のリソースがあると大変
terraforming
利点:
- ほとんどのリソースカバーされてる
- tf と tfstate既存が既存リソースに対して生成できる
難点:
- プロジェクトがActiveではないのでPRとか出したがマージされたり更新されることはなさそう
- ResourceごとにImportするので、上記の異なるResource間のDependencyを解決できない
解決策
とりあえずあるもの使って自分で作ればいいかという感じになったので、勉強がてら作った
基本は 「terraformingがどうやってるか理解」+「リソース間の依存までを自分で実現する」
出来たもの
使ったもの:
- terraforming
- pratice_terraforming <- terraformingの勉強しつつ、自分の必要なリソースでterraformingになかったものを作った
- shell (汚くstateを移動したり、無理くりやってるのは愛嬌w)
とりあえず2ステップだけでできるようになった
-
生のtfとtfstateのimport
./import.sh
-
インポートしたやつの依存関係を考えたModule構造に変換する
./convert.sh