从Terraform的官方教程中学习

基础设施即代码(IaC)是什么意思?

通过使用基础设施即代码(IaC)工具,可以使用配置文件而不是图形用户界面来管理基础设施。 IaC通过定义可版本控制、可重用、可共享的资源配置来实现以安全、一致性和可重复性的方式构建、更改和管理基础设施。

Terraform 是什么?

Iac工具的一种是一种可读性强的声明性配置文件,用于定义资源和基础设施,并管理基础设施的生命周期。
在其中,截至2022年4月,它是市场份额第一,并具有以下特征。

Terraform 可以管理多个云平台上的基础架构。
通过使用 Terraform 的状态,可以追踪部署中资源的变更。
通过将配置提交到版本控制中,可以安全地共同操作基础架构。

我理解这样一个优点是,由于社区资源丰富并且可以与1000多个供应商合作,所以可以使用terraform进行任何基础设施的管理。

除此之外的特征如下:

    • Terraformは宣言型であり、タスクを実行するためにステップバイステップの指示を必要とする手続き型のプログラミング言語とは対照的に、インフラストラクチャの望ましい最終状態を記述する形を取ります。

 

    Terraformプロバイダーはリソース間の依存関係を自動的に計算し、正しい順番でリソースを作成したり破壊したりします。

使用Terraform部署基础设施的流程

总体来说,情况如下:

确定 Scope 项目的基础设施。
编写基础设施配置。
安装 Terraform 插件以管理基础设施。
根据配置预览 Terraform 进行的更改。
执行计划的更改。

试试公式教程

关于Terraform的安装,请参考这里。

在假设有Docker for Mac的前提下,我们继续进行。

1. 创建工作目录。

mkdir learn-terraform-docker-container
cd learn-terraform-docker-container

请使用”main.tf”这个名称创建以下结构的文件。

    terraformの構成ファイルは*.tfという名称で作成する
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 2.13.0"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

用3.init命令初始化项目。

terraform init

4. 使用apply命令对NGINX服务器容器进行配置。

terraform apply

访问localhost:8000,确认显示出nginx的默认页面。

通过使用destroy命令停止由terraform启动的容器。

terraform destroy

使用docker ps命令,确认名称为tutorial的容器已停止运行,这是在文件中定义的。

我使用无事Terraform轻松进行了NGINX Web服务器的自动部署和撤销,这一点已经得到确认!

使用Terraform在AWS上配置EC2实例。

在遵循本教程之前,需要满足以下条件:
– 安装了Terraform CLI(0.14.9+)。
– 安装了AWS CLI。
– 拥有AWS账号和创建资源的认证信息。

创建工作目录

mkdir learn-terraform-aws-instance
cd learn-terraform-aws-instance

创建一个定义基础设施的文件。

touch main.tf

在 main.tf 文件中描述以下配置。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "ap-northeast-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

4. 使用init命令来初始化目录。
初始化目录后,将会下载并安装在配置中定义的提供者。
这些信息将会被创建在名为.terraform的文件中,并被存储在其中。

使用fmt命令可以格式化配置文件。
通过使用fmt命令,可以自动更新并格式化当前目录中的配置文件。

使用`validate`命令验证配置文件的语法是否有效,如果语法有效,则返回成功。

用apply命令应用配置文件。terraform apply

如果成功的话,ExampleAppServerInstance实例将从AWS控制台启动到EC2中。

应用配置后,Terraform会创建一个名为 terraform.tfstate 的文件并将数据写入其中。
Terraform将管理的资源的ID和属性保存在此文件中,以便将来可以更新或销毁这些资源。

使用show命令可以确认当前状态。
使用terraform show命令可以确认正在管理的资源的当前状态。

10. `state` 命令
在 Terraform 中,集成了 `terraform state` 命令,用于进行高级状态管理。使用 `list` 子命令,列出项目中现有资源的状态。

11. 最后用destroy命令进行清理工作。
terraform销毁

故障排除

如果 terraform validate 成功,但 apply 失败,那么可能遇到了以下常见错误之一。

由于每个区域的 AMI ID 不同,如果您使用的不是 us-west-2 区域,则需要更改 AMI。由于 AMI ID 是区域专属的,因此请按照以下步骤选择区域特定的 AMI ID,并使用此 ID 更新 main.tf。然后重新执行 terraform apply。

如果AWS帐户的正确区域没有默认的VPC,则可以在Web界面的AWS VPC仪表板中创建一个新的VPC,并将子网和安全组与该VPC相关联。然后,向aws_instance资源添加vpc_security_group_ids和subnet_id参数,并将这些值替换为新安全组和子网的值。

bannerAds