From 95d06ab8dae62998f9af8178677a4803a38f3d12 Mon Sep 17 00:00:00 2001 From: Phoenix Zhong Date: Tue, 2 Jan 2024 14:01:36 +0800 Subject: [PATCH] docs: Terraform import --- ...5\205\245\347\216\260\346\234\211infra.md" | 57 +++++++++++++++++- images/terraform_outputs.png | Bin 0 -> 23681 bytes 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 images/terraform_outputs.png diff --git "a/_posts/2023-12-29-\345\246\202\344\275\225\345\210\251\347\224\250terraform\345\257\274\345\205\245\347\216\260\346\234\211infra.md" "b/_posts/2023-12-29-\345\246\202\344\275\225\345\210\251\347\224\250terraform\345\257\274\345\205\245\347\216\260\346\234\211infra.md" index 1f84f50..da3c747 100644 --- "a/_posts/2023-12-29-\345\246\202\344\275\225\345\210\251\347\224\250terraform\345\257\274\345\205\245\347\216\260\346\234\211infra.md" +++ "b/_posts/2023-12-29-\345\246\202\344\275\225\345\210\251\347\224\250terraform\345\257\274\345\205\245\347\216\260\346\234\211infra.md" @@ -15,9 +15,12 @@ categories: terraform ## 给用户赋予权限 -翻了[阿里云的官网](https://www.alibabacloud.com/help/zh/terraform/latest/install-and-configure-terraform-in-the-local-pc?spm=a2c63.p38356.0.0.61a02093HAB8wG),也不告诉到底需要啥权限,暂时先给个 Admin 权限。 +暂时先给个 Admin 权限 + +翻了[阿里云的官网](https://www.alibabacloud.com/help/zh/terraform/latest/install-and-configure-terraform-in-the-local-pc?spm=a2c63.p38356.0.0.61a02093HAB8wG),也不告诉到底需要啥权限。 + ## 安装 Terraform @@ -218,6 +221,58 @@ module "vsw" { 而导入命令也就会变成 `terraform import "module.vsw[0].alicloud_vswitch.vswitch" vsw-2ze7o***********`。需要留意中间`module.vsw`后面的`[0]`编号。 +## 如何使用 terraform_remote_state + +Terraform 还提供`terraform_remote_state`, 可以通过远端的 state 文件,获取 `outputs` 的 resource 信息。下面的例子就是从本地的`terraform.tfstate`文件中获取 `outputs` 是`vpc_id`的值。 + +```tf +data "terraform_remote_state" "vpc" { + backend = "local" +} + +module "vsw" { + source = "../modules/vswitch" + ... + # vpc_id = module.vpc.vpc_id + vpc_id = data.terraform_remote_state.vpc.outputs.vpc_id + ... +} +output "vpc_id" { + value = module.vpc.vpc_id +} +``` + +需要提前声明`output "vpc_id"`,并且`terraform plan`一次更新`state`文件。操作完之后,可以留意到`tfstate`文件内容多了`outputs`。 + + + +## 如何使用 data_source + +有时候,自己还没有完全把其他 Infra 转为 gitops,也可以通过`data_source`引用远端的资源,以后再逐步转换。 + +比如这里就是找到阿里云账号下名字是`pzhong-vpc-cnn2`的 VPC 资源。 + +```tf + +data "alicloud_vpcs" "vpcs_ds" { + name_regex = "pzhong-vpc-cnn2" +} + +``` + +稍后,就可以通过`data.alicloud_vpcs.vpcs_ds.vpcs.0.vpc_id`取到这个资源的`vpc_id`了。[文档](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/vpcs) + +```tf +module "vsw" { + source = "../modules/vswitch" + ... + # vpc_id = module.vpc.vpc_id + # vpc_id = data.terraform_remote_state.vpc.outputs.vpc_id + vpc_id = data.alicloud_vpcs.vpcs_ds.vpcs.0.vpc_id + ... +} +``` + ## Reference 1. [https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/security_group_rules](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/security_group_rules) diff --git a/images/terraform_outputs.png b/images/terraform_outputs.png new file mode 100644 index 0000000000000000000000000000000000000000..876ac5566f636a9c823e83882bafac0ec0cbabdd GIT binary patch literal 23681 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 literal 0 HcmV?d00001