Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Terraform快速入门到入土

Terraform快速入门到入土

作者头像
UzJu@菜菜狗
发布于 2022-04-25 13:16:06
发布于 2022-04-25 13:16:06
2.9K00
代码可运行
举报
文章被收录于专栏:UzJu和菜菜狗UzJu和菜菜狗
运行总次数:0
代码可运行

Terraform快速入门到入土

本文按照官方教程来进行学,为了方便快速上手,不去看官方的机翻,所以对于文中的所有定义,都会进行解释,通俗易懂

Terraform安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl 
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - 
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"  
sudo apt-get update && sudo apt-get install terraform 

快速体验Nginx配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform { 
  required_providers { 
    docker = { 
      source  = "kreuzwerker/docker" 
      version = "~> 2.13.0" 
 } 
 } 
} 
provider "docker" {} 
resource "docker_image" "nginx" { 
  name         = "nginx:latest" 
  keep_locally = false 
} 
resource "docker_container" "nginx" { 
  image = docker_image.nginx.latest 
  name  = "tutorial" 
  ports { 
 internal = 80 
    external = 8000 
 } 
} 

快速使用docker创建Nginx

初始化项目,允许terraform下载与docker进行交互的插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform init 

如果出现下载失败的情况,需要访问国外网站

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform apply 

此时会输出一些需要我们确认的信息,如果没有问题,输入yes即可

我们访问8000端口即可看到Nginx页面

如果想要删除这个Nginx容器,那么需要使用以下命令即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform destroy 

确认无误后,输入yes即可

不过这里值得注意的是,可以看到使用docker ps -a 并没有找到我们停止的容器,所以这里是将这个容器删除了,因为我们正常停止一个容器的时候,使用docker stop,但是在docker ps -a中,我们可以看到已经停止的容器,可以使用docker start 重新将它启动,但是这里是直接将这个容器删除

Aws构建基础

下载Aws cli

Linux x86

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
unzip awscliv2.zip 
sudo ./aws/install 

Linux Arm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" 
unzip awscliv2.zip 
sudo ./aws/install 

MacOs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" 
sudo installer -pkg AWSCLIV2.pkg -target / 

Windows

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://awscli.amazonaws.com/AWSCLIV2.msi 

配置aws configure

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
aws configure 

创建EC2实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform { 
  required_providers { 
 aws = { 
      source  = "hashicorp/aws" 
      version = "~> 3.27" 
 } 
 } 
  required_version = ">= 0.14.9" 
} 
provider "aws" { 
  profile = "default" 
  region  = "us-west-2" 
} 
resource "aws_instance" "app_server" { 
  ami           = "ami-830c94e3" 
  instance_type = "t2.micro" 
  tags = { 
 Name = "ExampleAppServerInstance" 
 } 
} 

分别解释以上定义的含义

1、terraform{} 定义了,想用哪家平台的提供程序,说白了就是比如我要用docker,那在source就写docker,想用aws就写Aws,而中间的source为什么是hashicorp/aws呢,因为这里写的是提供的源,从那里提供的,它的全称是:registry.terraform.io/hashicorp/aws

2、然后在required_version中定义了,上面我使用的这个源的版本,required_version这个参数不是强制需要,如果为空,那么将默认下载最新的版本

3、provider “aws”{} 用于定义指定用哪个厂商或者平台,这里使用的aws,profile=default指向了使用AWS使用本地~/.aws/credentials中的密钥配置来操作AWS,region为在哪个地区创建EC2

4、resource中的定义,主要是用来指定我们要用什么东西,例如这里用了EC2,并指定了AMI,也就是使用的服务器镜像ID,instance_type指定了Aws EC2的实例类型,targs中定义的name,就是我们创建的EC2名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform init 

初始化时会自动下载与AWS交互所需要的插件等(注意需要访问国外网站)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform fmt 

为了保证编写的tf文件可读性强,使用该命令之后会自动更新文件中的格式和一致性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terrform validate 

使用该命令可以检测当前.tf配置文件中的语法是否有效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform apply 

创建EC2实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform show 

可以查看我们创建的EC2状态等信息

可以看到在俄勒冈州创建了一个EC2

更新EC2实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform { 
  required_providers { 
 aws = { 
      source  = "hashicorp/aws" 
      version = "~> 3.27" 
 } 
 } 
  required_version = ">= 0.14.9" 
} 
provider "aws" { 
  profile = "default" 
  region  = "us-west-2"  
} 
resource "aws_instance" "app_server" { 
 - ami = "ami-830c94e3" # 更改为 ami = "ami-08d70e59c07c61a3a" 
 + ami = "ami-08d70e59c07c61a3a" 
  instance_type = "t2.micro" 
  tags = { 
 Name = "ExampleAppServerInstance" 
 } 
} 

在创建好EC2之后,是无法更改镜像的,现在更换镜像,就相当于重装了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform apply 

删除基础设施

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform destroy 

可以看到全部都变成了null,输入yes即可

回到AWS控制台可以看到,EC2已经被停止

变量的调用

官方的机翻有一些生硬,不过理解下来就是,能在不同的文件中进行调用

比如在此之前,我们所有的操作都是通过一个main.tf进行启动的,那么中间有一些比如说名称,可以引用别的文件,也就相当于变量的引用

如下图

这里定义了实例名称,简介,类型,还有名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
variable "instance_name" { 
  description = "Value of the Name tag for the EC2 instance" 
  type        = string 
 default = "ExampleAppServerInstance" 
} 

然后放在跟main.tf同一个目录中,然后再main.tf就可以调用这个变量,原理是,terraform会自动在同一个目录中找后缀为.tf的文件

在tags中可以把name改成var.instance_name,也就是我们在variable.tf中定义的变量名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform { 
  required_providers { 
 aws = { 
      source  = "hashicorp/aws" 
      version = "~> 3.27" 
 } 
 } 
  required_version = ">= 0.14.9" 
} 
provider "aws" { 
  profile = "default" 
  region  = "us-west-2"  
} 
resource "aws_instance" "app_server" { 
  ami = "ami-08d70e59c07c61a3a" 
  instance_type = "t2.micro" 
  tags = { 
 Name = var.instance_name 
 } 
} 

然后输入terraform apply即可

输入yes后等待即可

那么下次还想更改这个名称,可以通过命令行加上-var即可指定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terrform apply -var "instance_name=YetAnotherName" 

可以看到更改的过程,输入yes即可

输出EC2中配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
output "instance_id" { 
  description = "ID of the EC2 instance" 
  value       = aws_instance.app_server.id 
} 
output "instance_public_ip" { 
  description = "Public IP address of the EC2 instance" 
  value       = aws_instance.app_server.public_ip 
} 

可以通过定义output,来输出当前实例的ID和IP地址

输入yes等待即可

随后使用以下命令即可查看实例的ID和IP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform output 

个人理解

对于这款工具的实现原理,个人理解是,通过调用不同的云厂商提供的SDK,来进行调用,这就跟自己用aws boto3这个库来进行调用aws服务一样。

在Github中搜索terraform可以看到一个官方提供的aws插件

在names.go中可以看到这里import了很多aws的sdk,那么就跟之前想的差不多了,相当于在实现原理上调用了SDK

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Terraform实战
Terraform是一种部署技术,任何想要通过基础设施即代码(Infrastructure as Code,IaC)方法来置备和管理基础设施的人,都可以使用这种技术。基础设施指的主要是基于云的基础设施,不过从技术上讲,任何能够通过应用程序编程接口(Application Programming Interface,API)进行控制的东西都可以算作基础设施。基础设施即代码是通过机器可读的定义文件来管理和置备基础设施的过程的
yeedomliu
2024/01/23
7200
Terraform实战
使用Terraform进行基础设施管理:让基础设施自动化更简单
大家好,我是Echo_Wish。在当今云计算时代,基础设施即代码(Infrastructure as Code,IaC)已成为管理和部署云资源的重要方式。而Terraform作为一款开源的IaC工具,凭借其强大的功能和简单易用的语法,受到了越来越多开发者和运维人员的青睐。今天,我将与大家分享如何使用Terraform进行基础设施管理,并通过代码示例展示其强大之处。
Echo_Wish
2025/03/04
1980
使用Terraform进行基础设施管理:让基础设施自动化更简单
Terraform:多云、混合云环境下实现基础设施即代码
将基础设施代码化,使用代码对硬件进行管理,在运维领域借用软件领域的最佳实践,将基础设施的运维纳入软件工程的范畴,最终整体改善软件开发和软件交付的过程。
yeedomliu
2024/01/24
1.2K0
Terraform:多云、混合云环境下实现基础设施即代码
多云环境的管理与优化:策略与实践
随着企业数字化转型的推进,越来越多的企业选择采用多云策略来提升灵活性、保障数据安全并优化成本管理。然而,多云环境的管理和优化需要面对诸多挑战。本文将详细探讨多云环境的管理和优化策略,结合实际代码示例,帮助运维工程师有效应对多云环境的复杂性。
Echo_Wish
2024/11/11
1930
多云环境的管理与优化:策略与实践
Terraform 入门
为了使Terraform能够对你的AWS账户进行直接操作,需要将环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
yeedomliu
2021/12/10
2.8K0
Terraform 入门
terraform-远程状态存储
默认情况下,terraform在运行完后,会在当前目录下生成state状态文件,里面存储的是上一次执行成功后的资源状态。
保持热爱奔赴山海
2022/01/11
1.9K0
terraform-远程状态存储
在腾讯云上实现多云部署:从入门到精通
近年来,随着企业对云计算的依赖性越来越高,多云部署已经成为一种趋势。通过在多个云平台上部署应用程序和服务,企业不仅可以降低风险,还能充分利用各平台的优势。今天,我将带你一步步实现一个在腾讯云上部署的多云应用,让你轻松入门并掌握这个重要技术。
Echo_Wish
2025/01/20
2650
在腾讯云上实现多云部署:从入门到精通
基础设施即代码(IaC):自动化基础设施管理的未来
随着云计算和大规模分布式系统的迅速发展,手动管理和配置基础设施的传统方式已逐渐跟不上快速迭代的步伐。于是,基础设施即代码(Infrastructure as Code,IaC)作为一种创新实践,成为现代运维管理的基础。IaC不仅提高了基础设施的配置速度,还提升了系统的一致性和可重复性。本文将深入讲解IaC的基本概念、核心优势和实现方法,并通过实例展示其在实际工作中的应用。
Echo_Wish
2024/10/27
6520
基础设施即代码(IaC):自动化基础设施管理的未来
terraform 入门:创建腾讯云 k8s 集群
本文适合不喜欢在浏览器中点点点,并刚刚入门或者想要入门 terraform 的小伙伴。
谢正伟
2021/08/05
4.1K0
terraform 入门:创建腾讯云 k8s 集群
Terraform 入门
简介 Terraform 的特点: Infrastructure as Code Execution Plans Resource Graph Change Automation Terraform 工具处在什么位置: [image] [image] 指引 核心工作流 Write - Author infrastructure as code. Plan - Preview changes before applying. Apply - Provision reproducible infrastruct
王磊-字节跳动
2020/02/01
3.7K0
使用Terraform管理Kubernetes资源
使用 Terraform 创建 Kubernetes (k8s) 资源涉及将基础设施定义为代码。这允许您的部署实现自动化、版本控制和可重复性。在这里,我将指导您使用 Terraform 创建一些常见的 Kubernetes 资源:命名空间、部署和服务。
DevOps云学堂
2024/05/20
4080
使用Terraform管理Kubernetes资源
Abaddon:专为红队研究人员设计的增强工具
红队研究活动中往往会涉及到各种技术技能的实现,不仅研究时间有可能会持续好几个月,而且还会涉及到大量敏感操作。因此,红队研究活动也需要进行大量的监控,并要求谨慎操作。Wavestone研发的Abaddon工具旨在帮助红队研究人员提升运营效率,并通过更高的速度和更隐蔽的方式执行某些重复操作,同时还提供了很多辅助增强工具和报告功能。
FB客服
2021/12/31
5220
Abaddon:专为红队研究人员设计的增强工具
云资源管理与优化:提升效率的技术指南
在现代企业的数字化转型中,云计算已成为不可或缺的一部分。随着云技术的广泛应用,云资源的管理与优化显得尤为重要。本文将详细探讨云资源的管理与优化技术,帮助企业提高效率,降低成本。
Echo_Wish
2024/10/24
4080
云资源管理与优化:提升效率的技术指南
Terrform配置文件动态传递参数
在 Terraform 中,可以通过多种方式动态传递参数,以提高配置的灵活性和可复用性。以下是几种常见的方法:
司夜
2025/01/23
2210
Terrform配置文件动态传递参数
Terraform + Gitlab CI简单集成方案
利用Gitlab CI实现基础设施编排自动化,用户后续针对基础设施的管理使用Gitlab完成,提交基础设施变更后,会出发pr进行Gitlab CI流水线执行,从而实现基础设施DevOPS流程。
每周聚焦
2022/07/06
9790
Terraform + Gitlab CI简单集成方案
以Chef和Ansible为例快速入门服务器配置
这篇文章讨论了如何在我们的环境中安装和配置软件,这个任务通常被称为服务器配置(Server Provisioning)。
星哥玩云
2022/07/24
2.7K0
从文化到实践:DevOps的基本概念与核心实践详解
在当前快速发展的IT世界中,开发与运维之间的协作显得越来越重要。传统软件开发和运维模式的“隔离”导致了沟通不畅和效率低下,而DevOps应运而生,旨在通过文化和工具的结合,将开发(Development)与运维(Operations)之间的隔阂打破。DevOps不仅是一套技术和工具,更是一种文化、一种思维方式,能够帮助组织更高效、持续地交付高质量的软件。
Echo_Wish
2024/10/26
4710
从文化到实践:DevOps的基本概念与核心实践详解
Terraform系列一腾讯云CVM相关简单创建
记得2019左右就看到过Terraform系列的文章和书籍,当时所有的业务都上云了管理也很是方便,看了一眼就没有作过多的研究。但本着对技术发展的前瞻敏锐性, 还是觉得这个东西是会火起来的。正巧最近泽阳大佬devops训练营https://www.yuque.com/devopsvip穿插上了Terraform!个人又开始体验了一把......
对你无可奈何
2022/03/30
4.1K5
探索基础设施即代码(IaC):Terraform 与 CloudFormation 的应用
在现代运维和开发的世界里,基础设施即代码(IaC)已经成为一个不可或缺的概念。IaC 让我们可以通过编写代码来管理和配置基础设施,而不是手动操作。本文将详细介绍常用的 IaC 工具——Terraform 和 CloudFormation,以及它们的应用场景和基本用法。
Echo_Wish
2024/10/28
5130
探索基础设施即代码(IaC):Terraform 与 CloudFormation 的应用
Terraform与Kubernetes的体验
Terraform体验了腾讯云的CVM的基本操作。正常流程要去体验一下其他基础组件的整合比如数据库redis等基础组件,还有现有资源的导入。配置文件的合理配置等等等....先插播一下kubernetes的体验吧......毕竟我主要的工作环境是Kubernetes!也有tke。其实也可以体验下tke的整合?现在先单独体验下原生的kubernetes吧!
对你无可奈何
2022/04/08
2.5K3
推荐阅读
相关推荐
Terraform实战
更多 >
LV.0
在读在读
作者相关精选
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验