对于TypeScript、Terraform、CDK和CDK for Terraform之间的关系进行整理

以下是整理Terraform、CDK和CDK for Terraform三个特点的备忘录。如果有错误,请告诉我。

IaC是什么?

    • IaC(Infrastructure as Code)は、インフラをコードで定義するアプローチ全般を指す言葉

 

    • 従来:

構成や手順は文書で定義
文書を参照し、手動で構築

IaC:

プログラミング言語やドメイン特化言語(DSL)で構成や手順を定義
自動で構築

“Terraform是什么”

    • IaCを実現するインフラ構成ツール

 

    • HCLという宣言型のドメイン特化言語でインフラを定義できる

 

    • AWS、Azure、GCPをはじめ様々な1,000を超えるプラットフォームに対応している

 

    競合: Pulumi
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

CDK是什么?

    • CDK(Cloud Development Kit)は、IaCを実現するインフラ構成ツール

 

    • TypeScript、Python、Javaなどのプログラミング言語で、インフラを定義できる

 

    • AWSにのみ対応している

 

    競合: CloudFormation
import * as cdk from 'aws-cdk-lib';
import { aws_s3 as s3 } from 'aws-cdk-lib';

export class HelloCdkStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true
    });
  }
}

Terraform的CDK

    • CDK for Terraform(CDKTF)は、IaCを実現するインフラ構成ツール

 

    • TypeScript、Python、Javaなどのプログラミング言語で、インフラを定義できる

 

    • HCLを書かずにTerraformを使えるようにするもの

CDKの書き味の良さと、Terraformのマルチプラットフォーム対応のいいとこどりができる

競合: Pulumi

import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import {
  GoogleProvider,
  ComputeNetwork,
  ComputeInstance,
} from "./.gen/providers/google";
import * as path from "path";
import * as fs from "fs";

class MyStack extends TerraformStack {
  constructor(scope: Construct, name: string) {
    super(scope, name);

    const credentialsPath = path.join(process.cwd(), "google.json");
    const credentials = fs.existsSync(credentialsPath)
      ? fs.readFileSync(credentialsPath).toString()
      : "{}";

    new GoogleProvider(this, "Google", {
      region: "us-central1",
      zone: "us-central1-c",
      project: "terraform-cdk",
      credentials,
    });

    const network = new ComputeNetwork(this, "Network", {
      name: "cdktf-network",
    });

    new ComputeInstance(this, "ComputeInstance", {
      name: "cdktf-instance",
      machineType: "f1-micro",
      bootDisk: {
        initializeParams: {
          image: "debian-cloud/debian-9",
        },
      },

      networkInterface: [
        {
          network: network.name,
        },
      ],
      tags: ["web", "dev"],
      dependsOn: [network],
    });
  }
}

const app = new App();
new MyStack(app, "typescript-gcp");
app.synth();

我对此有所感触。

    • TypeScriptでIaCするなら、次のいずれかになる

CDK
Pulumi
CDK for Terraform

CDKはAWS専用なので、マルチプラットフォームを扱うなら選択肢から除外される
PulumiとCDK for Terraformだと、どっちでも良さそうだが、PulumiよりTerraformのほうがエコシステムが大きそうなので、CDKTFが魅力的

广告
将在 10 秒后关闭
bannerAds