论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
ToB圈子
›
虚拟化.容器.超融合.云计算
›
云计算圈
›
现代IT基础设施管理(2):Terraform进阶
现代IT基础设施管理(2):Terraform进阶
盛世宏图
论坛元老
|
2024-11-12 06:04:14
|
显示全部楼层
|
阅读模式
楼主
主题
1768
|
帖子
1768
|
积分
5304
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
上一篇对Terraform进行了简单先容,并尝试一个创建虚拟机实例的演示实行,对IaC(基础设施即代码)有了初步的认识,这一篇我们稍微深入一些,继续对Terraform进行进阶尝试,利用高级特性更安全高效管理基础设施,尽量还原实际生产利用。
代码堆栈地址:
https://github.com/robin-2016/terraform-demo
,如果没有克隆到当地的,先克隆代码堆栈到当地,如之前克隆过,请将代码更新到最新。
一、变量
Terraform支持变量,变量利用场景一样平常为下面几种情况,一个配置需要多次引用,经常需要修改的配置,还有像AK和SK等敏感信息需要单独文件生存,一样平常情况是单独生存在名为vars.tf文件中,这样修改时只修改vars.tf一个文件即可,demo2就是这样的示例,将AK、SK、区域、镜像ID和实例规格等都放在vars.tf文件中,根据类型分别放在差别的配置文件中,归类方便在配置较多时能较快找到对应的配置信息,在其他配置文件中通过var.加上具体变量名称就能引用到变量的值。vars.tf部门内容如下:
variable "AWS_ACCESS_KEY" {
type = string
default = ""
}
variable "AWS_SECRET_KEY" {
type = string
default = ""
}
variable "AWS_REGION" {
type = string
default = "ap-east-1"
}
variable "AMI" {
type = string
default = "ami-0ad7f83eab34d93a7"
}
variable "INSTANCE_TYPE" {
type = string
default = "t3.micro"
}
复制代码
例如AWS_ACCESS_KEY变量,值的内容为default字段,type为变量类型,示例中变量都是string字符串类型,Terraform变量还支持number数值类型、true-false布尔类型、list列表类型和map字典类型,本次示例中只演示了字符串类型利用,其他类型请参考下面官网文档链接利用:
https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables
二、生产情况示例
切换到demo-2目录下,根据资源类型,将配置拆分到差别的配置文件中。
目录文件先容:instance.tf是虚拟机实例配置,provider.tf是供应商配置,vars.tf是变量,key.tf是实例ssh密钥,相比暗码,密钥安全性更高,securitygroup.tf是安全组配置,允许访问ssh服务,output.tf是执行结束输出配置,这里配置是创建实例的公网IP地址,user_data.tftpl是虚拟机初始化脚本模版文件,下部门会具体解说,vpc.tf是虚拟网络配置,versions.tf是供应商版本配置信息,这样根据需求只修改对应内容文件即可。
准备工作,这里主要修改是vars.tf,填写AWS的AK和SK对应到AWS_ACCESS_KEY和AWS_SECRET_KEY,再生成密钥对文件,利用下面下令生成:
ssh-keygen -f mykey
复制代码
准备工作完成,正式开始创建资源,步骤和上一讲相同
#初始化
terraform init
#查看执行计划
terraform plan
#应用,创建资源
terraform apply
复制代码
执行完成后会在最后Outputs部门输出虚拟机示例的公网IP地址,之后能利用下面ssh下令远程连接虚拟机示例了:
ssh -i mykey ubuntu@公网IP
复制代码
注:如果没有连接上,可以等一会再尝试,安装配置软件需要一点时间,本示例利用Ubuntu镜像,用户名为ubuntu是镜像默认用户名,利用其他镜像需根据镜像调整。
登录后检察服务状态,nginx已经启动,并已开启80端口,登录上AWS控制台,实例、VPC、安全组、密钥对都已经配置完成。这里只是简单演示,实际会更复杂。
systemctl status nginx
ss -ntlp
复制代码
三、user data
上面示例中,利用的公共镜像创建虚拟机实例,终极完成时却已安装nginx,利用的就是user data,在云上创建虚拟机实例时,都会在虚拟机创建完成的初次启动执行user_data中的下令进行初始化,之后虚拟机实例再启动不会再执行,这样就能利用user_data功能完成对虚拟机的初始化,下面为demo-2中user_data.tftpl内容,和普通bash脚本内容基本相同,示例中主要是安装并启动了nginx,还可以写更复杂,模版文件还支持变量输入,自行学习探索。
#!/bin/bash
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
复制代码
另一个方式是Packer自定义镜像,提前安装需要应用情况,Packer还可以和Jenkins等CI连续集成工具结合,Packer配置变化后,重新执行流水线构建新的自定义镜像。
保举利用user data方式,基本云情况都支持user data,减少不再依赖三方工具,更好管理,自定义镜像方式启动快一些,可以根据实际需要自行选择。
四、模块
上面是全部配置都是本身写,如果想抽出部门作为公共配置,供其他项目引用,或者情况差别,但配置相同,只是变量差别,会存在很多重复配置,这样情况下就需要用到Terraform的模块,我们可以直接引用模块写更少的配置文件,官网模块地址:
https://registry.terraform.io/browse/modules
,官方提供了很多模块供开发者引用,也可以自定义模块利用,一些第三方同样提供模块。在demo-3中,我们通过dev开发情况和prod生产情况区分,引用官方实例模块来创建实例,内容示例:
module "ec2_instance" {
source = "terraform-aws-modules/ec2-instance/aws"
name = "demo-3-prod"
instance_type = "t3.micro"
key_name = "mykeypair"
monitoring = true
vpc_security_group_ids = ["sg-12345678"]
subnet_id = "subnet-eddcdzz4"
tags = {
Terraform = "true"
Environment = "prod"
}
}
复制代码
五、相干生态开源工具:Infisical密钥管理平台
利用Terraform时,会有AK和SK管理问题,如直接存储在配置文件中有泄漏的风险,不存储在配置文件中每次利用都需要人工配置,多人利用,还需要相互传递,官方有对应收费版本的HCP Terraform,功能齐全,不差钱可以直接利用HCP Terraform。
如果想降低本钱,又想提高安全性和便利性,利用开源项目就好坏常不错的选择,Infisical 是开源密钥管理平台,GitHub地址:
https://github.com/Infisical/infisical
,产品定位:在您的团队/基础设施中同步密钥,防止密钥泄漏,非常合适搭配Terraform利用,并提供内部 PKI,有Python、Go、Java等编程语言SDK,同样适用于普通程序开发中需要用到一些敏感信息的地方
对于Terraform就先容到这里,相信你对于Terraform已经有更深的了解,本身动手实操起来,阅读官网文档,定能熟练利用Terraform。如果对你有资助,请点个关注,如果需要定制Terraform具体教程请留言咨询,嘿嘿。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
发新帖
回复
盛世宏图
论坛元老
这个人很懒什么都没写!
楼主热帖
绝了,这20款可视化大屏模板太酷炫了( ...
零基础学Java(1)初识Java程序 ...
【十年网络安全工程师整理】—100渗透 ...
Frida主动调用java函数来爆破解题思路 ...
聊聊DevOps制品管理-不止是存储制品这 ...
15年了,我们到底怎样才能用好 Serverl ...
记一次 .NET 某RFID标签管理系统 CPU ...
Python程序运行内存的查看
【Linux进程概念——下】验证进程地址 ...
数据库扩容也可以如此丝滑,MySQL千亿 ...
标签云
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表