Terraform / ansible ことはじめ
スピーカー
新田 さん
※ @dozonot : 雑談部屋でLTを依頼したら快諾していただきました! 感謝!
話すこと
冗長化されたWordPress環境を自動構築する フロントはロードバランサ(ALB)、EC2をマルチAZ配置、データベースはRDSのMulti-AZ機能を使う
Terraform とは
Terraformとは、インフラの構築、変更、バージョンの管理をコードで行うためのコマンドラインツールです。ここでいうインフラとは、コンピューティングリソースやストレージ、ネットワークといった基本的な部分から、ロードバランサーやDNS、データーベース、CDNといった応用的なものまでを含む、システムを構成する基盤の事を指しています。開発はVagrantやPacker、Consulといった製品を開発しているHashicorp社が主体となって行われており、GitHubにてオープンソース・プロジェクトとして進められています。 引用元:Terraform for さくらのクラウド スタートガイド | さくらのナレッジ
- インフラ全体を管理できる
- Infrastructure as Code を実現できる
- git管理することで変更の意図をコメントで残せる
Terraform の書き方
- 拡張子.tf のファイルで構成する。
- 命名規則に細かい縛りはない。管理しやすいように以下のように分けている。
- main.tf
- ec2.tf
- rds.tf
- vpc-alb.tf →後述のterraform apply を実行すると、同一ディレクトリ内の.tfファイルが全て読み込まれる。 また、リソースの依存関係(VPCを作ってからEC2を起動など)は自動的に解決される仕組みとなっている。 必要があれば、依存関係を明示することもできる。 記述言語はHCL( HashiCorp Configuration Language )。
- 様々なプロバイダに対応している
- aws
- サクラクラウド
- GCP
- その他 Providers-Terraform
- ACMを用いた証明書の発行も出来る。
- resource 内に、構成オプションを書いていく。
- resource によっては、他のresourceと関連付ける必要がある。
- ${aws=vpc.wpVPC.id} などの形で情報を取得できる
動作を見てみる
- terraform init
- 作業ディレクトリのセットアップを行う。
- initとなっているが作業中にも行うべきコマンド、作成したファイルが改変されたりすることはない。
- terraform plan
- terraformを適用することで、環境にどのような変更が行われるかが分かる。
- terraform apply
- terraformを実行できる
- vpcの作成、サブネットの作成、SGの作成、ALBの作成、などなど処理が流れる。
- terraform destroy
- 作成したインフラを削除する。
- 消し忘れが発生しないので、従量課金制の環境を使うときはとても助かる。
- terraform graph
- 依存関係をdot言語でグラフ化する。 ``` terraform graph | dot -Tsvg > graph.svg
### 現在発生している問題 - RDSの起動処理に時間がかかりすぎて、terraformがタイムアウトする事象が発生している。 - タイムアウトしてもterafformを再実行すれば良い。べきとうせいが担保されているので不整合は起きない。 ## ansibleによるゲスト内の構成 - terraformではAWSリソースのみ構成している。ゲスト内の構成についてはansibleを用いている。 ## 参考リンク - [Terraform by HashiCorp](https://www.terraform.io/) - [Terraform for さくらのクラウド スタートガイド (第一回) ~インストールから基本操作 ~ \| さくらのナレッジ](https://knowledge.sakura.ad.jp/7230/)