🪳
cdktfでCockroachDBを作成する
CockroachDB
cdktfでCockroachDBを作成する
前回↓の記事を書きました。
自身の勉強も兼ねてCockroachDBをcdktfで作成してみたいと思います。
CockroachDB側(ブラウザ)
登録
https://www.cockroachlabs.com/ ヘアクセス。
↓
↓
↓
↓
↓
アンケート
↓
Demo
↓
クラスター作成
↓
コンソール画面に入れました。
↓
数分待ちます。
↓
SQL User作成 & パスワードを生成
↓
CA Cirtをコピー。
↓
完了。
Organization > Access Management
↓
Service Accounts作成
↓
Create
↓
Create
↓
API Key作成
Create
↓
Copy & Done
AWS側
AWSサービスと接続する事を想定しますが、今回AWS側でリソースとして作成するのはAPI KeyをSecrets Managerに保存する部分だけです。
↓
↓
↓
次→次→保存
cdktf
$ npm install --global cdktf-cli@latest
↓
$ mkdir cdktfCockrochDB && cd cdktfCockrochDB && cdktf init --template=typescript --providers=hashicorp/aws
Welcome to CDK for Terraform!
By default, cdktf allows you to manage the state of your stacks using Terraform Cloud for free.
cdktf will request an API token for app.terraform.io using your browser.
If login is successful, cdktf will store the token in plain text in
the following file for use by subsequent Terraform commands:
/Users/hoge/.terraform.d/credentials.tfrc.json
Note: The local storage mode isn't recommended for storing the state of your stacks.
? Do you want to continue with Terraform Cloud remote state management? no
? Project Name cdktfCockrochDB
? Project Description A simple getting started project for cdktf.
? Do you want to start from an existing Terraform project? no
? Do you want to send crash reports to the CDKTF team? Refer to https://developer.hashicorp.com/ter
raform/cdktf/create-and-deploy/configuration-file#enable-crash-reporting-for-the-cli for more
information no
↓
$ cdktf provider add "cockroachdb/cockroach"
↓
反映されました。
cdktf.json
{
"language": "typescript",
"app": "npx ts-node main.ts",
"projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sendCrashReports": "false",
"terraformProviders": [
"cockroachdb/cockroach@~> 1.3"
],
"terraformModules": [],
"context": {}
}
↓
main.ts
import { Construct } from 'constructs';
import { App, TerraformStack } from 'cdktf';
import { TerraformVariable } from 'cdktf'
import * as cockrochDB from './.gen/providers/cockroach';
class MyStack extends TerraformStack {
constructor(scope: Construct, id: string) {
super(scope, id);
//-------------------------------------------------------//
// Deploy実行時に環境変数を渡す形にする。
const apiKey = new TerraformVariable (this, 'CockrochDbApiKey', {type : 'string', sensitive : true});
new cockrochDB.provider.CockroachProvider(this, 'cockroachProvider', {
apikey: apiKey.value,
});
const cluster = new cockrochDB.cluster.Cluster(this, 'cluster', {
name: 'example',
cloudProvider: 'AWS',
serverless:{
spendLimit: 0,
},
regions: [
{
name: 'us-east-1'
}
]
});
new cockrochDB.sqlUser.SqlUser(this, 'sqlUser', {
name: 'exampleUser',
password: 'examplePassword', // 実際はベタ書きせずどこかに格納。
clusterId: cluster.id
});
new cockrochDB.database.Database(this, 'database', {
name: 'example-database',
clusterId: cluster.id
});
}
}
const app = new App();
new MyStack(app, 'cdktfCockrochDB');
app.synth();
↓
cdktf synth
Generated Terraform code for the stacks: cdktfCockrochDB
↓
deploy.sh
#!/bin/bash
region=ap-northeast-1 # Secretを作成したリージョンに適宜書き換えてください。
secrets=`aws secretsmanager get-secret-value --region ${region} --secret-id CockrochDbApiKey | jq '.SecretString'| tr -d '{}" \\' `
secret=(${secrets//,/ })
secretValue+=(`echo ${secret[0]} | awk '{print substr($0,index($0,":")+1)}'`)
TF_VAR_CockrochDbApiKey=`echo ${secretValue}` cdktf deploy
↓
$ bash deploy.sh
↓
無事作成されました。
↓
depstoy.sh
#!/bin/bash
region=ap-northeast-1 # Secretを作成したリージョンに適宜書き換えてください。
secrets=`aws secretsmanager get-secret-value --region ${region} --secret-id CockrochDbApiKey | jq '.SecretString'| tr -d '{}" \\' `
secret=(${secrets//,/ })
secretValue+=(`echo ${secret[0]} | awk '{print substr($0,index($0,":")+1)}'`)
TF_VAR_CockrochDbApiKey=`echo ${secretValue}` cdktf destroy
$ bash destroy.sh
他のリソースなど詳しい所は↓を参照ください。
以上でした
有難うございました。
Discussion