云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名备案_获取服务器ip_新用户

小七 141 0

用地形探测和管理漂移

HashiCorp Terraform使您能够使用声明性配置文件安全、可预测地管理基础设施的生命周期。在将基础设施作为代码进行管理时,一个挑战是漂移。漂移是指基础设施的实际状态与配置中定义的状态不同时的术语。这可能有很多原因。在配置的上下文中,在添加或删除资源或更改资源定义时会发生这种情况。在您的配置之外,当资源被终止或失败,以及手动或通过其他自动化工具进行更改时,会发生偏移。Terraform无法检测未使用Terraform管理的资源及其相关属性的偏移。例如,Terraform不会检测到由于在本地安装应用程序或使用Chef或Ansible等配置管理工具而在虚拟机中发生的更改。这篇文章解释了如何使用Terraform来检测和管理配置偏移。我们将涵盖:地形状态。状态文件和Terraform如何跟踪资源。地形刷新。刷新命令和协调现实世界的漂移。地形图。plan命令并将所需配置与实际状态相协调。地形配置。管理漂移的有用配置选项。在本文的其余部分,我们将使用这个示例资源配置片段来说明Terraform的不同场景和特性:#带AMI和标签的AWS EC2虚拟机资源"aws_instance""示例"{ami="ami-656be372"实例_type="t1.micro"标签{漂移示例="v1"}}»Terraform状态:Terraform如何跟踪资源为了创建和应用计划,Terraform存储有关基础设施的信息。默认情况下,此信息存储在本地名为地形.tfstate. 它也可以远程存储,以便在团队环境中使用。在完成至少一个地形应用之前,状态文件将不存在。状态文件对Terraform至关重要,并执行以下功能:使用真实资源映射配置中定义的资源。跟踪有关资源的元数据,如依赖项和依赖项顺序。缓存资源属性以提高管理大型基础结构时的性能。同步,这使得团队之间能够更好地协作。跟踪Terraform管理的资源,忽略同一环境中的其他资源。状态文件的格式是JSON,仅供内部使用。因此,不鼓励直接与状态文件交互。相反,请使用terraform show显示整个配置的当前状态:$地形显示美国焊接学会_实例.示例:id=i-011A9893有效期1ami=ami-656be372可用性区=us-east-1d实例状态=正在运行实例类型=t1.microtags.drift_示例=v1...还可以使用terraform state show检查特定资源:$terraform state显示aws_实例.示例id=i-011A9893有效期1ami=ami-656be372可用性区=us-east-1d实例状态=正在运行实例类型=t1.microtags.drift_示例=v1...»地形更新:调和现实世界的漂移在计划或应用操作之前,Terraform会进行一次刷新,用真实的状态更新状态文件。也可以随时使用地形刷新进行刷新:$terraform刷新美国焊接学会_实例.示例:正在刷新状态。。。(编号:i-011A9893 EFF09EDE1)Terraform在这里所做的是将状态文件跟踪的资源与真实世界相协调。它通过查询您的基础设施提供者来查找实际运行的内容和当前配置,并使用这些新信息更新状态文件来实现这一点。Terraform旨在与其他工具以及手动配置的资源共存,因此它只刷新其管理下的资源。刷新是最小的输出。Terraform列出它正在刷新的每个资源及其内部ID。运行刷新不会修改基础结构,但会修改状态文件。如果状态从上次Terraform运行时开始偏移,则刷新允许检测该漂移。默认情况下,会写入状态文件的备份terraform.tfstate.backup以防状态文件丢失或损坏,以简化恢复。»地形计划:协调所需配置与真实世界状态现在状态文件是最新的,Terraform可以将配置中定义的所需状态与现有资源的实际状态进行比较。这种比较允许Terraform检测需要创建、修改或销毁哪些资源,并形成一个计划。Terraform计划是对Terraform在应用计划时实现所需配置所做的一切的描述。地形计划在应用期间自动完成,但也可以显式地完成。如果您刚刚起步,并且没有部署任何基础设施,那么计划是在您的配置中创建所有资源。如果您有现有的基础设施,Terraform可能需要编辑现有资源,或者销毁并创建新的资源。运行terraform plan将创建此计划,并告诉您它将对您的基础设施进行哪些更改。使用相同的示例,我们可以看到在使用AWS控制台手动更新实例上的标记之后plan的输出:$地形图正在刷新计划前内存中的地形状态。。。刷新的状态将用于计算此计划,但不会保存到本地或远程状态存储。美国焊接学会_实例.示例:正在刷新状态。。。(编号:i-011A9893 EFF09EDE1)------------------------------------------------------------------------已生成执行计划,如下所示。资源操作用以下符号表示:~更新到位Terraform将执行以下操作:~aws公司_实例.示例tags.drift_示例:"v2"=>"v1"计划:0添加,1更改,0销毁。------------------------------------------------------------------------我们可以看到Terraform将标签的值从v2更新到v1。Terraform正在尝试更正偏移并修改标记以匹配配置中的值。并不是所有的漂移都可以通过更新资源来修复,有时需要重新创建资源。使用相同的示例,我们可以看到使用AWS控制台手动终止实例后terraform plan的输出:$地形图正在刷新计划前内存中的地形状态。。。刷新的状态将用于计算此计划,但不会保存到本地或远程状态存储。美国焊接学会_实例.示例:正在刷新状态。。。(编号:i-011A9893 EFF09EDE1)------------------------------------------------------------------------已生成执行计划,如下所示。资源操作用以下符号表示:+创建Terraform将执行以下操作:+美国焊接学会_实例.示例id:ami:"ami-656be372"可用性区:实例状态:实例类型:"t1.micro"tags.drift_示例:"v1"...计划:1表示添加,0表示更改,0表示销毁。------------------------------------------------------------------------我们可以看到Terraform在检测到配置中指定的资源不再存在后,将使用配置中指定的值创建它的新实例。当仍然存在的资源发生漂移时,对于无法更新的属性,Terraform将在重新创建之前销毁原始资源。使用相同的示例配置,我们指定一个新的AMI值:资源"aws_instance""示例"{#更新的AMIami="ami-14c5486b"}使用此更新配置运行terraform plan会导致以下结果:$地形图正在刷新计划前内存中的地形状态。。。刷新的状态将用于计算此计划,但不会保存到本地或远程状态存储。美国焊接学会_实例.示例:正在刷新状态。。。(编号:i-06641647ef59e4304)------------------------------------------------------------------------已生成执行计划,如下所示。资源操作用以下符号表示:-/+销毁然后创建替代品Terraform将执行以下操作:-/+美国焊接学会_实例.示例(需要新资源)id:"i-06641647ef59e4304"=>(强制新资源)ami:"ami-656be372"=>"ami-14c5486b"(强制新资源)关联的公共ip地址:"=>可用性区:"us-east-1c"=>实例状态:"正在运行"=>实例类型:"t1.micro"=>"t1.micro"tags.drift_示例:"v1"=>"v1"…计划:1添加,0更改,1销毁。------------------------------------------------------------------------我们看到,为了使我们的配置与真实世界的状态保持一致,Terraform将首先销毁使用原始AMI构建的现有实例,然后使用新AMI重新创建它。»生命周期选项:配置Terraform如何管理漂移Terraform为每个资源提供了一些生命周期配置选项,而不考虑提供者,这使您能够更好地控制在生成计划时Terraform如何根据状态协调所需的配置。其中一个选择是防止破坏。当设置为true时,任何包含销毁此资源的计划都将返回错误消息。使用此标志可提供额外的保护,防止意外删除任何必要的资源。在最后一个示例中,我们更新了