はじめに
Infrastracture as Code(以下IaC)、便利ですよね。この便利さに一度慣れてしまうと、GUIでちまちまやるのが面倒になります。
IaCツール、皆さん何をお使いでしょうか?Ansible、Puppet、Chefや、Terraform、CloudFormationなどいろいろありますよね。
今回は、クラウドリソース操作が得意なTerraformと、OSの構成管理が得意なAnsibleを組み合わせ、クラウドリソース払い出しからEC2の構成変更までの一連の処理を、Ansibleで一本化してみようと思います。
背景
Terraformでクラウドリソース操作して、Ansibleで構成変更するのですが、このTerraformとAnsibleの切り替えが面倒だと感じました。
どちらかで一本化できたら楽なのにと考え、いろいろと調べたら一本化できそうなので実装してみました。
実装
Ansibleコマンド一発で、クラウドリソースデプロイ、EC2設定変更を行います。
処理の流れとしては、AnsibleでTerraform実行し、VPC、EC2、ELBを作成します。次に、Ansibleで共通処理、nginxのインストールを行います。
モジュール構成はこんな感じです。
AnsibleにはTerraformのコードを実行できるTerraformモジュールがありますので、こちらを使います。
ここで1つ問題があって、TerraformでEC2を払い出した後、そのEC2に対してAnsibleで共通処理、nginxインストールするのですが、処理をAnsibleに一本化するので、実行前ではEC2のIPアドレスがわからないという問題があります。
そこで出てくるのがDynamicInventoryというAnsibleの機能です。これを使うことで、動的にインベントリファイルを変更できます。
処理の流れとしては
- Terraformでクラウドリソースデプロイ
- DynamicInventory更新
- Ansibleで共通処理、nginxインストール
といった流れとなります。
具体的な実装については、以下のリポジトリをご覧ください。
おわりに
いかがでしょうか。Ansibleで一本化するとコマンド一発でいろいろできるのでとても楽です。
同じ土俵のIaCツールたち、ついつい、「どちらを使おうか」と悩むことがあるかと思いますが、使い分けるのではなく組み合わせることでよりよくなることもあるのだなーと思いました。
よかったら試してみてください。
コメント