🐿️

Momento用のTerraform providerが実現との事で触ってみました

2024/02/22に公開

Momento用のTerraform providerが実現

https://github.com/Chriscbr/terraform-provider-momento

特段の理由はありませんが、以前TiDBをcdktfでという記事を書いた事がありますので、同じ要領で利用してみたいと思います。
https://zenn.dev/mjxo/articles/1df105caf5e4fb


やってみます

任意の場所でdirを作成=>cdktf init

$ mkdir cdktfMomento && cd cdktfMomento && cdktf init --template=typescript --providers=hashicorp/aws

provider add

$ cdktf provider add "Chriscbr/momento"
[2024-02-22T00:16:53.699] [INFO] default - Checking whether pre-built provider exists for the following constraints:
  provider: Chriscbr/momento
  version : latest
  language: typescript
  cdktf   : 0.19.2

[2024-02-22T00:16:53.923] [INFO] default - Pre-built provider does not exist for the given constraints.
[2024-02-22T00:16:53.923] [INFO] default - Adding local provider registry.terraform.io/Chriscbr/momento with version constraint undefined to cdktf.json
Local providers have been updated. Running cdktf get to update...
Generated typescript constructs in the output directory: .gen

cdk.json
{
  "language": "typescript",
  "app": "npx ts-node main.ts",
  "projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "sendCrashReports": "false",
  "terraformProviders": [
    "Chriscbr/momento@~> 0.1"
  ],
  "terraformModules": [],
  "context": {}
}



先のTiDBプロバイダー記事同様lazy-index.ts内でエラーが起きていた為、以下で解消しておきます。

$ npm i --save-dev @types/node

Token作成

Momentoコンソールからトークンを作成。今回はテストなのでSuper User Keyを作成します。


コピー


main.ts

※テストの為、今回は先程貼ったリンクのTiDB記事の時にしたようにTokenの保存や利用にAWSのSecrets ManagerやTerraformVariableを使用したりせずベタ書きです。

main.ts
import { Construct } from "constructs";
import { App, TerraformStack, } from "cdktf";
import * as momento from './.gen/providers/momento';

class MyStack extends TerraformStack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
  new momento.provider.MomentoProvider(this, 'provider', { 
    authToken: "[先程作成したトークン]"
  });
  //-------------------------------------------------------//
    new momento.cache.Cache(this, 'cache', {
      name: "cdktfMomentoCache"
    });
  //-------------------------------------------------------//
  }
}

const app = new App();
new MyStack(app, "cdktfMomento");
app.synth();

synth

$ cdktf synth

Generated Terraform code for the stacks: cdktfMomento

synth結果(畳んでいます)
cdk.out > stacks/cdktfMomento > cdktf.json
{
  "//": {
    "metadata": {
      "backend": "local",
      "stackName": "cdktfMomento",
      "version": "0.19.2"
    },
    "outputs": {
    }
  },
  "provider": {
    "momento": [
      {
        "auth_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    ]
  },
  "resource": {
    "momento_cache": {
      "cache": {
        "//": {
          "metadata": {
            "path": "cdktfMomento/cache",
            "uniqueId": "cache"
          }
        },
        "name": "cdktfMomentoCache"
      }
    }
  },
  "terraform": {
    "backend": {
      "local": {
        "path": "/Users/hoge/cdktfMomento/terraform.cdktfMomento.tfstate"
      }
    },
    "required_providers": {
      "momento": {
        "source": "Chriscbr/momento",
        "version": "0.1.1"
      }
    }
  }
}

deploy

$ cdktf deploy

#中略

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

No outputs found.


作成が確認出来ました。


destroy

$ cdktf destroy

#中略

Destroy complete! Resources: 1 destroyed.


削除されました。


以上でした

有難うございました。

Discussion