※この記事は特定のサービスを推奨するものではございません
※Terraform,Pulumiの初学者が書いています
Terraformの問題点
近年、Infrastructure as Codeの重要性が広まっており、皆さんもITインフラのコード化をしておられると思います。AWS:CloudFormationやGCP:Cloud Deployment Managerのようなクラウドベンダー純正を使っている方もいれば、Terraformのようなマルチクラウドベンダーの対応しているサービスを使っている方もいると思います。弊社でもTerraformを利用しています。しかし、tfstateの管理が面倒であるという問題があります。1
git管理するのはなあ、、、
S3などのストレージサービスで管理するのも地味に面倒、、、
そんなあなたのためにPulumiというサービスがあります!
https://www.pulumi.com/
Pulumi とは
PulumiとはIaCを実現するためのサービスです。しかも、デフォルトでstate(現在の構成情報)をクラウド上で保存できる事ができます。もちろんローカルで保存することも可能です。素晴らしい!
他にも特徴があります。
Terraform との違い
細かな差異はTerraform vs. Pulumi Experiencesというすごく良い記事がMediumにありましたのでそちらを参照していただくことにして一番大きなLanguageについて今回は紹介します。
###Terraformの言語
HCL (HashiCorp Configuration Language)というTerraform専用の言語を使っている。難しくはないが専用言語の学習が必要となる一方、宣言的な記法でインフラストラクチャーコードを綺麗に表すことが可能な強みがある。また、依存関係を明示的に記述しなくても雑に解決してくれる。
# Create a new instance of the latest Ubuntu 14.04 on an
# t2.micro node with an AWS Tag naming it "HelloWorld"
provider "aws" {
region = "us-west-2"
}
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
resource "aws_instance" "web" {
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
###Pulumiの言語
専用言語が必要なTerraformに対してPulumiではJavaScript , Python , Go , TypeScriptなど一般的なプログラミング言語で記述することが可能なので開発者に易しい仕様になっている。また、依存関係を明示的に記述する必要がある。
import * as aws from "@pulumi/aws";
let group = new aws.ec2.SecurityGroup("web-sg", {
description: "Enable HTTP access",
ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] }],
});
let server = new aws.ec2.Instance("web-server", {
ami: "ami-6869aa05",
instanceType: "t2.micro",
securityGroups: [ group.name ], // reference the security group resource above
});
なぜ流行らないのか
stateの管理も楽だし言語も開発者にとって学習コストが低い
ので普通にTerraformより人気が出てもおかしくない気がする。しかし、あまり聞かないし使っている人を見たことがない。私の見解では以下の理由で流行らないのかなと思っている。
###値段
一人で使うならばfreeなのだが、チームとなると一番安いプランで月額 $50で3人までしか使えない。それ以上の人数となると月額 $75/userが必要になる。githubがチームで月額 $4/user や エンタープライズで月額 $21/user であることと比較すると比較するとすごく高く感じられる。弊社のようなベンチャー企業では導入が厳しい値段設定である。
https://www.pulumi.com/pricing/
コミュニティ
Terraformと比べるとユーザーの数が少なく、ドキュメントやコミュニティが弱いと感じられる。Githubのスターの数を比較すると(2020/06/13現在)Terraformが22.4k、 Pulumiが5.8kと4倍近い差がある。
結論
プログラミング言語がそのまま使えるのでインフラを開発者が担当しているのであればPulumiは大いに検討の余地があると思います。しかし、弊社のようにある程度分業されているならばTerraformを利用するのが良いかもしれないです。しかもなんとTerraform Cloudは5人まで無料になったようですね。2
弊社でもState管理にTerraform Cloudを検討しようと思います。
#最後に
最後まで読んでいただきありがとうございます。
最初にも記載しましたように浅学なものが書いた記事ですのでご了承ください。
またこの記事は特定のサービスを推奨するものではございません。
建設的な意見や感想お待ちしております。