Terraform 基础知识:安装和 EC2 实例配置
作者:互联网
什么是基础设施即代码 (IaC)?
基础设施即代码 (IaC) 是指使用代码而不是使用图形用户界面(例如 AWS 控制台)来管理和配置基础设施资源(服务器、网络、数据库等)的做法。
➤ 什么是 Terraform?
Terraform 是一个帮助实现 IaC 的开源工具。
它允许您使用称为HashiCorp 配置语言(HCL)的特定语言编写代码来描述基础架构的所需状态。
当您运行 Terraform 时,它会读取您的代码并与各种云提供商(例如 AWS、Azure 或 GCP)交互,以根据代码的指令创建或修改资源。Terraform 可自动配置和管理您的基础设施,确保其与代码中定义的状态相匹配。
以下是手动方法不足的原因以及 Terraform 是更好选择的原因:
手动创建资源往往存在手动步骤和配置,导致不同环境下的不一致,并且容易出现人为错误。Terraform 支持一致且可重复的基础设施部署。使用相同的模板代码可以灵活地跨多个云提供商配置基础设施。
手动创建资源缺乏轻松扩展的能力。Terraform 管理基础设施,使您可以通过调整实例数量轻松扩展资源。
手动创建资源时,跟踪更改变得很困难。使用 Terraform,Infra 是在代码中定义的,该代码使版本控制易于使用。吉特。
手动资源创建缺乏审核。Terraform 状态管理和基于代码的基础设施提供对基础设施所做的所有更改的透明审核记录。
➤ 在 Linux 系统上安装/设置 Terraform
第 1 步:该命令将更新系统并用于安装软件包gnupg及其software-properties-common依赖项。
sudo apt -获取 更新 && sudo apt -获取安装- y gnupg 软件-属性-通用
步骤 2:该命令将下载 HashiCorp GPG 密钥,将其导入密钥环,并将其另存为/usr/share/keyrings/hashicorp-archive-keyring.gpg.
wget -O- https://apt.releases.hashicorp.com/gpg | wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --亲爱的 | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
步骤3:该命令用于显示存储在.gpg中的GPG密钥的指纹/usr/share/keyrings/hashicorp-archive-keyring.gpg。
gpg --no-default-keyring \--no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring .gpg \
--fingerprint
步骤4:该命令用于将HashiCorp的新软件存储库条目添加到系统的包源中。这允许您使用包管理器从 HashiCorp 存储库安装软件。
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
步骤 5:此命令将在您的系统上安装 Terraform 软件包。
sudo apt update
sudo apt -安装terraform
嘿,您已在系统上成功安装 Terraform。
Terraform 使用声明性语法,这意味着您描述您希望基础设施的外观,然后 Terraform 找出如何实现该状态。很棒吧?
➤ HCL(HashiCorp 配置语言)基础知识
HCL 是 Hashicorp 工具(包括 Terraform)使用的配置语言。HCL 语法与 JSON 类似,具有更人性化的方法。
在 Terraform 中,它用于编写描述基础设施所需状态的配置文件。这些文件通常具有.tf扩展名并包含定义、变量和配置详细信息。
HCL 的重要术语:Terraform
块:
块代表基础设施配置中的不同实体或组件,例如提供程序、资源、变量、数据源等。
HCL 代码被组织成块,块定义不同的对象或资源。每个块都以左大括号开始{,以右大括号结束}。
以下是一些块:
⁕ 提供商:
提供程序块包含连接到提供程序的 API 所需的身份验证详细信息和配置设置。
提供者是一个与特定云或基础设施平台交互的插件,可以在该平台中创建、更新和删除资源。
⁕ 资源:
资源是您要管理的特定基础设施对象。可以是实例、数据库、网络接口等
资源具有定义其配置的属性。
论据:
参数是块内定义的键值对。
在块内,您可以定义指定资源的属性和设置的属性。属性具有键值结构。
变量:
变量允许您定义可在代码中使用的可重用值
它们可以在不同级别定义(例如,在主 Terraform 配置中或在模块内)并且可以具有默认值。它允许您参数化代码。
模块:
Terraform 允许您将基础设施配置分解为可重用的模块。
可以在不同的 Terraform 项目中创建和使用模块。它允许您组织和封装基础设施代码以实现更好的可重用性。
使用您的密钥和访问密钥配置 AWS CLI
生成访问密钥和秘密密钥
搜索IAMAWS 服务 → Users→ Create User(输入详细信息)
设置权限:选择Attach policies directly权限选项
查看用户详细信息和权限 → 单击Create User
用户将创建成功。单击用户名terraform-user
转到安全凭证 → Access keys→ 单击Create access key
在访问关键最佳实践和替代方案中:选择Command Line Interface (CLI)选项
设置描述标签是可选的。因此点击Create access key
我们已经成功生成Access Key和Secret Key
安装 AWS CLI 并配置:
sudo apt-get install awscli获取安装 awscli
打开终端并运行以下命令:
AWS 配置
这将提示您输入访问密钥(唯一标识符)和秘密访问密钥、跳过区域和输出格式。
您已成功配置 AWS CLI。现在您可以从终端运行 aws ad-hoc 命令。
☆ 让我们使用 Terraform 来配置 EC2 实例 ☆
terraform 初始化 → terraform 计划 → terraform 应用
创建一个文件:aws.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
在上面的代码中,
terraform是用于配置 terraform 配置的全局设置的块。
required_providers指定所需的提供者,即aws在这种情况下。
aws源自“hashicorp/aws”,版本设置为等于大于4.0
地形初始化
该terraform init命令用于初始化新的或现有的 Terraform 配置。
在初始化期间,Terraform 将显示进度并提供有关该过程的反馈。如果需要下载任何提供程序插件或依赖项,则会获取并安装它们。
运行命令来初始化并下载依赖项:
地形初始化在里面
Terraform 已成功初始化!
创建文件:providers.tf
提供商“aws” {
区域= “us-east-1”
}
上面的代码是一个 Terraform 配置块,它指定 AWS 提供商并将区域设置为“us-east-1”。其他配置参数(访问密钥、秘密访问密钥)我们已经设置。
创建文件:aws_instance.tf
资源“aws_instance” “my_instance” {
ami = “ami-053b0d53c279acc90”
instance_type = “t2.micro”
标签={
“名称”:“terra-instance”
}
}
上面的代码是一个 Terraform 资源块,它定义了具有特定属性的 AWS EC2 实例。
ami = "ami-053b0d53c279acc90":这会设置 EC2 实例的 AMI(Amazon 系统映像)ID。
instance_type = "t2.micro":这设置 EC2 实例的实例类型。
tags = { "Name" = "terra-instance" }:这会使用映射将标签分配给 EC2 实例。标签对于组织和识别 AWS 中的资源非常有用。
地形规划
该terraform plan命令用于为 Terraform 配置创建执行计划。Terraform 将读取配置、分析状态并显示计划。
请注意,这terraform plan不会对您的基础设施进行任何更改。它仅提供 Terraform 将根据配置进行的更改的预览。
运行命令查看配置
地形计划
地形应用
该terraform apply命令用于应用 Terraform 配置中定义的更改并创建或修改资源
Terraform 将提示您查看更改。如果计划看起来正确并且您想继续进行更改,请键入yes并输入。
请注意,应用更改terraform apply可能会对您的基础设施产生实时影响。仔细审查计划,然后应用更改。
成功创建EC2实例terra-instance
破坏由 terraform 代码创建的基础设施。