これまでAWSを構成する際には手動でサービスを設定してきましたが、規模が大きくなり、それが難しくなってきたので、Infrastructure as Codeということで、サービスの構成をコードとして管理することにしました。
これまでに、ansibleを活用して管理したことがあったので、今回もansible一本で実現しようと考えていましたが、terraformも気になっていたので、それも調べた上でどちらを使うかを考えようと思いました。
目次
結論
調べたところ、terraformとansibleは競合しあうツールではなく、互いに補完し合う関係にあるそうで、結果的にはどちらも利用することにしました。具体的には、AWSのサービスの設定などはterraformを利用して設定し、EC2インスタンス上にインストールするソフトウェアなどはansibleで記述するようにしました。
さらに、ansibleには、terraformを実行する記述ができるため、ansibleのコマンドを実行することで、全ての作業が完了するようにしました。
以降は調べた結果になります。それぞれの詳しい使い方については、後ほど、追記していこうと思います。
terraformについて
まず、terraformとは、オーケストレーションツールだそうです。そのため、全体のアーキテクチャを定義する機能に注力されており、例えば、最近流行りのサーバレスアーキテクチャを定義することに優れています。
そのため、AWSのPolicyの作成、S3バケットの作成、lambdaの作成などをterraformで定義しました。
ansibleについて
次に、ansibleとは、構成管理ツールだそうです。そのため、EC2など仮想マシンのOS上にインストールする手順を定義することに優れています。
そのため、EC2インスタンスにnginxのインストールとその設定を定義しました。
参考資料