LoginSignup
2
1

More than 3 years have passed since last update.

terraform について

Last updated at Posted at 2020-07-23

はじめに

  • みんな大好き terraform をさくっと教えることになったのでさっと説明する資料。
  • クラウドやインフラにあまり明るくないとのことなのでイメージだけ。
  • PlantUML の練習も兼ねてる。Qiita ネイティブで書けると楽なんだけど。PlantUMLを書くツール

過去

一人でやってるうちは自己責任だしどうにでもなる。

  • マネジメントコンソールを使う
  • 再現性はない
  • サンプルのCloudFormationやドキュメントの手順

image.png

PlantUML コード
@startuml
actor UserA
UserA --> (Cloud)
@enduml

現在

複数人になると問題が出やすくなる。

  • 俗人化
  • 変更内容や日時が残らない(誰かの実施した変更がわからない)
  • 元に戻すのが困難になる
  • クラウド側も日々変更される
  • 再現性に乏しい(似たようなのをもう1つ作って)
  • セキュリティや機能面で複雑性が増す

image.png

PlantUML コード
@startuml
actor UserA
actor UserB
actor UserC
UserA --> (Cloud)
UserB --> (Cloud)
UserC --> (Cloud)
@enduml

未来

terraform により宣言的コードによるクラウドの抽象化が可能になった

  • コード管理(git)によって変更内容の記録が取りやすくなる
  • state の存在によってコードとリソースの差分が取得可能になる
  • 定期的な更新への追従で安定してリソースの管理が可能になる

image.png

PlantUML コード
@startuml

actor UserA
actor UserB
actor UserC

database Git
database State

UserA --> [terraform]
UserB --> [terraform]
UserC --> [terraform]

Git -right- [terraform]
State -left- [terraform]

[terraform] --> (Cloud)

@enduml

大事なこと

  • terraform (code) == state(状態) == クラウドリソース
  • あるべき状態を管理することができる
  • terraform が宣言的という理由であり、Pulumi や CDK/SDK/ベンダー提供のスタッキングツールとの違い
  • 実際のリソースからコードにフィードバックすることで状態を維持することもできる(Ansible の宣言的とは異なる部分)
  • Ansible は基本的に一方的であり、Ansible を使用して差分を取得してコード側を合わせるといった運用には向いていない
  • CloudFormation 等のベンダー提供ツールによるロックインを避け、適度に抽象化することでコマンド差異を軽減させることができ、マルチクラウド展開等に有利であることも terraform を選定する理由のひとつ

おまけ

念のため

  • Cloud 部分は AWS, GCP, Azure の他、terraform のプラグインの一部になる Provider が対応できればなんでもいい
  • コード管理ができているからといっていつでもどうにでもロールバックできるとは限らない(不可逆な変更はたくさんある)
  • pulumi は状態持ってるらしい?知らんけど
  • Provider は各クラウドのAPIやSDKを利用しているので、常に最新の機能が使えるとは限らない

おまけのおまけ

Ansible

image.png

PlantUML コード
@startuml

actor UserA

database Git
database Config


Git -right- [Ansible]

UserA --> [Ansible]

Config -left- [Ansible]
note top of Config
  Inventory
  Playbook
  Role
endnote

[Ansible] --> (Host)

note right of Host
  常に上書きされて
  最新になる
endnote

@enduml

Packer と Ansible

image.png

PlantUML コード
@startuml

actor UserA

database Git

# あー、ツールが古くて frame 形状にならなかった
package PackerAnsible <<Frame>> {
  [Packer]
  [Ansible]
}

Git -- PackerAnsible

UserA --> PackerAnsible

Packer -> Ansible

PackerAnsible --> (AMI)

note right of AMI
  常に上書きされて
  最新になる
endnote

@enduml


2018年にAnsible NightでLTした内容

2
1
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
1