[Terraform][google provider]Spannerメモ

# 前提
[google provicer v5.36.0のリファレンス](https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/spanner_instance)を元にしたものになります。

TerraformでSpanner上にインスタンスを作成し、さらにそのインスタンスの上にデータベースを作成する設定をしたかった時に書きためてたメモです。

# Resources
## google_spanner_instance
Cloud Spannerインスタンスの設定。

**公式リファレンス**

https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/spanner_instance

### 必須の引数
- name: インスタンスのユニークID。インスタンス作成後の変更不可。6〜30文字で指定。与えなかった場合は`tf-`から始まるランダムな文字列が設定される。
- config: インスタンスの地理的な配置および、このインスタンスに含まれるデータベース群のレプリケーションの設定を定義するインスタンス構成の名前(設定できる値は、リージョンと似ている)。
- display_name: GCPコンソールで表示されるインスタンスの説明的な名前。プロジェクトごとに一意である必要がある。

### 任意の引数
- num_nodes: インスタンスに割り当てるノードの数。num_node or processing_units のどちらか一方を指定する必要あり。
- processing_units: インスタンスに割り当てる処理ユニット(PU)の数。num_node or processing_units のどちらか一方を指定する必要あり。1ノード = 1000PU。
- labels: 各リソースに存在するアレ。
- autocaling_config: オートスケーリング設定(2024/08/23時点でプレビュー版の機能であるため割愛
    - autoscaling_limits
        - min_processing_units
        - max_processing_units
        - min_nodes
        - max_nodes
    - autoscaling_targets
        - high_priority_cpu_utilization_percent
        - storage_utilization_percent
- project: リソースが所属するプロジェクトのID。デフォルトではプロバイダーのプロジェクトIDが使われる。
- force_destroy: インスタンスを削除する際に、全てのバックアップも削除するか否かを`true/false`で設定。


### コンソールでSpannerインスタンスを作成する場合とgoogle providerの引数名との対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59542/7efc5975-e24b-dded-9ccd-1284dca26177.png)

- display_name: インスタンス名
- name: インスタンスID

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59542/311be6e9-1f6a-02ed-545a-370f7df1830a.png)

- config: リージョン/デュアルリージョン/マルチリージョンのラジオボタン + 構成を選択のドロップダウン 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59542/0ba789b7-b1c2-e27c-41d6-ac12ca851f9c.png)

- num_nodes, processing_units: ノード/処理ユニットのラジオボタン
- autoscaling_config: 自動スケーリング(プレビュー)

## google_spanner_instance_config
カスタム構成を設定したい場合に。割愛。

## google_spanner_instance_iam
他のリソースと同様に、以下3つで設定可能。  
Terraformでのリソースに対するIAM設定は、[[Terraform][google provider]IAMまとめ](https://qiita.com/WisteriaWave/items/17e7058991f606397ded)の通り共通。
- google_spanner_instance_iam_policy
- google_spanner_instance_iam_binding
- google_spanner_instance_iam_member

設定対象のSpannerインスタンスは、`instance`(インスタンス名)で指定する。

**公式リファレンス**

https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/spanner_instance_iam

## google_spaner_database
Spannerデータベースの設定。

**公式リファレンス**

https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/spanner_database

### 必須の引数
- name: データベースのユニークID。データベース作成後の変更不可。正規表現的に`[a-z][-a-z0-9]*[a-z0-9]`(=`"<a〜zから1文字><a〜z,0〜9,-からn文字(n>=0)><a〜zor0〜9から1文字>"`)で設定可能。
- instance: データベースを作成するインスタンス名(`google_spanner_instance.name`に相当)。

### 任意の引数
- version_retentiion_period: データベースの保持期間。 保持期間は 1時間から7日の間でなければならず、日、時、分、または秒単位で指定。 デフォルトは1hである。
- ddl(任意): 新しく作成されたデータベース内で実行するDDL文。 テーブルやインデックスなどを作成できる。 DDLの実行でエラーが発生した場合、データベースは作成されない。
- encryption_config: データベース暗号化設定。
    - kms_key_name(必須): データベースの暗号化に使用するKMSキーの完全修飾名。KMSキーはSpannerデータベースと同じロケーションに存在する必要がある。
- database_dialect: Spannerデータベースの方言。`GOOGLE_STANDARD_SQL` or `POSTGRESQL` の二択。デフォルトは`GOOGLE_STANDARD_SQL`。
- enable_drop_protection: データベースの`DROP`を保護するかどうか。デフォルトは`false`。`true`に設定すると、terraformに限らずすべてのインターフェースからデータベースの削除を保護する。データベースの親インスタンスの削除も防ぐことができる。
- project: リソースが所属するプロジェクトのID。デフォルトではプロバイダーのプロジェクトIDが使われる。
- deletion_protection: Terraformがデータベースを破壊しないようにするか。デフォルトは`true`。terraform destroyや`terraform apply`によって、データベースの削除を実行しようとした場合、`deletion_protection`が`false`になっていなければコマンドが失敗するようになる。

## google_spanner_database_iam
他のリソースと同様に、以下3つで設定可能。Terraformでのリソースに対するIAM設定は、 [[Terraform][google provider]IAMまとめ](https://qiita.com/WisteriaWave/items/17e7058991f606397ded)の通り共通。
- google_spanner_database_iam_policy
- google_spanner_database_iam_binding
- google_spanner_database_iam_member

設定対象のデータベースは、`instance`(Spannerのインスタンス名)と`database`(データベース名)で指定する。

**公式リファレンス**

https://registry.terraform.io/providers/hashicorp/google/5.36.0/docs/resources/spanner_database_iam