CDK for Terraform v0.3 釋放 Multiple-stacks 和 Remote Templates

2021-04-26 CDK, Terraform

CDK for Terraform 來到了 v0.3 版本,會寫這篇的主要原因是 CDK for Terraform 在這個版本的更新別具意義,從 skorfmann 加入 HashiCorp 主力開發 CDK for Terraform 之後,這應該是最大的更新之一

先講比較不重要的 Remote templates … XDD 基本上就是將 cdktf init 產生的模板改成自定義的 template,但老實說算是一個雞肋的功能 … 用 Github template 可以做到一樣的事情。

再來是這篇文章的重點 Multiple-stacks,一直以來 Terraform 都是以 Single-Stack 為主的模式,如果要切分不同 Stack 除了 Workspace 以外就是用 Directory 分開不同的 *.tf 部署,這對於某些場景來說很不容易管理,在這次 v0.3.0 版本釋出的 Multiple-stacks 讓 CDK for Terraform 做出與 Terraform 明顯的區隔

import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import { AwsProvider, Instance } from "@cdktf/provider-aws";

interface MyStackConfig {
  environment: string;
  region?: string;
}

class MyStack extends TerraformStack {
  constructor(scope: Construct, id: string, config: MyStackConfig) {
    super(scope, id);

    const { region = 'us-east-1' } = config

    new AwsProvider(this, "aws", {
      region,
    });

    new Instance(this, "Hello", {
      ami: "ami-2757f631",
      instanceType: "t2.micro",
      tags: {
        environment: config.environment
      }
    });
  }
}

const app = new App();
new MyStack(app, "infra", { environment: 'dev' });
new MyStack(app, "eks", { environment: 'staging' });
app.synth();

Multiple-stacks 的用法基本上就是參照 AWS CDK 可以 new 多個 Stack 拆分 infra、application 或是 environments。

$ cdktf list

Stack name                      Path
infra                           cdktf.out/stacks/infra
eks                             cdktf.out/stacks/eks

cdktf list 來看其實還是把 stack 分開在不同的 cdktf.out 進行部署,而預設 tfstate 用了 Multiple-stacks 之後改成 terraform.<stack-name>.tfstate

雖然有一定的格式存放 tfstate 但我仍然建議大家指定 tfstate backend 自己命名 tfstate。

雖然 Multiple-stack 很香,但現在仍未支援 across stacks Token 互相 Reference 的方法,在還沒有 across stacks Token 之前大概都還算是好看不好用的階段。

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱