CDKTFでインフラストラクチャを展開する
CDKまたはクラウド開発キットは、開発者によって日々使われているソフトウェア言語のコードとしてインフラストラクチャを書く方法として、2018年にAWSから出てきました.そのリリース以来、コミュニティはそれの周りに構築されており、新しい味が到着している.AWS CDK、CDKTF、およびCDK 8 sはすべて同じコアに基づいていますが、異なる形式にコンパイルします.AWS CDKはCloudFormationにコンパイルされ、CDKTFはterraform互換のJSONにコンパイルされ、CDK 8 sはKubernetes設定にコンパイルされます.
このポストでは、DigitaloceanのterraformプロバイダーとCDKTFを使用する方法を歩いていきます.terraformプロバイダーは、リモートシステムと対話するために、terraformのための「プラグイン」です.この場合、プロバイダーはDigitalOceanによって作成され、維持されます.我々は、デジタル海洋プロジェクト、VPC、Postgresデータベース、および液滴を作成するいくつかの例を共有します.
prereqsとインストール
cdktfを使うには、以下のパッケージをインストールします. 地形≥ 0.12 ノード.js≥ 12.16 糸≥ 1.21 cdktfをインストールするには
サンプルプロジェクトの作成と初期化
最初にディレクトリを作って、それに変えましょう.
プロジェクトを設定する最後のステップは、terraformプロバイダを追加することです
依存関係のインストール
ラン
いくつかのタイプスクリプトを書きましょう
オープン
必要に応じて、上記のコードのテストとして
CLIプロンプト
配備の成功:
ここでVPC、Postgresデータベース、および液滴を追加します.それらの例が入ってしまえば、再び展開する前にまとめます.
VPCを作る
Postgresデータベースを作成する
滴を作る
まとめましょう
あなたが走るならば
最後に、新しい
すべての場所で、再度展開することができます.データベースと液滴の作成は少しかかりますので、患者.🙂 完了したら、すべての作成し、使用するために準備を参照してくださいデジタルオーシャンダッシュボードを確認してください.
を実行してください
知るべきこと
CDKTFはまだ若いプロジェクトですので、高速に変更され、ドキュメントが制限されています.
限られたドキュメントに役立つものはほとんどありません.プロバイダのドキュメントを読むことができますTerraform registry site としてガイドとして使用します.また、VSCodeを使用してtypescriptのような言語を使用すると、コードヒント、ホバー情報、および署名情報がたくさんあります.下のGIFは、問題を解決するときにVsCodeに表示されるものの例です.は、
不明なエラーに遭遇したときに
ラッピング
このポストでは、CDKTFを使用して、あなたの選択の言語でより複雑なインフラストラクチャを構築する良いプライマーを与えるデジタルオーシャンにいくつかの基本的な例のリソースを作成します.このポストからコードを見つけることができますrepo . あなたがCDKやインフラストラクチャについての詳細については、Twitterで私をpingすることができますコードとしてチャットしたい場合.
このポストでは、DigitaloceanのterraformプロバイダーとCDKTFを使用する方法を歩いていきます.terraformプロバイダーは、リモートシステムと対話するために、terraformのための「プラグイン」です.この場合、プロバイダーはDigitalOceanによって作成され、維持されます.我々は、デジタル海洋プロジェクト、VPC、Postgresデータベース、および液滴を作成するいくつかの例を共有します.
prereqsとインストール
cdktfを使うには、以下のパッケージをインストールします.
npm install
$ npm install --global cdktf-cli
また、必要がありますcreate a personal access token あなたがこの設定を展開したいならば、デジタル海で.サンプルプロジェクトの作成と初期化
最初にディレクトリを作って、それに変えましょう.
$ mkdir cdk-do-example && cd cdk-do-example
プロジェクトを初期化するinit
コマンド.一般的には--local
フラグを指定するので、すべての状態がローカルに格納される.$ cdktf init --template=typescript --local
プロジェクト名と説明のためにプロンプトが表示されますが、デフォルトは結構です.プロジェクトを設定する最後のステップは、terraformプロバイダを追加することです
cdktf.json
. エディタでプロジェクトを開き、次のようにDigitalAudioプロバイダを追加します.{
"language": "typescript",
"app": "npm run --silent compile && node main.js",
"terraformProviders": [
"digitalocean/digitalocean@~> 2.9"
],
"terraformModules": [],
"context": {
"excludeStackIdFromLogicalIds": "true",
"allowSepCharsInLogicalIds": "true"
}
}
依存関係のインストール
ラン
cdktf get
DigialOceanを使用して依存関係をダウンロードします.$ cdktf get
Generated typescript constructs in the output directory: .gen
いくつかのタイプスクリプトを書きましょう
オープン
main.ts
エディタで、doプロジェクトを作成することから始めましょう.import { Construct } from 'constructs'
import { App, TerraformStack, Token } from 'cdktf'
import { DigitaloceanProvider } from './.gen/providers/digitalocean'
import { Project } from './.gen/providers/digitalocean'
class MyStack extends TerraformStack {
constructor(scope: Construct, name: string) {
super(scope, name)
new DigitaloceanProvider(this, 'digitalocean', {
token: Token.asString(process.env.DO_TOKEN)
})
new Project(this, 'example-project', {
name: 'Example Rails Project'
})
}
}
const app = new App()
new MyStack(app, 'cdk-do-example')
app.synth()
あなたは新しいDigitaloceanProvider
を実行し、doパーソナルアクセストークンに割り当てられた環境変数を渡します.次に、我々はProject
, には、name
.必要に応じて、上記のコードのテストとして
cdktf deploy
CDKTFプロジェクトを配備するには.リソースの下でリストされた変更をしたいなら、CLIは尋ねます.「はい」と入力し、いったん終了すると、正常に作成されたリソースの横に緑色のチェックが表示されます.CLIプロンプト
配備の成功:
ここでVPC、Postgresデータベース、および液滴を追加します.それらの例が入ってしまえば、再び展開する前にまとめます.
VPCを作る
import { Construct } from 'constructs'
import { App, TerraformStack, Token } from 'cdktf'
import { DigitaloceanProvider, Droplet, Vpc } from './.gen/providers/digitalocean'
import { Project } from './.gen/providers/digitalocean'
class MyStack extends TerraformStack {
constructor(scope: Construct, name: string) {
super(scope, name)
new DigitaloceanProvider(this, 'digitalocean', {
token: Token.asString(process.env.DO_TOKEN)
})
...more code above
new Vpc(this, 'example-vpc', {
name: 'example-vpc',
region: 'sfo3'
})
}
}
const app = new App()
new MyStack(app, 'cdk-do-example')
app.synth()
注:お客様のアカウントでVPCを持っていない場合は、cdktfプロジェクトをクリーンアップする際に削除されません.Postgresデータベースを作成する
import { Construct } from 'constructs'
import { App, TerraformStack, Token } from 'cdktf'
import { DigitaloceanProvider, Droplet, Vpc, DatabaseCluster, DatabaseUser, DatabaseDb } from './.gen/providers/digitalocean'
import { Project } from './.gen/providers/digitalocean'
class MyStack extends TerraformStack {
constructor(scope: Construct, name: string) {
super(scope, name)
new DigitaloceanProvider(this, 'digitalocean', {
token: Token.asString(process.env.DO_TOKEN)
})
...more code above
const postgres = new DatabaseCluster(this, 'example-postgres', {
name: 'example-postgres',
engine: 'pg',
version: '13',
size: 'db-s-1vcpu-1gb',
region: 'sfo3',
nodeCount: 1
})
new DatabaseUser(this, 'example-postgres-user', {
clusterId: `${postgres.id}`,
name: 'example'
})
new DatabaseDb(this, 'example-postgres-db', {
clusterId: `${postgres.id}`,
name: 'example-db'
})
}
}
const app = new App()
new MyStack(app, 'cdk-do-example')
app.synth()
我々が割り当てた通知DatabaseCluster
変数へconst postgres
. 次に、変数を使用してDatabaseUser
and DatabaseDb
を返します.滴を作る
import { Construct } from 'constructs'
import { App, TerraformStack, Token } from 'cdktf'
import { DigitaloceanProvider, Droplet, Vpc, DatabaseCluster, DatabaseUser, DatabaseDb } from './.gen/providers/digitalocean'
import { Project } from './.gen/providers/digitalocean'
class MyStack extends TerraformStack {
constructor(scope: Construct, name: string) {
super(scope, name)
new DigitaloceanProvider(this, 'digitalocean', {
token: Token.asString(process.env.DO_TOKEN)
})
...more code above
new Droplet(this, 'example-droplet', {
name: 'example-droplet',
size: 's-1vcpu-1gb',
region: 'sfo3',
image: 'ubuntu-20-04-x64'
})
}
}
const app = new App()
new MyStack(app, 'cdk-do-example')
app.synth()
まとめましょう
あなたが走るならば
cdktf deploy
今、それはすべてを作成しますが、作成された何もデジタル海洋プロジェクトまたは我々が作成するVPCに置かれる.それをしましょう.import { Construct } from 'constructs'
import { App, TerraformStack, Token } from 'cdktf'
import { DigitaloceanProvider, Droplet, Vpc} from './.gen/providers/digitalocean'
import { DatabaseCluster, DatabaseUser, DatabaseDb } from './.gen/providers/digitalocean'
import { Project, ProjectResources } from './.gen/providers/digitalocean'
class MyStack extends TerraformStack {
constructor(scope: Construct, name: string) {
super(scope, name)
new DigitaloceanProvider(this, 'digitalocean', {
token: Token.asString(process.env.DO_TOKEN)
})
const project = new Project(this, 'example-project', {
name: 'Example Rails Project'
})
const vpc = new Vpc(this, 'example-vpc', {
name: 'example-vpc',
region: 'sfo3'
})
const postgres = new DatabaseCluster(this, 'example-postgres', {
name: 'example-postgres',
engine: 'pg',
version: '13',
size: 'db-s-1vcpu-1gb',
region: 'sfo3',
nodeCount: 1,
privateNetworkUuid: vpc.id
})
new DatabaseUser(this, 'example-postgres-user', {
clusterId: `${postgres.id}`,
name: 'example'
})
new DatabaseDb(this, 'example-postgres-db', {
clusterId: `${postgres.id}`,
name: 'example-db'
})
const droplet = new Droplet(this, 'example-droplet', {
name: 'example-droplet',
size: 's-1vcpu-1gb',
region: 'sfo3',
image: 'ubuntu-20-04-x64',
vpcUuid: vpc.id
})
new ProjectResources(this, 'example-project-resources', {
project: project.id,
resources: [
postgres.urn,
droplet.urn
],
dependsOn: [ postgres, droplet ]
})
}
}
const app = new App()
new MyStack(app, 'cdk-do-example')
app.synth()
プロジェクト、vpc、および液滴を変数に割り当てることから始めます.にDatabaseCluster
定義、我々は加えますprivateNetworkUuid: [vpc.id](http://vpc.id)
データベースを新しく作成したVPCに配置します.同様にDroplet
定義、我々はVPCにそれを置きますvpcUuid: vpc.id
.最後に、新しい
ProjectResource
デジタルオーシャンプロジェクトに他のリソースを割り当てる.この小さな例では、データベースと液滴をプロジェクトに割り当てますurn
を返します.両方ともterraformヘルパーを使用して作成されるまで、それらを割り当てるのを待ちますdependsOn
.すべての場所で、再度展開することができます.データベースと液滴の作成は少しかかりますので、患者.🙂 完了したら、すべての作成し、使用するために準備を参照してくださいデジタルオーシャンダッシュボードを確認してください.
を実行してください
cdktf destroy
あなたのアカウントからこれらのリソースを削除するか、またはデジタルオーシャンによって課金されます知るべきこと
CDKTFはまだ若いプロジェクトですので、高速に変更され、ドキュメントが制限されています.
限られたドキュメントに役立つものはほとんどありません.プロバイダのドキュメントを読むことができますTerraform registry site としてガイドとして使用します.また、VSCodeを使用してtypescriptのような言語を使用すると、コードヒント、ホバー情報、および署名情報がたくさんあります.下のGIFは、問題を解決するときにVsCodeに表示されるものの例です.は、
DropletConfig
.不明なエラーに遭遇したときに
CDKTF_LOG_LEVEL=debug
非常に冗長な出力を得るために、配備と/または破壊コマンドに.ラッピング
このポストでは、CDKTFを使用して、あなたの選択の言語でより複雑なインフラストラクチャを構築する良いプライマーを与えるデジタルオーシャンにいくつかの基本的な例のリソースを作成します.このポストからコードを見つけることができますrepo . あなたがCDKやインフラストラクチャについての詳細については、Twitterで私をpingすることができますコードとしてチャットしたい場合.
Reference
この問題について(CDKTFでインフラストラクチャを展開する), 我々は、より多くの情報をここで見つけました https://dev.to/hint/deploy-infrastructure-with-cdktf-2202テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol