2020-05-08
5/8
terraformerをGCPで使ってみた
GCPでdefault networkをimportしたいと思った。
ふつうに terraform import
を使えばいいのだが、terraformerのことを思い出したので、使ってみることにした。
terraformerを使えばHCLファイルを生成することができる。
terraformerについての一般的な内容はterraformerにメモしている。
作業環境: macOS
Install:
brew install terraformer
準備として、 ~/.terraform.d/plugins/darwin_amd64/
に terraform-provider-google_v3.20.0_x5
を置く。
今回はterraform実行ディレクトリの .terraform/plugins
からコピーした。
terraformer import google --projects=my-project \
--regions=asia-northeast1 --resources=networks,subnetworks
結果:
% tree generated
generated
└── google
└── my-project
├── networks
│ └── asia-northeast1
│ ├── compute_network.tf
│ ├── outputs.tf
│ ├── provider.tf
│ └── terraform.tfstate
└── subnetworks
└── asia-northeast1
├── compute_subnetwork.tf
├── outputs.tf
├── provider.tf
├── terraform.tfstate
└── variables.tf
6 directories, 9 files
tfファイルのサンプル:
% cat generated/google/my-project/networks/asia-northeast1/compute_network.tf
resource "google_compute_network" "tfer--default" {
auto_create_subnetworks = "true"
delete_default_routes_on_create = "false"
description = "Default network for the project"
name = "default"
project = "my-project"
routing_mode = "REGIONAL"
}
tfstateのサンプル:
% cat generated/google/my-project/subnetworks/asia-northeast1/terraform.tfstate
{
"version": 3,
"terraform_version": "0.12.18",
"serial": 1,
"lineage": "XXXXXXXXXXXX",
"modules": [
{
"path": [
"root"
],
"outputs": {
"google_compute_subnetwork_tfer--default_self_link": {
"sensitive": false,
"type": "string",
"value": "https://www.googleapis.com/compute/v1/projects/my-project/regions/asia-northeast1/subnetworks/default"
}
},
"resources": {
"google_compute_subnetwork.tfer--default": {
"type": "google_compute_subnetwork",
"depends_on": [],
"primary": {
"id": "default",
"attributes": {
"creation_timestamp": "2020-05-07T02:07:01.455-07:00",
"description": "",
"gateway_address": "10.146.0.1",
"id": "default",
"ip_cidr_range": "10.146.0.0/20",
"log_config.#": "0",
"name": "default",
:
terraform_version
がマシンにインストール済みのバージョンと違うのは、terraformerが同梱しているってことなのかな?
KubernetesのマニフェストをVCSで管理して、削除まで正しく同期する方法
※5/9 ブログを書いた: Kubernetesのマニフェストをリポジトリ管理しつつ、リソースの削除も反映したい件 - progrhyme’s tech blog
某所で聞いたりして情報を集めた。
このエントリは後掲の関連リンクの続きである。
- 管理対象のリソースに
label
でバージョン番号を振り、新しいバージョンのリソースを配置した後、古いバージョンのリソースを削除する kubectl apply
時に--prune
オプションを付ける- Argo CDのAutomatic Pruning機能を使う
- リソースをTerraformで管理する
関連:
最終更新 2020-05-16: [memo/2020] Archive 2020050{8,9}.md (eec559cba)