全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2020-08-05_如何将基础设施自动导入 Terraform ?

您的位置:首页 >> 新闻 >> 行业资讯

如何将基础设施自动导入 Terraform ? 作者 | Craig Godden-Payne 译者 | Sambodhi 策划 | 钰莹 关于导入现有基础设施,很多读者表示有一个优雅的工具,可以实现自动导入,这款工具叫 Terraformer,使用起来非常简单,并且还可以将逆向工程自动转换为可用的 Terraform 资源,使用它有一些注意事项,本文会进一步探讨。 本文最初发表于 Medium 博客,经原作者 Craig Godden-Payne 授权,InfoQ 中文站翻译并分享。 什么是 Terraform? Terraform 是一个 CLI 工具,可基于现有的基础设施(逆向 Terraform)生成 tf/json 和 tfstate 文件。 Terraformer 使用 Terraform 提供程序,旨在轻松支持新添加的资源。要使用新字段升级资源,只需升级相关的 Terraform 提供程序即可。 我将回顾所经历过的完全相同的场景,这样,你就可以确切地看到使用 Terraform 导入是有多么简单。 为什么要导入现有基础设施? 在正文开始之前,我们需要先聊一下这个话题。就像生活中的其他事情一样,有时无法对未来进行规划。如果没有对基础设施的创建进行充分的规划,就可能会导致时间压力、紧急释放或需要手动创建基础设施,并且最初就从未使用过 Terraform。 示例:已定义资源,并希望告知状态该资源已存在。 想象一下,如果在生产中出现问题,就必须迅速进行更改以防止停机。在 route53 中手动添加更改以添加 DNS 记录。 一旦事情稳定,同样的记录将被定义为 Terraform 资源,但当应用运行时,将会返回一条消息,说明该资源已存在,这会导致应用阶段失败。 在这种情况下,需要做的就是导入现有资源的状态,以便下次运行 Terraform 应用时,Terraform 软件将考虑处于其状态的资源。在以后,这意味着所做的任何更改都将作为修改,而非添加。 在这种假设的情况下,让我们假设以下资源是从 AWS 控制台中创建的: Route53 Record Set Name: www.mywebsite.com. Route53 Record Set Type: CNAME Route53 Record Set Value: mywebsite.com 现在,由于这三个资源都很简单,并且知道具体创建了什么,因此,可以将他们添加到 Terraform 项目中: resource aws_route53_record www { name = "www.mywebsite.com" type = "CNAME" zone_id = aws_route53_zone.zone.id records = ["mywebsite.com"] ttl = 300 } resource aws_route53_zone zone { name = "mywebsite.com" } 应用 Terraform 时的错误消息如下所示: * aws_route53_record.www: 1 error(s) occurred: * aws_route53_record.www: [ERR]: Error building changeset: InvalidChangeBatch: RRSet of type CNAME with DNS name www.mywebsite.com. is not permitted as it conflicts with other records with the same DNS name in zone mywebsite.com. status code: 400 由于冲突,Terraform 将在此时退出。 要导入状态,甚至导入现有资源文件(如果你不再拥有它的话),可以运行一下 Terraformer CLI 命令: AWS_PROFILE=craig terraformer import aws --resources=route53 --filter=aws_route53_record=mywebsite.com --regions=eu-west-2 Terraformer 的美妙之处在于使用了过滤器,而不是 Terraform 使用的命名约定。 你基本上可以根据给定的名称来猜测资源名称,而使用 Terraform 时,它必须采用特定的格式。 导入过程耗费几秒钟的时间,但窗口中的输出非常有用: 2020/06/28 21:50:14 aws importing default region 2020/06/28 21:50:14 aws importing... route53 2020/06/28 21:50:17 Refreshing state... aws_route53_zone.tfer--Z06212801O0AQL6BP58RC_mywebsite-002E-com 2020/06/28 21:50:19 aws Connecting.... 2020/06/28 21:50:19 aws save route53 2020/06/28 21:50:19 aws save tfstate for route53 将创建一个目录结构,你可以从中获取所需的所有信息。 route53_zone 包含于我的资源类似的定义,terraform.tfstate 文件包含状态信息。 但你必须记住,terrform.tfstate 只包含已过滤资源的状态信息。如果使用它来代替现有的 Terraform 状态,那么你可能会删除已具有状态的资源。 这个状态文件的重点技术是现在可以从状态文件中获取所需的部分,并将其粘贴到现有文件中。 以下是可供参考的文件: 代码文件 resource "aws_route53_zone" "tfer--Z06212801O0AQL6BP58RC_mywebsite-002E-com" { comment = "Managed by Terraform" force_destroy = "false" name = "mywebsite.com." } 状态文件 { "version": 3, "terraform_version": "0.12.18", "serial": 1, "lineage": "17034a7a-eadd-b496-c4e3-0ca3639e33ee", "modules": [ { "path": ["root"], "outputs": { "aws_route53_zone_tfer--Z06212801O0AQL6BP58RC_mywebsite-002E-com_id": { "sensitive": false, "type": "string", "value": "Z06212801O0AQL6BP58RC" } }, "resources": { "aws_route53_zone.tfer--Z06212801O0AQL6BP58RC_mywebsite-002E-com": { "type": "aws_route53_zone", "depends_on": [], "primary": { "id": "Z06212801O0AQL6BP58RC", "attributes": { "comment": "Managed by Terraform", "delegation_set_id": "", "force_destroy": "false", "id": "Z06212801O0AQL6BP58RC", "name": "mywebsite.com.", "name_servers.#": "4", "name_servers.0": "ns-1428.awsdns-50.org", "name_servers.1": "ns-1616.awsdns-10.co.uk", "name_servers.2": "ns-307.awsdns-38.com", "name_servers.3": "ns-944.awsdns-54.net", "tags.%": "0", "vpc.#": "0", "zone_id": "Z06212801O0AQL6BP58RC" }, "meta": { "schema_version": 0 }, "tainted": false }, "deposed": [], "provider": "provider.aws" } }, "depends_on": [] } ] } 结论 Terraform 肯定有它的用途,尽管对于日常单一资源的导入,替代方法使用起来可能会更快。但我认为,它的主要目的是为了导入更多的基础设施。我很有兴趣在更大的范围来验证这一点,下次若有机会需要导入多个资源时,我肯定会尝试一下的。 作者介绍: Craig Godden-Payne,喜欢编写和使用软件、基础设施的技术专家。他热衷将学到的东西都写出来并分享。 原文链接: https://medium.com/@craig.beardy.digital/automating-importing-of-existing-infrastructure-in-terraform-40f79bff59a5 你也「在看」吗???

上一篇:2020-06-01_开扒SpaceX飞船技术栈,程序员搞了个3D版飞船生成器过瘾 下一篇:2023-09-02_一个潮流的终结?推出仅 3 年后,亚马逊宣布终止低代码 Honeycode 服务,前员工爆料:长期没有顾客!

TAG标签:

17
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价