TL;DR
- 既存AWSアカウントに複数のIAM Userがいるのでterraformの管理下におきたい(という話を聞いたので書いた)
- terraform import でちまちまやるとtf戻しもめんどくさい(そりゃそうですね)
- terraforming 万歳
作業
- dtan4/terraforming: Export existing AWS resources to Terraform style (tf, tfstate)
- 詳細はリンク先参照。とても素晴らしいツールをありがとうございます
- docker を使うととても簡単なので使いましょう
docker pull quay.io/dtan4/terraforming:latest
- 走らせるときはaliasにしておくのが楽です。丸コピーして .bashrc にでもどうぞ
alias terraforming='docker run --rm --name terraforming -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -e AWS_REGION=$AWS_DEFAULT_REGION quay.io/dtan4/terraforming:latest terraforming'
- 走らせる前に環境変数をエクスポートしておきましょう
- セキュリティが気になるなら専用のROロールを用意するとか、環境変数に依存しないやりかたを考えるとかしてください
export AWS_DEFAULT_REGION=
export AWS_SECRET_ACCESS_KEY=
export AWS_ACCESS_KEY_ID=
- お試し
$ terraforming iamu
resource "aws_iam_user" "terraform" {
name = "terraform"
path = "/"
}
resource "aws_iam_user" "test01" {
name = "test01"
path = "/"
}
- リダイレクトで適当なファイルに送ればOK
- iam系のコマンドをそれぞれファイルに吐けばそれだけでいったん管理は出来る、はず
- あとは分割するなりディレクトリわけるなり、目的に応じた管理単位にすればいいと思います
蛇足
元々はユーザ名でリソース管理するのは大変って話だったので、簡素化するための案を1つ書いておきます。
前述のとおり、terraforming で出力した tf データは値は正しいのですが、terraform で実際にリソースを管理するための参照形式にはなっていません。なので、どのみち手を入れることになります。というわけで。
$ tree iam
iam
|-- test01
| `-- iam.tf
`-- test02
`-- iam.tf
こんな感じで1ユーザ1ディレクトリ1tfファイル、リソースの名前(nameじゃなくてリソースタイプの次のところの)はthisとかに固定すると楽かなって。
iam/test01/iam.tf
resource "aws_iam_user" "this" {
name = "test01"
path = "/"
}
resource "aws_iam_user_policy_attachment" "test-attach" {
user = "${aws_iam_user.this.name}"
policy_arn = "${aws_iam_policy.policy.arn}"
}
// その他関連リソース
前述のように管理体として、iam ディレクトリ、ユーザ名ディレクトリ、にしておいて、こんな感じのコマンドでぶん回せば、管理しやすいのではないか、と思いました。