使用Terraform实现基础设施的代码化

首先

你好!我是株式会社80&Company的技术宣传员。在我们公司的开发部门,我们每周二早上9:30会举行内部学习会。

本次文章介绍了一位从事SRE工作的工程师在公司内部研讨会上关于”使用Terraform进行基础架构代码化”的演讲内容。简单来说,SRE是由Google公司提出和实践的一个概念,代表”Site Reliability Engineer”(站点可靠性工程师)的缩写。SRE的目标是通过提高服务和产品的可信度,使工程师在开发和运维两方面都参与其中,以实现自动化和高效化,解决企业面临的问题。

如果您对SRE工程师使用Terraform实现基础架构代码化的方法感兴趣的话,请参考一下♪

读者的对象

Terraformに興味がある方

Terraformの導入を検討している方

Terraform 是什么?简单概述一下

Terraform是一种实现IaC(基础设施即代码)的工具。
IaC(Infrastructure as Code)的意思是“以代码形式的基础设施”。

使用编程代码编写服务器、网络等基础设施的配置,并根据编写的代码构建基础设施。
以前需要手动进行的基础设施初始配置、更新、删除等操作,现在都可以通过代码声明并执行。

Terraform功能的想象图

有一种机制可以通过代码声明基础设施的配置。
下面的图片是整个架构的示意图。以.state、.tfvars、.tf等扩展名的文件是用于Terraform的文件。
可以在这些文件中编写代码,并通过Terraform的SDK,让Terraform调用AWS、GCP的API。

スクリーンショット 2023-02-09 11.37.21.png

基本档案 ‘àn)

以下是一些以.tfvars和.tf等扩展名的文件描述,用于Terraform。

    • main.tf

AWSプロバイダー情報(IAM情報・リージョン)を記載

provider "aws"{
    version = "~>2.0"
    region = "${var.provider_region}"
    profile = "s3-demo"
}

variable "provider_region" {}
    • env.tfvars

.envのようなイメージで環境ごとに異なる値を設定
上記main.tfのregion = “${var.provider_region}”のprovider_regionの値を定数に与える

provider_region = "ap-northeast-1"
    • s3.tf

リソース情報を記載するファイル。今回はAWS S3を作成する

resource "aws_s3_bucket" "main"{
    bucket = "study_demo"
}

命令介绍

基本命令

在处理Terraform时,需要使用适当的命令来创建/修改/删除资源。
以下是四个常用命令的介绍。

开始terraform

这是一个用于初始化工作空间的命令。
要执行 Terraform,首先需要使用 terraform init 命令来初始化工作空间。
执行 terraform init 命令后,将会执行下载使用在 .tf 文件中的插件的过程。

进行 Terraform 计划

可以使用此命令来查看未来的Terraform执行计划。
根据.tf文件中的信息,可以查看将创建/修改/删除哪些资源。

执行terraform应用程序

根据文件创建/修改/删除资源的指令。

使用 Terraform 进行销毁

执行此命令将删除已创建的基础设施。
在执行此命令时,应尽可能注意。

其他命令

以下将介绍未在上述提及的其他命令。

展示terraform

根据terraform.state文件来查看当前资源的状态。

使用 Terraform 控制台

可以进行函数和代码的确认,并且用于调试。

Terraform验证

请输入命令以检查配置是否有效。

terraform fmt 可以被翻译为「格式化 Terraform」。

将Terraform配置重新格式化为标准样式。

terraform 导入

通过除了Terraform以外的方式导入和引入已经创建的资源。

解锁terraform。

手动解锁定义的配置状态。
基础设施不会被更改。

执行terraform get

下载并更新在根模块中所记录的模块。

terraform图

用于生成构成和执行计划的可视化表现形式(图表)。

获取terraform输出

用于从状态文件中提取输出变量值的工具。

云计算供应商

为了更好理解各个要素的检测位置,在当前工作目录中显示与提供程序要求相关的信息。

刷新terraform

为了使Terraform与实际基础架构的状态通过状态文件进行协调,使用它。

terraform 标记为待更新

Terraform会收到特定对象发生了退化或损坏的通知。

解封 Terraform

通知Terraform特定的对象已经损坏或损坏。

Terraform 版本

输出Terraform的版本。

terraform工作区

用于使用工作空间。

使用Terraform的好处

    • バージョン管理ができる

Gitなどでバージョン管理することでインフラのデプロイと変更を追跡することができるようになる
履歴から以前のインフラ構成に戻すことも可能である

インフラ構成の複製や使い回しができる

コード化されているため同等の環境を簡単に作成できる
ステージング/本番環境など、(ほぼ)同一の環境を再現する際に便利

複数のクラウドプロバイダーとの同時作業

Terraformは AWS、Microsoft Azure、Kubernetesなどマルチプラットフォームに対応しているため、サービスとの連携により、マルチプラットフォームでリソースを同時に管理することができ、便利な状況を作ることができる

引入Terraform的缺点是什么?

    • 学習コストがかかる

Terraformは、Terraform独自のコードで書く必要があるが、最近はGoやPythonなどのユーザーが普段使用しているコードでも同じ様なことができる仕組みがあるため、Terraformだけのために勉強する必要が出てくる

追加记录

这次我们介绍了Terraform的概述和基本代码,但是要考虑到代码的更高可维护性以及需要多人进行开发的情况,还需要考虑Terraform代码的架构和管理Terraform执行差异的需求。

最后

非常感谢您阅读至此!本次我们讨论的是在我们公司内部学习会上介绍的”使用Terraform进行基础架构代码化”的内容。我们将持续推广80&Company内部学习会的活动!请关注我们的Qiita组织和Twitter官方账号!

文献引用

 

广告
将在 10 秒后关闭
bannerAds