クラウド向け IaC のツール雑感
こんにちは、buildチームでDevOpsやっているt.g.です。
最近TerraformやCDKを重点的に触る機会がありましたので、IaCのためのツールについて感じたことを共有したいと思います。
基本機能で Loop が使える CDK, Terraform は便利
インフラをコードにしていると、同種類のリソースを複数作るシーンによく出くわします。
たとえば、Amazon SNS を使っていて複数のメールアドレスを登録したいとします。
SNS Topicを作成し、
複数のメールアドレスをリスト形式で渡し、
Subscriptionをリストの長さ分作ろうとしますが 、、
CloudFormation の基本機能にはLoopがないため、③を作成するのが難しいです
その点、Terraformなら基本機能に Loop がありますし、
resource "aws_sns_topic_subscription" "subscription_emergency" {
for_each = toset(var.emails)
topic_arn = aws_sns_topic.emergency.arn
protocol = "email"
endpoint = each.value
}
CDKでも、使用する言語に付属の Loop が使えます
emails.forEach((each_email, index) => {
new sns.Subscription(this, 'EmergencySubsctiption'+index, {
protocol: sns.SubscriptionProtocol.EMAIL,
topic: topic,
endpoint: each_email
})
})
Loop があることで複数メールアドレスを変数として渡し、必要な分だけ作成することができました。
複数クラウド利用時の管理を一本化: Terraform
CDK, CloudFormationは AWS専用ツールなので、他クラウドでは利用できません。
一方、TerraformならAzureなど複数のクラウドで使えます。
ただ注意点としては(あたりまえですが)、同一のコードを違うクラウドに適用することはできません。
むしろ、複数クラウドに展開したリソースを`workspace`という形で分離しながら、terraform.io から同じ画面で管理できるのが便利です。
<有料機能を追加すれば>
ユーザ権限などを指定しやすいのもかなり得点が高いです。
様々なロールの人が使う、大規模な環境向けにも良さそうと感じました。
外部ツールもIaC対象に: CDK,Terraform,CloudFormation
外部ツールもコード化してクラウドリソースと同じ単位でデプロイ管理できると助かります。
たとえば、ログ分析の Datadog をインフラコードに入れることができれば、AWS リソースと同様に作成・編集・管理ができるようになります。
ここは、Terraform も CloudFormation/CDK も外部モジュールとして利用できるようになっていました。
以下に、Datadogの場合の利用リンクを置いておきます
まとめ
IaC ツールも日進月歩ですね。
TerraformとCDKを久しぶりに触ってみましたが、かなり充実していて驚きました。
ときどき違うツールを使うと、設計思想やユースケースの違いが浮き彫りになって興味深いです。
また面白い違いが得られたら共有していこうと思います。