通过Terraform实现AWS环境的构建

这篇文章的目的

    • Terraformについての学習備忘録用

 

    TerraformでAWS環境構築までのフローの振り返り用

前提条件

構築AWS环境的基本前提条件如下,至少需要以下步骤:
创建Terraform配置文件。

    • Terraform CLIをインストールしていること

 

    • AWS CLIをインストールしていること

 

    AWS accountと関連する認証情報でリソースが作成できる状態にあること

新闻摘要

    • S3バケット作成(.tfsatateファイル保存用)

 

    • S3バケット参照設定

terraform init(初期化)
VPC構築をコードで記載
サブネット構築をコードで記載

terraform plan(実行内容確認)

terraform apply(リソース構築実行)

terraform destroy(リソース破棄)

请参考Terraform的官方文档,其中包含了关于Terraform的基本说明、安装等基础部分的整理。

创建S3存储桶(用于保存.tfsatate文件)

为了保存记录了由Terraform管理的所有基础设施资源的tfsatate文件,首先需要创建一个S3存储桶。

前往AWS S3服务界面,并选择创建存储桶。

スクリーンショット 2023-04-27 23.41.21.png

S3存储桶引用配置设置

我们将指定创建的S3存储桶为.tfsatate文件的保存位置,并进行相应的配置。

创建一个包含AWS供应商信息的.tf文件。

首先,我们将指定一个已创建的S3存储桶作为.tfstate文件的存储位置!然后,我们将创建一个包含AWS提供程序信息和其他基础设施配置的文件。
关于创建文件的位置,您可以选择创建一个喜欢的目录,并在其中创建一个以喜欢的名称命名的.tf文件。
本次的目录和文件结构如下:

terra
┗ backend.tf    ←追加

S3存储桶的配置设置

スクリーンショット 2023-04-28 0.00.33.png

required_version : Terraformのバージョン指定

bucket : バケット名

key : バケットのどこに保存するかの指定(今回はバケット直下にファイルを直接おくためファイル名記載しています)

region : AWS リージョン指定

请设置所使用的 Terraform 版本以满足 “required_version” 的要求。

terraform {
    required_version = "1.4.6" 
  backend "s3" {
    bucket = "terraform-tfstate-pikimarutest"
    key    = "terraform.tfstate"
    region = "ap-northeast-1"
  }
}

这样您就完成了有关将tfstate存放在哪里的设置。

网络供应商的设置

terra
┗ backend.tf
┗ provider.tf    ←追加
スクリーンショット 2023-04-29 21.04.43.png

region : AWS リージョン指定

provider "aws" {
  region = "ap-northeast-1"
}

terraform init的意思是进行初期化操作。

在终端中,在包含backend.tf文件的目录层级上运行以下命令。

terraform init
スクリーンショット 2023-04-29 21.28.06.png

【補充】如果出现错误

スクリーンショット 2023-04-29 21.28.26.png
aws configure

当执行上述命令时,我认为会按照以下顺序依次显示以下内容,因此我们将输入每个内容。

AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Access Key ID [None]: YOUR_SECRET_KEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

AWS Access Key ID : アクセスキーを入力

AWS Access Key ID : シークレットアクセスキーを入力

Default region name : ap-northeast-1と入力

Default output format :jsonと入力

请使用在AWS的IAM中创建的时候显示的Access Key和Secret Access Key。

使用代码进行VPC构建。

初期化完成后,我们将在这里用代码编写服务的构建部分。
首先,我们将编写VPC的构建内容,因此创建vpc.tf文件。

terra
┗ terraform  ←初期化時に作成されています
┗ backend.tf
┗ provider.tf
┗ vpc.tf          ←追加
スクリーンショット 2023-04-29 22.02.25.png

aws_vpc : 作成するサービスを指定している

pre : 名前の設定(好きな名前で良い)

cidr_block : IPv4 CIDR ブロックの設定

pre-vpc : タグの設定(好きな名前で良い)

resource "aws_vpc" "pre" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "pre-vpc"
  }
}
スクリーンショット 2023-04-29 22.02.25.png

用代码编写子网构建

由于初始化已完成,将使用代码编写服务的构建代码从这里开始。
首先,编写VPC的构建内容,创建vpc.tf文件。

terra
┗ terraform  ←初期化時に作成されています
┗ backend.tf
┗ provider.tf
┗ vpc.tf          
┗ subnet.tf        ←追加

スクリーンショット 2023-04-29 22.02.25.png

aws_subnet : 作成するサービスを指定している

pre_1a : 名前の設定(好きな名前で良いが、アベイラビリティーゾーンが分かるような名前が良い)

vpc_id : サブネットを作成するVPCの指定(先ほど作成したVPCの名前をaws_vpc.名前.idというふうに設定)

cidr_block : IPv4 CIDR ブロックの設定

availability_zone : アベイラビリティーゾーンの設定

pre-subnet : タグの設定(好きな名前で良い)

resource "aws_subnet" "pre_1a" {
  vpc_id     = aws_vpc.pre.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "pre-subnet"
  }
}
スクリーンショット 2023-04-29 22.12.58.png

查看Terraform计划(执行内容确认)。

运行terraform plan命令可以比较terraform代码和管理的tfstate文件的内容,然后输出差异(即更改内容)。
在确认要构建的内容时使用该命令,并且一定要执行以下命令来进行内容确认!

terraform plan
スクリーンショット 2023-04-29 22.35.56.png

【補充】进行语法检查terraform validate

这只是一个补充,您不需要执行,但通过执行以下命令,可以确认您之前编写的代码是否存在错误。

terraform validate
スクリーンショット 2023-04-29 22.42.10.png

进行terraform apply,即执行资源构建。

请执行以下命令来实际构建先前编写的资源。

terraform apply
スクリーンショット 2023-04-29 22.42.10.png

在AWS平台上查看

スクリーンショット 2023-04-29 23.06.35.png

【補充】在此狀態下運行terraform計劃。

terraform plan
スクリーンショット 2023-04-29 23.02.23.png

使用 Terraform 销毁资源。

由于我们已经使用Terraform创建了AWS环境,所以从现在开始将进行清理工作。
简单地说,如果删除我们之前使用Terraform编写的所有内容并运行terraform plan命令,就可以进行清理。
但我们将介绍一种方法,即保留代码并使用命令进行删除。
通过执行以下命令,您可以删除代码中由Terraform管理的所有资源。

terraform destroy`
スクリーンショット 2023-04-29 23.24.26.png

在 AWS 的界面上进行确认

スクリーンショット 2023-04-29 23.28.04.png

【额外解释】使用Terraform的destroy命令 -target=资源.名称

如果您希望只删除特定的资源而不是全部资源,您可以运行terraform destroy -target=资源.名称命令来只删除指定的资源。下面是一个示例命令,用于删除指定子网。

terraform destroy -target=aws_subnet.pre_1a
bannerAds