見出し画像

クラウド向け IaC のツール雑感

こんにちは、buildチームでDevOpsやっているt.g.です。
最近TerraformやCDKを重点的に触る機会がありましたので、IaCのためのツールについて感じたことを共有したいと思います。


基本機能で Loop が使える CDK, Terraform は便利

インフラをコードにしていると、同種類のリソースを複数作るシーンによく出くわします。
たとえば、Amazon SNS を使っていて複数のメールアドレスを登録したいとします。

  1. SNS Topicを作成し、

  2. 複数のメールアドレスをリスト形式で渡し、

  3. 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 があることで複数メールアドレスを変数として渡し、必要な分だけ作成することができました。

CloudFormation には、CustomResource を作ってLambdaで作成時/更新時/削除時の挙動を作るという手もあります。
AWS Prescriptive Guidance
が、基本機能で簡単に使えるかというと難しいです


複数クラウド利用時の管理を一本化: Terraform

CDK, CloudFormationは AWS専用ツールなので、他クラウドでは利用できません。
一方、TerraformならAzureなど複数のクラウドで使えます。

ただ注意点としては(あたりまえですが)、同一のコードを違うクラウドに適用することはできません。

むしろ、複数クラウドに展開したリソースを`workspace`という形で分離しながら、terraform.io から同じ画面で管理できるのが便利です。

<有料機能を追加すれば>
ユーザ権限などを指定しやすいのもかなり得点が高いです。
様々なロールの人が使う、大規模な環境向けにも良さそうと感じました。


外部ツールもIaC対象に: CDK,Terraform,CloudFormation

外部ツールもコード化してクラウドリソースと同じ単位でデプロイ管理できると助かります。
たとえば、ログ分析の Datadog をインフラコードに入れることができれば、AWS リソースと同様に作成・編集・管理ができるようになります。

ここは、Terraform も CloudFormation/CDK も外部モジュールとして利用できるようになっていました。
以下に、Datadogの場合の利用リンクを置いておきます


まとめ

IaC ツールも日進月歩ですね。
TerraformとCDKを久しぶりに触ってみましたが、かなり充実していて驚きました。
ときどき違うツールを使うと、設計思想やユースケースの違いが浮き彫りになって興味深いです。
また面白い違いが得られたら共有していこうと思います。