Pulumi对比terraform管理cloud公有云总结

Pulumi

用Pulumi实现 IaC,管理公有云资源,实际生产环境下,难免手动对公有云资源手动增删改,导致实际资源与Pulumi code 和 state file 不一致,以下介绍不一致的情况下如何处理,以及相比于Terraform管理公有云资源有何异同和优势。

azure portal上,手动改变vm size大小,由Dv2扩为Dv3

  1. pulumi code和state file不做update,运行pulumi apply后,没有change发生;
  2. 改变pulumi代码中的vm size,由Dv2改为Dv3。此时pulumi code和实际的资源都是Dv3,,Pulumi state file仍然是Dv2,此时运行pulumi up,state file会同步为Dv3,“三方”状态保持一致;
  3. 假设此时pulumi code中的size假设改为Dav4,实际vm size是手动更为为Dv3,state file仍然是Dv2。三方都不一样,此时pulumi up,azure 中的 vms size和state file中的size都会被updated和code中的size保持一致,以code为准。
    通过以上可以说明,被pulumi管理的资源,手动更改某些配置后,然后同步pulumi 代码,不会出现把旧的删除,然后再添加新的情况,这点要比tf好。

手动删除Azure vm

  1. pulumi code和state file不做update,运行pulumi apply后,没有change发生;
  2. 删除code中对应vm资源,同步代码,运行pulumi apply后,资源自动同步;

手动增加Azure vm

  1. pulumi code和state file不做update,运行pulumi apply后,没有change发生,即新添加的资源不受pulumi管理
  2. 如果需要纳入到pulumi来管理,直接用pulumi import同步state file文件和实际资源一致即可,此处和terraform import类似,同步完state file后,还需要在pulumi code中加入相应资源,如下例子,手动建了一个Azure resource group后:
    2.1. 导入资源同步state file
    # pulumi import command 导入azure资源组,以下以导入Azure resource group资源为例
    pulumi import azure-native:resources:ResourceGroup Pulumi-Test  /subscriptions/67aa02ec-a43c-4b62-808a-12113f131ee8/resourceGroups/Pulumi-Test
    # terraform import command 以下以添加一个GCP instance 为例,对比pulumi import
    terraform import 'google_compute_instance.nat["instance_name"]' project_nameavailable_zone/vm_name
    
    2.2. update pulumi code
    # 代码中update,执行上述pulumi import时,会自动生成一下代码,以下以导入Azure resource group资源为例,手动加入到pulumi代码中
    import pulumi
    import pulumi_azure_native as azure_native
    
    rg_ptest = azure_native.resources.ResourceGroup("Pulumi-Test",
        location="eastus",
        resource_group_name="Pulumi-Test",
        tags={
            "BillingCategory": "Platform",
            "Environment": "DevTest",
            "Owner": "Platform",
        },
        opts=pulumi.ResourceOptions(protect=True))
    
    提交到仓库,执行pulumi apply,try run,确认没有资源被added/changed/deleted, 说明就代码添加没问题了。

总结

手动更改资源时,pulumi和terraform的处理方式不大相同,要比terraform简单,由上述例子可知,当实际Azure云资源手动改变,后续通过Pulumi再来管理,执行pulumi apply时,只要不报错,都可以忽略先前手动对云资源的改动。当然如果知道具体手动改了什么,pulumi代码手动同步改动后apply更好;而terraform需要时刻保持实际资源、state file、code三方一致才不会报错。原则上,pulumi不需要手动更改state file,慎重执行 pulumi refresh命令!导致state file和pulumi code不一致,导致许多存在的资源删除重建。

其次Terraform使用HCL语言,类似与shell,一些复杂的逻辑结构、for循环等不够灵活;而pulumi支持主流的Python、Go等语言,灵活性高。

更优之处,在于Pulumi允许写代码的人“犯错误”,如果随着需求变更,pulumi管理资源的架构上需要调整,只要最终值不改变,pulumi代码可以随意调整;而terraform代码只要略微改动,都会导致一些列相关资源删掉重建!

综上可知,pulumi代码作为IAAS,要比terraform简单一些,不需要“刻意”维护state file、可以随意调Pulumi整代码结构、可以选择自己喜欢的语言编写pulumi。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值