クラウドワークスの缶コーヒーエンジニアの森田(@minamijoyo)です。
だいたい毎日缶コーヒーを飲みながら主にインフラ周りの仕事をしてるので、クラウドワークスのインフラの一部は缶コーヒーでできていると言っても過言ではないんじゃなかろうかと思う今日この頃。ちなみに最近のマイブームはFIREのハワイアン微糖です。
これまでのあらすじ
クラウドワークスではAWS(Amazon Web Services)でサーバを運用しており、AWSでのIAM(Identity and Access Management)ユーザのグループポリシーの管理について、以前こんな記事を書きました。
TerraformでAWSのIAMユーザのグループポリシーを管理する - Qiita
Terraform+Atlas+GitHubでAWSのIAMユーザのグループポリシーをいいかんじに管理する - クラウドワークス エンジニアブログ
上記の記事では、IAMのグループポリシーの部分をTerraformで管理する方法について説明していますが、Terraformそのものは既に存在しているAWSリソースは管理できないため、既存のIAMユーザそのものについては、一旦Terraformの管理対象外としていました。
この記事で書くこと
しかしながら、IAMユーザがTerraform管理外だと片手落ちです。というわけで、Terraformingという既存のAWSリソースをTerrafromに変換するツールを使って、既存のIAMユーザをTerraform管理下に入れる方法について説明します。この記事では Terraform v0.6.12、Terraforming v0.7.0を使用しています。
ポイントは以下のとおりです。
- Terraformはリソースの状態をtfstateファイルに保存している。tfstateはただのJSONなので手動で編集可能。(お約束ですが自己責任で)
- Terraform自体には既存のAWSリソースを管理する機能はないが、Terraformingという非公式ツールがあるのでこれを使おう。
- Terraformingは非公式ツールだけど、生成したファイルをマージしてterraform planして差分がなければTerraformとして問題ないことは確認できるので互換性はそこで担保。
- Terraformingで自動生成されるのそのまま使っても良いけど、tfstateの構造が分かれば必要なところだけ手動でリソース名をリネームしたり個別調整することも可能。