メインコンテンツへスキップ

バックエンドの種類: pg

Postgresデータベースバージョン10以降に状態を保存します。

このバックエンドは状態のロックをサポートしています。

設定例

コードブロック
terraform {
backend "pg" {
conn_str = "postgres://user:[email protected]/tofu_backend"
}
}

tofu initでバックエンドを初期化する前に、データベースが既に存在している必要があります。

コードブロック
createdb tofu_backend

このcreatedbコマンドは、データベースサーバーと一緒にインストールされるPostgresクライアントアプリケーションにあります。

環境変数の使用

機密性の高い認証情報がディスクに書き込まれたり、ソース管理にコミットされたりしないように、環境変数を使用してpgバックエンドを構成することを推奨します。

pgバックエンドは、標準のlibpq環境変数をサポートしています。

バックエンドは、設定全体を環境変数として与えることによって構成できます。

コードブロック
terraform {
backend "pg" {}
}
コードブロック
$ export PG_CONN_STR=postgres://user:[email protected]/tofu_backend
$ tofu init

または、機密性の高いパラメーターだけを渡すこともできます。

コードブロック
terraform {
backend "pg" {
conn_str = "postgres://db.example.com/tofu_backend"
}
}
コードブロック
$ export PGUSER=user
$ read -s PGPASSWORD
$ export PGPASSWORD
$ tofu init

データソースの設定

別の構成でpgリモートステートを使用するには、terraform_remote_stateデータソースを使用します。

コードブロック
data "terraform_remote_state" "network" {
backend = "pg"
config = {
conn_str = "postgres:///tofu_backend"
}
}

構成変数

次の構成オプションまたは環境変数がサポートされています。

  • conn_str - Postgres接続文字列。postgres:// URL。PG_CONN_STRおよび標準のlibpq環境変数を使用して、PostgreSQLデータベースへの接続方法を示すこともできます。
  • schema_name - 自動管理されるPostgresスキーマの名前。デフォルトはterraform_remote_statePG_SCHEMA_NAME環境変数を使用して設定することもできます。
  • skip_schema_creation - trueに設定した場合、Postgresスキーマが既に存在している必要があります。PG_SKIP_SCHEMA_CREATION環境変数を使用して設定することもできます。OpenTofuはスキーマを作成しようとしません。これはデータベース管理者によって既に作成されている場合に役立ちます。
  • skip_table_creation - trueに設定した場合、Postgresテーブルが既に存在している必要があります。PG_SKIP_TABLE_CREATION環境変数を使用して設定することもできます。OpenTofuはテーブルを作成しようとしません。これはデータベース管理者によって既に作成されている場合に役立ちます。
  • skip_index_creation - trueに設定した場合、Postgresインデックスが既に存在している必要があります。PG_SKIP_INDEX_CREATION環境変数を使用して設定することもできます。OpenTofuはインデックスを作成しようとしません。これはデータベース管理者によって既に作成されている場合に役立ちます。

技術設計

このバックエンドは、schema_name変数で構成された自動管理されるPostgresスキーマにstatesという1つのテーブルを作成します。

テーブルは、ワークスペース名でキー付けされます。ワークスペースが使用されていない場合は、defaultという名前が使用されます。

ロックは、Postgresアドバイザリロックを使用してサポートされています。force-unlockはサポートされていません。これらのデータベースネイティブロックは、セッションが中断されたり、接続が失敗したりすると自動的にロック解除されるためです。Postgresサーバーで未処理のロックを確認するには、pg_locksシステムビューを使用します。

statesテーブルには以下が含まれます。

  • アドバイザリロックのキーとして使用されるシリアル整数id
  • 一意のインデックスを持つテキストとしてのワークスペースnameキー
  • テキストとしてのOpenTofu状態data