0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptでcdktf用のcustom providerパッケージを作る

Last updated at Posted at 2024-11-15

CDKTF in TypeScriptでインフラの定義を部分的にラップした関数を提供したい。

セットアップ

tsupでビルドしたいので入れておく。ここではpnpmを使う。

pnpm init
pnpm install -D tsup @types/node typescript

あとはcdktf自体もhomebrewかなんかでインストールしておく必要あり。

cdktfとconstructはcustom providerを利用する側でも使うので peerDependencies に入れておくのが良さそうだが、正しいかは不明。

TypeScriptコードの生成

ここまで準備できたら、ベースにしたいproviderを terraformProviders で指定した cdktf.json を作る

{
  "language": "typescript",
  "app": "exit 0",
  "terraformProviders": [
    "tailor-platform/tailor@~> 0.0"
  ]
}

TypeScriptのproviderをgenerateする

cdktf get

すると同ディレクトリに .gen が生える。

あとは生成されたproviderを使って、公開したい関数を index.ts らへんに準備しておく。

src/index.ts
export * as Tailor from "../.gen/providers/tailor";

export const addSomeUsefulResources = () => {
  /**
   * いろいろいい感じにリソースを追加してくれる何かしらのコード...
   */
}

ビルド

tsupの設定ファイルはこんな感じ。

/// <reference types="node" />
import { defineConfig } from "tsup";

export default defineConfig({
  format: ["cjs"],
  entry: ["src/index.ts"],
  clean: true,
  minify: true,
  dts: true,
});

cdktfはesmに対応していないので format はCommonJS決め打ち。

最終的にはnpmで公開したいので exportstypes を追加。

{
  "name": "my-cdktf-custom-provider"
  "version": "0.1.0",
  "exports": {
    ".": "./dist/index.js",
  },
  "types": "./dist/index.d.ts"
}

こういうコマンドも用意しておくと便利

  "scripts": {
    "cdktf:fetch": "cdktf get",
    "build": "pnpm cdktf:fetch && pnpm type-check && tsup",
    "package:publish": "pnpm build && pnpm publish --access public",
  }

これで pnpm package:publish を実行するだけでパッケージをビルドして公開できる

使う側

TypeScriptのcdktfプロジェクトをprovider指定せず初期化

cdktf init --template=typescript --local

先ほど作ったnpmパッケージをインストール

npm install --save my-cdktf-custom-provider

あとは main.ts の中で呼び出すだけ

main.ts
import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import { addSomeUsefulResources } from "my-cdktf-custom-provider";

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

    addSomeUsefulResources();
  }
}

最後にデプロイする

cdktf deploy

おわり

参考実装

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?