首页 > 其他分享 >terraform对应的云原生服务

terraform对应的云原生服务

时间:2023-10-15 16:11:28浏览次数:28  
标签:原生 自定义 instance terraform 模块 provider Terraform 对应

如果您已经对 Terraform 了如指掌,并期望自己的 IaC 技能有进一步提升的话,这篇文章很适合您!在本文中,我们将分享一些 Terraform 的高级使用技巧。从使用模块(module)、工作区(workspace)到管理远程状态存储、自定义 provider等技巧,帮助您轻松、高效地管理基础设施。无论您管理的是小型网站还是大规模的云基础设施,这些技巧都将让您对 Terraform 的掌控力再上一层楼。
 

太长不看版

  • Terraform 模块是可复用的 Terraform 代码包,其中封装了一组资源并且能在多个 Terraform 配置中使用。
  • 远程状态存储允许用户在共享位置存储状态,比如 S3 bucket 或者 Terraform 云工作区,这使得协作和管理基础设施更方便。
  • Terraform 工作区允许用户管理单个 Terraform 配置的多个实例,每个实例都有其状态。
  • 自定义 provider 可以让用户管理那些不被 Terraform 原生支持的资源,比如自定义 API 或某些自研的技术。
  • 在创建资源后,Terraform provisioner 可以在上面运行脚本或者命令。对于在新创建的资源上配置软件或运行测试,Provisioner十分有用。

 

Tips & Tricks:Terraform 进阶技能

Terraform 是管理 IaC 的强大工具,常用常新。在这一部分我们将探索 Terraform 的进阶技能,包括 Terraform 模块、远程状态存储、Terraform 工作区以及自定义 Provider。
 

1、Terraform 模块

Terraform 模块是可复用的 Terraform 代码包,其中封装了一组资源并且能在多个 Terraform 配置中使用。模块可以将基础设施的复杂度抽象出来,并且代码可以重复使用,进而允许用户以模块化和可组合的方式定义基础设施。
 
要创建一个 Terraform 模块,你需要在单独的目录中定义一组资源,并该目录有自己的main.tf文件。然后,您可以在主要的 Terraform 配置中使用模块块(module block)和传递任何必要的变量来调用模块。例如,这里有一个简单的Terraform模块,定义了一个AWS EC2实例:
 

# modules/ec2/main.tf
resource "aws_instance" "example" {
 ami = var.ami
 instance_type = var.instance_type
 tags = var.tags
}

# main.tf
module "ec2" {
 source = "./modules/ec2"
 ami = "ami-1234567890"
 instance_type = "t2.micro"
 tags = {
 Name = "example-instance"
 }
}

 

2、远程状态存储

默认情况下, Terraform 在磁盘上将状态存储到本地,但如果在团队环境中工作或有多个 Terraform 配置时,会导致一些问题出现。远程状态存储可以让用户将状态存储在一个共享的位置,比如 S3 bucket 或者 Terraform 云工作区,这使得协作和管理基础设施更方便。
 

要使用远程状态存储,您需要在 Terraform 配置中配置一个后端,以下是一个简单的示例,展示如何使用 S3 Bucket 来进行远程状态存储:
 

terraform {
 backend "s3" {
 bucket = "my-bucket"
 key = "terraform.tfstate"
 region = "us-west-2"
 }
}

 

3、Terraform 工作区

Terraform 工作区允许用户管理单个 Terraform 配置的多个实例,每个实例都有其状态。当您需要在同个 Terraform 代码库中管理多个环境时(如 dev、staging、生产环境),这一功能十分有用。
 

使用terraform workspace new命令创建一个新工作区;要在工作区之间切换,使用terraform workspace select命令。以下示例是如何使用工作空间来管理一个开发和一个生产环境:
 

terraform workspace new dev
terraform apply

terraform workspace new prod
terraform apply

 

4、自定义 Provider

自定义 provider 可以让用户管理那些不被 Terraform 原生支持的资源,比如自定义 API 或某些自研的技术。尽管 Terraform 内置大量 provider,但有时还是需要使用自定义的 provide。
 

首先,需要写一个 provider 插件,它是一个符合 Terraform插件协议的 Go 二进制文件。完成 Provider 插件构建之后,您可以在 Terraform 配置中使用 Provider 块对它进行配置。例如,以下配置是使用一个自定义的 provider 来管理专有云平台的资源:
 

provider "mycloud" {
 api_key = "my-api-key"
 endpoint = "https://api.mycloud.com"
}

resource "mycloud_instance" "example" {
 name = "example-instance"
 image = "ubuntu-18.04"
 size = "small"
}

 

5、Terraform Provisioners

在创建资源后,Terraform provisioner 可以在上面运行脚本或者命令。对于在新创建的资源上配置软件或运行测试,Provisioner十分有用。
 

在 Terraform 中有2种类型的 provisioner:local-exec 和 remote-exec。Local-exec 在运行Terraform的机器上本地运行命令,remote-exec 在资源上运行命令。下方示例配置使用了 local-exec provisioner 来在 AWS EC2 实例上运行脚本:
 

resource "aws_instance" "example" {
 ami = "ami-1234567890"
 instance_type = "t2.micro"

provisioner "local-exec" {
 command = "echo 'Hello, World!' > /tmp/hello.txt"
 }
}

 

总结

Terraform 是一款管理 IaC 的强大工具,这些进阶技能可以进一步点亮您的 Terraform 技能树。通过使用上述提到的技巧,您能够以模块化、可扩展以及高效的方式来管理您的基础设施。无论您是在管理小型网站还是大规模的云基础设施,Terraform 所具备的灵活性以及功能都能满足您的需求。
 

原文链接:
https://faun.pub/the-ultimate-guide-to-advanced-terraform-techniques-for-devops-b202b6845170

标签:原生,自定义,instance,terraform,模块,provider,Terraform,对应
From: https://www.cnblogs.com/chengjian-physique/p/17765733.html

相关文章

  • Firefox 118 版本发布,带来了原生的翻译功能
    导读近期,Mozilla积极努力改进Firefox,以使其在各方面都更强大,例如针对谷歌的Web服务提供更强大的 支持,以及之前发布的 Firefox117版本。现在,Firefox的新版本118来到了我们面前,它终于带来了注重隐私保护的原生翻译功能,无需寻找临时解决方案。让我们一起深入了解......
  • HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Radio
    单选框,提供相应的用户交互选择项。该组件从APIVersion8开始支持。无子组件。一、接口Radio(options:{value:string,group:string})从APIversion9开始,该接口支持在ArkTS卡片中使用。参数:二、属性除支持通用属性外,还支持以下属性:三、事件除支持通用事件外,还支持以下事件:四、......
  • 采用SpringBoot+原生HTML+MySQL开发的电子病历系统源码
    电子病历系统采用“所见即所得、一体化方式”,协助医生和护士准确、标准、快捷实现病历书写、修改、审阅、打印、体温单浏览、医嘱管理等,是提供病历快速简洁化完成的一系列综合型医生病历工作平台。本套电子病历系统主要面向医疗机构医生、护士,提供对住院病人的电子病历书写、保存......
  • 原生js面试题(二)
    一、携带token->token的无感刷新  (token如何携带?->token的无感刷新?)目的:是为了解决管理系统接口数据的安全性考虑时间就是1-7天token时间一过就要重新登录.需要在后台定时刷新token并且替换之前老的失效的token-1 后端返回过期时间,前端每次请求就判断tok......
  • (关于创建时用com/example和com.example导致的mapper包对应不上)org.apache.ibatis.bi
    日志输出:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisorg.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.mapper.EmpMapper.li......
  • linux 服务器 多网口判断网卡名字和实际网卡口顺序 对应关系
    #!/bin/bashmac_addresses=($(dmesg|grep"eth"|grep"PCIe"|awk-F'''{print$8}'))count=0formacin"${mac_addresses[@]}";do((count++))interface=$(ifconfig|grep-B4"$mac"|gr......
  • Python selenium chrome版本查询和对应驱动下载
    elenium爬虫需要安装Chrome驱动chrome版本查询和对应驱动下载,超详细方法/步骤1查看谷歌的版本,第一步在地址栏输入图中网址第二步查看版本号2复制版本号,只需复制版本号最后一位小数点之前的数字。(例:版本号:111.0.5563.65,复制111.0.5563即可)将复制的版本号......
  • HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Toggle
    组件提供勾选框样式、状态按钮样式及开关样式。该组件从APIVersion8开始支持。仅当ToggleType为Button时可包含子组件。一、接口Toggle(options:{type:ToggleType,isOn?:boolean})从APIversion9开始,该接口支持在ArkTS卡片中使用。参数:ToggleType枚举说明从APIversion9......
  • 一个枚举的通用的方法,根据传入字符串,返回对应枚举类型
    usingSystem;usingSystem.ComponentModel;usingSystem.Reflection;publicstaticclassEnumHelper{//一个泛型方法,接受一个泛型类型T和一个字符串s作为参数publicstaticTGetEnumByDescription<T>(strings)whereT:Enum{//获取T的所有......
  • input的原生输入事件
    <!--input只允许输入整数--><inputtype="text"name="a"onkeyup="value=value.replace(/[^\d]/g,'')"><!--input只允许输入整数和小数(小数只保留小数点后两位)--><inputtype="text"name="aa"onkeyup="v......