前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生 | Terraform 初体验

云原生 | Terraform 初体验

作者头像
TeamsSix
发布2022-09-20 16:43:00
1.8K0
发布2022-09-20 16:43:00
举报
文章被收录于专栏:TeamsSix的网络空间安全专栏

0x00 前言

Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。

简单的说就是可以通过编写一些类似于 JSON 格式的文件,直接创建一批云上的服务资源,Terraform 和 AWS 的 CloudFormation 产品有些类似,但 CloudFormation 只支持 AWS,于是 HashiCorp 公司打造了一个多云 (Multi Cloud) 的开源的基础设施即代码 (IaC) 工具,即 Terraform

0x01 安装

Terraform 的安装很简单,不同操作系统的安装命令如下:

  • Ubuntu
代码语言:javascript
复制
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository -y "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install -y terraform
  • Centos
代码语言:javascript
复制
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
  • Mac
代码语言:javascript
复制
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
  • Windows
代码语言:javascript
复制
choco install terraform

或者直接到 Terraform 官网下载可执行文件使用,官方下载地址:https://www.terraform.io/downloads

0x02 初体验

在使用 Terraform 之前,需要先在对应的云厂商控制台上生成一个 Access Key,这里以在 AWS 上创建一个 S3 服务为例。

首先新建一个文件夹,例如 demo 文件夹,接着在里面创建一个 s3demo.tf 文件,文件内容如下:

代码语言:javascript
复制
provider "aws" {
  region     = "us-west-1"
  access_key = "your-access-key"
  secret_key = "your-secret-key"
}

resource "aws_s3_bucket" "b" {
  bucket = "my-tf-test-bucket-asdqqsdasd"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

resource "aws_s3_bucket_acl" "example" {
  bucket = aws_s3_bucket.b.id
  acl    = "private"
}

tf 文件采用的是 HCL 格式,HCL 格式是 Terraform 所属公司 HashiCorp 自己设计的一套配置语言。

在 demo 文件夹下,运行一下初始化命令,这时 Terraform 会通过官方插件仓库下载对应的 Provider 插件。

代码语言:javascript
复制
terraform init

因为我们这里的 s3demo.tf 里的 Provider 是 AWS,所以在初始化时,Terraform 就会去下载 AWS 的 Provider 插件

在 https://registry.terraform.io/browse/providers 可以看到 Terraform 所支持的厂商,这里基本上是涵盖了大部分云厂商的。

接着使用 plan 命令查看接下来将要产生的变更

代码语言:javascript
复制
terraform plan

如果没什么问题,就可以应用了

代码语言:javascript
复制
terraform apply

中途会提示确认,输入 yes 即可

在 Terraform 执行完之后,查看 AWS 下的 S3 就可以看到刚刚通过 Terraform 创建的资源了。

这样就完成了使用 Terraform 部署云资源的一个过程,想要清理刚刚创建的资源也非常简单,直接 destroy 即可

代码语言:javascript
复制
terraform destroy

0x03 一些有意思的

1、启动插件缓存

在刚刚进行 init 初始化时,Terraform 会根据 tf 文件内的 Provider 下载对应的插件,这些插件往往体积比较大,例如上面初始化时下载的 AWS Provider 体积就有两百多 M,如果不启用插件缓存,那么在每个 Terraform 项目中都会反复下载这些插件,就很浪费磁盘空间与流量,因此建议将插件缓存开启。

Windows 下是在相关用户的 %APPDATA% 目录下创建名为 “terraform.rc” 的文件,Macos 和 Linux 用户则是在用户的 home 下创建名为 “.terraformrc” 的文件

.terraformrc 文件内容为:

代码语言:javascript
复制
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"

这样每次下载 Provider 插件时,就会下载到 “$HOME/.terraform.d/plugin-cache” 目录下了,不过 Terraform 不会主动清理这个文件夹,因此可能随着插件版本的更迭,这个文件夹内会保存一些历史版本的 Provider 插件,这时就需要自己手动清理一下了。

2、可视化 Terraform

如果 Terraform 项目比较复杂,那么可以利用 tfviz 这个工具,可视化 Terraform 项目,tfviz 项目地址:https://github.com/steeve85/tfviz

安装

代码语言:javascript
复制
GO111MODULE=on go get -u github.com/steeve85/tfviz

到 Terraform 项目目录下使用

代码语言:javascript
复制
tfviz -input ./ -output tfimg.png

3、Terraform 代码安全性检查

如果想知道自己写的 Terraform 项目代码有没有什么安全风险,那么可以使用 tfsec 这个工具,tfsec 项目地址:https://github.com/aquasecurity/tfsec

Mac 可以直接使用 brew 安装

代码语言:javascript
复制
brew install tfsec

或者使用 go install 安装

代码语言:javascript
复制
go install github.com/aquasecurity/tfsec/cmd/tfsec@latest

使用也非常简单,直接来到 Terraform 项目目录下,使用 tfsec . 命令即可

代码语言:javascript
复制
tfsec .

往期推荐

云安全 | k8s 提权漏洞 CVE-2018-1002105 学习

云安全 | k8s 所面临的风险学习

工具分享 | 一个检测容器逃逸的脚本

原文链接: https://teamssix.com/220408-145622.html 参考文章: https://www.cnblogs.com/sparkdev/p/10052310.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TeamsSix 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 安装
  • 0x02 初体验
  • 0x03 一些有意思的
    • 1、启动插件缓存
      • 2、可视化 Terraform
        • 3、Terraform 代码安全性检查
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档