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 0000000..876ac55 Binary files /dev/null and b/images/terraform_outputs.png differ