当前位置: 首页 > Linux

Terraform入门-2.构建基础设施

时间:2023-04-06 11:38:34 Linux

Terraform安装完毕,我们直接开始创建一些基础设施。我们通过在AWS上创建一些基础设施来开始入门指南,因为它是最受欢迎和普遍理解的,但Terraform可以管理许多提供者,包括在单个配置文件中管理多个提供者。用例中有一些示例。如果您没有AWS账户,请创建一个。在入门指南中,我们将仅使用AWS免费试用资源,这意味着它是免费的。如果您已经有AWS账户,您可能需要收取一些费用,但最多不会超过几美元。警告!如果您没有使用AWS免费试用账户,您可能需要充值才能运行这些示例。您可能需要加起来几美元,但我们不对可能产生的任何费用负责。Terraform中用于描述基础设施的配置文件称为Terraform配置文件。现在我们将编写第一个配置文件来启动AWSEC2实例。配置文件的文档在这里。配置文件也可以是json文件,但是我们建议在机器生成配置文件时只使用json格式。整个配置文件内容如下。我们将引导您完成接下来的每个步骤。将以下内容保存到名为example.tf的文件中。确保您的目录中没有其他*.tf文件,因为Terraform将加载所有*.tf文件。提供商“aws”{access_key=“ACCESS_KEY_HERE”secret_key=“SECRET_KEY_HERE”region=“us-east-1”}资源“aws_instance”“example”{ami=“ami-2757f631”instance_type=“t2.micro”}注意:上述配置适用于大多数AWS账户并将访问默认VPC。EC2经典网络用户,instance_type请指定t1.micro,ami请指定ami-408c7f28。如果您使用us-east-1以外的区域,您将需要指定该区域的ami,因为每个区域的ami都是特定的。将ACCESS_KEY_HERE和SECRET_KEY_HERE替换为您的访问密钥和秘密密钥,可从此页面获得。我们现在对它们进行硬编码,但稍后在入门指南中我们会将它们提取到变量中。注意:如果您只是遗漏了AWS凭证,Terraform将自动从保存的API凭证中搜索(例如:在~/.aws/credentials中)。或IAM实例配置文件凭证。此选项对于将文件签入源代码管理或存在多个管理员的情况更加清晰。去这里了解详情。将凭证信息保留在配置文件之外允许您将凭证信息保留在源代码控制之外,并且还可以在不修改配置文件的情况下为不同的用户使用不同的IAM凭证。这是一个完整的可执行Terraform配置文件。总体结构应该直观明了。提供者块用于指定提供者名称,在我们的例子中称为“aws”。提供者负责创建和管理资源。如果Terraform配置文件包含多个提供者,则可以有多个提供者块,这是常见的情况。资源块定义存在于基础设施中的资源。资源可以是物理组件,例如EC2实例,也可以是逻辑资源,例如Heroku应用程序。资源块开始前有两个字符串:资源类型和资源名称。在我们的实例中,资源类型是“aws_instance”,资源名称是“example”。资源类型的前缀映射到提供者。在我们的示例中,“aws_instance”自动告诉您Terraform由“aws”提供商管理。资源块内部是资源的配置。它独立于每个资源提供者,并在提供者参考中完整列出。对于我们的EC2实例,我们为ubuntu指定了一个AMI,然后请求一个“t2.micro”实例,因为我们有资格免费使用。为新配置文件或从版本控制工具检出的现有配置执行的第一个命令是terraforminit,它将初始化各种本地配置和数据以供后续命令使用。Terraform使用基于插件的结构来支持各种基础设施和服务提供商。从Terraform“0.10.0”开始,每个提供者都有自己的打包和分布式二进制文件,与Terraform分开。terraforminit将自动为下载配置文件中包含的提供程序下载插件。在此实例中仅包含“aws”插件。$terraforminitInitializingthebackend...Initializingproviderplugins...-downloadingpluginforprovider"aws"...以下提供程序在配置中没有任何版本限制,因此安装了最新版本。防止自动升级到新的可能包含重大更改的主要版本,建议在配置中将version="..."约束添加到相应的provider块,约束字符串如下所示。*provider.aws:version="~>1.0"Terraform已成功初始化!您现在可以开始使用Terraform了。尝试运行“terraformplan”以查看您的基础架构所需的任何更改。所有Terraform命令现在都应该可以使用。如果您曾为Terraform设置或更改模块或后端配置,请重新运行此命令以重新初始化您的环境。如果您忘记了,其他命令会检测到它并在必要时提醒您这样做。aws提供程序插件与其他薄文件一起被下载安装到当前目录子目录。输出会显示安装的插件版本,建议在配置文件中指定版本,以确保terraforminit以后安装兼容的版本。后续步骤不需要此步骤,因为配置文件稍后会被丢弃。应用程序更改注意:本指南中列出的命令适用于Terraform0.11及更高版本。早期版本需要先使用terraformplan命令查看执行计划,然后再应用。使用terraformversion命令确认您当前的terraform版本。以你在当前目录下创建的example.tf为例,执行terraformapply。您会看到类似于以下内容的输出,我们将其截断以节省空间:$terraformapply#...+aws_instance.exampleami:"ami-2757f631"availability_zone:""ebs_block_device.#:""ephemeral_block_device.#:""instance_state:""instance_type:"t2.micro"key_name:""placement_group:""private_dns:""private_ip:""public_dns:""public_ip:""root_block_device.#:""security_groups.#:""source_dest_check:"true"subnet_id:""tenancy:""vpc_security_group_ids.#:""此输出显示了执行计划,描述了terraform将根据配置文件执行哪些操作以更改基础设施。输出格式类似于git等工具diff输出的格式。aws_instance.example输出中的+表示Terraform将创建资源。在这些下方,显示将设置的属性。当值为时,表示该资源只有在创建后才能知道。当terraformapply执行失败报错时,阅读报错信息并修复报错。这一步可能是配置文件语法错误。如果计划创建成功,Terraform会暂停并等待确认后再执行。如果计划中有任何错误或危险的信息,可以安全地在此处终止,不会对您的基础设施进行任何更改。如果计划看起来可以接受,可以通过在确认终端中输入yes来完成。执行该计划将需要几分钟时间,直到EC2实例可用:#...aws_instance.example:Creating...ami:""=>"ami-2757f631"instance_type:""=>"t2.micro"[...]aws_instance.example:仍在创建...(已过10秒)aws_instance.example:创建完成应用完成!Resources:1added,0changed,0destroyed.#...这个Terraform执行完成后,可以去EC2终端用创建号检查EC2实例。(确保您查看的可用区与配置文件中的可用区相同!)Terraform还将向terraform.tfstate写入一些数据。这个状态文件非常重要;它跟踪创建的资源ID,因此Terraform知道它正在管理哪些资源。必须保存此文件并将其分发给可能使用Terraform的任何人。通常建议在使用Terraform自动共享状态时设置远程状态,但对于像入门指南这样的简单环境则不需要这样做。您可以使用terraformshow检查当前状态:$terraformshowaws_instance.example:id=i-32cf65a8ami=ami-2757f631availability_zone=us-east-1ainstance_state=runninginstance_type=t2.microprivate_ip=172.31.30.244public_dns=-90-212-55.compute-1.amazonaws.compublic_ip=52.90.212.55subnet_id=subnet-1497024dvpc_security_group_ids.#=1vpc_security_group_ids.3348721628=sg-67652003创建资源可以看到很多信息,.可以参考这些值来配置其他资源和输出,这些在入门指南后面会介绍。准备我们在本节中创建的EC2基于给定的AMI,但未安装其他软件。如果您正在运行基于图像的架构(可能使用用Packer创建的图像),那么这就是您所需要的。无论如何,许多基础设施需要一定程度的初始化或软件准备阶段。为此,Terraform支持配置器,稍后将在入门指南中介绍。下一步恭喜您已经使用Terraform构建了您的第一个基础设施。您已经了解了配置语法、基本执行计划示例并了解了状态文件。下一步,我们将继续改变和破坏基础设施。