HashicorpさんのYouTube Channelで、コラボした動画を公開して頂きました。
その中で紹介したデモ環境の構築ガイドとしてこちらで紹介したいと思います。
まずは、こちらのデモ動画をご覧ください。(デモは 7:30くらいから)
デモ環境
ソースコード
今回は、こちらのDatabricks Exampleのaws-workspace-basic を利用しました。
以下のモジュールも利用するので一緒にダウンロードしておきます。
修正箇所
aws-workspace-basic Moduleの main.tf の prefix指定の箇所がうまく機能しなかったので、以下のように修正しました。
locals {
#prefix = var.prefix != "" ? var.prefix : "demo${random_string.naming.result}"
prefix = "tfdemo${random_string.naming.result}"
}
あとは、ローカルのModuleを参照するように修正
module "aws-workspace-basic" {
#source = "github.com/databricks/terraform-databricks-examples/modules/aws-workspace-basic"
source = "./modules/aws-workspace-basic"
databricks_account_id = var.databricks_account_id
}
VSCode上での設定
今回は、こちらはメインではないので割愛させていただきますが、以下のように設定しております。
- git repositoryの作成 (自分のprivate repository)
- branch(dev) の作成
- 上記ソースコードを修正後、Commit & Push
これでGitHub上にコードをデプロイできました。あとはPull Requestして、Mergeしていくだけです。一旦、Terraform Cloudのセットアップのため、ここで止めておきます。
Terraform Cloudの設定
Terraform Cloudは、今回はFree Planを利用しました。有償版はコラボレーション機能やAudit機能などの利用ができるようになるようです。詳細はこちらのPricing Pageをご覧ください。
まずはこちらからアカウントを作成してログインします。
Oraganization内に、Project&Workspaceを作成します。(今回はいきなりWorkspaceを作成しました。その場合defaultプロジェクト内に作成されます)
今回は、Version Control Workspaceを選択しました。この場合登録したリポジトリのバージョンにアップデートがあると自動的にRunで実行されるみたいです。
ここで、先ほどのGitHubのRepositoryを登録します。
これで、UI上からRunの実行や、Planの確認などができるようになります。
Variablesへの認証情報などの環境変数設定
今回AWSとDatabricks Account Consoleへの認証が必要になります。Variablesにこれらを事前に登録しておく必要があります。
Databricks Account Consoleへの認証にはOAuth M2M認証を利用しました。この場合Service Principalの作成が必要です。OAuth認証以外にもBasic認証やToken認証などをサポートしております。詳細はこちら
OAuth M2M認証利用時のTerraform Variablesに登録するEnvironment変数はこちらです。
- DATABRICKS_HOST
- DATABRICKS_ACCOUNT_ID
- DATABRICKS_CLIENT_ID (Service Principal)
- DATABRICKS_CLIENT_SECRET (Service Principal)
3,4に関しては、Service Principalを作成して、そちらのClient IDとClient Secretを登録する必要があります。Service Principalは、Account Consoleから作成できます。
上記以外にも、AWSでインフラのデプロイ権限をもつロールを作成して、以下を登録します。
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- DATABRICKS_HOSTは、Defaultで、https://accounts.cloud.databricks.com に設定されるため今回割愛しました。
- DATABRICKS_ACCOUNT_IDは、module内でも呼ばれるため、envだけではなくterraform変数としても登録が必要です。
以上で、Terraform Cloudの設定は終了です。
Pull Requestをして、Planの確認
git側で、pull requestを行うと、terraform cloud上で、Planが実行され、実行前の内容を確認できます。
この時は、applyまでは実行されません。planを確認して問題なければ、mergeをしましょう。
Plan & apply
main branchにmergeされると、自動的にterraform cloud側でplan&applyが実行されます。
(applyは、plan内容を確認して、OKすると適用されます)
Delete処理はどうするの?
実行内容を削除したい場合は、"Settings" - "Destruction and Deletion" - "Manually destroy" で実行できました。
最後に
今回、動画作成のため初めてTerraform Cloudを利用してみましたが、非常に簡単に設定できてもっと早く使っていたら良かったなと感じました。
特に今まで、VSCode上のterminalでplan&applyしてましたが、過去に実行した履歴の確認が面倒だったり、複数のterraformを作成した際に、管理が面倒だったりしましたが、これならそういう煩わしさなどから解放されそうです。またgitとの連携も簡単で、本番利用でのCI/CDを考えた場合は、このような仕組みが必要だなと感じました。
Databricksでは、Terraform Providerとして様々なモジュールやリソースを提供しております。是非運用に利用してみてください。