转岗后, 写 terraform 写出了痛苦 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
easterfan
V2EX    问与答

转岗后, 写 terraform 写出了痛苦

  •  
  •   easterfan 2023-02-23 16:56:15 +08:00 2326 次点击
    这是一个创建于 964 天前的主题,其中的信息可能已经有所发展或是发生改变。

    java 虽然重,对各种数据结构处理的工具也很丰富,stream hutool 之类的, terraform 对 list 这样基础的数据结构支持很有限(也可能是自己刚入门摸不到路 QAQ~)

    顺便也请教下各位大佬们都是怎样从其他语言切换到 terraform 的,以及怎样度过语言切换的阵痛期~ 目前我跟着 terraform 官网文档摸索着写,英文文档还是有点吃力

    https://i.imgur.com/HeRuKLd.png

    13 条回复    2023-03-25 21:42:31 +08:00
    tilv37
        1
    tilv37  
       2023-02-23 17:22:58 +08:00
    硬着头皮来,各种 google
    其实 pulumi 更友好一些,python 语法
    lambdaq
        2
    lambdaq  
       2023-02-23 17:26:24 +08:00
    terraform 都撤出大陆了。。。国外也很多公司觉得太贵了。。
    easterfan
        3
    easterfan  
    OP
       2023-02-23 17:52:33 +08:00
    @tilv37 还没用过 pulumi 从 java 转 python 又得痛苦一段时间
    assassins1234567
        4
    assassins1234567  
       2023-02-23 17:58:25 +08:00 via iPhone
    你这个需求的目的是什么呢?
    easterfan
        5
    easterfan  
    OP
       2023-02-23 18:18:03 +08:00
    @lambdaq 啊? terraform 还要花钱啊,我是 terraform 写的阿里云,目前还没给 terraform 付过费,请教大佬,企业上用 terraform 落地一套设施,方便透露下费用范围大概多少吗 贵的离谱的话 我可能就不用转岗了
    easterfan
        6
    easterfan  
    OP
       2023-02-23 18:36:26 +08:00
    @lambdaq 大佬,刚刚去 terraform 官网找了一圈,没看到付费的入口,你是不是被人骗钱了~
    tr>
    easterfan
        7
    easterfan  
    OP
       2023-02-23 18:46:05 +08:00
    @assassins1234567 感谢评论!

    这个 datasource 是阿里云资源管理产品产品下的,返回的是 2 个目录,我先拿到这两个目录,然后分别在 2 个目录下建账号;

    建账号时需要传目录 ID ,我是通过 list[0] 下标的方式取目录的;
    但是由于这个 datasource 返回的目录是无序的,加上我又通过下标取目录,经常出现把 B 账号一会建到 A 目录下,一会建到 B 目录下;

    为了解决这个问题,我想对 datasource 的返回值根据目录名排序,这样就能保证 list[0] 取到的永远是确定的目录;

    在官网上有看到 datasource 有 filter 字段,但就是没有 sort 字段;

    然后我就不会排序了,一想到 java 里 3 秒钟就能实现的功能,搞了 3 小时没搞出来,就很痛苦
    egen
        8
    egen  
       2023-02-23 21:05:14 +08:00
    你这用法不对,如果要对多个目录建帐号应该用 for_each 做循环

    https://lonegunmanb.github.io/introduction-terraform/
    可以看看这个教程

    terraform 的思路是配置式 + 少量循环 /判断,不能用传统流程的编程思路
    Procumbens
        9
    Procumbens  
       2023-02-23 21:11:37 +08:00
    egen
        10
    egen  
       2023-02-23 21:14:17 +08:00
    @lambdaq #2
    退出的是 hashicorp 的商业产品,但是 terraform 作为一个开源产品是可以用的,而且 terraform 已经成为事实上的行业标准,国内的云厂商迟早都要跟上
    lambdaq
        11
    lambdaq  
       2023-02-23 21:31:00 +08:00
    @easterfan 我 sb 了。退出的是 terradata 。。。。2333
    Tyran
        12
    Tyran  
       2023-02-23 22:28:32 +08:00 via Android
    terraform 就是个简单的脚本语言,思路就是简单,清晰。不用想整整太多花活,虽然硬整也能整,但是得不偿失,越陷越深。最后出来的东西创建资源没问题,修改资源配置就出问题。
    所以单一项目的话就写一个描述性的脚本最好,就跟写个 html 是的,需要什么写什么,可以多写 module 。
    多个项目需要入参各种判断的话没啥好办法。我们最后的方案是写很多单一资源的 module ,再用 python 写了个小程序,入参直接进小程序,然后自动组装出来一个单个项目的 terraform 脚本。
    lonegunmanb
        13
    lonegunmanb  
       2023-03-25 21:42:31 +08:00
    我是 [https://lonegunmanb.github.io/introduction-terraform/]( https://lonegunmanb.github.io/introduction-terraform/) 的作者。

    具体不知道你的需求,但你这个直接的要求也不难做到,需要两个 `locals` 的帮助。

    ```hcl
    terraform {
    required_providers {
    alicloud = {
    source = "aliyun/alicloud"
    version = "1.201.2"
    }
    }
    }

    provider "alicloud" {
    # Configuration options
    }

    data "alicloud_resource_manager_folders" "CoreFolder" {
    output_file = ""
    }

    locals {
    folder_names = sort(data.alicloud_resource_manager_folders.CoreFolder.folders[*].folder_name)
    folder_map = {
    for folder in data.alicloud_resource_manager_folders.CoreFolder.folders :
    folder.folder_name => folder
    }
    folders = [
    for folder_name in local.folder_names :
    local.folder_map[folder_name]
    ]
    }
    ```

    顺便说一下,这里的 `locals` 表达式我基本只是简单题试了一下,Github Copilot 就帮我写出来了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2994 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 13:47 PVG 21:47 LAX 06:47 JFK 09:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86