2
2

More than 3 years have passed since last update.

AnsibleからTerraformのモジュールを実行する

Last updated at Posted at 2020-08-16

はじめに

Infrastructure as Code(以下IaC)、便利ですよね。この便利さに一度慣れてしまうと、GUIでちまちまやるのが面倒になります。
IaCツール、皆さん何をお使いでしょうか?Ansible、Puppet、Chefや、Terraform、CloudFormationなどいろいろありますよね。
今回は、クラウドリソース操作が得意なTerraformと、OSの構成管理が得意なAnsibleを組み合わせ、クラウドリソース払い出しからEC2の構成変更までの一連の処理を、Ansibleで一本化してみようと思います。

この記事は、以下個人ブログ記事をQiita用に編集したものになります。
https://tagfa.wpx.jp/archives/312

実装

Ansibleコマンド一発で、クラウドリソースデプロイ、EC2設定変更を行います。
処理の流れとしては、AnsibleでTerraform実行し、VPC、EC2、ELBを作成します。次に、Ansibleで共通処理、nginxのインストールを行います。
モジュール構成はこんな感じです。

image.png

AnsibleにはTerraformのコードを実行できるTerraformモジュールがありますので、こちらを使います。

ここで1つ問題があって、TerraformでEC2を払い出した後、そのEC2に対してAnsibleで共通処理、nginxインストールするのですが、処理をAnsibleに一本化するので、実行前ではEC2のIPアドレスがわからないという問題があります。

そこで出てくるのがDynamicInventoryというAnsibleの機能です。これを使うことで、動的にインベントリファイルを変更できます。

処理の流れとしては、

  • Terraformでクラウドリソースデプロイ
  • DynamicInventory更新
  • Ansibleで共通処理、nginxインストール

といった流れとなります。

具体的な実装については、以下のリポジトリをご覧ください。
https://github.com/tagfa/ansible-terraform

おわりに

いかがでしょうか。Ansibleで一本化するとコマンド一発でいろいろできるのでとても楽です。

同じ土俵のIaCツールたち、ついつい、「どちらを使おうか」と悩むことがあるかと思いますが、使い分けるのではなく組み合わせることでよりよくなることもあるのだなーと思いました。

よかったら試してみてください。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2