0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraform入門 その1 リソース作成まで

Posted at

1.Terraformとは

IaCの一種で、Codeでインフラを管理するものです。
AWSのCloud Formationも同様で、コードでインフラ管理するものですが、Terraformは、さまざまなサービスをプロバイダーとして管理できるため、技術要件だったりで別のクラウドサービスの環境をする場合でも、自社内でTerraformで一括管理できていれば、融通がかなりききます。

メリット

コードで管理することで以下のメリットがあります。

開発/本番 などの環境下で同じ環境を構築したい時

インフラの構成を明確に残しておきたい

人的ミスを限りなく無くせる

デメリット

前述のCloud Formationは、JSON/YAMLで記述する一方で
HCPという独自のコードのため、多少初期学習コストがかかることが挙げられます。

環境構築

私はM2 Macのため、以下のサイトを参考にして構築しました。
brewでインストールしています。とても簡単です

ハンズオン

最初のハンズオンは以下のYoutubeをお勧めします。

理由としては、のちにTerraformを勉強してくると、
.tfvarsファイル
.versionsファイル
.variablesファイル

という便利な設定ファイルを扱うのですが、これを先にやるよりかは
main.tfファイルという主な開発を記述するファイルにべた書きで最初は書いた方がいいので、一旦は上記のリンクのハンズオンをお勧めします。

Terraformの流れ

まずは、開発を行うディレクトリを作成し、移動してメインのファイルを作成しましょう。

mkdir workspace
cd workspace
touch main.tf

作成したmain.tfに以下のように記述しましょう。

# main.tf
provider "aws" {
  region = "us-east-1"
}

この1つの塊を「ブロック」と呼びます。
上の例だと、プロバイダーはどこかをTerraformに教えています。

この次に、terraform initを実行し、初期化を行います。
そうすると、main.tf配下に1のフォルダと1つのファイルが生成されていることがわかります。
image.png

.terraform配下のprovidersフォルダの中身を辿っていくと、AWSプロバイダーの情報が記載されています。
この情報を元に、TerraformとAWSがAPIで連携し、サービスを構築していく流れになります。
image.png

バージョンが記載されているので、お察しすると、このバージョン管理も非常に重要です。
versions.tfファイルを設定してあげることで、バージョンを固定してあげることができます。
また、開発するリージョンなども固定したいので、main.tfで記載したリージョンも一緒に記載してあげましょう。
これでチーム開発でメンバーが同一AWSプロバイダーのバージョンを扱うことができるようになります。

# versions.tf

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

provider "aws" {
  region = "us-east-1"
}

実際に、main.tfを完全に空にした状態で、versions.tfだけを記述して
他のフォルダやファイルを削除してみて再度terraform initすると、正常に初期化でき、プロバイダーのフォルダも生成されます。

.terraform.lock.hclフォルダを見てみると、設定したバージョンが記載されていると思います。
hashesという変数には、ハッシュ値が記載されています。
これは、Terraformで開発した内容を他と共有する際に、全く同じの状態かを確認できるようにするためのものです。これで、開発環境の一貫性が保たれているといった流れになります。

次に、実際にAWSでVPCの構築とその中で、サブネットの構築もしていきます。このような設定は、
main.tfに記載していきます。

# main.tf
resource "aws_vpc" "terra_vpc" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "aws_vpc_handson"
  }
}

resource "aws_subnet" "terra_subnet" {
  vpc_id = aws_vpc.terra_vpc.id

  cidr_block = "10.0.0.0/24"
  tags = {
    Name = "aws_subnet_name"
  }
}

これは、resourceブロックと言います。
"aws_vpc"といったresourceの次に記載するものは、あらかじめTerraformで決まったお作法であり、awsでvpcを構築したい場合は必ずこのように記載します。
別名をつけることもできます。その際はスペースを入れて記載してあげることで、ファイル内で別名で管理することができます。

サブネットを構築する際は、VPCのIDというものが必要です。
Terraformはとても便利で、上記のように記載してあげることで、idを特定することができます。

こちらを記述できたら、
terraform plan と実行
terraform planで以下のようにVPCとサブネットを作成するので、2 to addとなってます。

image.png

planの内容が問題なければ、terraform applyをすることで、リソースが生成されます。

その後にterraform.tfstateというファイルが作られていると思います。

image.png

中身をみると、main.tfで記載した設定情報が記載されています。
これを元に、.terraform.lock.hclファイル内のハッシュ値が生成されています。

リソースの削除はとても簡単です。記述したmain.tfファイルをコメントアウトして、
planコマンドを実行するだけです。
image.png

そうすると、次は、2 destroyとなります。2つのリソースが削除されると言っていますね。

image.png

問題ないので、applyコマンドを適用します。
これで削除するともできました。

まとめ

次の記事では、main.tfファイルで、直接CIDRなどを記載しましたが、この値が不変だったり、よく使われる値であれば、terraform.tfvarsを使ってあげることで、変数として扱うこともできます。

次はもっとTerraformをふかぼれればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?