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/)