1章 Infrastructure as Code(IaC)とTerraform
from Terraformではじめる実践IaC ―AWSでのインフラストラクチャ構築の基本から継続的デプロイまで
IaC のメリット
内容が同一のコードであれば同じアクションが実行される(作業の正確性を担保)
コードを修正すれば、解釈のブレがなく次回から確実に反映される(改善事項の確実な反映)
GUI の更新に悩まされずに済む
warning.icon 緊急時など状況次第では管理コンソールから直接リソースを操作することは十分にあり得るため、すべて IaC に頼れば良いというわけではない
IaC ツールの分類・比較
記述方法による分類
手続き型: インフラ を構築するための手順を記述
宣言型: 実行結果としてリソースがどうなって欲しいか
Terraform はこちら
ツールの適用範囲による分類
クラウドリソースを中心にサービスのインフラとなるリソースを構成するためのツール
Terraform, Pulumi, CloudFormation, Deployment Manager, Bicep
OS より上のカーネルパラメータやミドルウェアなどを構成するツール
Ansible, Chef, Packer, Puppet
アプリケーションをパッキングするためのツール
Docker, Cloud Native Buildpacks
この分類によるツール(Terafform, Packer, Ansible)の使い分け
https://gyazo.com/9b4f88b35d8417260114c55c0a7238e8
この場合、Ansible を実行するのではない
Packer が AMI(Amazon Machine Image)をカスタマイズするための プロビジョナー として利用される
Packer を実行して Ansible による設定が完了すると、カスタム AMI としての AMI ID が取得できる
この AMI ID を Terraform で利用する
code:tf
data "aws_ami" "sample_ami" {
most_recent = true
owners = "self"
filter {
name = "tag:Name"
values = "sample-ami"
}
}
resource "aws_instance" "sample_instance" {
ami = data.aws_ami.sample_ami.id
instance_type = "t3.midium"
tag = {
Name = "sample-instance"
}
}
Terraform
HashCorp が開発している IaC ツール
ある 1 つのクラウド上のインフラ構築・管理だけでなく、複数クラウド、さらには オンプレミス のリソースを対象にすることも可能
開発・運用プロセスに組み込むことで、コード記述や差分の確認(plan)、適用(apply)を繰り返しながら 継続的 なインフラ管理・構築が可能
コンピューティング や ストレージ、ネットワーキング リソースの管理だけでなく、DNS のようなハイレベルなリソース、様々な SaaS ソリューションの管理までを可能とする
HCL(Hashicorp Configuration Language)という言語を用いる
warning.icon v0.13 以降の Terraform は HCL v2 で記述する
拡張子 .tf
HCL は .tf ファイルに記述する
Terraform は、この .tf ファイルを解釈してインフラを構築する
構築時には、扱う対象に応じてモジュールやプロバイダ、ステートなど追加の要素が必要になる
メリット
マルチクラウドで利用できる(AWS, Google Cloud, Microsoft Azuru)
クラウドベンダが提供しているツールは以下のような機能を提供しているため、単一クラウドを利用する場合は恩恵が少ないように思える
状態管理をクラウドに一任できる
実行バイナリのバージョン管理を考慮する必要がない
マネージドな機能で変更差分検知などの通知が可能
しかし、以下のようなメリットが Terraform にはある
ある程度 プログラマブル な条件分岐や繰り返し処理が可能
Linter やドキュメンテーションツールなどエコシステムが豊富
API を提供しているサービスであればプロバイダを介して Terraform 化できる
プロバイダ: HCL で記述されたソースを各サービスに向けて実行するプラグイン
プロバイダは公開されているものを利用したり、自身で開発することも可能
https://gyazo.com/3663ae57cb946519e3643b2d9b7da834
IaC 化すべきかの判断基準
何度繰り返しリソースを作成するか
どれくらいの頻度でリソースを作成するか
#読書メモ #Terraform